@controleonline/ui-common 1.2.70 → 1.2.75

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 (188) hide show
  1. package/.github/actions/workers/manager/action.yml +147 -0
  2. package/.github/actions/workers/qa/action.yml +44 -0
  3. package/.github/actions/workers/security/action.yml +44 -0
  4. package/.github/actions/workers/technical-documenter/action.yml +51 -0
  5. package/.github/workflows/manager-worker.yml +168 -0
  6. package/.github/workflows/publish-npm.yml +45 -0
  7. package/.gitmodules +3 -0
  8. package/AGENTS.md +6 -0
  9. package/README.md +14 -0
  10. package/package.json +32 -28
  11. package/src/api/fetch.js +1 -1
  12. package/src/api/index.js +328 -58
  13. package/src/react/components/AddImportModal.js +95 -111
  14. package/src/react/components/AnimatedModal.js +171 -0
  15. package/src/react/components/AnimatedModal.styles.js +21 -0
  16. package/src/react/components/AppTypeSwitcher.js +164 -0
  17. package/src/react/components/AppTypeSwitcher.styles.js +109 -0
  18. package/src/react/components/BackgroundRuntimeBridge.js +5 -4
  19. package/src/react/components/BottomNavigationBar.config.js +211 -231
  20. package/src/react/components/BottomNavigationBar.js +86 -31
  21. package/src/react/components/BottomNavigationBar.styles.js +118 -110
  22. package/src/react/components/CategoryForm.js +52 -35
  23. package/src/react/components/DefaultProvider.native.js +194 -156
  24. package/src/react/components/DefaultProvider.web.js +188 -112
  25. package/src/react/components/DeliveryPushBridge.native.js +2 -2
  26. package/src/react/components/DeviceAlertSoundService.js +3 -3
  27. package/src/react/components/KioskModeBridge.js +2 -2
  28. package/src/react/components/LauncherModeBridge.js +2 -2
  29. package/src/react/components/ManagerPushBridge.native.js +2 -2
  30. package/src/react/components/NetworkPrinterPreviewModal.js +249 -0
  31. package/src/react/components/NetworkPrinterPreviewModal.styles.js +159 -0
  32. package/src/react/components/RemoteCheckoutService.js +28 -20
  33. package/src/react/components/RuntimeBottomNavigationBar.js +146 -119
  34. package/src/react/components/RuntimeInfoFooter.js +137 -45
  35. package/src/react/components/RuntimeInfoFooter.styles.js +3 -0
  36. package/src/react/components/StateStore.js +258 -0
  37. package/src/react/components/UnifiedPaymentBar.js +7 -4
  38. package/src/react/components/UserAvatar.js +160 -0
  39. package/src/react/components/WebsocketListener.native.js +11 -11
  40. package/src/react/components/integrations/IntegrationHero/index.js +48 -0
  41. package/src/react/components/integrations/IntegrationHero/styles.js +57 -0
  42. package/src/react/components/integrations/IntegrationTabs/index.js +89 -0
  43. package/src/react/components/integrations/IntegrationTabs/styles.js +44 -0
  44. package/src/react/config/deviceConfigBootstrap.js +71 -30
  45. package/src/react/css/orders.js +72 -0
  46. package/src/react/pages/Connections.js +229 -0
  47. package/src/react/pages/Connections.styles.js +222 -0
  48. package/src/react/pages/DeviceDetailPage.js +2814 -0
  49. package/src/react/pages/DeviceDetailPage.styles.js +308 -0
  50. package/src/react/pages/Devices/currentDevice.js +194 -0
  51. package/src/react/pages/Devices/deviceTypes/DeviceGroupCard.js +257 -0
  52. package/src/react/pages/Devices/deviceTypes/all.js +23 -0
  53. package/src/react/pages/Devices/deviceTypes/device.js +25 -0
  54. package/src/react/pages/Devices/deviceTypes/deviceListHelpers.js +178 -0
  55. package/src/react/pages/Devices/deviceTypes/display.js +26 -0
  56. package/src/react/pages/Devices/deviceTypes/index.js +145 -0
  57. package/src/react/pages/Devices/deviceTypes/ipCamera.js +35 -0
  58. package/src/react/pages/Devices/deviceTypes/pdv.js +88 -0
  59. package/src/react/pages/Devices/deviceTypes/printer.js +37 -0
  60. package/src/react/pages/Devices/deviceTypes/shared.js +453 -0
  61. package/src/react/pages/Devices/deviceTypes/useDeviceNetworkConnectivity.js +145 -0
  62. package/src/react/pages/Devices.js +183 -0
  63. package/src/react/pages/Devices.styles.js +353 -0
  64. package/src/react/pages/Food99IntegrationPage/components/Food99CatalogTab.js +219 -0
  65. package/src/react/pages/Food99IntegrationPage/components/Food99OverviewTab.js +134 -0
  66. package/src/react/pages/Food99IntegrationPage/components/Food99PreviewModal.js +173 -0
  67. package/src/react/pages/Food99IntegrationPage/components/Food99ProductCard.js +1 -0
  68. package/src/react/pages/Food99IntegrationPage/components/Food99QuickWalletModal.js +181 -0
  69. package/src/react/pages/Food99IntegrationPage/components/Food99SettingsTab.js +306 -0
  70. package/src/react/pages/Food99IntegrationPage/components/Food99StoreTab.js +417 -0
  71. package/src/react/pages/Food99IntegrationPage/index.js +1530 -0
  72. package/src/react/pages/Food99IntegrationPage/styles.js +792 -0
  73. package/src/react/pages/Food99IntegrationPage/utils.js +155 -0
  74. package/src/react/pages/Food99IntegrationPage.js +1 -0
  75. package/src/react/pages/Food99IntegrationPage.styles.js +1 -0
  76. package/src/react/pages/GenericLogPage.js +42 -167
  77. package/src/react/pages/IFoodIntegrationPage/components/IFoodCatalogTab.js +8 -0
  78. package/src/react/pages/IFoodIntegrationPage/components/IFoodOperationsTab.js +420 -0
  79. package/src/react/pages/IFoodIntegrationPage/components/IFoodOverviewTab.js +118 -0
  80. package/src/react/pages/IFoodIntegrationPage/components/IFoodPreviewModal.js +103 -0
  81. package/src/react/pages/IFoodIntegrationPage/components/IFoodProductCard.js +1 -0
  82. package/src/react/pages/IFoodIntegrationPage/components/IFoodStoreTab.js +150 -0
  83. package/src/react/pages/IFoodIntegrationPage/index.js +1298 -0
  84. package/src/react/pages/IFoodIntegrationPage/styles.js +764 -0
  85. package/src/react/pages/IFoodIntegrationPage/utils.js +91 -0
  86. package/src/react/pages/IFoodIntegrationPage.js +1 -0
  87. package/src/react/pages/IFoodIntegrationPage.styles.js +1 -0
  88. package/src/react/pages/Imports.js +214 -166
  89. package/src/react/pages/IntegrationConfigPage.js +744 -0
  90. package/src/react/pages/IntegrationConfigPage.styles.js +269 -0
  91. package/src/react/pages/Integrations.js +299 -0
  92. package/src/react/pages/Integrations.styles.js +130 -0
  93. package/src/react/pages/ManagerOrderNotificationsPage.js +642 -0
  94. package/src/react/pages/MarketplaceIntegrationPage/components/MarketplaceProductCard.js +205 -0
  95. package/src/react/pages/MarketplaceIntegrationPage/components/RemoteMarketplaceMenuTab.js +335 -0
  96. package/src/react/pages/MarketplaceIntegrationPage/index.js +60 -0
  97. package/src/react/pages/MarketplaceIntegrationPage/utils.js +137 -0
  98. package/src/react/pages/MercadoLivreIntegrationPage.js +538 -0
  99. package/src/react/pages/PrinterDeviceDetailPage.js +1916 -0
  100. package/src/react/pages/PrinterDeviceDetailPage.styles.js +223 -0
  101. package/src/react/pages/PrinterDeviceFormPage.js +521 -0
  102. package/src/react/pages/PrinterDeviceFormPage.styles.js +159 -0
  103. package/src/react/pages/SettingsPage/PaymentTypesByWalletTab.js +484 -454
  104. package/src/react/pages/SettingsPage/index.js +1266 -1167
  105. package/src/react/pages/WhatsAppConnectionPage.js +459 -0
  106. package/src/react/pages/WhatsAppConnectionPage.styles.js +284 -0
  107. package/src/react/pages/integrationsCatalog.js +399 -0
  108. package/src/react/print/providers/local.js +1 -1
  109. package/src/react/router/publicRoutes.js +25 -0
  110. package/src/react/services/Cielo/Checkout.js +39 -0
  111. package/src/react/services/Cielo/Cielo.js +193 -0
  112. package/src/react/services/Cielo/Print.js +7 -0
  113. package/src/react/services/InfinitePay/Checkout.js +33 -0
  114. package/src/react/services/InfinitePay/InfinitePay.js +24 -0
  115. package/src/react/{utils → services}/paymentGatewayExecution.js +91 -91
  116. package/src/react/styles/global.js +115 -0
  117. package/src/react/utils/categoryContexts.js +46 -0
  118. package/src/react/utils/entityDisplay.js +222 -217
  119. package/src/react/utils/fileUrl.js +201 -16
  120. package/src/react/utils/integrationPage.js +16 -0
  121. package/src/react/utils/menuNavigation.js +31 -0
  122. package/src/react/utils/orderIdentity.js +277 -0
  123. package/src/react/utils/remotePayment.js +115 -61
  124. package/src/react/utils/runtimeFooter.js +40 -22
  125. package/src/react/utils/runtimeLanguage.js +50 -9
  126. package/src/react/utils/runtimeMenu.js +190 -98
  127. package/src/react/utils/runtimeZoom.js +43 -0
  128. package/src/react/utils/shopConfig.js +72 -34
  129. package/src/react/utils/shopFranchises.js +182 -23
  130. package/src/react/utils/socketRuntimePipeline.js +14 -14
  131. package/src/react/utils/storeColumns.js +23 -4
  132. package/src/react/utils/userAvatar.js +104 -0
  133. package/src/store/categories/index.js +48 -20
  134. package/src/store/configs/index.js +2 -2
  135. package/src/store/device_config/index.js +62 -21
  136. package/src/store/entity_log/index.js +22 -1
  137. package/src/store/imports/customActions.js +51 -0
  138. package/src/store/imports/index.js +89 -88
  139. package/src/store/status/index.js +11 -11
  140. package/src/store/themes/index.js +22 -0
  141. package/src/store/timezones/index.js +3 -1
  142. package/src/tests/browser/manager/connections.spec.js +143 -0
  143. package/src/tests/browser/manager/devices-current.spec.js +343 -0
  144. package/src/tests/browser/manager/mercado-livre-integration.spec.js +268 -0
  145. package/src/tests/react/api/deviceHeaders.test.js +114 -0
  146. package/src/tests/react/api/loadSmokeIndex.test.js +75 -0
  147. package/src/tests/react/components/AddImportModal.test.js +166 -0
  148. package/src/tests/react/components/BottomNavigationBar.config.test.js +20 -0
  149. package/src/tests/react/components/UserAvatar.test.js +52 -0
  150. package/src/tests/react/config/deviceConfigBootstrap.test.js +47 -0
  151. package/src/tests/react/pages/DevicePickerStyles.test.js +47 -0
  152. package/src/tests/react/pages/Devices/deviceListHelpers.test.js +39 -0
  153. package/src/tests/react/pages/DevicesCurrentDevice.test.js +198 -0
  154. package/src/tests/react/pages/connectionsHelpers.test.js +34 -0
  155. package/src/tests/react/pages/mercadoLivreIntegrationPageContract.test.mjs +16 -0
  156. package/src/tests/react/print/localPrintProvider.test.js +1 -1
  157. package/src/tests/react/services/Cielo.test.js +190 -0
  158. package/src/tests/react/store/categoriesOrdering.test.js +26 -0
  159. package/src/tests/react/utils/appDomain.test.js +62 -0
  160. package/src/tests/react/utils/entityDisplay.test.js +2 -2
  161. package/src/tests/react/utils/fileUrl.test.js +62 -0
  162. package/src/tests/react/utils/formatter.test.mjs +33 -0
  163. package/src/tests/react/utils/importStatus.test.js +2 -2
  164. package/src/tests/react/utils/orderIdentity.test.js +139 -0
  165. package/src/tests/react/utils/remotePayment.test.js +62 -0
  166. package/src/tests/react/utils/runtimeFooter.test.js +32 -9
  167. package/src/tests/react/utils/runtimeLanguage.test.js +80 -10
  168. package/src/tests/react/utils/runtimeMenu.test.js +195 -111
  169. package/src/tests/react/utils/runtimeZoom.test.js +38 -0
  170. package/src/tests/react/utils/shopConfig.test.js +75 -0
  171. package/src/tests/react/utils/shopFranchises.test.js +122 -12
  172. package/src/tests/react/utils/translate.discovery.test.mjs +170 -0
  173. package/src/tests/react/utils/translate.test.helpers.mjs +152 -0
  174. package/src/tests/react/utils/translate.test.mjs +252 -396
  175. package/src/tests/react/utils/userAvatar.test.js +63 -0
  176. package/src/utils/appDomain.js +15 -4
  177. package/src/utils/formatter.js +122 -16
  178. package/src/utils/integrationConfigs.js +1 -0
  179. package/src/utils/translate.js +277 -398
  180. package/src/utils/translateDiscovery.js +96 -0
  181. package/src/utils/translateNormalize.js +33 -0
  182. package/src/utils/translatePending.js +92 -0
  183. package/src/utils/translateStorage.js +142 -0
  184. package/.github/agents/developer.agent.md +0 -30
  185. package/.github/agents/devops.agent.md +0 -30
  186. package/.github/agents/qa.agent.md +0 -30
  187. package/.github/agents/security.agent.md +0 -30
  188. package/.github/workflows/npmjs.yml +0 -35
@@ -1,171 +1,171 @@
1
- const translateLabel = (translate, descriptor) => {
2
- if (!descriptor || typeof descriptor === 'string') {
3
- return descriptor || '';
4
- }
5
-
6
- const translated = translate?.(
7
- descriptor.store,
8
- descriptor.type,
9
- descriptor.key,
10
- );
11
-
12
- return translated || descriptor.fallback || descriptor.key || '';
13
- };
14
-
15
- export const resolveBottomNavigationItems = (items = [], translate) =>
16
- (Array.isArray(items) ? items : []).map(item => ({
17
- ...item,
18
- label: translateLabel(translate, item?.label),
19
- }));
20
-
21
- export const resolveBottomNavigationRoute = (routeAliases = {}, routeName) =>
22
- routeAliases?.[routeName] || routeName || '';
23
-
24
- export const BOTTOM_NAVIGATION_PRESETS = {
25
- crmToolbar: {
26
- items: [
27
- {
28
- route: 'HomePage',
29
- icon: 'home',
30
- label: {
31
- store: 'users',
32
- type: 'label',
33
- key: 'home',
34
- fallback: 'Home',
35
- },
36
- },
37
- {
38
- route: 'CrmIndex',
39
- icon: 'target',
40
- label: {
41
- store: 'users',
42
- type: 'label',
43
- key: 'crm',
44
- fallback: 'CRM',
45
- },
46
- },
47
- {
48
- route: 'ClientsIndex',
49
- icon: 'users',
50
- label: {
51
- store: 'users',
52
- type: 'label',
53
- key: 'clients',
54
- fallback: 'Clients',
55
- },
56
- },
57
- {
58
- route: 'ProfilePage',
59
- icon: 'user',
60
- label: {
61
- store: 'users',
62
- type: 'label',
63
- key: 'profile',
64
- fallback: 'Profile',
65
- },
66
- },
67
- ],
68
- routeAliases: {
69
- HomePage: 'HomePage',
70
- CrmIndex: 'CrmIndex',
71
- ContractsIndex: 'CrmIndex',
72
- ProposalsIndex: 'CrmIndex',
73
- ComissionsPage: 'CrmIndex',
74
- CrmConversation: 'CrmIndex',
75
- ContractDetails: 'CrmIndex',
76
- ClientsIndex: 'ClientsIndex',
77
- ClientDetails: 'ClientsIndex',
78
- FranchiseesIndex: 'ClientsIndex',
79
- ProfilePage: 'ProfilePage',
80
- SettingsPage: 'ProfilePage',
81
- },
82
- },
83
- managerToolbar: {
84
- items: [
85
- {
86
- route: 'HomePage',
87
- icon: 'home',
88
- label: {
89
- store: 'configs',
90
- type: 'toolbar',
91
- key: 'home',
92
- fallback: 'Home',
93
- },
94
- },
95
- {
96
- route: 'CrmIndex',
97
- icon: 'dollar-sign',
98
- label: {
99
- store: 'configs',
100
- type: 'toolbar',
101
- key: 'opportunities',
102
- fallback: 'Oportunidades',
103
- },
104
- },
105
- {
106
- route: 'ClientsIndex',
107
- icon: 'users',
108
- label: {
109
- store: 'configs',
110
- type: 'toolbar',
111
- key: 'customers',
112
- fallback: 'Clientes',
113
- },
114
- },
115
- {
116
- route: 'ProfilePage',
117
- icon: 'user',
118
- label: {
119
- store: 'configs',
120
- type: 'toolbar',
121
- key: 'profile',
122
- fallback: 'Profile',
123
- },
124
- },
125
- ],
126
- routeAliases: {
127
- HomePage: 'HomePage',
128
- CrmIndex: 'CrmIndex',
129
- ContractsIndex: 'CrmIndex',
130
- ProposalsIndex: 'CrmIndex',
131
- ComissionsPage: 'CrmIndex',
132
- CrmConversation: 'CrmIndex',
133
- ContractDetails: 'CrmIndex',
134
- ClientsIndex: 'ClientsIndex',
135
- ClientDetails: 'ClientsIndex',
136
- FranchiseesIndex: 'ClientsIndex',
137
- ProfilePage: 'ProfilePage',
138
- SettingsPage: 'ProfilePage',
139
- OrderHistoryPage: 'CrmIndex',
140
- InventoriesPage: 'CrmIndex',
141
- ProductsPage: 'CrmIndex',
142
- },
143
- },
144
- managerDock: {
145
- items: [
146
- {route: 'HomePage', icon: 'home', label: 'Home'},
147
- {route: 'CrmIndex', icon: 'dollar-sign', label: 'Oportunidades'},
148
- {route: 'ClientsIndex', icon: 'users', label: 'Clientes'},
149
- {route: 'ProfilePage', icon: 'user', label: 'Perfil'},
150
- ],
151
- routeAliases: {
152
- ClientDetails: 'ClientsIndex',
153
- EmployeesIndex: 'ClientsIndex',
154
- FranchiseesIndex: 'ClientsIndex',
155
- },
156
- },
157
- deliveryDock: {
158
- items: [
159
- {route: 'HomePage', icon: 'home', label: 'Home'},
160
- {route: 'DeliveryOrdersPage', icon: 'shopping-bag', label: 'Pedidos'},
161
- {
162
- route: 'DeliveryReceivablesPage',
163
- icon: 'dollar-sign',
164
- label: 'Recebiveis',
165
- },
166
- {route: 'DeliveryCompaniesPage', icon: 'users', label: 'Empresas'},
167
- {route: 'DeliveryRateTablesPage', icon: 'list', label: 'Tabelas'},
168
- ],
1
+ const translateLabel = (translate, descriptor) => {
2
+ if (!descriptor || typeof descriptor === 'string') {
3
+ return descriptor || '';
4
+ }
5
+
6
+ const translated = translate?.(
7
+ descriptor.store,
8
+ descriptor.type,
9
+ descriptor.key,
10
+ );
11
+
12
+ return translated || descriptor.fallback || descriptor.key || '';
13
+ };
14
+
15
+ export const resolveBottomNavigationItems = (items = [], translate) =>
16
+ (Array.isArray(items) ? items : []).map(item => ({
17
+ ...item,
18
+ label: translateLabel(translate, item?.label),
19
+ }));
20
+
21
+ export const resolveBottomNavigationRoute = (routeAliases = {}, routeName) =>
22
+ routeAliases?.[routeName] || routeName || '';
23
+
24
+ export const BOTTOM_NAVIGATION_PRESETS = {
25
+ crmToolbar: {
26
+ items: [
27
+ {
28
+ route: 'HomePage',
29
+ icon: 'home',
30
+ label: {
31
+ store: 'users',
32
+ type: 'label',
33
+ key: 'home',
34
+ fallback: 'Início',
35
+ },
36
+ },
37
+ {
38
+ route: 'CrmIndex',
39
+ icon: 'target',
40
+ label: {
41
+ store: 'users',
42
+ type: 'label',
43
+ key: 'crm',
44
+ fallback: 'CRM',
45
+ },
46
+ },
47
+ {
48
+ route: 'ClientsIndex',
49
+ icon: 'users',
50
+ label: {
51
+ store: 'users',
52
+ type: 'label',
53
+ key: 'clients',
54
+ fallback: 'Clientes',
55
+ },
56
+ },
57
+ {
58
+ route: 'ProfilePage',
59
+ icon: 'user',
60
+ label: {
61
+ store: 'users',
62
+ type: 'label',
63
+ key: 'profile',
64
+ fallback: 'Perfil',
65
+ },
66
+ },
67
+ ],
68
+ routeAliases: {
69
+ HomePage: 'HomePage',
70
+ CrmIndex: 'CrmIndex',
71
+ ContractsIndex: 'CrmIndex',
72
+ ProposalsIndex: 'CrmIndex',
73
+ ComissionsPage: 'CrmIndex',
74
+ CrmConversation: 'CrmIndex',
75
+ ContractDetails: 'CrmIndex',
76
+ ClientsIndex: 'ClientsIndex',
77
+ ClientDetails: 'ClientsIndex',
78
+ FranchiseesIndex: 'ClientsIndex',
79
+ ProfilePage: 'ProfilePage',
80
+ SettingsPage: 'ProfilePage',
81
+ },
82
+ },
83
+ managerToolbar: {
84
+ items: [
85
+ {
86
+ route: 'HomePage',
87
+ icon: 'home',
88
+ label: {
89
+ store: 'configs',
90
+ type: 'toolbar',
91
+ key: 'home',
92
+ fallback: 'Início',
93
+ },
94
+ },
95
+ {
96
+ route: 'CrmIndex',
97
+ icon: 'dollar-sign',
98
+ label: {
99
+ store: 'configs',
100
+ type: 'toolbar',
101
+ key: 'opportunities',
102
+ fallback: 'Oportunidades',
103
+ },
104
+ },
105
+ {
106
+ route: 'ClientsIndex',
107
+ icon: 'users',
108
+ label: {
109
+ store: 'configs',
110
+ type: 'toolbar',
111
+ key: 'customers',
112
+ fallback: 'Clientes',
113
+ },
114
+ },
115
+ {
116
+ route: 'ProfilePage',
117
+ icon: 'user',
118
+ label: {
119
+ store: 'configs',
120
+ type: 'toolbar',
121
+ key: 'profile',
122
+ fallback: 'Perfil',
123
+ },
124
+ },
125
+ ],
126
+ routeAliases: {
127
+ HomePage: 'HomePage',
128
+ CrmIndex: 'CrmIndex',
129
+ ContractsIndex: 'CrmIndex',
130
+ ProposalsIndex: 'CrmIndex',
131
+ ComissionsPage: 'CrmIndex',
132
+ CrmConversation: 'CrmIndex',
133
+ ContractDetails: 'CrmIndex',
134
+ ClientsIndex: 'ClientsIndex',
135
+ ClientDetails: 'ClientsIndex',
136
+ FranchiseesIndex: 'ClientsIndex',
137
+ ProfilePage: 'ProfilePage',
138
+ SettingsPage: 'ProfilePage',
139
+ OrderHistoryPage: 'CrmIndex',
140
+ InventoriesPage: 'CrmIndex',
141
+ ProductsPage: 'CrmIndex',
142
+ },
143
+ },
144
+ managerDock: {
145
+ items: [
146
+ {route: 'HomePage', icon: 'home', label: 'Início'},
147
+ {route: 'CrmIndex', icon: 'dollar-sign', label: 'Oportunidades'},
148
+ {route: 'ClientsIndex', icon: 'users', label: 'Clientes'},
149
+ {route: 'ProfilePage', icon: 'user', label: 'Perfil'},
150
+ ],
151
+ routeAliases: {
152
+ ClientDetails: 'ClientsIndex',
153
+ EmployeesIndex: 'ClientsIndex',
154
+ FranchiseesIndex: 'ClientsIndex',
155
+ },
156
+ },
157
+ deliveryDock: {
158
+ items: [
159
+ {route: 'HomePage', icon: 'home', label: 'Início'},
160
+ {route: 'DeliveryOrdersPage', icon: 'shopping-bag', label: 'Pedidos'},
161
+ {
162
+ route: 'DeliveryReceivablesPage',
163
+ icon: 'dollar-sign',
164
+ label: 'Recebiveis',
165
+ },
166
+ {route: 'DeliveryCompaniesPage', icon: 'users', label: 'Empresas'},
167
+ {route: 'DeliveryRateTablesPage', icon: 'list', label: 'Tabelas'},
168
+ ],
169
169
  routeAliases: {
170
170
  OrderDetails: 'DeliveryOrdersPage',
171
171
  OrderLogisticsPage: 'DeliveryOrdersPage',
@@ -173,66 +173,46 @@ export const BOTTOM_NAVIGATION_PRESETS = {
173
173
  DeliveryVehicleSetupPage: 'DeliveryRateTablesPage',
174
174
  DeliveryRateTableFormPage: 'DeliveryRateTablesPage',
175
175
  DeliveryRateTableCompaniesPage: 'DeliveryRateTablesPage',
176
- DeliveryCourierSchedulesPage: 'DeliveryCompaniesPage',
177
- DeliveryCourierScheduleFormPage: 'DeliveryCompaniesPage',
178
- DeliveryCourierPresencePage: 'DeliveryCompaniesPage',
179
- DeliveryCourierPresenceHistoryPage: 'DeliveryCompaniesPage',
180
- },
181
- },
182
- ppcDock: {
183
- items: [
184
- {route: 'HomePage', icon: 'home', label: 'Home'},
185
- {route: 'DisplayList', icon: 'monitor', label: 'Displays'},
186
- {route: 'ProfilePage', icon: 'user', label: 'Profile'},
187
- ],
188
- routeAliases: {},
189
- },
190
- posToolbar: {
191
- items: [
192
- {
193
- route: 'HomePage',
194
- icon: 'home',
195
- label: {
196
- store: 'orders',
197
- type: 'label',
198
- key: 'home',
199
- fallback: 'Home',
200
- },
201
- },
202
- {
203
- route: 'OrderHistoryPage',
204
- icon: 'shopping-bag',
205
- label: {
206
- store: 'orders',
207
- type: 'label',
208
- key: 'orders',
209
- fallback: 'Orders',
210
- },
211
- },
212
- {
213
- route: 'CashRegisterIndex',
214
- icon: 'credit-card',
215
- label: {
216
- store: 'orders',
217
- type: 'title',
218
- key: 'cashRegister',
219
- fallback: 'Cash register',
220
- },
221
- },
222
- {
223
- route: 'ProfilePage',
224
- icon: 'user',
225
- label: {
226
- store: 'orders',
227
- type: 'label',
228
- key: 'profile',
229
- fallback: 'Profile',
230
- },
231
- },
232
- ],
233
- routeAliases: {},
234
- },
235
- };
236
-
237
- export const getBottomNavigationPreset = variant =>
238
- BOTTOM_NAVIGATION_PRESETS[variant] || BOTTOM_NAVIGATION_PRESETS.managerDock;
176
+ DeliveryCourierSchedulesPage: 'DeliveryCompaniesPage',
177
+ DeliveryCourierScheduleFormPage: 'DeliveryCompaniesPage',
178
+ DeliveryCourierPresencePage: 'DeliveryCompaniesPage',
179
+ DeliveryCourierPresenceHistoryPage: 'DeliveryCompaniesPage',
180
+ },
181
+ },
182
+ ppcDock: {
183
+ items: [
184
+ {route: 'HomePage', icon: 'home', label: 'Início'},
185
+ {route: 'DisplayList', icon: 'monitor', label: 'Displays'},
186
+ {route: 'ProfilePage', icon: 'user', label: 'Perfil'},
187
+ ],
188
+ routeAliases: {},
189
+ },
190
+ posToolbar: {
191
+ items: [
192
+ {
193
+ route: 'OrderHistoryPage',
194
+ icon: 'shopping-bag',
195
+ label: {
196
+ store: 'orders',
197
+ type: 'label',
198
+ key: 'orders',
199
+ fallback: 'Pedidos',
200
+ },
201
+ },
202
+ {
203
+ route: 'ProfilePage',
204
+ icon: 'user',
205
+ label: {
206
+ store: 'orders',
207
+ type: 'label',
208
+ key: 'profile',
209
+ fallback: 'Perfil',
210
+ },
211
+ },
212
+ ],
213
+ routeAliases: {},
214
+ },
215
+ };
216
+
217
+ export const getBottomNavigationPreset = variant =>
218
+ BOTTOM_NAVIGATION_PRESETS[variant] || BOTTOM_NAVIGATION_PRESETS.managerDock;
@@ -3,7 +3,7 @@ import {Pressable, Text, View} from 'react-native';
3
3
  import Icon from 'react-native-vector-icons/Feather';
4
4
  import {useTheme} from './DefaultProvider';
5
5
  import RuntimeInfoFooter from './RuntimeInfoFooter';
6
- import {resolveMenuRouteParams} from '@controleonline/ui-layout/src/react/utils/menuNavigation';
6
+ import {resolveMenuRouteParams} from '../utils/menuNavigation';
7
7
  import createStyles from './BottomNavigationBar.styles';
8
8
 
9
9
  const BottomNavigationBar = ({
@@ -13,40 +13,80 @@ const BottomNavigationBar = ({
13
13
  disabled = false,
14
14
  colors = {},
15
15
  testID = 'bottom-navigation',
16
+ useModernWebChromeProps = false,
16
17
  }) => {
17
18
  const theme = useTheme?.() || {};
18
19
  const runtimeFooter = theme?.runtimeFooter || null;
19
20
  const registerBottomNavigation =
20
21
  theme?.bottomChrome?.registerBottomNavigation || null;
21
- const primaryColor = colors.primary || '#1B5587';
22
- const dockBackground =
23
- colors['toolbar-background'] || colors.background || '#F8FBFF';
24
- const borderColor = colors['toolbar-border'] || colors.border || '#D1DDE9';
25
- const inactiveText =
26
- colors['toolbar-text-muted'] || colors.textSecondary || '#64748B';
27
- const activeBg = `${primaryColor}1A`;
28
- const activeBorder = `${primaryColor}55`;
22
+ const activeBackground = colors.navigationActiveBackground;
23
+ const activeBorder = colors.navigationActiveBorder;
24
+ const activeIcon = colors.navigationActiveIcon;
25
+ const activeText = colors.navigationActiveText;
26
+ const dockBackground = colors.navigationBackground;
27
+ const dockBorder = colors.navigationBorder;
28
+ const dockShadow = colors.navigationShadow;
29
+ const inactiveIcon = colors.navigationIcon;
30
+ const inactiveText = colors.navigationText;
29
31
 
30
32
  const styles = useMemo(
31
33
  () =>
32
34
  createStyles({
33
- primaryColor,
35
+ activeBackground,
34
36
  dockBackground,
35
- borderColor,
36
- inactiveText,
37
- activeBg,
37
+ dockBorder,
38
+ dockShadow,
38
39
  activeBorder,
40
+ useModernWebChromeProps,
39
41
  }),
40
42
  [
41
- activeBg,
43
+ activeBackground,
42
44
  activeBorder,
43
- borderColor,
44
45
  dockBackground,
45
- inactiveText,
46
- primaryColor,
46
+ dockBorder,
47
+ dockShadow,
48
+ useModernWebChromeProps,
47
49
  ],
48
50
  );
49
51
 
52
+ const resolveItemColors = ({isActive, isDisabled}) => {
53
+ if (isActive) {
54
+ return {
55
+ iconColor: activeIcon,
56
+ textColor: activeText,
57
+ };
58
+ }
59
+
60
+ if (isDisabled) {
61
+ return {
62
+ iconColor: colors.navigationDisabledIcon,
63
+ textColor: colors.navigationDisabledText,
64
+ };
65
+ }
66
+
67
+ return {
68
+ iconColor: inactiveIcon,
69
+ textColor: inactiveText,
70
+ };
71
+ };
72
+
73
+ const resolveItemStateStyles = ({isActive, isDisabled}) => [
74
+ styles.item,
75
+ isActive && styles.itemActive,
76
+ isDisabled && styles.itemDisabled,
77
+ isDisabled && {
78
+ backgroundColor: colors.navigationDisabledBackground,
79
+ borderColor: colors.navigationDisabledBorder,
80
+ },
81
+ ];
82
+
83
+ const resolvePressedStyles = ({pressed, isDisabled}) =>
84
+ pressed && !isDisabled
85
+ ? [
86
+ styles.itemPressed,
87
+ ]
88
+ : [];
89
+
50
90
  useLayoutEffect(() => {
51
91
  if (typeof registerBottomNavigation !== 'function') {
52
92
  return undefined;
@@ -69,15 +109,32 @@ const BottomNavigationBar = ({
69
109
  }
70
110
  };
71
111
 
112
+ const hostProps = useModernWebChromeProps
113
+ ? {}
114
+ : {pointerEvents: 'box-none'};
115
+ const hostStyle = useModernWebChromeProps
116
+ ? [styles.host, styles.hostPointerEventsBoxNone]
117
+ : styles.host;
118
+ const footerProps = {
119
+ appVersion: runtimeFooter?.appVersion,
120
+ colors: runtimeFooter?.colors || {},
121
+ defaultCompany: runtimeFooter?.defaultCompany,
122
+ device: runtimeFooter?.device,
123
+ useModernWebChromeProps,
124
+ };
125
+
72
126
  return (
73
- <View pointerEvents="box-none" style={styles.host}>
127
+ <View {...hostProps} style={hostStyle}>
74
128
  <View style={styles.stack}>
75
129
  <View style={styles.dock} testID={testID}>
76
130
  {routeItems.map(item => {
77
131
  const isActive = effectiveActiveRoute === item.route;
78
132
  const isDisabled = disabled || item.disabled;
79
133
  const iconSize = item.iconSize || 18;
80
- const iconColor = isActive ? primaryColor : inactiveText;
134
+ const {iconColor, textColor} = resolveItemColors({
135
+ isActive,
136
+ isDisabled,
137
+ });
81
138
 
82
139
  return (
83
140
  <Pressable
@@ -86,17 +143,20 @@ const BottomNavigationBar = ({
86
143
  disabled={isDisabled}
87
144
  onPress={() => navigateTo(item)}
88
145
  style={({pressed}) => [
89
- styles.item,
90
- isActive && styles.itemActive,
91
- pressed && !isDisabled && styles.itemPressed,
92
- isDisabled && styles.itemDisabled,
146
+ ...resolveItemStateStyles({isActive, isDisabled}),
147
+ ...resolvePressedStyles({pressed, isDisabled}),
93
148
  ]}>
94
- <View style={[styles.iconWrap, isActive && styles.iconWrapActive]}>
149
+ <View style={styles.iconWrap}>
95
150
  <Icon color={iconColor} name={item.icon} size={iconSize} />
96
151
  </View>
97
152
  <Text
98
153
  numberOfLines={1}
99
- style={[styles.itemLabel, isActive && styles.itemLabelActive]}>
154
+ style={[
155
+ styles.itemLabel,
156
+ {
157
+ color: textColor,
158
+ },
159
+ ]}>
100
160
  {item.label}
101
161
  </Text>
102
162
  </Pressable>
@@ -105,12 +165,7 @@ const BottomNavigationBar = ({
105
165
  </View>
106
166
 
107
167
  {runtimeFooter && (
108
- <RuntimeInfoFooter
109
- appVersion={runtimeFooter.appVersion}
110
- colors={runtimeFooter.colors || colors}
111
- defaultCompany={runtimeFooter.defaultCompany}
112
- device={runtimeFooter.device}
113
- />
168
+ <RuntimeInfoFooter {...footerProps} />
114
169
  )}
115
170
  </View>
116
171
  </View>