@orbe-agro/client-core-prod 5.6.123 → 5.6.125
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/dist/@ecme/assets/styles/app.css +15 -0
- package/dist/@ecme/assets/styles/tailwind/index.css +15 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js +45 -7
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js +290 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js.map +1 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js +18 -40
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js.map +1 -1
- package/dist/@ecme/components/ui/Button/Button.stories.js +17 -0
- package/dist/@ecme/components/ui/Button/Button.stories.js.map +1 -0
- package/dist/@types/@ecme/@types/navigation.d.ts +1 -0
- package/dist/@types/@ecme/@types/navigation.d.ts.map +1 -1
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts +3 -3
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts.map +1 -1
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts +15 -0
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts.map +1 -0
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts +3 -3
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts.map +1 -1
- package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts +9 -0
- package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts.map +1 -0
- package/dist/@types/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/modules.submenu/compras/submenu.compras.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/cadastros.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/ticket/cadastros.submenu.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/submenu/ticket/relatorios.submenu.d.ts.map +1 -1
- package/dist/base/assets/styles/init.css +15 -0
- package/dist/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.js +5 -3
- package/dist/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.js.map +1 -1
- package/dist/base/configs/navigation.config/modules.submenu/compras/submenu.compras.js +8 -12
- package/dist/base/configs/navigation.config/modules.submenu/compras/submenu.compras.js.map +1 -1
- package/dist/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.js +2 -23
- package/dist/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/cadastros.submenu.js +1 -3
- package/dist/base/configs/navigation.config/submenu/compras/cadastros.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.js +1 -0
- package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js +14 -12
- package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js.map +1 -1
- package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js +16 -6
- package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js.map +1 -1
- package/lib/@ecme/@types/navigation.ts +1 -0
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx +311 -0
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx +219 -170
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx +135 -157
- package/lib/@ecme/components/ui/Button/Button.stories.tsx +22 -0
- package/lib/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.ts +5 -3
- package/lib/base/configs/navigation.config/modules.submenu/compras/submenu.compras.ts +8 -12
- package/lib/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.ts +3 -27
- package/lib/base/configs/navigation.config/submenu/compras/cadastros.submenu.ts +0 -2
- package/lib/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.ts +1 -0
- package/lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts +14 -12
- package/lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts +11 -12
- package/package.json +9 -1
|
@@ -4493,6 +4493,9 @@ hr:is(.dark *){
|
|
|
4493
4493
|
.-left-2{
|
|
4494
4494
|
left: -0.5rem;
|
|
4495
4495
|
}
|
|
4496
|
+
.-left-3{
|
|
4497
|
+
left: -0.75rem;
|
|
4498
|
+
}
|
|
4496
4499
|
.-right-2{
|
|
4497
4500
|
right: -0.5rem;
|
|
4498
4501
|
}
|
|
@@ -4553,6 +4556,9 @@ hr:is(.dark *){
|
|
|
4553
4556
|
.z-10{
|
|
4554
4557
|
z-index: 10;
|
|
4555
4558
|
}
|
|
4559
|
+
.z-20{
|
|
4560
|
+
z-index: 20;
|
|
4561
|
+
}
|
|
4556
4562
|
.z-30{
|
|
4557
4563
|
z-index: 30;
|
|
4558
4564
|
}
|
|
@@ -5269,6 +5275,9 @@ hr:is(.dark *){
|
|
|
5269
5275
|
.min-w-\[330px\]{
|
|
5270
5276
|
min-width: 330px;
|
|
5271
5277
|
}
|
|
5278
|
+
.min-w-\[calc\(100\%\+1\.5rem\)\]{
|
|
5279
|
+
min-width: calc(100% + 1.5rem);
|
|
5280
|
+
}
|
|
5272
5281
|
.min-w-full{
|
|
5273
5282
|
min-width: 100%;
|
|
5274
5283
|
}
|
|
@@ -7087,6 +7096,9 @@ hr:is(.dark *){
|
|
|
7087
7096
|
.active\:bg-gray-100:active{
|
|
7088
7097
|
background-color: var(--gray-100);
|
|
7089
7098
|
}
|
|
7099
|
+
.group\/item:hover .group-hover\/item\:block{
|
|
7100
|
+
display: block;
|
|
7101
|
+
}
|
|
7090
7102
|
.group:hover .group-hover\:block{
|
|
7091
7103
|
display: block;
|
|
7092
7104
|
}
|
|
@@ -7131,6 +7143,9 @@ hr:is(.dark *){
|
|
|
7131
7143
|
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
|
|
7132
7144
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
7133
7145
|
}
|
|
7146
|
+
.group\/item:focus-visible .group-focus-visible\/item\:block{
|
|
7147
|
+
display: block;
|
|
7148
|
+
}
|
|
7134
7149
|
.group.active .group-\[\.active\]\:bg-white{
|
|
7135
7150
|
--tw-bg-opacity: 1;
|
|
7136
7151
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
|
|
@@ -1165,6 +1165,9 @@ video {
|
|
|
1165
1165
|
.-left-2 {
|
|
1166
1166
|
left: -0.5rem;
|
|
1167
1167
|
}
|
|
1168
|
+
.-left-3 {
|
|
1169
|
+
left: -0.75rem;
|
|
1170
|
+
}
|
|
1168
1171
|
.-right-2 {
|
|
1169
1172
|
right: -0.5rem;
|
|
1170
1173
|
}
|
|
@@ -1225,6 +1228,9 @@ video {
|
|
|
1225
1228
|
.z-10 {
|
|
1226
1229
|
z-index: 10;
|
|
1227
1230
|
}
|
|
1231
|
+
.z-20 {
|
|
1232
|
+
z-index: 20;
|
|
1233
|
+
}
|
|
1228
1234
|
.z-30 {
|
|
1229
1235
|
z-index: 30;
|
|
1230
1236
|
}
|
|
@@ -1941,6 +1947,9 @@ video {
|
|
|
1941
1947
|
.min-w-\[330px\] {
|
|
1942
1948
|
min-width: 330px;
|
|
1943
1949
|
}
|
|
1950
|
+
.min-w-\[calc\(100\%\+1\.5rem\)\] {
|
|
1951
|
+
min-width: calc(100% + 1.5rem);
|
|
1952
|
+
}
|
|
1944
1953
|
.min-w-full {
|
|
1945
1954
|
min-width: 100%;
|
|
1946
1955
|
}
|
|
@@ -3761,6 +3770,9 @@ video {
|
|
|
3761
3770
|
.active\:bg-gray-100:active {
|
|
3762
3771
|
background-color: var(--gray-100);
|
|
3763
3772
|
}
|
|
3773
|
+
.group\/item:hover .group-hover\/item\:block {
|
|
3774
|
+
display: block;
|
|
3775
|
+
}
|
|
3764
3776
|
.group:hover .group-hover\:block {
|
|
3765
3777
|
display: block;
|
|
3766
3778
|
}
|
|
@@ -3805,6 +3817,9 @@ video {
|
|
|
3805
3817
|
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
|
|
3806
3818
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
3807
3819
|
}
|
|
3820
|
+
.group\/item:focus-visible .group-focus-visible\/item\:block {
|
|
3821
|
+
display: block;
|
|
3822
|
+
}
|
|
3808
3823
|
.group.active .group-\[\.active\]\:bg-white {
|
|
3809
3824
|
--tw-bg-opacity: 1;
|
|
3810
3825
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
|
|
@@ -44,6 +44,25 @@ const filterNavigationByAuthority = (navTree, userAuthority) => {
|
|
|
44
44
|
return acc;
|
|
45
45
|
}, []);
|
|
46
46
|
};
|
|
47
|
+
const compareNavigationOrder = (a, b) => {
|
|
48
|
+
const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER;
|
|
49
|
+
const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER;
|
|
50
|
+
if (orderA !== orderB) {
|
|
51
|
+
return orderA - orderB;
|
|
52
|
+
}
|
|
53
|
+
const titleCompare = a.title.localeCompare(b.title, "pt-BR");
|
|
54
|
+
if (titleCompare !== 0) {
|
|
55
|
+
return titleCompare;
|
|
56
|
+
}
|
|
57
|
+
return a.key.localeCompare(b.key, "pt-BR");
|
|
58
|
+
};
|
|
59
|
+
const sortNavigationNodeList = (navTree) => [...navTree].sort(compareNavigationOrder);
|
|
60
|
+
const sortNavigationRecursively = (navTree) => {
|
|
61
|
+
return sortNavigationNodeList(navTree).map((nav) => ({
|
|
62
|
+
...nav,
|
|
63
|
+
subMenu: nav.subMenu ? sortNavigationRecursively(nav.subMenu) : nav.subMenu
|
|
64
|
+
}));
|
|
65
|
+
};
|
|
47
66
|
const VerticalMenuContent = (props) => {
|
|
48
67
|
const {
|
|
49
68
|
collapsed,
|
|
@@ -57,10 +76,13 @@ const VerticalMenuContent = (props) => {
|
|
|
57
76
|
} = props;
|
|
58
77
|
const { t } = useTranslation(!translationSetup);
|
|
59
78
|
const [defaulExpandKey, setDefaulExpandKey] = useState([]);
|
|
60
|
-
const filteredNavigationTree = useMemo(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
79
|
+
const filteredNavigationTree = useMemo(() => {
|
|
80
|
+
const filteredTree = filterNavigationByAuthority(
|
|
81
|
+
navigationTree,
|
|
82
|
+
userAuthority
|
|
83
|
+
);
|
|
84
|
+
return sortNavigationRecursively(filteredTree);
|
|
85
|
+
}, [navigationTree, userAuthority]);
|
|
64
86
|
const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey);
|
|
65
87
|
useEffect(() => {
|
|
66
88
|
if (activedRoute?.key) {
|
|
@@ -76,7 +98,8 @@ const VerticalMenuContent = (props) => {
|
|
|
76
98
|
};
|
|
77
99
|
const renderNavigation = (navTree, cascade = 0, indent) => {
|
|
78
100
|
const nextCascade = cascade + 1;
|
|
79
|
-
|
|
101
|
+
const orderedNavTree = sortNavigationNodeList(navTree);
|
|
102
|
+
return /* @__PURE__ */ jsx(Fragment, { children: orderedNavTree.map((nav) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
80
103
|
nav.type === NAV_ITEM_TYPE_ITEM && /* @__PURE__ */ jsx(
|
|
81
104
|
VerticalSingleMenuItem,
|
|
82
105
|
{
|
|
@@ -110,11 +133,26 @@ const VerticalMenuContent = (props) => {
|
|
|
110
133
|
userAuthority,
|
|
111
134
|
t,
|
|
112
135
|
onLinkClick: onMenuItemClick,
|
|
113
|
-
children: nav.subMenu && nav.subMenu.length > 0 && renderNavigation(
|
|
136
|
+
children: nav.subMenu && nav.subMenu.length > 0 && renderNavigation(
|
|
137
|
+
nav.subMenu,
|
|
138
|
+
nextCascade,
|
|
139
|
+
true
|
|
140
|
+
)
|
|
114
141
|
},
|
|
115
142
|
nav.key
|
|
116
143
|
),
|
|
117
|
-
nav.type === NAV_ITEM_TYPE_TITLE && /* @__PURE__ */ jsx(
|
|
144
|
+
nav.type === NAV_ITEM_TYPE_TITLE && /* @__PURE__ */ jsx(
|
|
145
|
+
MenuGroup,
|
|
146
|
+
{
|
|
147
|
+
label: t(nav.translateKey) || nav.title,
|
|
148
|
+
children: nav.subMenu && nav.subMenu.length > 0 && renderNavigation(
|
|
149
|
+
nav.subMenu,
|
|
150
|
+
cascade,
|
|
151
|
+
false
|
|
152
|
+
)
|
|
153
|
+
},
|
|
154
|
+
nav.key
|
|
155
|
+
)
|
|
118
156
|
] }, nav.key)) });
|
|
119
157
|
};
|
|
120
158
|
return /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerticalMenuContent.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, Fragment } from \"react\";\nimport Menu from \"@/components/ui/Menu\";\nimport VerticalSingleMenuItem from \"./VerticalSingleMenuItem\";\nimport VerticalCollapsedMenuItem from \"./VerticalCollapsedMenuItem\";\nimport { themeConfig } from \"@/configs/theme.config\";\nimport {\n NAV_ITEM_TYPE_TITLE,\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n} from \"@/constants/navigation.constant\";\nimport useMenuActive from \"@/utils/hooks/useMenuActive\";\nimport useTranslation from \"@/utils/hooks/useTranslation\";\nimport { Direction } from \"@/@types/theme\";\nimport type { NavigationTree } from \"@/@types/navigation\";\nimport type { TraslationFn } from \"@/@types/common\";\nimport { LinkRenderer } from \"@/components/layouts/Layouts\";\n\nexport interface VerticalMenuContentProps {\n collapsed?: boolean;\n routeKey: string;\n navigationTree?: NavigationTree[];\n onMenuItemClick?: () => void;\n direction?: Direction;\n translationSetup?: boolean;\n userAuthority: string[];\n linkRenderer?: LinkRenderer;\n}\n\nconst { MenuGroup } = Menu;\n\nconst findAncestorKeys = (\n navTree: NavigationTree[],\n targetKey: string\n): string[] | null => {\n for (const node of navTree) {\n if (node.key === targetKey) return [];\n if (node.subMenu && node.subMenu.length > 0) {\n const found = findAncestorKeys(node.subMenu, targetKey);\n if (found !== null) return [node.key, ...found];\n }\n }\n return null;\n};\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[]\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path)\n );\n if (shouldExclude) {\n return acc;\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority\n );\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu });\n }\n } else {\n if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav);\n }\n }\n return acc;\n }, []);\n};\n\nconst VerticalMenuContent = (props: VerticalMenuContentProps) => {\n const {\n collapsed,\n routeKey,\n navigationTree = [],\n onMenuItemClick,\n direction = themeConfig.direction,\n translationSetup,\n userAuthority,\n linkRenderer,\n } = props;\n\n const { t } = useTranslation(!translationSetup);\n const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([]);\n const filteredNavigationTree = useMemo(\n () => filterNavigationByAuthority(navigationTree, userAuthority),\n [navigationTree, userAuthority]\n );\n\n const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey);\n\n useEffect(() => {\n if (activedRoute?.key) {\n const ancestors = findAncestorKeys(\n filteredNavigationTree,\n activedRoute.key\n );\n setDefaulExpandKey(ancestors ?? []);\n }\n }, [activedRoute?.key, filteredNavigationTree]);\n\n const handleLinkClick = () => {\n onMenuItemClick?.();\n };\n\n const renderNavigation = (\n navTree: NavigationTree[],\n cascade: number = 0,\n indent?: boolean\n ) => {\n const nextCascade = cascade + 1;\n\n return (\n <>\n {navTree.map((nav) => (\n <Fragment key={nav.key}>\n {nav.type === NAV_ITEM_TYPE_ITEM && (\n <VerticalSingleMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={indent}\n renderAsIcon={cascade <= 0}\n showIcon={cascade <= 0}\n userAuthority={userAuthority}\n showTitle={\n nav.forceShowTitle ??\n (collapsed ? cascade >= 1 : cascade <= 1)\n }\n t={t as TraslationFn}\n onLinkClick={handleLinkClick}\n linkRenderer={linkRenderer}\n />\n )}\n {nav.type === NAV_ITEM_TYPE_COLLAPSE && (\n <VerticalCollapsedMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={nextCascade >= 2}\n dotIndent={nextCascade >= 2}\n renderAsIcon={nextCascade <= 1}\n userAuthority={userAuthority}\n t={t as TraslationFn}\n onLinkClick={onMenuItemClick}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(nav.subMenu, nextCascade, true)}\n </VerticalCollapsedMenuItem>\n )}\n {nav.type === NAV_ITEM_TYPE_TITLE && (\n <MenuGroup key={nav.key} label={t(nav.translateKey) || nav.title}>\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(nav.subMenu, cascade, false)}\n </MenuGroup>\n )}\n </Fragment>\n ))}\n </>\n );\n };\n\n return (\n <Menu\n className=\"px-4 pb-4\"\n sideCollapsed={collapsed}\n defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}\n defaultExpandedKeys={defaulExpandKey}\n defaultCollapseActiveKeys={\n activedRoute?.parentKey ? [activedRoute.parentKey] : []\n }\n >\n {renderNavigation(filteredNavigationTree, 0)}\n </Menu>\n );\n};\n\nexport default VerticalMenuContent;"],"names":["Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VerticalMenuContent.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, Fragment } from 'react'\nimport Menu from '@/components/ui/Menu'\nimport VerticalSingleMenuItem from './VerticalSingleMenuItem'\nimport VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem'\nimport { themeConfig } from '@/configs/theme.config'\nimport {\n NAV_ITEM_TYPE_TITLE,\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n} from '@/constants/navigation.constant'\nimport useMenuActive from '@/utils/hooks/useMenuActive'\nimport useTranslation from '@/utils/hooks/useTranslation'\nimport { Direction } from '@/@types/theme'\nimport type { NavigationTree } from '@/@types/navigation'\nimport type { TraslationFn } from '@/@types/common'\nimport { LinkRenderer } from '@/components/layouts/Layouts'\n\nexport interface VerticalMenuContentProps {\n collapsed?: boolean\n routeKey: string\n navigationTree?: NavigationTree[]\n onMenuItemClick?: () => void\n direction?: Direction\n translationSetup?: boolean\n userAuthority: string[]\n linkRenderer?: LinkRenderer\n}\n\nconst { MenuGroup } = Menu\n\nconst findAncestorKeys = (\n navTree: NavigationTree[],\n targetKey: string,\n): string[] | null => {\n for (const node of navTree) {\n if (node.key === targetKey) return []\n if (node.subMenu && node.subMenu.length > 0) {\n const found = findAncestorKeys(node.subMenu, targetKey)\n if (found !== null) return [node.key, ...found]\n }\n }\n return null\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\n if (shouldExclude) {\n return acc\n }\n }\n\n if (nav.subMenu && nav.subMenu.length > 0) {\n const filteredSubMenu = filterNavigationByAuthority(\n nav.subMenu,\n userAuthority,\n )\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else {\n if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav)\n }\n }\n return acc\n }, [])\n}\n\nconst compareNavigationOrder = (a: NavigationTree, b: NavigationTree) => {\n const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER\n const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER\n\n if (orderA !== orderB) {\n return orderA - orderB\n }\n\n const titleCompare = a.title.localeCompare(b.title, 'pt-BR')\n\n if (titleCompare !== 0) {\n return titleCompare\n }\n\n return a.key.localeCompare(b.key, 'pt-BR')\n}\n\nconst sortNavigationNodeList = (navTree: NavigationTree[]): NavigationTree[] =>\n [...navTree].sort(compareNavigationOrder)\n\nconst sortNavigationRecursively = (\n navTree: NavigationTree[],\n): NavigationTree[] => {\n return sortNavigationNodeList(navTree)\n .map((nav) => ({\n ...nav,\n subMenu: nav.subMenu\n ? sortNavigationRecursively(nav.subMenu)\n : nav.subMenu,\n }))\n}\n\nconst VerticalMenuContent = (props: VerticalMenuContentProps) => {\n const {\n collapsed,\n routeKey,\n navigationTree = [],\n onMenuItemClick,\n direction = themeConfig.direction,\n translationSetup,\n userAuthority,\n linkRenderer,\n } = props\n\n const { t } = useTranslation(!translationSetup)\n const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([])\n\n const filteredNavigationTree = useMemo(() => {\n const filteredTree = filterNavigationByAuthority(\n navigationTree,\n userAuthority,\n )\n\n return sortNavigationRecursively(filteredTree)\n }, [navigationTree, userAuthority])\n\n const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey)\n\n useEffect(() => {\n if (activedRoute?.key) {\n const ancestors = findAncestorKeys(\n filteredNavigationTree,\n activedRoute.key,\n )\n setDefaulExpandKey(ancestors ?? [])\n }\n }, [activedRoute?.key, filteredNavigationTree])\n\n const handleLinkClick = () => {\n onMenuItemClick?.()\n }\n\n const renderNavigation = (\n navTree: NavigationTree[],\n cascade: number = 0,\n indent?: boolean,\n ) => {\n const nextCascade = cascade + 1\n const orderedNavTree = sortNavigationNodeList(navTree)\n\n return (\n <>\n {orderedNavTree.map((nav) => (\n <Fragment key={nav.key}>\n {nav.type === NAV_ITEM_TYPE_ITEM && (\n <VerticalSingleMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={indent}\n renderAsIcon={cascade <= 0}\n showIcon={cascade <= 0}\n userAuthority={userAuthority}\n showTitle={\n nav.forceShowTitle ??\n (collapsed ? cascade >= 1 : cascade <= 1)\n }\n t={t as TraslationFn}\n onLinkClick={handleLinkClick}\n linkRenderer={linkRenderer}\n />\n )}\n {nav.type === NAV_ITEM_TYPE_COLLAPSE && (\n <VerticalCollapsedMenuItem\n key={nav.key}\n currentKey={activedRoute?.key}\n parentKeys={defaulExpandKey}\n nav={nav}\n sideCollapsed={collapsed}\n direction={direction}\n indent={nextCascade >= 2}\n dotIndent={nextCascade >= 2}\n renderAsIcon={nextCascade <= 1}\n userAuthority={userAuthority}\n t={t as TraslationFn}\n onLinkClick={onMenuItemClick}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n nextCascade,\n true,\n )}\n </VerticalCollapsedMenuItem>\n )}\n {nav.type === NAV_ITEM_TYPE_TITLE && (\n <MenuGroup\n key={nav.key}\n label={t(nav.translateKey) || nav.title}\n >\n {nav.subMenu &&\n nav.subMenu.length > 0 &&\n renderNavigation(\n nav.subMenu,\n cascade,\n false,\n )}\n </MenuGroup>\n )}\n </Fragment>\n ))}\n </>\n )\n }\n\n return (\n <Menu\n className=\"px-4 pb-4\"\n sideCollapsed={collapsed}\n defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}\n defaultExpandedKeys={defaulExpandKey}\n defaultCollapseActiveKeys={\n activedRoute?.parentKey ? [activedRoute.parentKey] : []\n }\n >\n {renderNavigation(filteredNavigationTree, 0)}\n </Menu>\n )\n}\n\nexport default VerticalMenuContent\n"],"names":["Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { BrowserRouter } from "react-router-dom";
|
|
3
|
+
import VerticalMenuContent from "./VerticalMenuContent.js";
|
|
4
|
+
import ticketNavigationConfig from "../../../../base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.js";
|
|
5
|
+
import { NAV_ITEM_TYPE_TITLE, NAV_ITEM_TYPE_ITEM, NAV_ITEM_TYPE_COLLAPSE } from "../../../constants/navigation.constant.js";
|
|
6
|
+
const collectAuthorityPaths = (navTree) => {
|
|
7
|
+
return navTree.reduce((acc, node) => {
|
|
8
|
+
if (node.path) {
|
|
9
|
+
acc.push(node.path);
|
|
10
|
+
}
|
|
11
|
+
if (node.subMenu?.length) {
|
|
12
|
+
acc.push(...collectAuthorityPaths(node.subMenu));
|
|
13
|
+
}
|
|
14
|
+
return acc;
|
|
15
|
+
}, []);
|
|
16
|
+
};
|
|
17
|
+
const ticketAuthority = Array.from(
|
|
18
|
+
new Set(collectAuthorityPaths(ticketNavigationConfig))
|
|
19
|
+
);
|
|
20
|
+
const ticketSubmenuAllExpanded = ticketNavigationConfig.map(
|
|
21
|
+
(menu) => {
|
|
22
|
+
if (menu.key !== "ticket") {
|
|
23
|
+
return menu;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
...menu,
|
|
27
|
+
subMenu: menu.subMenu.map((subMenu) => {
|
|
28
|
+
if (subMenu.key === "ticket.relatorios" || subMenu.key === "ticket.cadastros") {
|
|
29
|
+
return {
|
|
30
|
+
...subMenu,
|
|
31
|
+
type: NAV_ITEM_TYPE_TITLE
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return subMenu;
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
const mockNavigationTree = [
|
|
40
|
+
{
|
|
41
|
+
key: "inicio",
|
|
42
|
+
path: "/inicio",
|
|
43
|
+
title: "Início",
|
|
44
|
+
translateKey: "nav.inicio",
|
|
45
|
+
icon: "",
|
|
46
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
47
|
+
authority: ["/inicio"],
|
|
48
|
+
subMenu: []
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "cadastros",
|
|
52
|
+
path: "",
|
|
53
|
+
title: "Cadastros",
|
|
54
|
+
translateKey: "nav.cadastros",
|
|
55
|
+
icon: "",
|
|
56
|
+
type: NAV_ITEM_TYPE_COLLAPSE,
|
|
57
|
+
authority: ["/cadastros"],
|
|
58
|
+
subMenu: [
|
|
59
|
+
{
|
|
60
|
+
key: "clientes",
|
|
61
|
+
path: "/cadastros/clientes",
|
|
62
|
+
title: "Clientes",
|
|
63
|
+
translateKey: "nav.clientes",
|
|
64
|
+
icon: "",
|
|
65
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
66
|
+
authority: ["/cadastros/clientes"],
|
|
67
|
+
subMenu: []
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: "fornecedores",
|
|
71
|
+
path: "/cadastros/fornecedores",
|
|
72
|
+
title: "Fornecedores",
|
|
73
|
+
translateKey: "nav.fornecedores",
|
|
74
|
+
icon: "",
|
|
75
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
76
|
+
authority: ["/cadastros/fornecedores"],
|
|
77
|
+
subMenu: []
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
key: "relatorios",
|
|
83
|
+
path: "/relatorios",
|
|
84
|
+
title: "Relatórios",
|
|
85
|
+
translateKey: "nav.relatorios",
|
|
86
|
+
icon: "ChartBarIcon",
|
|
87
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
88
|
+
authority: ["/relatorios"],
|
|
89
|
+
subMenu: []
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
key: "configuracoes",
|
|
93
|
+
path: "",
|
|
94
|
+
title: "Configurações",
|
|
95
|
+
translateKey: "nav.configuracoes",
|
|
96
|
+
icon: "",
|
|
97
|
+
type: NAV_ITEM_TYPE_COLLAPSE,
|
|
98
|
+
authority: ["/configuracoes"],
|
|
99
|
+
subMenu: [
|
|
100
|
+
{
|
|
101
|
+
key: "perfil",
|
|
102
|
+
path: "/configuracoes/perfil",
|
|
103
|
+
title: "Perfil",
|
|
104
|
+
translateKey: "nav.perfil",
|
|
105
|
+
icon: "",
|
|
106
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
107
|
+
authority: ["/configuracoes/perfil"],
|
|
108
|
+
subMenu: []
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: "integracoes",
|
|
112
|
+
path: "",
|
|
113
|
+
title: "Integrações",
|
|
114
|
+
translateKey: "nav.integracoes",
|
|
115
|
+
icon: "",
|
|
116
|
+
type: NAV_ITEM_TYPE_COLLAPSE,
|
|
117
|
+
authority: ["/configuracoes/integracoes"],
|
|
118
|
+
subMenu: [
|
|
119
|
+
{
|
|
120
|
+
key: "webhooks",
|
|
121
|
+
path: "/configuracoes/integracoes/webhooks",
|
|
122
|
+
title: "Webhooks",
|
|
123
|
+
translateKey: "nav.webhooks",
|
|
124
|
+
icon: "WebhookIcon",
|
|
125
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
126
|
+
authority: ["/configuracoes/integracoes/webhooks"],
|
|
127
|
+
subMenu: []
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
key: "lorem.ipsum",
|
|
131
|
+
path: "/configuracoes/integracoes/lorem-ipsum",
|
|
132
|
+
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
|
|
133
|
+
translateKey: "nav.loremIpsum",
|
|
134
|
+
icon: "LoremIpsumIcon",
|
|
135
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
136
|
+
authority: ["/configuracoes/integracoes/lorem-ipsum"],
|
|
137
|
+
subMenu: []
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
];
|
|
144
|
+
const allUserAuthority = [
|
|
145
|
+
"/inicio",
|
|
146
|
+
"/cadastros/clientes",
|
|
147
|
+
"/cadastros/fornecedores",
|
|
148
|
+
"/relatorios",
|
|
149
|
+
"/configuracoes/perfil",
|
|
150
|
+
"/configuracoes/integracoes/webhooks",
|
|
151
|
+
"/configuracoes/integracoes/lorem-ipsum"
|
|
152
|
+
];
|
|
153
|
+
const meta = {
|
|
154
|
+
title: "@ecme/Template/VerticalMenuContent",
|
|
155
|
+
component: VerticalMenuContent,
|
|
156
|
+
parameters: {
|
|
157
|
+
layout: "padded"
|
|
158
|
+
},
|
|
159
|
+
tags: ["autodocs"],
|
|
160
|
+
decorators: [
|
|
161
|
+
(Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
|
|
162
|
+
],
|
|
163
|
+
argTypes: {
|
|
164
|
+
collapsed: {
|
|
165
|
+
control: "boolean"
|
|
166
|
+
},
|
|
167
|
+
direction: {
|
|
168
|
+
control: { type: "select" },
|
|
169
|
+
options: ["ltr", "rtl"]
|
|
170
|
+
},
|
|
171
|
+
routeKey: {
|
|
172
|
+
control: "text"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const Default = {
|
|
177
|
+
args: {
|
|
178
|
+
collapsed: false,
|
|
179
|
+
routeKey: "/inicio",
|
|
180
|
+
navigationTree: mockNavigationTree,
|
|
181
|
+
userAuthority: allUserAuthority,
|
|
182
|
+
direction: "ltr",
|
|
183
|
+
translationSetup: true
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const Collapsed = {
|
|
187
|
+
args: {
|
|
188
|
+
collapsed: true,
|
|
189
|
+
routeKey: "/cadastros/clientes",
|
|
190
|
+
navigationTree: mockNavigationTree,
|
|
191
|
+
userAuthority: allUserAuthority,
|
|
192
|
+
direction: "ltr",
|
|
193
|
+
translationSetup: true
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const WithExpandedMenu = {
|
|
197
|
+
args: {
|
|
198
|
+
collapsed: false,
|
|
199
|
+
routeKey: "/configuracoes/integracoes/webhooks",
|
|
200
|
+
navigationTree: mockNavigationTree,
|
|
201
|
+
userAuthority: allUserAuthority,
|
|
202
|
+
direction: "ltr",
|
|
203
|
+
translationSetup: true
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const LimitedAuthority = {
|
|
207
|
+
args: {
|
|
208
|
+
collapsed: false,
|
|
209
|
+
routeKey: "/inicio",
|
|
210
|
+
navigationTree: mockNavigationTree,
|
|
211
|
+
userAuthority: ["/inicio", "/relatorios"],
|
|
212
|
+
direction: "ltr",
|
|
213
|
+
translationSetup: true
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const RTLDirection = {
|
|
217
|
+
args: {
|
|
218
|
+
collapsed: false,
|
|
219
|
+
routeKey: "/inicio",
|
|
220
|
+
navigationTree: mockNavigationTree,
|
|
221
|
+
userAuthority: allUserAuthority,
|
|
222
|
+
direction: "rtl",
|
|
223
|
+
translationSetup: true
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const MinimalNavigation = {
|
|
227
|
+
args: {
|
|
228
|
+
collapsed: false,
|
|
229
|
+
routeKey: "/inicio",
|
|
230
|
+
navigationTree: [
|
|
231
|
+
{
|
|
232
|
+
key: "inicio",
|
|
233
|
+
path: "/inicio",
|
|
234
|
+
title: "Início",
|
|
235
|
+
translateKey: "nav.inicio",
|
|
236
|
+
icon: "",
|
|
237
|
+
type: NAV_ITEM_TYPE_ITEM,
|
|
238
|
+
authority: ["/inicio"],
|
|
239
|
+
subMenu: []
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
userAuthority: ["/inicio"],
|
|
243
|
+
direction: "ltr",
|
|
244
|
+
translationSetup: true
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
const WithMenuClick = {
|
|
248
|
+
args: {
|
|
249
|
+
collapsed: false,
|
|
250
|
+
routeKey: "/inicio",
|
|
251
|
+
navigationTree: mockNavigationTree,
|
|
252
|
+
userAuthority: allUserAuthority,
|
|
253
|
+
direction: "ltr",
|
|
254
|
+
translationSetup: true,
|
|
255
|
+
onMenuItemClick: () => alert("Menu item clicked!")
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const TicketSubmenu = {
|
|
259
|
+
args: {
|
|
260
|
+
collapsed: false,
|
|
261
|
+
routeKey: "ticket",
|
|
262
|
+
navigationTree: ticketNavigationConfig,
|
|
263
|
+
userAuthority: ticketAuthority,
|
|
264
|
+
direction: "ltr",
|
|
265
|
+
translationSetup: true
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
const TicketSubmenuSortOrderStable = {
|
|
269
|
+
args: {
|
|
270
|
+
collapsed: false,
|
|
271
|
+
routeKey: "ticket",
|
|
272
|
+
navigationTree: ticketSubmenuAllExpanded,
|
|
273
|
+
userAuthority: ticketAuthority,
|
|
274
|
+
direction: "ltr",
|
|
275
|
+
translationSetup: true
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
export {
|
|
279
|
+
Collapsed,
|
|
280
|
+
Default,
|
|
281
|
+
LimitedAuthority,
|
|
282
|
+
MinimalNavigation,
|
|
283
|
+
RTLDirection,
|
|
284
|
+
TicketSubmenu,
|
|
285
|
+
TicketSubmenuSortOrderStable,
|
|
286
|
+
WithExpandedMenu,
|
|
287
|
+
WithMenuClick,
|
|
288
|
+
meta as default
|
|
289
|
+
};
|
|
290
|
+
//# sourceMappingURL=VerticalMenuContent.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerticalMenuContent.stories.js","sources":["../../../../../lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport VerticalMenuContent from './VerticalMenuContent'\nimport type { NavigationTree } from '@/@types/navigation'\nimport ticketNavigationConfig from '@base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation'\nimport {\n NAV_ITEM_TYPE_COLLAPSE,\n NAV_ITEM_TYPE_ITEM,\n NAV_ITEM_TYPE_TITLE,\n} from '@/constants/navigation.constant'\n\nconst collectAuthorityPaths = (navTree: NavigationTree[]): string[] => {\n return navTree.reduce((acc: string[], node) => {\n if (node.path) {\n acc.push(node.path)\n }\n\n if (node.subMenu?.length) {\n acc.push(...collectAuthorityPaths(node.subMenu))\n }\n\n return acc\n }, [])\n}\n\nconst ticketAuthority = Array.from(\n new Set(collectAuthorityPaths(ticketNavigationConfig)),\n)\n\nconst ticketSubmenuAllExpanded: NavigationTree[] = ticketNavigationConfig.map(\n (menu) => {\n if (menu.key !== 'ticket') {\n return menu\n }\n\n return {\n ...menu,\n subMenu: menu.subMenu.map((subMenu) => {\n if (\n subMenu.key === 'ticket.relatorios' ||\n subMenu.key === 'ticket.cadastros'\n ) {\n return {\n ...subMenu,\n type: NAV_ITEM_TYPE_TITLE,\n }\n }\n\n return subMenu\n }),\n }\n },\n)\n\nconst mockNavigationTree: NavigationTree[] = [\n {\n key: 'inicio',\n path: '/inicio',\n title: 'Início',\n translateKey: 'nav.inicio',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/inicio'],\n subMenu: [],\n },\n {\n key: 'cadastros',\n path: '',\n title: 'Cadastros',\n translateKey: 'nav.cadastros',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/cadastros'],\n subMenu: [\n {\n key: 'clientes',\n path: '/cadastros/clientes',\n title: 'Clientes',\n translateKey: 'nav.clientes',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/cadastros/clientes'],\n subMenu: [],\n },\n {\n key: 'fornecedores',\n path: '/cadastros/fornecedores',\n title: 'Fornecedores',\n translateKey: 'nav.fornecedores',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/cadastros/fornecedores'],\n subMenu: [],\n },\n ],\n },\n {\n key: 'relatorios',\n path: '/relatorios',\n title: 'Relatórios',\n translateKey: 'nav.relatorios',\n icon: 'ChartBarIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/relatorios'],\n subMenu: [],\n },\n {\n key: 'configuracoes',\n path: '',\n title: 'Configurações',\n translateKey: 'nav.configuracoes',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/configuracoes'],\n subMenu: [\n {\n key: 'perfil',\n path: '/configuracoes/perfil',\n title: 'Perfil',\n translateKey: 'nav.perfil',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/perfil'],\n subMenu: [],\n },\n {\n key: 'integracoes',\n path: '',\n title: 'Integrações',\n translateKey: 'nav.integracoes',\n icon: '',\n type: NAV_ITEM_TYPE_COLLAPSE,\n authority: ['/configuracoes/integracoes'],\n subMenu: [\n {\n key: 'webhooks',\n path: '/configuracoes/integracoes/webhooks',\n title: 'Webhooks',\n translateKey: 'nav.webhooks',\n icon: 'WebhookIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/integracoes/webhooks'],\n subMenu: [],\n },\n {\n key: 'lorem.ipsum',\n path: '/configuracoes/integracoes/lorem-ipsum',\n title: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',\n translateKey: 'nav.loremIpsum',\n icon: 'LoremIpsumIcon',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/configuracoes/integracoes/lorem-ipsum'],\n subMenu: [],\n },\n ],\n },\n ],\n },\n]\n\nconst allUserAuthority = [\n '/inicio',\n '/cadastros/clientes',\n '/cadastros/fornecedores',\n '/relatorios',\n '/configuracoes/perfil',\n '/configuracoes/integracoes/webhooks',\n '/configuracoes/integracoes/lorem-ipsum',\n]\n\nconst meta: Meta<typeof VerticalMenuContent> = {\n title: '@ecme/Template/VerticalMenuContent',\n component: VerticalMenuContent,\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n argTypes: {\n collapsed: {\n control: 'boolean',\n },\n direction: {\n control: { type: 'select' },\n options: ['ltr', 'rtl'],\n },\n routeKey: {\n control: 'text',\n },\n },\n}\n\nexport default meta\ntype TStory = StoryObj<typeof VerticalMenuContent>\n\nexport const Default: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const Collapsed: TStory = {\n args: {\n collapsed: true,\n routeKey: '/cadastros/clientes',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const WithExpandedMenu: TStory = {\n args: {\n collapsed: false,\n routeKey: '/configuracoes/integracoes/webhooks',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const LimitedAuthority: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: ['/inicio', '/relatorios'],\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const RTLDirection: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'rtl',\n translationSetup: true,\n },\n}\n\nexport const MinimalNavigation: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: [\n {\n key: 'inicio',\n path: '/inicio',\n title: 'Início',\n translateKey: 'nav.inicio',\n icon: '',\n type: NAV_ITEM_TYPE_ITEM,\n authority: ['/inicio'],\n subMenu: [],\n },\n ],\n userAuthority: ['/inicio'],\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const WithMenuClick: TStory = {\n args: {\n collapsed: false,\n routeKey: '/inicio',\n navigationTree: mockNavigationTree,\n userAuthority: allUserAuthority,\n direction: 'ltr',\n translationSetup: true,\n onMenuItemClick: () => alert('Menu item clicked!'),\n },\n}\n\nexport const TicketSubmenu: TStory = {\n args: {\n collapsed: false,\n routeKey: 'ticket',\n navigationTree: ticketNavigationConfig,\n userAuthority: ticketAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n\nexport const TicketSubmenuSortOrderStable: TStory = {\n args: {\n collapsed: false,\n routeKey: 'ticket',\n navigationTree: ticketSubmenuAllExpanded,\n userAuthority: ticketAuthority,\n direction: 'ltr',\n translationSetup: true,\n },\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import "../../ui/Tooltip/index.js";
|
|
3
3
|
import { Menu } from "../../ui/Menu/index.js";
|
|
4
|
+
import "../../ui/ScrollBar/index.js";
|
|
4
5
|
import VerticalMenuIcon from "./VerticalMenuIcon.js";
|
|
5
6
|
import { Link } from "react-router-dom";
|
|
6
|
-
import
|
|
7
|
+
import ScrollBar from "../../ui/ScrollBar/ScrollBar.js";
|
|
7
8
|
import Tooltip from "../../ui/Tooltip/Tooltip.js";
|
|
8
9
|
const { MenuItem } = Menu;
|
|
9
|
-
const CollapsedItem = ({
|
|
10
|
-
nav,
|
|
11
|
-
children,
|
|
12
|
-
direction,
|
|
13
|
-
renderAsIcon,
|
|
14
|
-
onLinkClick,
|
|
15
|
-
userAuthority,
|
|
16
|
-
t,
|
|
17
|
-
currentKey,
|
|
18
|
-
linkRenderer
|
|
19
|
-
}) => {
|
|
20
|
-
const linkContent = /* @__PURE__ */ jsx("span", { children: t(nav.translateKey, nav.title) });
|
|
21
|
-
const renderLink = () => {
|
|
22
|
-
if (linkRenderer) {
|
|
23
|
-
return linkRenderer(nav, linkContent);
|
|
24
|
-
}
|
|
25
|
-
return /* @__PURE__ */ jsx(
|
|
26
|
-
Link,
|
|
27
|
-
{
|
|
28
|
-
id: nav.path,
|
|
29
|
-
className: "flex h-full w-full items-center outline-none",
|
|
30
|
-
to: nav.path,
|
|
31
|
-
target: nav.isExternalLink ? "_blank" : "",
|
|
32
|
-
onClick: () => onLinkClick?.({
|
|
33
|
-
key: nav.key,
|
|
34
|
-
title: nav.title,
|
|
35
|
-
path: nav.path
|
|
36
|
-
}),
|
|
37
|
-
children: linkContent
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
};
|
|
41
|
-
return /* @__PURE__ */ jsx(Dropdown.Item, { active: currentKey === nav.key, children: nav.path ? renderLink() : /* @__PURE__ */ jsx("span", { children: t(nav.translateKey, nav.title) }) });
|
|
42
|
-
};
|
|
43
10
|
const DefaultItem = (props) => {
|
|
44
11
|
const {
|
|
45
12
|
nav,
|
|
@@ -47,13 +14,24 @@ const DefaultItem = (props) => {
|
|
|
47
14
|
showTitle,
|
|
48
15
|
indent,
|
|
49
16
|
showIcon = true,
|
|
50
|
-
userAuthority,
|
|
51
17
|
t,
|
|
52
18
|
linkRenderer
|
|
53
19
|
} = props;
|
|
54
|
-
const
|
|
20
|
+
const translatedTitle = t(nav.translateKey, nav.title);
|
|
21
|
+
const renderItemContent = (titleClassName) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
55
22
|
showIcon && /* @__PURE__ */ jsx(VerticalMenuIcon, { icon: nav.icon }),
|
|
56
|
-
showTitle && /* @__PURE__ */ jsx("span", {
|
|
23
|
+
showTitle && /* @__PURE__ */ jsx("span", { className: titleClassName, children: translatedTitle })
|
|
24
|
+
] });
|
|
25
|
+
const linkContent = /* @__PURE__ */ jsxs("span", { className: "relative flex min-w-0 flex-1 items-center gap-2", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 items-center gap-2 overflow-hidden", children: renderItemContent("truncate") }),
|
|
27
|
+
showTitle && /* @__PURE__ */ jsx("div", { className: "w-100 absolute -left-3 top-1/2 z-20 hidden min-w-[calc(100%+1.5rem)] -translate-y-1/2 group-hover/item:block group-focus-visible/item:block", children: /* @__PURE__ */ jsx(
|
|
28
|
+
ScrollBar,
|
|
29
|
+
{
|
|
30
|
+
autoHide: true,
|
|
31
|
+
className: "max-h-16 rounded-lg bg-gray-100 text-gray-900 dark:bg-gray-700 dark:text-gray-100",
|
|
32
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex h-full w-max min-w-full items-center gap-2 whitespace-nowrap rounded-lg px-3 font-semibold", children: renderItemContent() })
|
|
33
|
+
}
|
|
34
|
+
) })
|
|
57
35
|
] });
|
|
58
36
|
const renderLink = () => {
|
|
59
37
|
if (linkRenderer) {
|
|
@@ -63,7 +41,7 @@ const DefaultItem = (props) => {
|
|
|
63
41
|
Link,
|
|
64
42
|
{
|
|
65
43
|
to: nav.path,
|
|
66
|
-
className: "flex
|
|
44
|
+
className: "group/item relative flex w-full min-w-0 items-center gap-2",
|
|
67
45
|
target: nav.isExternalLink ? "_blank" : "",
|
|
68
46
|
onClick: () => onLinkClick?.({
|
|
69
47
|
key: nav.key,
|