@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.
Files changed (75) hide show
  1. package/dist/@ecme/assets/styles/app.css +15 -0
  2. package/dist/@ecme/assets/styles/tailwind/index.css +15 -0
  3. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js +45 -7
  4. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
  5. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js +290 -0
  6. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js.map +1 -0
  7. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js +18 -40
  8. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js.map +1 -1
  9. package/dist/@ecme/components/ui/Button/Button.stories.js +17 -0
  10. package/dist/@ecme/components/ui/Button/Button.stories.js.map +1 -0
  11. package/dist/@types/@ecme/@types/navigation.d.ts +1 -0
  12. package/dist/@types/@ecme/@types/navigation.d.ts.map +1 -1
  13. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts +3 -3
  14. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts.map +1 -1
  15. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts +15 -0
  16. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.d.ts.map +1 -0
  17. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts +3 -3
  18. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts.map +1 -1
  19. package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts +9 -0
  20. package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts.map +1 -0
  21. package/dist/@types/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.d.ts.map +1 -1
  22. package/dist/@types/base/configs/navigation.config/modules.submenu/compras/submenu.compras.d.ts.map +1 -1
  23. package/dist/@types/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.d.ts.map +1 -1
  24. package/dist/@types/base/configs/navigation.config/submenu/compras/cadastros.submenu.d.ts.map +1 -1
  25. package/dist/@types/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.d.ts.map +1 -1
  26. package/dist/@types/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.d.ts.map +1 -1
  27. package/dist/@types/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.d.ts.map +1 -1
  28. package/dist/@types/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.d.ts.map +1 -1
  29. package/dist/@types/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.d.ts.map +1 -1
  30. package/dist/@types/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.d.ts.map +1 -1
  31. package/dist/@types/base/configs/navigation.config/submenu/ticket/cadastros.submenu.d.ts.map +1 -1
  32. package/dist/@types/base/configs/navigation.config/submenu/ticket/relatorios.submenu.d.ts.map +1 -1
  33. package/dist/base/assets/styles/init.css +15 -0
  34. package/dist/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.js +5 -3
  35. package/dist/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.js.map +1 -1
  36. package/dist/base/configs/navigation.config/modules.submenu/compras/submenu.compras.js +8 -12
  37. package/dist/base/configs/navigation.config/modules.submenu/compras/submenu.compras.js.map +1 -1
  38. package/dist/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.js +2 -23
  39. package/dist/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.js.map +1 -1
  40. package/dist/base/configs/navigation.config/submenu/compras/cadastros.submenu.js +1 -3
  41. package/dist/base/configs/navigation.config/submenu/compras/cadastros.submenu.js.map +1 -1
  42. package/dist/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.js +1 -0
  43. package/dist/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.js.map +1 -1
  44. package/dist/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.js +1 -0
  45. package/dist/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.js.map +1 -1
  46. package/dist/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.js +1 -0
  47. package/dist/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.js.map +1 -1
  48. package/dist/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.js +1 -0
  49. package/dist/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.js.map +1 -1
  50. package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.js +1 -0
  51. package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.js.map +1 -1
  52. package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.js +1 -0
  53. package/dist/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.js.map +1 -1
  54. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js +14 -12
  55. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js.map +1 -1
  56. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js +16 -6
  57. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js.map +1 -1
  58. package/lib/@ecme/@types/navigation.ts +1 -0
  59. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx +311 -0
  60. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx +219 -170
  61. package/lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx +135 -157
  62. package/lib/@ecme/components/ui/Button/Button.stories.tsx +22 -0
  63. package/lib/base/configs/navigation.config/modules.submenu/Ticket/ticket.navigation.ts +5 -3
  64. package/lib/base/configs/navigation.config/modules.submenu/compras/submenu.compras.ts +8 -12
  65. package/lib/base/configs/navigation.config/modules.submenu/dadosunificados/dadosunificados.navigation.ts +3 -27
  66. package/lib/base/configs/navigation.config/submenu/compras/cadastros.submenu.ts +0 -2
  67. package/lib/base/configs/navigation.config/submenu/compras/config/cadastroEstrategiaLiberacaoValor.submenu.ts +1 -0
  68. package/lib/base/configs/navigation.config/submenu/compras/config/cotacao.submenu.ts +1 -0
  69. package/lib/base/configs/navigation.config/submenu/compras/config/localRecepcao.submenu.ts +1 -0
  70. package/lib/base/configs/navigation.config/submenu/compras/config/ordemCompra.submenu.ts +1 -0
  71. package/lib/base/configs/navigation.config/submenu/compras/config/requisicaoAgrupada.submenu.ts +1 -0
  72. package/lib/base/configs/navigation.config/submenu/compras/config/requisicaoCompra.submenu.ts +1 -0
  73. package/lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts +14 -12
  74. package/lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts +11 -12
  75. package/package.json +9 -1
@@ -1,192 +1,241 @@
1
- import { useState, useEffect, useMemo, Fragment } from "react";
2
- import Menu from "@/components/ui/Menu";
3
- import VerticalSingleMenuItem from "./VerticalSingleMenuItem";
4
- import VerticalCollapsedMenuItem from "./VerticalCollapsedMenuItem";
5
- import { themeConfig } from "@/configs/theme.config";
1
+ import { useState, useEffect, useMemo, Fragment } from 'react'
2
+ import Menu from '@/components/ui/Menu'
3
+ import VerticalSingleMenuItem from './VerticalSingleMenuItem'
4
+ import VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem'
5
+ import { themeConfig } from '@/configs/theme.config'
6
6
  import {
7
- NAV_ITEM_TYPE_TITLE,
8
- NAV_ITEM_TYPE_COLLAPSE,
9
- NAV_ITEM_TYPE_ITEM,
10
- } from "@/constants/navigation.constant";
11
- import useMenuActive from "@/utils/hooks/useMenuActive";
12
- import useTranslation from "@/utils/hooks/useTranslation";
13
- import { Direction } from "@/@types/theme";
14
- import type { NavigationTree } from "@/@types/navigation";
15
- import type { TraslationFn } from "@/@types/common";
16
- import { LinkRenderer } from "@/components/layouts/Layouts";
7
+ NAV_ITEM_TYPE_TITLE,
8
+ NAV_ITEM_TYPE_COLLAPSE,
9
+ NAV_ITEM_TYPE_ITEM,
10
+ } from '@/constants/navigation.constant'
11
+ import useMenuActive from '@/utils/hooks/useMenuActive'
12
+ import useTranslation from '@/utils/hooks/useTranslation'
13
+ import { Direction } from '@/@types/theme'
14
+ import type { NavigationTree } from '@/@types/navigation'
15
+ import type { TraslationFn } from '@/@types/common'
16
+ import { LinkRenderer } from '@/components/layouts/Layouts'
17
17
 
18
18
  export interface VerticalMenuContentProps {
19
- collapsed?: boolean;
20
- routeKey: string;
21
- navigationTree?: NavigationTree[];
22
- onMenuItemClick?: () => void;
23
- direction?: Direction;
24
- translationSetup?: boolean;
25
- userAuthority: string[];
26
- linkRenderer?: LinkRenderer;
19
+ collapsed?: boolean
20
+ routeKey: string
21
+ navigationTree?: NavigationTree[]
22
+ onMenuItemClick?: () => void
23
+ direction?: Direction
24
+ translationSetup?: boolean
25
+ userAuthority: string[]
26
+ linkRenderer?: LinkRenderer
27
27
  }
28
28
 
29
- const { MenuGroup } = Menu;
29
+ const { MenuGroup } = Menu
30
30
 
31
31
  const findAncestorKeys = (
32
- navTree: NavigationTree[],
33
- targetKey: string
32
+ navTree: NavigationTree[],
33
+ targetKey: string,
34
34
  ): string[] | null => {
35
- for (const node of navTree) {
36
- if (node.key === targetKey) return [];
37
- if (node.subMenu && node.subMenu.length > 0) {
38
- const found = findAncestorKeys(node.subMenu, targetKey);
39
- if (found !== null) return [node.key, ...found];
35
+ for (const node of navTree) {
36
+ if (node.key === targetKey) return []
37
+ if (node.subMenu && node.subMenu.length > 0) {
38
+ const found = findAncestorKeys(node.subMenu, targetKey)
39
+ if (found !== null) return [node.key, ...found]
40
+ }
40
41
  }
41
- }
42
- return null;
43
- };
42
+ return null
43
+ }
44
44
 
45
45
  const filterNavigationByAuthority = (
46
- navTree: NavigationTree[],
47
- userAuthority: string[]
46
+ navTree: NavigationTree[],
47
+ userAuthority: string[],
48
48
  ): NavigationTree[] => {
49
- return navTree.reduce((acc: NavigationTree[], nav) => {
50
- // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica
51
- if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {
52
- const shouldExclude = nav.excludeWhenHasPaths.some((path) =>
53
- userAuthority.includes(path)
54
- );
55
- if (shouldExclude) {
56
- return acc;
57
- }
49
+ return navTree.reduce((acc: NavigationTree[], nav) => {
50
+ // Verifica se deve excluir o item quando o usuário possui alguma funcionalidade específica
51
+ if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {
52
+ const shouldExclude = nav.excludeWhenHasPaths.some((path) =>
53
+ userAuthority.includes(path),
54
+ )
55
+ if (shouldExclude) {
56
+ return acc
57
+ }
58
+ }
59
+
60
+ if (nav.subMenu && nav.subMenu.length > 0) {
61
+ const filteredSubMenu = filterNavigationByAuthority(
62
+ nav.subMenu,
63
+ userAuthority,
64
+ )
65
+ if (filteredSubMenu.length > 0) {
66
+ acc.push({ ...nav, subMenu: filteredSubMenu })
67
+ }
68
+ } else {
69
+ if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {
70
+ acc.push(nav)
71
+ }
72
+ }
73
+ return acc
74
+ }, [])
75
+ }
76
+
77
+ const compareNavigationOrder = (a: NavigationTree, b: NavigationTree) => {
78
+ const orderA = a.sortOrder ?? Number.MAX_SAFE_INTEGER
79
+ const orderB = b.sortOrder ?? Number.MAX_SAFE_INTEGER
80
+
81
+ if (orderA !== orderB) {
82
+ return orderA - orderB
58
83
  }
59
84
 
60
- if (nav.subMenu && nav.subMenu.length > 0) {
61
- const filteredSubMenu = filterNavigationByAuthority(
62
- nav.subMenu,
63
- userAuthority
64
- );
65
- if (filteredSubMenu.length > 0) {
66
- acc.push({ ...nav, subMenu: filteredSubMenu });
67
- }
68
- } else {
69
- if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {
70
- acc.push(nav);
71
- }
85
+ const titleCompare = a.title.localeCompare(b.title, 'pt-BR')
86
+
87
+ if (titleCompare !== 0) {
88
+ return titleCompare
72
89
  }
73
- return acc;
74
- }, []);
75
- };
90
+
91
+ return a.key.localeCompare(b.key, 'pt-BR')
92
+ }
93
+
94
+ const sortNavigationNodeList = (navTree: NavigationTree[]): NavigationTree[] =>
95
+ [...navTree].sort(compareNavigationOrder)
96
+
97
+ const sortNavigationRecursively = (
98
+ navTree: NavigationTree[],
99
+ ): NavigationTree[] => {
100
+ return sortNavigationNodeList(navTree)
101
+ .map((nav) => ({
102
+ ...nav,
103
+ subMenu: nav.subMenu
104
+ ? sortNavigationRecursively(nav.subMenu)
105
+ : nav.subMenu,
106
+ }))
107
+ }
76
108
 
77
109
  const VerticalMenuContent = (props: VerticalMenuContentProps) => {
78
- const {
79
- collapsed,
80
- routeKey,
81
- navigationTree = [],
82
- onMenuItemClick,
83
- direction = themeConfig.direction,
84
- translationSetup,
85
- userAuthority,
86
- linkRenderer,
87
- } = props;
88
-
89
- const { t } = useTranslation(!translationSetup);
90
- const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([]);
91
- const filteredNavigationTree = useMemo(
92
- () => filterNavigationByAuthority(navigationTree, userAuthority),
93
- [navigationTree, userAuthority]
94
- );
95
-
96
- const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey);
97
-
98
- useEffect(() => {
99
- if (activedRoute?.key) {
100
- const ancestors = findAncestorKeys(
101
- filteredNavigationTree,
102
- activedRoute.key
103
- );
104
- setDefaulExpandKey(ancestors ?? []);
110
+ const {
111
+ collapsed,
112
+ routeKey,
113
+ navigationTree = [],
114
+ onMenuItemClick,
115
+ direction = themeConfig.direction,
116
+ translationSetup,
117
+ userAuthority,
118
+ linkRenderer,
119
+ } = props
120
+
121
+ const { t } = useTranslation(!translationSetup)
122
+ const [defaulExpandKey, setDefaulExpandKey] = useState<string[]>([])
123
+
124
+ const filteredNavigationTree = useMemo(() => {
125
+ const filteredTree = filterNavigationByAuthority(
126
+ navigationTree,
127
+ userAuthority,
128
+ )
129
+
130
+ return sortNavigationRecursively(filteredTree)
131
+ }, [navigationTree, userAuthority])
132
+
133
+ const { activedRoute } = useMenuActive(filteredNavigationTree, routeKey)
134
+
135
+ useEffect(() => {
136
+ if (activedRoute?.key) {
137
+ const ancestors = findAncestorKeys(
138
+ filteredNavigationTree,
139
+ activedRoute.key,
140
+ )
141
+ setDefaulExpandKey(ancestors ?? [])
142
+ }
143
+ }, [activedRoute?.key, filteredNavigationTree])
144
+
145
+ const handleLinkClick = () => {
146
+ onMenuItemClick?.()
105
147
  }
106
- }, [activedRoute?.key, filteredNavigationTree]);
107
148
 
108
- const handleLinkClick = () => {
109
- onMenuItemClick?.();
110
- };
149
+ const renderNavigation = (
150
+ navTree: NavigationTree[],
151
+ cascade: number = 0,
152
+ indent?: boolean,
153
+ ) => {
154
+ const nextCascade = cascade + 1
155
+ const orderedNavTree = sortNavigationNodeList(navTree)
111
156
 
112
- const renderNavigation = (
113
- navTree: NavigationTree[],
114
- cascade: number = 0,
115
- indent?: boolean
116
- ) => {
117
- const nextCascade = cascade + 1;
157
+ return (
158
+ <>
159
+ {orderedNavTree.map((nav) => (
160
+ <Fragment key={nav.key}>
161
+ {nav.type === NAV_ITEM_TYPE_ITEM && (
162
+ <VerticalSingleMenuItem
163
+ key={nav.key}
164
+ currentKey={activedRoute?.key}
165
+ parentKeys={defaulExpandKey}
166
+ nav={nav}
167
+ sideCollapsed={collapsed}
168
+ direction={direction}
169
+ indent={indent}
170
+ renderAsIcon={cascade <= 0}
171
+ showIcon={cascade <= 0}
172
+ userAuthority={userAuthority}
173
+ showTitle={
174
+ nav.forceShowTitle ??
175
+ (collapsed ? cascade >= 1 : cascade <= 1)
176
+ }
177
+ t={t as TraslationFn}
178
+ onLinkClick={handleLinkClick}
179
+ linkRenderer={linkRenderer}
180
+ />
181
+ )}
182
+ {nav.type === NAV_ITEM_TYPE_COLLAPSE && (
183
+ <VerticalCollapsedMenuItem
184
+ key={nav.key}
185
+ currentKey={activedRoute?.key}
186
+ parentKeys={defaulExpandKey}
187
+ nav={nav}
188
+ sideCollapsed={collapsed}
189
+ direction={direction}
190
+ indent={nextCascade >= 2}
191
+ dotIndent={nextCascade >= 2}
192
+ renderAsIcon={nextCascade <= 1}
193
+ userAuthority={userAuthority}
194
+ t={t as TraslationFn}
195
+ onLinkClick={onMenuItemClick}
196
+ >
197
+ {nav.subMenu &&
198
+ nav.subMenu.length > 0 &&
199
+ renderNavigation(
200
+ nav.subMenu,
201
+ nextCascade,
202
+ true,
203
+ )}
204
+ </VerticalCollapsedMenuItem>
205
+ )}
206
+ {nav.type === NAV_ITEM_TYPE_TITLE && (
207
+ <MenuGroup
208
+ key={nav.key}
209
+ label={t(nav.translateKey) || nav.title}
210
+ >
211
+ {nav.subMenu &&
212
+ nav.subMenu.length > 0 &&
213
+ renderNavigation(
214
+ nav.subMenu,
215
+ cascade,
216
+ false,
217
+ )}
218
+ </MenuGroup>
219
+ )}
220
+ </Fragment>
221
+ ))}
222
+ </>
223
+ )
224
+ }
118
225
 
119
226
  return (
120
- <>
121
- {navTree.map((nav) => (
122
- <Fragment key={nav.key}>
123
- {nav.type === NAV_ITEM_TYPE_ITEM && (
124
- <VerticalSingleMenuItem
125
- key={nav.key}
126
- currentKey={activedRoute?.key}
127
- parentKeys={defaulExpandKey}
128
- nav={nav}
129
- sideCollapsed={collapsed}
130
- direction={direction}
131
- indent={indent}
132
- renderAsIcon={cascade <= 0}
133
- showIcon={cascade <= 0}
134
- userAuthority={userAuthority}
135
- showTitle={
136
- nav.forceShowTitle ??
137
- (collapsed ? cascade >= 1 : cascade <= 1)
138
- }
139
- t={t as TraslationFn}
140
- onLinkClick={handleLinkClick}
141
- linkRenderer={linkRenderer}
142
- />
143
- )}
144
- {nav.type === NAV_ITEM_TYPE_COLLAPSE && (
145
- <VerticalCollapsedMenuItem
146
- key={nav.key}
147
- currentKey={activedRoute?.key}
148
- parentKeys={defaulExpandKey}
149
- nav={nav}
150
- sideCollapsed={collapsed}
151
- direction={direction}
152
- indent={nextCascade >= 2}
153
- dotIndent={nextCascade >= 2}
154
- renderAsIcon={nextCascade <= 1}
155
- userAuthority={userAuthority}
156
- t={t as TraslationFn}
157
- onLinkClick={onMenuItemClick}
158
- >
159
- {nav.subMenu &&
160
- nav.subMenu.length > 0 &&
161
- renderNavigation(nav.subMenu, nextCascade, true)}
162
- </VerticalCollapsedMenuItem>
163
- )}
164
- {nav.type === NAV_ITEM_TYPE_TITLE && (
165
- <MenuGroup key={nav.key} label={t(nav.translateKey) || nav.title}>
166
- {nav.subMenu &&
167
- nav.subMenu.length > 0 &&
168
- renderNavigation(nav.subMenu, cascade, false)}
169
- </MenuGroup>
170
- )}
171
- </Fragment>
172
- ))}
173
- </>
174
- );
175
- };
176
-
177
- return (
178
- <Menu
179
- className="px-4 pb-4"
180
- sideCollapsed={collapsed}
181
- defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}
182
- defaultExpandedKeys={defaulExpandKey}
183
- defaultCollapseActiveKeys={
184
- activedRoute?.parentKey ? [activedRoute.parentKey] : []
185
- }
186
- >
187
- {renderNavigation(filteredNavigationTree, 0)}
188
- </Menu>
189
- );
190
- };
191
-
192
- export default VerticalMenuContent;
227
+ <Menu
228
+ className="px-4 pb-4"
229
+ sideCollapsed={collapsed}
230
+ defaultActiveKeys={activedRoute?.key ? [activedRoute.key] : []}
231
+ defaultExpandedKeys={defaulExpandKey}
232
+ defaultCollapseActiveKeys={
233
+ activedRoute?.parentKey ? [activedRoute.parentKey] : []
234
+ }
235
+ >
236
+ {renderNavigation(filteredNavigationTree, 0)}
237
+ </Menu>
238
+ )
239
+ }
240
+
241
+ export default VerticalMenuContent