import { flatMap } from 'lodash'; import { fetchMenus, fetchModuleInfos, fetchModuleLayout } from '../services/modules'; const data = { flags: { menus: false, infos: false, layout: false, }, menus: [], infos: [], layout: [], }; export default data; // export const setMenus = (menus) => { // data.init = true; // data.menus = menus; // }; const combineMenu = (menu1, menu2) => { return { ...menu2, children: combineMenus(menu1.children, menu2.children), }; }; const combineMenus = (menus1, menus2) => { const menus = [...menus1]; for (const menu of menus2) { let find = false; for (const i in menus) { if (menus[i].name === menu.name) { menus[i] = combineMenu(menus[i], menu); find = true; break; } } if (!find) { menus.push(menu); } } return menus; }; export const getMenus = async () => { if (!data.flags.menus) { const context = require.context('../register/modules', true, /^.*\.(js|jsx|json)/); const staticMenus = flatMap(context.keys(), context); const dynamicMenus = await fetchMenus(); data.menus = combineMenus(staticMenus, dynamicMenus); data.flags.menus = true; } return data.menus; }; export const invalidateMenus = () => { data.flags.menus = false; }; export const getModuleInfos = async () => { if (!data.flags.infos) { data.infos = await fetchModuleInfos(); data.flags.infos = true; } return data.infos; }; export const getModuleInfo = async (name) => { const infos = await getModuleInfos(); return (infos || []).filter(info => info.name === name).pop(); }; export const invalidateInfos = () => { data.flags.infos = false; }; export const getModuleLayout = async (name) => { if (!data.flags.layout) { data.layout = await fetchModuleLayout(name); data.flags.layout = true; } return data.layout; }; export const invalidateLayout = () => { data.flags.layout = false; }; // export const setModules = (modules) => { // data.init = true; // data.modules = modules; // }; // // export const getModules = () => { // return data.modules; // }; // // export const isInited = () => { // return data.init; // }; // // // noinspection EqualityComparisonWithCoercionJS // export const getModule = id => data.modules.filter(m => m.id == id).pop(); // eslint-disable-line eqeqeq, max-len // // export const getPath = (id) => { // const module = getModule(id); // if (module.parent) { // const parent = getModule(module.parent); // return [...getPath(parent.id), id]; // } else { // return [id]; // } // }; // // export const getChildren = (id) => { // const children = []; // for (const module of data.modules) { // // noinspection EqualityComparisonWithCoercionJS // if (module.parent == id) { // eslint-disable-line eqeqeq // children.push(module); // } // } // return children; // }; // // export function foreachModule(callback) { // for (const module of data.modules) { // callback(module); // } // } // // export const setModuleConfigure = (id, configure) => { // const module = getModule(id); // if (module) { // module.configure = configure; // } // }; // // export const getModuleConfigure = (id) => { // const module = getModule(id); // return module ? module.configure : null; // };