@blaze-cms/plugin-admin-core-ui 0.133.0 → 0.134.0-project-admin-customisations.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +97 -0
- package/lib/components/Header/Header.js +3 -3
- package/lib/components/Header/Header.js.map +1 -1
- package/lib/components/Layout/Background.js +26 -0
- package/lib/components/Layout/Background.js.map +1 -0
- package/lib/components/Layout/Layout.js +10 -6
- package/lib/components/Layout/Layout.js.map +1 -1
- package/lib/components/Layout/components/Grid/Grid.js +10 -86
- package/lib/components/Layout/components/Grid/Grid.js.map +1 -1
- package/lib/components/Menu/Icons/ChevronDown.js +27 -0
- package/lib/components/Menu/Icons/ChevronDown.js.map +1 -0
- package/lib/components/Menu/Icons/ChevronUp.js +27 -0
- package/lib/components/Menu/Icons/ChevronUp.js.map +1 -0
- package/lib/components/Menu/Items/MenuActionItem.js +37 -0
- package/lib/components/Menu/Items/MenuActionItem.js.map +1 -0
- package/lib/components/Menu/Items/MenuItem.js +73 -0
- package/lib/components/Menu/Items/MenuItem.js.map +1 -0
- package/lib/components/Menu/Items/MenuLinkItem.js +36 -0
- package/lib/components/Menu/Items/MenuLinkItem.js.map +1 -0
- package/lib/components/Menu/Menu.js +86 -0
- package/lib/components/Menu/Menu.js.map +1 -0
- package/lib/components/Menu/Section/MenuSection.js +28 -0
- package/lib/components/Menu/Section/MenuSection.js.map +1 -0
- package/lib/components/Menu/Section/MenuSectionCollapsible.js +91 -0
- package/lib/components/Menu/Section/MenuSectionCollapsible.js.map +1 -0
- package/lib/components/Menu/Section/MenuSectionItem.js +40 -0
- package/lib/components/Menu/Section/MenuSectionItem.js.map +1 -0
- package/lib/components/Menu/Section/MenuSectionItems.js +33 -0
- package/lib/components/Menu/Section/MenuSectionItems.js.map +1 -0
- package/lib/components/Menu/index.js +12 -0
- package/lib/components/Menu/index.js.map +1 -0
- package/lib/components/SideBar/SideBar.js +4 -19
- package/lib/components/SideBar/SideBar.js.map +1 -1
- package/lib/constants.js +1 -1
- package/lib/constants.js.map +1 -1
- package/lib/containers/Home/Home.js +1 -1
- package/lib/containers/Home/Home.js.map +1 -1
- package/lib/index.js +13 -9
- package/lib/index.js.map +1 -1
- package/lib/utils/menu-handler-singleton.js +114 -0
- package/lib/utils/menu-handler-singleton.js.map +1 -0
- package/lib-es/components/Header/Header.js +3 -3
- package/lib-es/components/Header/Header.js.map +1 -1
- package/lib-es/components/Layout/Background.js +16 -0
- package/lib-es/components/Layout/Background.js.map +1 -0
- package/lib-es/components/Layout/Layout.js +10 -6
- package/lib-es/components/Layout/Layout.js.map +1 -1
- package/lib-es/components/Layout/components/Grid/Grid.js +14 -52
- package/lib-es/components/Layout/components/Grid/Grid.js.map +1 -1
- package/lib-es/components/Menu/Icons/ChevronDown.js +16 -0
- package/lib-es/components/Menu/Icons/ChevronDown.js.map +1 -0
- package/lib-es/components/Menu/Icons/ChevronUp.js +16 -0
- package/lib-es/components/Menu/Icons/ChevronUp.js.map +1 -0
- package/lib-es/components/Menu/Items/MenuActionItem.js +31 -0
- package/lib-es/components/Menu/Items/MenuActionItem.js.map +1 -0
- package/lib-es/components/Menu/Items/MenuItem.js +64 -0
- package/lib-es/components/Menu/Items/MenuItem.js.map +1 -0
- package/lib-es/components/Menu/Items/MenuLinkItem.js +28 -0
- package/lib-es/components/Menu/Items/MenuLinkItem.js.map +1 -0
- package/lib-es/components/Menu/Menu.js +40 -0
- package/lib-es/components/Menu/Menu.js.map +1 -0
- package/lib-es/components/Menu/Section/MenuSection.js +18 -0
- package/lib-es/components/Menu/Section/MenuSection.js.map +1 -0
- package/lib-es/components/Menu/Section/MenuSectionCollapsible.js +67 -0
- package/lib-es/components/Menu/Section/MenuSectionCollapsible.js.map +1 -0
- package/lib-es/components/Menu/Section/MenuSectionItem.js +30 -0
- package/lib-es/components/Menu/Section/MenuSectionItem.js.map +1 -0
- package/lib-es/components/Menu/Section/MenuSectionItems.js +20 -0
- package/lib-es/components/Menu/Section/MenuSectionItems.js.map +1 -0
- package/lib-es/components/Menu/index.js +3 -0
- package/lib-es/components/Menu/index.js.map +1 -0
- package/lib-es/components/SideBar/SideBar.js +3 -12
- package/lib-es/components/SideBar/SideBar.js.map +1 -1
- package/lib-es/constants.js +1 -1
- package/lib-es/constants.js.map +1 -1
- package/lib-es/containers/Home/Home.js +1 -1
- package/lib-es/containers/Home/Home.js.map +1 -1
- package/lib-es/index.js +9 -9
- package/lib-es/index.js.map +1 -1
- package/lib-es/utils/menu-handler-singleton.js +55 -0
- package/lib-es/utils/menu-handler-singleton.js.map +1 -0
- package/package.json +9 -8
- package/src/components/Header/Header.js +9 -7
- package/src/components/Layout/Background.js +16 -0
- package/src/components/Layout/Layout.js +23 -8
- package/src/components/Layout/bg.svg +22 -0
- package/src/components/Layout/components/Grid/Grid.js +13 -52
- package/src/components/Menu/Icons/ChevronDown.js +16 -0
- package/src/components/Menu/Icons/ChevronUp.js +16 -0
- package/src/components/Menu/Items/MenuActionItem.js +30 -0
- package/src/components/Menu/Items/MenuItem.js +49 -0
- package/src/components/Menu/Items/MenuLinkItem.js +25 -0
- package/src/components/Menu/Menu.js +48 -0
- package/src/components/Menu/Section/MenuSection.js +16 -0
- package/src/components/Menu/Section/MenuSectionCollapsible.js +59 -0
- package/src/components/Menu/Section/MenuSectionItem.js +28 -0
- package/src/components/Menu/Section/MenuSectionItems.js +17 -0
- package/src/components/Menu/index.js +3 -0
- package/src/components/SideBar/SideBar.js +5 -9
- package/src/constants.js +3 -1
- package/src/containers/Home/Home.js +1 -1
- package/src/index.js +7 -6
- package/src/utils/menu-handler-singleton.js +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuLinkItem.js","names":["React","Link","MenuLinkItem","item","isActive","root","label","icon","MenuSectionIcon","uri","modifier","activeModifier","createElement","className","key","to"],"sources":["../../../../src/components/Menu/Items/MenuLinkItem.js"],"sourcesContent":["import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst MenuLinkItem = ({ item, isActive, root = true }) => {\n const { label, icon: MenuSectionIcon, uri } = item;\n\n const modifier = MenuSectionIcon ? '' : 'side-nav__list-link--noIcon';\n\n const activeModifier = isActive ? 'side-nav__list-link--active' : '';\n\n return (\n <li className=\"side-nav__list--item\" key={item.label}>\n <Link to={uri} className={`side-nav__list-link ${modifier} ${activeModifier}`}>\n {MenuSectionIcon && (\n <div className=\"side-nav__list-link--icon\">\n <MenuSectionIcon />\n </div>\n )}\n <div className=\"side-nav__list-link--label\">{label}</div>\n </Link>\n </li>\n );\n};\n\nexport default MenuLinkItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,kBAAkB;AAEvC,MAAMC,YAAY,GAAGA,CAAC;EAAEC,IAAI;EAAEC,QAAQ;EAAEC,IAAI,GAAG;AAAK,CAAC,KAAK;EACxD,MAAM;IAAEC,KAAK;IAAEC,IAAI,EAAEC,eAAe;IAAEC;EAAI,CAAC,GAAGN,IAAI;EAElD,MAAMO,QAAQ,GAAGF,eAAe,GAAG,EAAE,GAAG,6BAA6B;EAErE,MAAMG,cAAc,GAAGP,QAAQ,GAAG,6BAA6B,GAAG,EAAE;EAEpE,oBACEJ,KAAA,CAAAY,aAAA;IAAIC,SAAS,EAAC,sBAAsB;IAACC,GAAG,EAAEX,IAAI,CAACG;EAAM,gBACnDN,KAAA,CAAAY,aAAA,CAACX,IAAI;IAACc,EAAE,EAAEN,GAAI;IAACI,SAAS,EAAG,uBAAsBH,QAAS,IAAGC,cAAe;EAAE,GAC3EH,eAAe,iBACdR,KAAA,CAAAY,aAAA;IAAKC,SAAS,EAAC;EAA2B,gBACxCb,KAAA,CAAAY,aAAA,CAACJ,eAAe,MAAE,CACf,CACN,eACDR,KAAA,CAAAY,aAAA;IAAKC,SAAS,EAAC;EAA4B,GAAEP,KAAW,CACpD,CACJ,CAAC;AAET,CAAC;AAED,eAAeJ,YAAY"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import menuHandler from '../../utils/menu-handler-singleton';
|
|
4
|
+
import MenuSection from './Section/MenuSection';
|
|
5
|
+
const Menu = ({
|
|
6
|
+
children
|
|
7
|
+
}) => {
|
|
8
|
+
const [config, setConfig] = useState();
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const loadConfig = async () => {
|
|
11
|
+
await menuHandler.loadConfig();
|
|
12
|
+
};
|
|
13
|
+
loadConfig().then(() => setConfig(menuHandler.getAll()));
|
|
14
|
+
}, []);
|
|
15
|
+
const MenuSections = () => {
|
|
16
|
+
if (!config) return null;
|
|
17
|
+
return config.map(sections => {
|
|
18
|
+
if (!sections || !Array.isArray(sections) || !sections.length) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const menuSections = sections.filter(section => section.items);
|
|
22
|
+
return menuSections.map(menuSection => /*#__PURE__*/React.createElement(MenuSection, {
|
|
23
|
+
items: menuSection
|
|
24
|
+
}));
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
28
|
+
className: "side-nav__block"
|
|
29
|
+
}, /*#__PURE__*/React.createElement("ul", {
|
|
30
|
+
className: "side-nav__list"
|
|
31
|
+
}, /*#__PURE__*/React.createElement(MenuSections, null)));
|
|
32
|
+
};
|
|
33
|
+
Menu.propTypes = {
|
|
34
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
|
|
35
|
+
};
|
|
36
|
+
Menu.defaultProps = {
|
|
37
|
+
children: null
|
|
38
|
+
};
|
|
39
|
+
export default Menu;
|
|
40
|
+
//# sourceMappingURL=Menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["React","useState","useEffect","PropTypes","menuHandler","MenuSection","Menu","children","config","setConfig","loadConfig","then","getAll","MenuSections","map","sections","Array","isArray","length","menuSections","filter","section","items","menuSection","createElement","className","propTypes","oneOfType","arrayOf","node","defaultProps"],"sources":["../../../src/components/Menu/Menu.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport menuHandler from '../../utils/menu-handler-singleton';\nimport MenuSection from './Section/MenuSection';\n\nconst Menu = ({ children }) => {\n const [config, setConfig] = useState();\n\n useEffect(() => {\n const loadConfig = async () => {\n await menuHandler.loadConfig();\n };\n\n loadConfig().then(() => setConfig(menuHandler.getAll()));\n }, []);\n\n const MenuSections = () => {\n if (!config) return null;\n\n return config.map(sections => {\n if (!sections || !Array.isArray(sections) || !sections.length) {\n return null;\n }\n\n const menuSections = sections.filter(section => section.items);\n\n return menuSections.map(menuSection => <MenuSection items={menuSection} />);\n });\n };\n\n return (\n <div className=\"side-nav__block\">\n <ul className=\"side-nav__list\">\n <MenuSections />\n </ul>\n </div>\n );\n};\n\nMenu.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n children: null\n};\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAClD,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,WAAW,MAAM,oCAAoC;AAC5D,OAAOC,WAAW,MAAM,uBAAuB;AAE/C,MAAMC,IAAI,GAAGA,CAAC;EAAEC;AAAS,CAAC,KAAK;EAC7B,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGR,QAAQ,CAAC,CAAC;EAEtCC,SAAS,CAAC,MAAM;IACd,MAAMQ,UAAU,GAAG,MAAAA,CAAA,KAAY;MAC7B,MAAMN,WAAW,CAACM,UAAU,CAAC,CAAC;IAChC,CAAC;IAEDA,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,MAAMF,SAAS,CAACL,WAAW,CAACQ,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1D,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAI,CAACL,MAAM,EAAE,OAAO,IAAI;IAExB,OAAOA,MAAM,CAACM,GAAG,CAACC,QAAQ,IAAI;MAC5B,IAAI,CAACA,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,IAAI,CAACA,QAAQ,CAACG,MAAM,EAAE;QAC7D,OAAO,IAAI;MACb;MAEA,MAAMC,YAAY,GAAGJ,QAAQ,CAACK,MAAM,CAACC,OAAO,IAAIA,OAAO,CAACC,KAAK,CAAC;MAE9D,OAAOH,YAAY,CAACL,GAAG,CAACS,WAAW,iBAAIvB,KAAA,CAAAwB,aAAA,CAACnB,WAAW;QAACiB,KAAK,EAAEC;MAAY,CAAE,CAAC,CAAC;IAC7E,CAAC,CAAC;EACJ,CAAC;EAED,oBACEvB,KAAA,CAAAwB,aAAA;IAAKC,SAAS,EAAC;EAAiB,gBAC9BzB,KAAA,CAAAwB,aAAA;IAAIC,SAAS,EAAC;EAAgB,gBAC5BzB,KAAA,CAAAwB,aAAA,CAACX,YAAY,MAAE,CACb,CACD,CAAC;AAEV,CAAC;AAEDP,IAAI,CAACoB,SAAS,GAAG;EACfnB,QAAQ,EAAEJ,SAAS,CAACwB,SAAS,CAAC,CAACxB,SAAS,CAACyB,OAAO,CAACzB,SAAS,CAAC0B,IAAI,CAAC,EAAE1B,SAAS,CAAC0B,IAAI,CAAC;AACnF,CAAC;AAEDvB,IAAI,CAACwB,YAAY,GAAG;EAClBvB,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeD,IAAI"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import MenuSectionItems from './MenuSectionItems';
|
|
4
|
+
const MenuSection = ({
|
|
5
|
+
items,
|
|
6
|
+
children
|
|
7
|
+
}) => /*#__PURE__*/React.createElement(MenuSectionItems, {
|
|
8
|
+
sectionItems: items
|
|
9
|
+
});
|
|
10
|
+
MenuSection.propTypes = {
|
|
11
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
|
|
12
|
+
items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired
|
|
13
|
+
};
|
|
14
|
+
MenuSection.defaultProps = {
|
|
15
|
+
children: null
|
|
16
|
+
};
|
|
17
|
+
export default MenuSection;
|
|
18
|
+
//# sourceMappingURL=MenuSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSection.js","names":["PropTypes","React","MenuSectionItems","MenuSection","items","children","createElement","sectionItems","propTypes","oneOfType","arrayOf","node","isRequired","defaultProps"],"sources":["../../../../src/components/Menu/Section/MenuSection.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport MenuSectionItems from './MenuSectionItems';\n\nconst MenuSection = ({ items, children }) => <MenuSectionItems sectionItems={items} />;\n\nMenuSection.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n items: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nMenuSection.defaultProps = {\n children: null\n};\n\nexport default MenuSection;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,YAAY;AAClC,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,gBAAgB,MAAM,oBAAoB;AAEjD,MAAMC,WAAW,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAS,CAAC,kBAAKJ,KAAA,CAAAK,aAAA,CAACJ,gBAAgB;EAACK,YAAY,EAAEH;AAAM,CAAE,CAAC;AAEtFD,WAAW,CAACK,SAAS,GAAG;EACtBH,QAAQ,EAAEL,SAAS,CAACS,SAAS,CAAC,CAACT,SAAS,CAACU,OAAO,CAACV,SAAS,CAACW,IAAI,CAAC,EAAEX,SAAS,CAACW,IAAI,CAAC,CAAC;EAClFP,KAAK,EAAEJ,SAAS,CAACS,SAAS,CAAC,CAACT,SAAS,CAACU,OAAO,CAACV,SAAS,CAACW,IAAI,CAAC,EAAEX,SAAS,CAACW,IAAI,CAAC,CAAC,CAACC;AAClF,CAAC;AAEDT,WAAW,CAACU,YAAY,GAAG;EACzBR,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeF,WAAW"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import ChevronDown from '../Icons/ChevronDown';
|
|
3
|
+
import ChevronUp from '../Icons/ChevronUp';
|
|
4
|
+
const capitalise = s => {
|
|
5
|
+
if (typeof s !== 'string') return '';
|
|
6
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
7
|
+
};
|
|
8
|
+
const MenuSectionCollapsible = ({
|
|
9
|
+
name,
|
|
10
|
+
item,
|
|
11
|
+
children
|
|
12
|
+
}) => {
|
|
13
|
+
const {
|
|
14
|
+
label,
|
|
15
|
+
loadOpen,
|
|
16
|
+
icon: MenuSectionIcon,
|
|
17
|
+
items
|
|
18
|
+
} = item;
|
|
19
|
+
const [collapsed, setCollapsed] = useState(!loadOpen);
|
|
20
|
+
const CollapseIcon = () => collapsed ? /*#__PURE__*/React.createElement(ChevronDown, null) : /*#__PURE__*/React.createElement(ChevronUp, null);
|
|
21
|
+
const handleClick = () => {
|
|
22
|
+
setCollapsed(!collapsed);
|
|
23
|
+
};
|
|
24
|
+
const modifier = collapsed ? 'side-nav__list--item' : 'side-nav__list--item__selected';
|
|
25
|
+
const buttonModifier = collapsed ? 'side-nav__list-link' : 'side-nav__list-link--selected';
|
|
26
|
+
if (name) {
|
|
27
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
28
|
+
className: modifier
|
|
29
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
30
|
+
type: "button",
|
|
31
|
+
className: buttonModifier,
|
|
32
|
+
onClick: handleClick
|
|
33
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
34
|
+
className: "side-nav__list-link--icon"
|
|
35
|
+
}, MenuSectionIcon && /*#__PURE__*/React.createElement(MenuSectionIcon, null)), /*#__PURE__*/React.createElement("div", {
|
|
36
|
+
className: "side-nav__list-link--wrapper"
|
|
37
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
38
|
+
className: "side-nav__list-link--label"
|
|
39
|
+
}, capitalise(name)), /*#__PURE__*/React.createElement("div", {
|
|
40
|
+
className: "side-nav__list-link--toggleCollapseIcon",
|
|
41
|
+
role: "button"
|
|
42
|
+
}, /*#__PURE__*/React.createElement(CollapseIcon, null)))), /*#__PURE__*/React.createElement("div", {
|
|
43
|
+
className: "side-nav__list-link--children"
|
|
44
|
+
}, collapsed ? null : children));
|
|
45
|
+
}
|
|
46
|
+
if (label && items && Object.keys(items).length > 0) {
|
|
47
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
48
|
+
className: modifier
|
|
49
|
+
}, children);
|
|
50
|
+
}
|
|
51
|
+
if (label && items && Object.keys(items).length === 0) {
|
|
52
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
53
|
+
className: modifier
|
|
54
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
55
|
+
type: "button",
|
|
56
|
+
className: "side-nav__list-link",
|
|
57
|
+
onClick: handleClick
|
|
58
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
59
|
+
className: "side-nav__list-link--icon"
|
|
60
|
+
}, MenuSectionIcon && /*#__PURE__*/React.createElement(MenuSectionIcon, null)), /*#__PURE__*/React.createElement("div", {
|
|
61
|
+
className: "side-nav__list-label"
|
|
62
|
+
}, label)));
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
};
|
|
66
|
+
export default MenuSectionCollapsible;
|
|
67
|
+
//# sourceMappingURL=MenuSectionCollapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSectionCollapsible.js","names":["React","useState","ChevronDown","ChevronUp","capitalise","s","charAt","toUpperCase","slice","MenuSectionCollapsible","name","item","children","label","loadOpen","icon","MenuSectionIcon","items","collapsed","setCollapsed","CollapseIcon","createElement","handleClick","modifier","buttonModifier","className","type","onClick","role","Object","keys","length"],"sources":["../../../../src/components/Menu/Section/MenuSectionCollapsible.js"],"sourcesContent":["import React, { useState } from 'react';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\n\nconst capitalise = s => {\n if (typeof s !== 'string') return '';\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\n\nconst MenuSectionCollapsible = ({ name, item, children }) => {\n const { label, loadOpen, icon: MenuSectionIcon, items } = item;\n const [collapsed, setCollapsed] = useState(!loadOpen);\n\n const CollapseIcon = () => (collapsed ? <ChevronDown /> : <ChevronUp />);\n\n const handleClick = () => {\n setCollapsed(!collapsed);\n };\n\n const modifier = collapsed ? 'side-nav__list--item' : 'side-nav__list--item__selected';\n\n const buttonModifier = collapsed ? 'side-nav__list-link' : 'side-nav__list-link--selected';\n\n if (name) {\n return (\n <li className={modifier}>\n <button type=\"button\" className={buttonModifier} onClick={handleClick}>\n <div className=\"side-nav__list-link--icon\">{MenuSectionIcon && <MenuSectionIcon />}</div>\n <div className=\"side-nav__list-link--wrapper\">\n <div className=\"side-nav__list-link--label\">{capitalise(name)}</div>\n <div className=\"side-nav__list-link--toggleCollapseIcon\" role=\"button\">\n <CollapseIcon />\n </div>\n </div>\n </button>\n <div className=\"side-nav__list-link--children\">{collapsed ? null : children}</div>\n </li>\n );\n }\n\n if (label && items && Object.keys(items).length > 0) {\n return <li className={modifier}>{children}</li>;\n }\n\n if (label && items && Object.keys(items).length === 0) {\n return (\n <li className={modifier}>\n <button type=\"button\" className=\"side-nav__list-link\" onClick={handleClick}>\n <div className=\"side-nav__list-link--icon\">{MenuSectionIcon && <MenuSectionIcon />}</div>\n <div className=\"side-nav__list-label\">{label}</div>\n </button>\n </li>\n );\n }\n\n return null;\n};\n\nexport default MenuSectionCollapsible;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import MenuItem from '../Items/MenuItem';
|
|
4
|
+
import MenuSectionCollapsible from './MenuSectionCollapsible';
|
|
5
|
+
const MenuSectionItem = ({
|
|
6
|
+
name,
|
|
7
|
+
item
|
|
8
|
+
}) => {
|
|
9
|
+
if (!item) return null;
|
|
10
|
+
if (item.uri) {
|
|
11
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
12
|
+
item: item,
|
|
13
|
+
RenderItems: MenuSectionCollapsible
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (Object.values(item.items).length === 0) return null;
|
|
17
|
+
return /*#__PURE__*/React.createElement(MenuSectionCollapsible, {
|
|
18
|
+
name: name,
|
|
19
|
+
item: item
|
|
20
|
+
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
21
|
+
item: item,
|
|
22
|
+
RenderItems: MenuSectionCollapsible
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
export default MenuSectionItem;
|
|
26
|
+
MenuSectionItem.propTypes = {
|
|
27
|
+
name: PropTypes.string.isRequired,
|
|
28
|
+
item: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node, PropTypes.object]).isRequired
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=MenuSectionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSectionItem.js","names":["React","PropTypes","MenuItem","MenuSectionCollapsible","MenuSectionItem","name","item","uri","createElement","RenderItems","Object","values","items","length","propTypes","string","isRequired","oneOfType","arrayOf","node","object"],"sources":["../../../../src/components/Menu/Section/MenuSectionItem.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '../Items/MenuItem';\nimport MenuSectionCollapsible from './MenuSectionCollapsible';\n\nconst MenuSectionItem = ({ name, item }) => {\n if (!item) return null;\n\n if (item.uri) {\n return <MenuItem item={item} RenderItems={MenuSectionCollapsible} />;\n }\n\n if (Object.values(item.items).length === 0) return null;\n\n return (\n <MenuSectionCollapsible name={name} item={item}>\n <MenuItem item={item} RenderItems={MenuSectionCollapsible} />\n </MenuSectionCollapsible>\n );\n};\n\nexport default MenuSectionItem;\n\nMenuSectionItem.propTypes = {\n name: PropTypes.string.isRequired,\n item: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node, PropTypes.object])\n .isRequired\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,QAAQ,MAAM,mBAAmB;AACxC,OAAOC,sBAAsB,MAAM,0BAA0B;AAE7D,MAAMC,eAAe,GAAGA,CAAC;EAAEC,IAAI;EAAEC;AAAK,CAAC,KAAK;EAC1C,IAAI,CAACA,IAAI,EAAE,OAAO,IAAI;EAEtB,IAAIA,IAAI,CAACC,GAAG,EAAE;IACZ,oBAAOP,KAAA,CAAAQ,aAAA,CAACN,QAAQ;MAACI,IAAI,EAAEA,IAAK;MAACG,WAAW,EAAEN;IAAuB,CAAE,CAAC;EACtE;EAEA,IAAIO,MAAM,CAACC,MAAM,CAACL,IAAI,CAACM,KAAK,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EAEvD,oBACEb,KAAA,CAAAQ,aAAA,CAACL,sBAAsB;IAACE,IAAI,EAAEA,IAAK;IAACC,IAAI,EAAEA;EAAK,gBAC7CN,KAAA,CAAAQ,aAAA,CAACN,QAAQ;IAACI,IAAI,EAAEA,IAAK;IAACG,WAAW,EAAEN;EAAuB,CAAE,CACtC,CAAC;AAE7B,CAAC;AAED,eAAeC,eAAe;AAE9BA,eAAe,CAACU,SAAS,GAAG;EAC1BT,IAAI,EAAEJ,SAAS,CAACc,MAAM,CAACC,UAAU;EACjCV,IAAI,EAAEL,SAAS,CAACgB,SAAS,CAAC,CAAChB,SAAS,CAACiB,OAAO,CAACjB,SAAS,CAACkB,IAAI,CAAC,EAAElB,SAAS,CAACkB,IAAI,EAAElB,SAAS,CAACmB,MAAM,CAAC,CAAC,CAC7FJ;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import MenuSectionItem from './MenuSectionItem';
|
|
4
|
+
const MenuSectionItems = ({
|
|
5
|
+
sectionItems
|
|
6
|
+
}) => {
|
|
7
|
+
const {
|
|
8
|
+
items
|
|
9
|
+
} = sectionItems;
|
|
10
|
+
const menuSections = Object.entries(items).sort((a, b) => a[1].order - b[1].order);
|
|
11
|
+
return menuSections.map(menuItem => /*#__PURE__*/React.createElement(MenuSectionItem, {
|
|
12
|
+
name: menuItem[0],
|
|
13
|
+
item: menuItem[1]
|
|
14
|
+
}));
|
|
15
|
+
};
|
|
16
|
+
export default MenuSectionItems;
|
|
17
|
+
MenuSectionItems.propTypes = {
|
|
18
|
+
sectionItems: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=MenuSectionItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSectionItems.js","names":["React","PropTypes","MenuSectionItem","MenuSectionItems","sectionItems","items","menuSections","Object","entries","sort","a","b","order","map","menuItem","createElement","name","item","propTypes","oneOfType","arrayOf","node","isRequired"],"sources":["../../../../src/components/Menu/Section/MenuSectionItems.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuSectionItem from './MenuSectionItem';\n\nconst MenuSectionItems = ({ sectionItems }) => {\n const { items } = sectionItems;\n\n const menuSections = Object.entries(items).sort((a, b) => a[1].order - b[1].order);\n\n return menuSections.map(menuItem => <MenuSectionItem name={menuItem[0]} item={menuItem[1]} />);\n};\n\nexport default MenuSectionItems;\n\nMenuSectionItems.propTypes = {\n sectionItems: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,eAAe,MAAM,mBAAmB;AAE/C,MAAMC,gBAAgB,GAAGA,CAAC;EAAEC;AAAa,CAAC,KAAK;EAC7C,MAAM;IAAEC;EAAM,CAAC,GAAGD,YAAY;EAE9B,MAAME,YAAY,GAAGC,MAAM,CAACC,OAAO,CAACH,KAAK,CAAC,CAACI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC,CAAC,CAAC,CAACE,KAAK,GAAGD,CAAC,CAAC,CAAC,CAAC,CAACC,KAAK,CAAC;EAElF,OAAON,YAAY,CAACO,GAAG,CAACC,QAAQ,iBAAId,KAAA,CAAAe,aAAA,CAACb,eAAe;IAACc,IAAI,EAAEF,QAAQ,CAAC,CAAC,CAAE;IAACG,IAAI,EAAEH,QAAQ,CAAC,CAAC;EAAE,CAAE,CAAC,CAAC;AAChG,CAAC;AAED,eAAeX,gBAAgB;AAE/BA,gBAAgB,CAACe,SAAS,GAAG;EAC3Bd,YAAY,EAAEH,SAAS,CAACkB,SAAS,CAAC,CAAClB,SAAS,CAACmB,OAAO,CAACnB,SAAS,CAACoB,IAAI,CAAC,EAAEpB,SAAS,CAACoB,IAAI,CAAC,CAAC,CAACC;AACzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["Menu"],"sources":["../../../src/components/Menu/index.js"],"sourcesContent":["import Menu from './Menu';\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,QAAQ;AAEzB,eAAeA,IAAI"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
1
|
import React from 'react';
|
|
3
|
-
import { Link } from 'react-router-dom';
|
|
4
2
|
import classnames from 'classnames';
|
|
5
3
|
import PropTypes from 'prop-types';
|
|
6
4
|
import { useApolloClient } from '@apollo/client';
|
|
7
5
|
import Avatar from '@blaze-react/avatar';
|
|
8
6
|
import { handleLogout } from '@blaze-cms/core-auth-ui';
|
|
9
|
-
import
|
|
7
|
+
import Menu from '../Menu';
|
|
10
8
|
const SideBar = ({
|
|
11
|
-
menuItems,
|
|
12
9
|
isOpenMenu,
|
|
13
10
|
onMenuClick,
|
|
14
11
|
userData
|
|
@@ -36,16 +33,11 @@ const SideBar = ({
|
|
|
36
33
|
onClick: onMenuClick
|
|
37
34
|
}, /*#__PURE__*/React.createElement("i", {
|
|
38
35
|
className: "material-icons"
|
|
39
|
-
}, "keyboard_arrow_left")), /*#__PURE__*/React.createElement(
|
|
40
|
-
to: "/",
|
|
41
|
-
className: "side-nav__block-home"
|
|
42
|
-
}, "Dashboard"), /*#__PURE__*/React.createElement("div", {
|
|
36
|
+
}, "keyboard_arrow_left")), /*#__PURE__*/React.createElement("div", {
|
|
43
37
|
className: sideNavWrapperClassname,
|
|
44
38
|
"data-testid": "sidenav",
|
|
45
39
|
id: "side-nav__wrapper"
|
|
46
|
-
},
|
|
47
|
-
key: data.header
|
|
48
|
-
}, data))) : 'Not available content types'), /*#__PURE__*/React.createElement("div", {
|
|
40
|
+
}, /*#__PURE__*/React.createElement(Menu, null)), /*#__PURE__*/React.createElement("div", {
|
|
49
41
|
className: "side-nav__user"
|
|
50
42
|
}, /*#__PURE__*/React.createElement("div", {
|
|
51
43
|
className: "side-nav__user--info"
|
|
@@ -68,7 +60,6 @@ const SideBar = ({
|
|
|
68
60
|
}, "Log off")));
|
|
69
61
|
};
|
|
70
62
|
SideBar.propTypes = {
|
|
71
|
-
menuItems: PropTypes.array.isRequired,
|
|
72
63
|
isOpenMenu: PropTypes.bool.isRequired,
|
|
73
64
|
onMenuClick: PropTypes.func.isRequired,
|
|
74
65
|
userData: PropTypes.object.isRequired
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideBar.js","names":["React","
|
|
1
|
+
{"version":3,"file":"SideBar.js","names":["React","classnames","PropTypes","useApolloClient","Avatar","handleLogout","Menu","SideBar","isOpenMenu","onMenuClick","userData","client","firstname","lastname","username","sideNavClassname","sideNavWrapperClassname","createElement","className","role","id","onClick","window","location","href","propTypes","bool","isRequired","func","object"],"sources":["../../../src/components/SideBar/SideBar.js"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { useApolloClient } from '@apollo/client';\nimport Avatar from '@blaze-react/avatar';\nimport { handleLogout } from '@blaze-cms/core-auth-ui';\nimport Menu from '../Menu';\n\nconst SideBar = ({ isOpenMenu, onMenuClick, userData }) => {\n const client = useApolloClient();\n\n const { firstname, lastname } = userData;\n const username = `${firstname} ${lastname}`;\n\n const sideNavClassname = classnames('side-nav', {\n 'side-nav--open': isOpenMenu,\n 'side-nav--close': !isOpenMenu\n });\n\n const sideNavWrapperClassname = classnames('side-nav__wrapper', {\n 'side-nav__wrapper--close': !isOpenMenu\n });\n\n return (\n <div data-testid=\"sidebar\" className={sideNavClassname}>\n <div\n role=\"button\"\n className=\"side-nav__button open\"\n id=\"side-nav-button\"\n onClick={onMenuClick}>\n <i className=\"material-icons\">keyboard_arrow_left</i>\n </div>\n {/* <Link to=\"/\" className=\"side-nav__block-home\">\n Dashboard\n </Link> */}\n <div className={sideNavWrapperClassname} data-testid=\"sidenav\" id=\"side-nav__wrapper\">\n <Menu />\n </div>\n <div className=\"side-nav__user\">\n <div className=\"side-nav__user--info\">\n <Avatar username={username} />\n <span className=\"user-name\">{username}</span>\n </div>\n <div className=\"side-nav__user--button\">\n <span\n id=\"logout-button\"\n role=\"button\"\n onClick={async () => {\n await handleLogout(client);\n window.location.href = '/';\n }}\n className=\"material-icons\">\n power_settings_new\n </span>\n </div>\n <span className=\"side-nav__user--toggle\">Log off</span>\n </div>\n </div>\n );\n};\n\nSideBar.propTypes = {\n isOpenMenu: PropTypes.bool.isRequired,\n onMenuClick: PropTypes.func.isRequired,\n userData: PropTypes.object.isRequired\n};\n\nexport default SideBar;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,eAAe,QAAQ,gBAAgB;AAChD,OAAOC,MAAM,MAAM,qBAAqB;AACxC,SAASC,YAAY,QAAQ,yBAAyB;AACtD,OAAOC,IAAI,MAAM,SAAS;AAE1B,MAAMC,OAAO,GAAGA,CAAC;EAAEC,UAAU;EAAEC,WAAW;EAAEC;AAAS,CAAC,KAAK;EACzD,MAAMC,MAAM,GAAGR,eAAe,CAAC,CAAC;EAEhC,MAAM;IAAES,SAAS;IAAEC;EAAS,CAAC,GAAGH,QAAQ;EACxC,MAAMI,QAAQ,GAAI,GAAEF,SAAU,IAAGC,QAAS,EAAC;EAE3C,MAAME,gBAAgB,GAAGd,UAAU,CAAC,UAAU,EAAE;IAC9C,gBAAgB,EAAEO,UAAU;IAC5B,iBAAiB,EAAE,CAACA;EACtB,CAAC,CAAC;EAEF,MAAMQ,uBAAuB,GAAGf,UAAU,CAAC,mBAAmB,EAAE;IAC9D,0BAA0B,EAAE,CAACO;EAC/B,CAAC,CAAC;EAEF,oBACER,KAAA,CAAAiB,aAAA;IAAK,eAAY,SAAS;IAACC,SAAS,EAAEH;EAAiB,gBACrDf,KAAA,CAAAiB,aAAA;IACEE,IAAI,EAAC,QAAQ;IACbD,SAAS,EAAC,uBAAuB;IACjCE,EAAE,EAAC,iBAAiB;IACpBC,OAAO,EAAEZ;EAAY,gBACrBT,KAAA,CAAAiB,aAAA;IAAGC,SAAS,EAAC;EAAgB,GAAC,qBAAsB,CACjD,CAAC,eAINlB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAEF,uBAAwB;IAAC,eAAY,SAAS;IAACI,EAAE,EAAC;EAAmB,gBACnFpB,KAAA,CAAAiB,aAAA,CAACX,IAAI,MAAE,CACJ,CAAC,eACNN,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAAgB,gBAC7BlB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAAsB,gBACnClB,KAAA,CAAAiB,aAAA,CAACb,MAAM;IAACU,QAAQ,EAAEA;EAAS,CAAE,CAAC,eAC9Bd,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAC;EAAW,GAAEJ,QAAe,CACzC,CAAC,eACNd,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAC;EAAwB,gBACrClB,KAAA,CAAAiB,aAAA;IACEG,EAAE,EAAC,eAAe;IAClBD,IAAI,EAAC,QAAQ;IACbE,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,MAAMhB,YAAY,CAACM,MAAM,CAAC;MAC1BW,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAG,GAAG;IAC5B,CAAE;IACFN,SAAS,EAAC;EAAgB,GAAC,oBAEvB,CACH,CAAC,eACNlB,KAAA,CAAAiB,aAAA;IAAMC,SAAS,EAAC;EAAwB,GAAC,SAAa,CACnD,CACF,CAAC;AAEV,CAAC;AAEDX,OAAO,CAACkB,SAAS,GAAG;EAClBjB,UAAU,EAAEN,SAAS,CAACwB,IAAI,CAACC,UAAU;EACrClB,WAAW,EAAEP,SAAS,CAAC0B,IAAI,CAACD,UAAU;EACtCjB,QAAQ,EAAER,SAAS,CAAC2B,MAAM,CAACF;AAC7B,CAAC;AAED,eAAepB,OAAO"}
|
package/lib-es/constants.js
CHANGED
package/lib-es/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["PLUGIN_NAME","LOGO_PROPS","src","DEFAULT_LABEL","text","icon","ACTIVE_LABEL","DOWN_ICON"],"sources":["../src/constants.js"],"sourcesContent":["const PLUGIN_NAME = 'admin-core-ui';\nconst LOGO_PROPS = {
|
|
1
|
+
{"version":3,"file":"constants.js","names":["PLUGIN_NAME","LOGO_PROPS","src","process","env","BLAZE_ADMIN_HEAD_LOGO_URL","DEFAULT_LABEL","text","icon","ACTIVE_LABEL","DOWN_ICON"],"sources":["../src/constants.js"],"sourcesContent":["const PLUGIN_NAME = 'admin-core-ui';\nconst LOGO_PROPS = {\n src: process.env.BLAZE_ADMIN_HEAD_LOGO_URL || 'https://images.thisisblaze.com/logo-98-148.png'\n};\n\nconst DEFAULT_LABEL = {\n text: 'See more',\n icon: 'down'\n};\n\nconst ACTIVE_LABEL = {\n text: 'See less',\n icon: 'up'\n};\n\nconst DOWN_ICON = 'down';\n\nexport { PLUGIN_NAME, LOGO_PROPS, ACTIVE_LABEL, DEFAULT_LABEL, DOWN_ICON };\n"],"mappings":"AAAA,MAAMA,WAAW,GAAG,eAAe;AACnC,MAAMC,UAAU,GAAG;EACjBC,GAAG,EAAEC,OAAO,CAACC,GAAG,CAACC,yBAAyB,IAAI;AAChD,CAAC;AAED,MAAMC,aAAa,GAAG;EACpBC,IAAI,EAAE,UAAU;EAChBC,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,YAAY,GAAG;EACnBF,IAAI,EAAE,UAAU;EAChBC,IAAI,EAAE;AACR,CAAC;AAED,MAAME,SAAS,GAAG,MAAM;AAExB,SAASV,WAAW,EAAEC,UAAU,EAAEQ,YAAY,EAAEH,aAAa,EAAEI,SAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Home.js","names":["React","Home","createElement","displayName"],"sources":["../../../src/containers/Home/Home.js"],"sourcesContent":["import React from 'react';\n\nconst Home = () => <div
|
|
1
|
+
{"version":3,"file":"Home.js","names":["React","Home","createElement","displayName"],"sources":["../../../src/containers/Home/Home.js"],"sourcesContent":["import React from 'react';\n\nconst Home = () => <div />;\n\nHome.displayName = 'Home';\n\nexport default Home;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,MAAMC,IAAI,GAAGA,CAAA,kBAAMD,KAAA,CAAAE,aAAA,YAAM,CAAC;AAE1BD,IAAI,CAACE,WAAW,GAAG,MAAM;AAEzB,eAAeF,IAAI"}
|
package/lib-es/index.js
CHANGED
|
@@ -2,9 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import { Layout } from './components';
|
|
3
3
|
import pkg from '../package.json';
|
|
4
4
|
import { PLUGIN_NAME } from './constants';
|
|
5
|
-
import
|
|
5
|
+
import menuHandler from './utils/menu-handler-singleton';
|
|
6
6
|
const Home = React.lazy(() => import( /* webpackChunkName: 'Home' */'./containers'));
|
|
7
|
-
async function load(app) {
|
|
7
|
+
async function load(app, options = {}) {
|
|
8
8
|
const home = {
|
|
9
9
|
path: '/',
|
|
10
10
|
exact: true,
|
|
@@ -12,14 +12,14 @@ async function load(app) {
|
|
|
12
12
|
component: Home
|
|
13
13
|
};
|
|
14
14
|
app.addRoute(home);
|
|
15
|
-
|
|
15
|
+
menuHandler.setApp(app);
|
|
16
16
|
app.setLayout(Layout);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
17
|
+
const {
|
|
18
|
+
menuConfig = {}
|
|
19
|
+
} = options;
|
|
20
|
+
app.events.once('admin:menu:config:load:after', ({
|
|
21
|
+
addConfig
|
|
22
|
+
}) => addConfig(menuConfig));
|
|
23
23
|
return {
|
|
24
24
|
name: PLUGIN_NAME,
|
|
25
25
|
version: pkg.version
|
package/lib-es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","Layout","pkg","PLUGIN_NAME","
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","Layout","pkg","PLUGIN_NAME","menuHandler","Home","lazy","load","app","options","home","path","exact","key","component","addRoute","setApp","setLayout","menuConfig","events","once","addConfig","name","version","pluginName"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { Layout } from './components';\nimport pkg from '../package.json';\nimport { PLUGIN_NAME } from './constants';\nimport menuHandler from './utils/menu-handler-singleton';\n\nconst Home = React.lazy(() => import(/* webpackChunkName: 'Home' */ './containers'));\n\nasync function load(app, options = {}) {\n const home = {\n path: '/',\n exact: true,\n key: 'home',\n component: Home\n };\n\n app.addRoute(home);\n\n menuHandler.setApp(app);\n\n app.setLayout(Layout);\n\n const { menuConfig = {} } = options;\n\n app.events.once('admin:menu:config:load:after', ({ addConfig }) => addConfig(menuConfig));\n\n return {\n name: PLUGIN_NAME,\n version: pkg.version\n };\n}\n\nload.pluginName = PLUGIN_NAME;\n\nexport default load;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,cAAc;AACrC,OAAOC,GAAG,MAAM,iBAAiB;AACjC,SAASC,WAAW,QAAQ,aAAa;AACzC,OAAOC,WAAW,MAAM,gCAAgC;AAExD,MAAMC,IAAI,GAAGL,KAAK,CAACM,IAAI,CAAC,MAAM,MAAM,EAAC,8BAA+B,cAAc,CAAC,CAAC;AAEpF,eAAeC,IAAIA,CAACC,GAAG,EAAEC,OAAO,GAAG,CAAC,CAAC,EAAE;EACrC,MAAMC,IAAI,GAAG;IACXC,IAAI,EAAE,GAAG;IACTC,KAAK,EAAE,IAAI;IACXC,GAAG,EAAE,MAAM;IACXC,SAAS,EAAET;EACb,CAAC;EAEDG,GAAG,CAACO,QAAQ,CAACL,IAAI,CAAC;EAElBN,WAAW,CAACY,MAAM,CAACR,GAAG,CAAC;EAEvBA,GAAG,CAACS,SAAS,CAAChB,MAAM,CAAC;EAErB,MAAM;IAAEiB,UAAU,GAAG,CAAC;EAAE,CAAC,GAAGT,OAAO;EAEnCD,GAAG,CAACW,MAAM,CAACC,IAAI,CAAC,8BAA8B,EAAE,CAAC;IAAEC;EAAU,CAAC,KAAKA,SAAS,CAACH,UAAU,CAAC,CAAC;EAEzF,OAAO;IACLI,IAAI,EAAEnB,WAAW;IACjBoB,OAAO,EAAErB,GAAG,CAACqB;EACf,CAAC;AACH;AAEAhB,IAAI,CAACiB,UAAU,GAAGrB,WAAW;AAE7B,eAAeI,IAAI"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import merge from 'lodash.merge';
|
|
3
|
+
let instance;
|
|
4
|
+
export class MenuHandler {
|
|
5
|
+
constructor(app) {
|
|
6
|
+
_defineProperty(this, "menuSections", new Map());
|
|
7
|
+
_defineProperty(this, "menuConfig", void 0);
|
|
8
|
+
_defineProperty(this, "app", void 0);
|
|
9
|
+
if (instance) {
|
|
10
|
+
throw new Error('You can only create one instance!');
|
|
11
|
+
}
|
|
12
|
+
instance = this;
|
|
13
|
+
this.menuConfig = {};
|
|
14
|
+
this.app = null;
|
|
15
|
+
}
|
|
16
|
+
setApp(app) {
|
|
17
|
+
this.app = app;
|
|
18
|
+
}
|
|
19
|
+
get app() {
|
|
20
|
+
return this.app;
|
|
21
|
+
}
|
|
22
|
+
get menuConfig() {
|
|
23
|
+
return this.menuConfig;
|
|
24
|
+
}
|
|
25
|
+
addConfig(newConfig) {
|
|
26
|
+
this.menuConfig = merge(this.menuConfig, newConfig);
|
|
27
|
+
}
|
|
28
|
+
async loadConfig() {
|
|
29
|
+
const addConfig = newConfig => {
|
|
30
|
+
this.addConfig(newConfig);
|
|
31
|
+
};
|
|
32
|
+
const {
|
|
33
|
+
menuConfig
|
|
34
|
+
} = this;
|
|
35
|
+
if (this.app && this.app.events) {
|
|
36
|
+
await this.app.events.emitAsync('admin:menu:config:load', {
|
|
37
|
+
addConfig
|
|
38
|
+
});
|
|
39
|
+
await this.app.events.emitAsync('admin:menu:config:load:after', {
|
|
40
|
+
addConfig,
|
|
41
|
+
menuConfig
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getInstance() {
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
getAll() {
|
|
49
|
+
const sortedByOrder = Object.entries(this.menuConfig).sort((a, b) => a.order > b.order ? 1 : -1);
|
|
50
|
+
return sortedByOrder;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const menuHandler = new MenuHandler();
|
|
54
|
+
export default menuHandler;
|
|
55
|
+
//# sourceMappingURL=menu-handler-singleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-handler-singleton.js","names":["merge","instance","MenuHandler","constructor","app","_defineProperty","Map","Error","menuConfig","setApp","addConfig","newConfig","loadConfig","events","emitAsync","getInstance","getAll","sortedByOrder","Object","entries","sort","a","b","order","menuHandler"],"sources":["../../src/utils/menu-handler-singleton.js"],"sourcesContent":["import merge from 'lodash.merge';\n\nlet instance;\n\nexport class MenuHandler {\n menuSections = new Map();\n\n menuConfig;\n\n app;\n\n constructor(app) {\n if (instance) {\n throw new Error('You can only create one instance!');\n }\n instance = this;\n this.menuConfig = {};\n this.app = null;\n }\n\n setApp(app) {\n this.app = app;\n }\n\n get app() {\n return this.app;\n }\n\n get menuConfig() {\n return this.menuConfig;\n }\n\n addConfig(newConfig) {\n this.menuConfig = merge(this.menuConfig, newConfig);\n }\n\n async loadConfig() {\n const addConfig = newConfig => {\n this.addConfig(newConfig);\n };\n\n const { menuConfig } = this;\n\n if (this.app && this.app.events) {\n await this.app.events.emitAsync('admin:menu:config:load', { addConfig });\n await this.app.events.emitAsync('admin:menu:config:load:after', { addConfig, menuConfig });\n }\n }\n\n getInstance() {\n return this;\n }\n\n getAll() {\n const sortedByOrder = Object.entries(this.menuConfig).sort(\n (a, b) => (a.order > b.order ? 1 : -1)\n );\n\n return sortedByOrder;\n }\n}\n\nconst menuHandler = new MenuHandler();\nexport default menuHandler;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,cAAc;AAEhC,IAAIC,QAAQ;AAEZ,OAAO,MAAMC,WAAW,CAAC;EAOvBC,WAAWA,CAACC,GAAG,EAAE;IAAAC,eAAA,uBANF,IAAIC,GAAG,CAAC,CAAC;IAAAD,eAAA;IAAAA,eAAA;IAOtB,IAAIJ,QAAQ,EAAE;MACZ,MAAM,IAAIM,KAAK,CAAC,mCAAmC,CAAC;IACtD;IACAN,QAAQ,GAAG,IAAI;IACf,IAAI,CAACO,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAACJ,GAAG,GAAG,IAAI;EACjB;EAEAK,MAAMA,CAACL,GAAG,EAAE;IACV,IAAI,CAACA,GAAG,GAAGA,GAAG;EAChB;EAEA,IAAIA,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACA,GAAG;EACjB;EAEA,IAAII,UAAUA,CAAA,EAAG;IACf,OAAO,IAAI,CAACA,UAAU;EACxB;EAEAE,SAASA,CAACC,SAAS,EAAE;IACnB,IAAI,CAACH,UAAU,GAAGR,KAAK,CAAC,IAAI,CAACQ,UAAU,EAAEG,SAAS,CAAC;EACrD;EAEA,MAAMC,UAAUA,CAAA,EAAG;IACjB,MAAMF,SAAS,GAAGC,SAAS,IAAI;MAC7B,IAAI,CAACD,SAAS,CAACC,SAAS,CAAC;IAC3B,CAAC;IAED,MAAM;MAAEH;IAAW,CAAC,GAAG,IAAI;IAE3B,IAAI,IAAI,CAACJ,GAAG,IAAI,IAAI,CAACA,GAAG,CAACS,MAAM,EAAE;MAC/B,MAAM,IAAI,CAACT,GAAG,CAACS,MAAM,CAACC,SAAS,CAAC,wBAAwB,EAAE;QAAEJ;MAAU,CAAC,CAAC;MACxE,MAAM,IAAI,CAACN,GAAG,CAACS,MAAM,CAACC,SAAS,CAAC,8BAA8B,EAAE;QAAEJ,SAAS;QAAEF;MAAW,CAAC,CAAC;IAC5F;EACF;EAEAO,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI;EACb;EAEAC,MAAMA,CAAA,EAAG;IACP,MAAMC,aAAa,GAAGC,MAAM,CAACC,OAAO,CAAC,IAAI,CAACX,UAAU,CAAC,CAACY,IAAI,CACxD,CAACC,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,GAAG,CAAC,GAAG,CAAC,CACtC,CAAC;IAED,OAAON,aAAa;EACtB;AACF;AAEA,MAAMO,WAAW,GAAG,IAAItB,WAAW,CAAC,CAAC;AACrC,eAAesB,WAAW"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaze-cms/plugin-admin-core-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.134.0-project-admin-customisations.0",
|
|
4
4
|
"description": "Blaze plugin admin core ui",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-es/index.js",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"license": "GPL-3.0",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@blaze-cms/admin-ui-styles": "
|
|
31
|
-
"@blaze-cms/admin-ui-utils": "
|
|
32
|
-
"@blaze-cms/core-ui": "
|
|
33
|
-
"@blaze-cms/plugin-search-ui": "
|
|
34
|
-
"@blaze-cms/setup-ui": "
|
|
30
|
+
"@blaze-cms/admin-ui-styles": "0.134.0-project-admin-customisations.0",
|
|
31
|
+
"@blaze-cms/admin-ui-utils": "0.134.0-project-admin-customisations.0",
|
|
32
|
+
"@blaze-cms/core-ui": "0.134.0-project-admin-customisations.0",
|
|
33
|
+
"@blaze-cms/plugin-search-ui": "0.134.0-project-admin-customisations.0",
|
|
34
|
+
"@blaze-cms/setup-ui": "0.134.0-project-admin-customisations.0",
|
|
35
35
|
"@blaze-react/avatar": "0.5.19",
|
|
36
36
|
"@blaze-react/button": "0.5.19",
|
|
37
37
|
"@blaze-react/input": "0.5.30",
|
|
@@ -47,12 +47,13 @@
|
|
|
47
47
|
"react-router-dom": "^5.0.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@blaze-cms/plugin-auth-ui": "
|
|
50
|
+
"@blaze-cms/plugin-auth-ui": "0.134.0-project-admin-customisations.0",
|
|
51
|
+
"lodash.merge": "^4.6.2",
|
|
51
52
|
"waait": "1.0.5"
|
|
52
53
|
},
|
|
53
54
|
"eslintIgnore": [
|
|
54
55
|
"lib/*",
|
|
55
56
|
"lib-es/*"
|
|
56
57
|
],
|
|
57
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "ed7ba9d56aee2c4913b8204b0181fdc8c5975d94"
|
|
58
59
|
}
|
|
@@ -5,15 +5,17 @@ import { Menu, Logo } from './components';
|
|
|
5
5
|
import { LOGO_PROPS } from '../../constants';
|
|
6
6
|
|
|
7
7
|
const Header = ({ isLoggedIn, isOpenMenu, onMenuClick }) => (
|
|
8
|
-
|
|
8
|
+
<>
|
|
9
9
|
{isLoggedIn && (
|
|
10
|
-
<
|
|
11
|
-
<
|
|
12
|
-
|
|
10
|
+
<header className="header">
|
|
11
|
+
<div className="header__menu">
|
|
12
|
+
<Menu isOpenMenu={isOpenMenu} onMenuClick={onMenuClick} id="menu-button" />
|
|
13
|
+
</div>
|
|
14
|
+
<Logo {...LOGO_PROPS} />
|
|
15
|
+
<SearchAdmin />
|
|
16
|
+
</header>
|
|
13
17
|
)}
|
|
14
|
-
|
|
15
|
-
{isLoggedIn && <SearchAdmin />}
|
|
16
|
-
</header>
|
|
18
|
+
</>
|
|
17
19
|
);
|
|
18
20
|
|
|
19
21
|
Header.propTypes = {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
// import Svg from './bg.svg';
|
|
4
|
+
|
|
5
|
+
const Background = ({ children }) => (
|
|
6
|
+
<div className="bg-blue-900 h-full w-full relative">
|
|
7
|
+
{/* <Svg /> */}
|
|
8
|
+
<div className="login-container">{children}</div>
|
|
9
|
+
</div>
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
Background.propTypes = {
|
|
13
|
+
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default Background;
|
|
@@ -3,29 +3,44 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { Query } from '@apollo/client/react/components';
|
|
4
4
|
import { getQuery } from '@blaze-cms/admin-ui-utils';
|
|
5
5
|
import { Login } from '@blaze-cms/plugin-auth-ui';
|
|
6
|
-
import Header from '../Header';
|
|
7
6
|
import { Grid } from './components';
|
|
8
|
-
|
|
7
|
+
import Background from './Background';
|
|
9
8
|
import '@blaze-cms/admin-ui-styles/main.scss';
|
|
9
|
+
import Header from '../Header';
|
|
10
10
|
|
|
11
11
|
const Layout = ({ children }) => {
|
|
12
12
|
const [isOpenMenu, setOpenMenu] = useState(true);
|
|
13
13
|
const onMenuClick = () => setOpenMenu(!isOpenMenu);
|
|
14
|
+
|
|
15
|
+
const simpleLayout = window.location !== window.parent.location;
|
|
16
|
+
|
|
17
|
+
const wrapperClass = simpleLayout ? ' grid--site-container--simle-layout' : '';
|
|
18
|
+
|
|
14
19
|
return (
|
|
15
|
-
<div className=
|
|
20
|
+
<div className={`site-container grid--site-container${wrapperClass}`}>
|
|
16
21
|
<Query query={getQuery('GET_USER_AUTH_DATA')} errorPolicy="all">
|
|
17
22
|
{({ data = {} }) => {
|
|
18
23
|
const { session: { isLoggedIn, userData = {} } = {} } = data;
|
|
19
24
|
|
|
20
25
|
return (
|
|
21
26
|
<>
|
|
22
|
-
|
|
27
|
+
{!simpleLayout && (
|
|
28
|
+
<Header isLoggedIn={isLoggedIn} onMenuClick={onMenuClick} isOpenMenu={isOpenMenu} />
|
|
29
|
+
)}
|
|
23
30
|
{isLoggedIn ? (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
<>
|
|
32
|
+
<Grid
|
|
33
|
+
isOpenMenu={isOpenMenu}
|
|
34
|
+
onMenuClick={onMenuClick}
|
|
35
|
+
userData={userData}
|
|
36
|
+
simpleLayout={simpleLayout}>
|
|
37
|
+
{children}
|
|
38
|
+
</Grid>
|
|
39
|
+
</>
|
|
27
40
|
) : (
|
|
28
|
-
<
|
|
41
|
+
<Background>
|
|
42
|
+
<Login />
|
|
43
|
+
</Background>
|
|
29
44
|
)}
|
|
30
45
|
</>
|
|
31
46
|
);
|