UNPKG

waibu-db

Version:
46 lines (42 loc) 1.58 kB
function modelsMenu (locals, req) { const { getPluginPrefix } = this.app.waibu const { pascalCase } = this.lib.aneka const { getAppTitle } = this.app.waibuMpa const { camelCase, map, pick, groupBy, keys, kebabCase, filter, get } = this.lib._ const prefix = getPluginPrefix(this.name) const schemas = filter(this.app.dobo.schemas, s => { const byModelFind = !s.disabled.includes('find') let modelDisabled = get(this, `app.${s.ns}.config.waibuAdmin.modelDisabled`) if (modelDisabled) { const allModels = map(filter(this.app.dobo.schemas, { ns: s.ns }), 'name') if (modelDisabled === 'all') modelDisabled = allModels else modelDisabled = map(modelDisabled, m => pascalCase(`${this.app[s.ns].alias} ${m}`)) } else modelDisabled = [] const byDbDisabled = !modelDisabled.includes(s.name) return byModelFind && byDbDisabled }) const omenu = groupBy(map(schemas, s => { const item = pick(s, ['name', 'ns']) item.nsTitle = getAppTitle(s.ns) return item }), 'nsTitle') const menu = [] for (const k of keys(omenu).sort()) { const items = omenu[k] const plugin = this.app[items[0].ns] menu.push({ title: k, children: map(items, item => { return { title: camelCase(item.name.slice(plugin.alias.length)), href: `waibuAdmin:/${prefix}/${kebabCase(item.name)}/list` } }) }) } return menu } async function adminMenu (locals, req) { return modelsMenu.call(this, locals, req) } export default adminMenu