lib render refactoring: extract buildMenu to lib/menu

This commit is contained in:
tmshv committed 2019-05-30 17:27:23 +03:00
1 parent 10166293df
commit 81518fd57e
2 files changed
+53 -50

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
const url = require('url')
const getPathWithNoTrailingSlash = require('../lib/url').getPathWithNoTrailingSlash
const urlToPattern = require('../lib/url').urlToPattern
const isMatchPathPattern = require('../lib/url').isMatchPathPattern
const isEqualPate = require('../lib/url').isEqualPath
const { compose, any } = require('../lib/common')
function isActive(path, menuItem) {
return isEqualPate(path, menuItem.url, true)
}
function isHighlighted(path, menuItem) {
return any(flatMenuItem(menuItem)
.map(i => isMatchPathPattern(
compose(urlToPattern, getPathWithNoTrailingSlash)(i.url),
path,
true
))
)
}
function flatMenuItem(item) {
const rootUrl = item.url
const flatUrls = items => {
return items.map(item => ({
...item,
url: url.resolve(rootUrl, item.url)
}))
}
return !item.items
? [item]
: item.items.reduce((acc, i) => [...acc, ...compose(flatUrls, flatMenuItem)(i)], [item])
}
/**
* Takes plain menu model and sample path and defines is an item of menu should be active
*
* @param path
* @param menu
* @return {{items}}
*/
function buildMenu(path, menu) {
const items = menu.map(item => ({
...item,
active: isActive(path, item),
highlighted: isHighlighted(path, item),
}))
return { items }
}
exports.buildMenu = buildMenu
+1 -50
View File
@@ -1,16 +1,11 @@
const {readFile} = require('async-file')
const handlebars = require('handlebars')
const url = require('url')
const renderApp = require('../lib/component').renderApp
const getHtml = require('../lib/component').getHtml
const getPathWithNoTrailingSlash = require('../lib/url').getPathWithNoTrailingSlash
const urlToPattern = require('../lib/url').urlToPattern
const isMatchPathPattern = require('../lib/url').isMatchPathPattern
const isEqualPate = require('../lib/url').isEqualPath
const {compose, any} = require('../lib/common')
const menuModel = require('../models/menu').default
const buildMenu = require('../menu').buildMenu
const {viewMain, viewEdit} = require('../config')
const defaultOptions = {
@@ -28,50 +23,6 @@ const defaultMeta = {
imageHeight: 630,
}
function isActive(path, menuItem) {
return isEqualPate(path, menuItem.url, true)
}
function isHighlighted(path, menuItem) {
return any(flatMenuItem(menuItem)
.map(i => isMatchPathPattern(
compose(urlToPattern, getPathWithNoTrailingSlash)(i.url),
path,
true
))
)
}
function flatMenuItem(item) {
const rootUrl = item.url
const flatUrls = items => {
return items.map(item => ({
...item,
url: url.resolve(rootUrl, item.url)
}))
}
return !item.items
? [item]
: item.items.reduce((acc, i) => [...acc, ...compose(flatUrls, flatMenuItem)(i)], [item])
}
/**
* Takes plain menu model and sample path and defines is an item of menu should be active
*
* @param path
* @param menu
* @return {{items}}
*/
function buildMenu(path, menu) {
const items = menu.map(item => ({
...item,
active: isActive(path, item),
highlighted: isHighlighted(path, item),
}))
return {items}
}
const getTitle = meta => 'title' in meta
? meta.title
: 'Шлиссельбургская художественная школа'