@controleonline/ui-common 1.2.71 → 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 (150) 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 +3 -2
  11. package/src/api/fetch.js +1 -1
  12. package/src/api/index.js +92 -22
  13. package/src/react/components/AddImportModal.js +94 -110
  14. package/src/react/components/BottomNavigationBar.config.js +211 -231
  15. package/src/react/components/CategoryForm.js +52 -35
  16. package/src/react/components/DefaultProvider.native.js +131 -95
  17. package/src/react/components/DefaultProvider.web.js +148 -74
  18. package/src/react/components/NetworkPrinterPreviewModal.js +249 -0
  19. package/src/react/components/NetworkPrinterPreviewModal.styles.js +159 -0
  20. package/src/react/components/RuntimeInfoFooter.js +100 -36
  21. package/src/react/components/RuntimeInfoFooter.styles.js +3 -0
  22. package/src/react/components/UnifiedPaymentBar.js +7 -4
  23. package/src/react/components/UserAvatar.js +160 -0
  24. package/src/react/components/integrations/IntegrationHero/index.js +48 -0
  25. package/src/react/components/integrations/IntegrationHero/styles.js +57 -0
  26. package/src/react/components/integrations/IntegrationTabs/index.js +89 -0
  27. package/src/react/components/integrations/IntegrationTabs/styles.js +44 -0
  28. package/src/react/config/deviceConfigBootstrap.js +5 -3
  29. package/src/react/pages/Connections.js +229 -0
  30. package/src/react/pages/Connections.styles.js +222 -0
  31. package/src/react/pages/DeviceDetailPage.js +2814 -0
  32. package/src/react/pages/DeviceDetailPage.styles.js +308 -0
  33. package/src/react/pages/Devices/currentDevice.js +194 -0
  34. package/src/react/pages/Devices/deviceTypes/DeviceGroupCard.js +257 -0
  35. package/src/react/pages/Devices/deviceTypes/all.js +23 -0
  36. package/src/react/pages/Devices/deviceTypes/device.js +25 -0
  37. package/src/react/pages/Devices/deviceTypes/deviceListHelpers.js +178 -0
  38. package/src/react/pages/Devices/deviceTypes/display.js +26 -0
  39. package/src/react/pages/Devices/deviceTypes/index.js +145 -0
  40. package/src/react/pages/Devices/deviceTypes/ipCamera.js +35 -0
  41. package/src/react/pages/Devices/deviceTypes/pdv.js +88 -0
  42. package/src/react/pages/Devices/deviceTypes/printer.js +37 -0
  43. package/src/react/pages/Devices/deviceTypes/shared.js +453 -0
  44. package/src/react/pages/Devices/deviceTypes/useDeviceNetworkConnectivity.js +145 -0
  45. package/src/react/pages/Devices.js +183 -0
  46. package/src/react/pages/Devices.styles.js +353 -0
  47. package/src/react/pages/Food99IntegrationPage/components/Food99CatalogTab.js +219 -0
  48. package/src/react/pages/Food99IntegrationPage/components/Food99OverviewTab.js +134 -0
  49. package/src/react/pages/Food99IntegrationPage/components/Food99PreviewModal.js +173 -0
  50. package/src/react/pages/Food99IntegrationPage/components/Food99ProductCard.js +1 -0
  51. package/src/react/pages/Food99IntegrationPage/components/Food99QuickWalletModal.js +181 -0
  52. package/src/react/pages/Food99IntegrationPage/components/Food99SettingsTab.js +306 -0
  53. package/src/react/pages/Food99IntegrationPage/components/Food99StoreTab.js +417 -0
  54. package/src/react/pages/Food99IntegrationPage/index.js +1530 -0
  55. package/src/react/pages/Food99IntegrationPage/styles.js +792 -0
  56. package/src/react/pages/Food99IntegrationPage/utils.js +155 -0
  57. package/src/react/pages/Food99IntegrationPage.js +1 -0
  58. package/src/react/pages/Food99IntegrationPage.styles.js +1 -0
  59. package/src/react/pages/GenericLogPage.js +42 -167
  60. package/src/react/pages/IFoodIntegrationPage/components/IFoodCatalogTab.js +8 -0
  61. package/src/react/pages/IFoodIntegrationPage/components/IFoodOperationsTab.js +420 -0
  62. package/src/react/pages/IFoodIntegrationPage/components/IFoodOverviewTab.js +118 -0
  63. package/src/react/pages/IFoodIntegrationPage/components/IFoodPreviewModal.js +103 -0
  64. package/src/react/pages/IFoodIntegrationPage/components/IFoodProductCard.js +1 -0
  65. package/src/react/pages/IFoodIntegrationPage/components/IFoodStoreTab.js +150 -0
  66. package/src/react/pages/IFoodIntegrationPage/index.js +1298 -0
  67. package/src/react/pages/IFoodIntegrationPage/styles.js +764 -0
  68. package/src/react/pages/IFoodIntegrationPage/utils.js +91 -0
  69. package/src/react/pages/IFoodIntegrationPage.js +1 -0
  70. package/src/react/pages/IFoodIntegrationPage.styles.js +1 -0
  71. package/src/react/pages/Imports.js +214 -166
  72. package/src/react/pages/IntegrationConfigPage.js +744 -0
  73. package/src/react/pages/IntegrationConfigPage.styles.js +269 -0
  74. package/src/react/pages/Integrations.js +299 -0
  75. package/src/react/pages/Integrations.styles.js +130 -0
  76. package/src/react/pages/ManagerOrderNotificationsPage.js +642 -0
  77. package/src/react/pages/MarketplaceIntegrationPage/components/MarketplaceProductCard.js +205 -0
  78. package/src/react/pages/MarketplaceIntegrationPage/components/RemoteMarketplaceMenuTab.js +335 -0
  79. package/src/react/pages/MarketplaceIntegrationPage/index.js +60 -0
  80. package/src/react/pages/MarketplaceIntegrationPage/utils.js +137 -0
  81. package/src/react/pages/MercadoLivreIntegrationPage.js +538 -0
  82. package/src/react/pages/PrinterDeviceDetailPage.js +1916 -0
  83. package/src/react/pages/PrinterDeviceDetailPage.styles.js +223 -0
  84. package/src/react/pages/PrinterDeviceFormPage.js +521 -0
  85. package/src/react/pages/PrinterDeviceFormPage.styles.js +159 -0
  86. package/src/react/pages/WhatsAppConnectionPage.js +459 -0
  87. package/src/react/pages/WhatsAppConnectionPage.styles.js +284 -0
  88. package/src/react/pages/integrationsCatalog.js +399 -0
  89. package/src/react/services/Cielo/Cielo.js +193 -193
  90. package/src/react/utils/categoryContexts.js +46 -0
  91. package/src/react/utils/entityDisplay.js +222 -217
  92. package/src/react/utils/fileUrl.js +39 -20
  93. package/src/react/utils/integrationPage.js +16 -0
  94. package/src/react/utils/runtimeFooter.js +40 -22
  95. package/src/react/utils/runtimeLanguage.js +50 -9
  96. package/src/react/utils/runtimeMenu.js +191 -131
  97. package/src/react/utils/runtimeZoom.js +43 -0
  98. package/src/react/utils/shopConfig.js +27 -15
  99. package/src/react/utils/shopFranchises.js +126 -1
  100. package/src/react/utils/storeColumns.js +23 -4
  101. package/src/react/utils/userAvatar.js +104 -0
  102. package/src/store/categories/index.js +48 -20
  103. package/src/store/device_config/index.js +62 -21
  104. package/src/store/entity_log/index.js +22 -1
  105. package/src/store/imports/customActions.js +51 -0
  106. package/src/store/imports/index.js +89 -88
  107. package/src/store/status/index.js +11 -11
  108. package/src/store/themes/index.js +22 -0
  109. package/src/store/timezones/index.js +3 -1
  110. package/src/tests/browser/manager/connections.spec.js +143 -0
  111. package/src/tests/browser/manager/devices-current.spec.js +343 -0
  112. package/src/tests/browser/manager/mercado-livre-integration.spec.js +268 -0
  113. package/src/tests/react/api/deviceHeaders.test.js +114 -0
  114. package/src/tests/react/components/AddImportModal.test.js +166 -0
  115. package/src/tests/react/components/BottomNavigationBar.config.test.js +20 -0
  116. package/src/tests/react/components/UserAvatar.test.js +52 -0
  117. package/src/tests/react/pages/DevicePickerStyles.test.js +47 -0
  118. package/src/tests/react/pages/Devices/deviceListHelpers.test.js +39 -0
  119. package/src/tests/react/pages/DevicesCurrentDevice.test.js +198 -0
  120. package/src/tests/react/pages/connectionsHelpers.test.js +34 -0
  121. package/src/tests/react/pages/mercadoLivreIntegrationPageContract.test.mjs +16 -0
  122. package/src/tests/react/services/Cielo.test.js +190 -190
  123. package/src/tests/react/store/categoriesOrdering.test.js +26 -0
  124. package/src/tests/react/utils/appDomain.test.js +62 -0
  125. package/src/tests/react/utils/entityDisplay.test.js +2 -2
  126. package/src/tests/react/utils/fileUrl.test.js +3 -3
  127. package/src/tests/react/utils/formatter.test.mjs +33 -0
  128. package/src/tests/react/utils/runtimeFooter.test.js +29 -4
  129. package/src/tests/react/utils/runtimeLanguage.test.js +79 -9
  130. package/src/tests/react/utils/runtimeMenu.test.js +198 -134
  131. package/src/tests/react/utils/runtimeZoom.test.js +38 -0
  132. package/src/tests/react/utils/shopConfig.test.js +10 -9
  133. package/src/tests/react/utils/shopFranchises.test.js +43 -0
  134. package/src/tests/react/utils/translate.discovery.test.mjs +170 -0
  135. package/src/tests/react/utils/translate.test.helpers.mjs +152 -0
  136. package/src/tests/react/utils/translate.test.mjs +141 -349
  137. package/src/tests/react/utils/userAvatar.test.js +63 -0
  138. package/src/utils/appDomain.js +15 -4
  139. package/src/utils/formatter.js +104 -16
  140. package/src/utils/integrationConfigs.js +80 -80
  141. package/src/utils/translate.js +222 -438
  142. package/src/utils/translateDiscovery.js +96 -0
  143. package/src/utils/translateNormalize.js +33 -0
  144. package/src/utils/translatePending.js +92 -0
  145. package/src/utils/translateStorage.js +142 -0
  146. package/.github/agents/developer.agent.md +0 -30
  147. package/.github/agents/devops.agent.md +0 -30
  148. package/.github/agents/qa.agent.md +0 -30
  149. package/.github/agents/security.agent.md +0 -30
  150. package/.github/workflows/npmjs.yml +0 -35
@@ -1,88 +1,89 @@
1
- import * as actions from "@controleonline/ui-default/src/store/default/actions";
2
- import * as getters from "@controleonline/ui-default/src/store/default/getters";
3
- import mutations from "@controleonline/ui-default/src/store/default/mutations";
4
-
5
- export default {
6
- namespaced: true,
7
- state: {
8
- item: {},
9
- items: [],
10
- resourceEndpoint: "imports",
11
- isLoading: false,
12
- error: "",
13
-
14
- totalItems: 0, messages: [], message: {},
15
-
16
- summary: {},
17
- filters: {},
18
- columns: [
19
- {
20
- editable: false,
21
- isIdentity: true,
22
- sortable: true,
23
- name: "id",
24
- align: "left",
25
- label: "id",
26
- sum: false,
27
- format: function (value) {
28
- return "#" + value;
29
- },
30
- },
31
- {
32
- externalFilter: false,
33
- sortable: true,
34
- name: "field_name",
35
- align: "left",
36
- label: "field_name",
37
- sum: false,
38
- format: function (value) {
39
- return value;
40
- },
41
- },
42
- {
43
- externalFilter: false,
44
- sortable: true,
45
- name: "field_type",
46
- align: "left",
47
- label: "field_type",
48
- sum: false,
49
- list: [
50
- { value: "text", label: "text" },
51
- { value: "select", label: "select" },
52
- { value: "date-range", label: "date-range" },
53
- ],
54
- format: function (value) {
55
- return value;
56
- },
57
- },
58
- {
59
- externalFilter: false,
60
- sortable: true,
61
- name: "required",
62
- align: "left",
63
- label: "required",
64
- sum: false,
65
- format: function (value) {
66
- return value;
67
- },
68
- saveFormat: function (value) {
69
- return false;
70
- },
71
- },
72
- {
73
- externalFilter: false,
74
- sortable: true,
75
- name: "field_configs",
76
- align: "left",
77
- label: "field_configs",
78
- sum: false,
79
- format: function (value) {
80
- return value;
81
- },
82
- },
83
- ],
84
- },
85
- actions: actions,
86
- getters,
87
- mutations,
88
- };
1
+ import * as actions from "@controleonline/ui-default/src/store/default/actions";
2
+ import * as getters from "@controleonline/ui-default/src/store/default/getters";
3
+ import mutations from "@controleonline/ui-default/src/store/default/mutations";
4
+ import * as customActions from './customActions';
5
+
6
+ export default {
7
+ namespaced: true,
8
+ state: {
9
+ item: {},
10
+ items: [],
11
+ resourceEndpoint: "imports",
12
+ isLoading: false,
13
+ error: "",
14
+
15
+ totalItems: 0, messages: [], message: {},
16
+
17
+ summary: {},
18
+ filters: {},
19
+ columns: [
20
+ {
21
+ editable: false,
22
+ isIdentity: true,
23
+ sortable: true,
24
+ name: "id",
25
+ align: "left",
26
+ label: "id",
27
+ sum: false,
28
+ format: function (value) {
29
+ return "#" + value;
30
+ },
31
+ },
32
+ {
33
+ externalFilter: false,
34
+ sortable: true,
35
+ name: "field_name",
36
+ align: "left",
37
+ label: "field_name",
38
+ sum: false,
39
+ format: function (value) {
40
+ return value;
41
+ },
42
+ },
43
+ {
44
+ externalFilter: false,
45
+ sortable: true,
46
+ name: "field_type",
47
+ align: "left",
48
+ label: "field_type",
49
+ sum: false,
50
+ list: [
51
+ { value: "text", label: "text" },
52
+ { value: "select", label: "select" },
53
+ { value: "date-range", label: "date-range" },
54
+ ],
55
+ format: function (value) {
56
+ return value;
57
+ },
58
+ },
59
+ {
60
+ externalFilter: false,
61
+ sortable: true,
62
+ name: "required",
63
+ align: "left",
64
+ label: "required",
65
+ sum: false,
66
+ format: function (value) {
67
+ return value;
68
+ },
69
+ saveFormat: function (value) {
70
+ return false;
71
+ },
72
+ },
73
+ {
74
+ externalFilter: false,
75
+ sortable: true,
76
+ name: "field_configs",
77
+ align: "left",
78
+ label: "field_configs",
79
+ sum: false,
80
+ format: function (value) {
81
+ return value;
82
+ },
83
+ },
84
+ ],
85
+ },
86
+ actions: { ...actions, ...customActions },
87
+ getters,
88
+ mutations,
89
+ };
@@ -38,19 +38,19 @@ export default {
38
38
  return value;
39
39
  },
40
40
  },
41
- {
42
- sortable: true,
43
- name: "color",
44
- align: "left",
45
- label: "color",
46
- inputType: "color",
47
- format: function (value) {
48
- return value;
49
- },
50
- },
51
41
  {
52
42
  sortable: true,
53
- name: "realStatus",
43
+ name: "color",
44
+ align: "left",
45
+ label: "color",
46
+ inputType: "color",
47
+ format: function (value) {
48
+ return value;
49
+ },
50
+ },
51
+ {
52
+ sortable: true,
53
+ name: "realStatus",
54
54
  align: "left",
55
55
  label: "realStatus",
56
56
  format: function (value) {
@@ -0,0 +1,22 @@
1
+ import * as actions from '@controleonline/ui-default/src/store/default/actions';
2
+ import * as getters from '@controleonline/ui-default/src/store/default/getters';
3
+ import mutations from '@controleonline/ui-default/src/store/default/mutations';
4
+
5
+ export default {
6
+ namespaced: true,
7
+ state: {
8
+ item: {},
9
+ items: [],
10
+ resourceEndpoint: 'themes',
11
+ isLoading: false,
12
+ isSaving: false,
13
+ error: '',
14
+ totalItems: 0,
15
+ summary: {},
16
+ filters: {},
17
+ columns: [],
18
+ },
19
+ actions,
20
+ getters,
21
+ mutations,
22
+ };
@@ -14,7 +14,9 @@ export default {
14
14
  messages: [],
15
15
  message: {},
16
16
  summary: {},
17
- filters: {},
17
+ filters: {
18
+ enabled: true,
19
+ },
18
20
  columns: [
19
21
  {
20
22
  isIdentity: true,
@@ -0,0 +1,143 @@
1
+ const {expect, test} = require('playwright/test');
2
+ const packageJson = require('../../../../../../../package.json');
3
+ const {API_ORIGIN} = require('../../../../../../../src/tests/browser/apiOrigin');
4
+
5
+ const APP_VERSION = packageJson?.version || '1.0.0';
6
+
7
+ const CORS_HEADERS = {
8
+ 'access-control-allow-origin': '*',
9
+ 'access-control-allow-headers':
10
+ 'API-TOKEN, APP-DOMAIN, DEVICE, ACCEPT, CONTENT-TYPE, X-Requested-With',
11
+ 'access-control-allow-methods': 'GET,POST,PUT,PATCH,DELETE,OPTIONS',
12
+ };
13
+
14
+ const jsonHeaders = () => ({
15
+ ...CORS_HEADERS,
16
+ 'content-type': 'application/ld+json; charset=utf-8',
17
+ });
18
+
19
+ const collection = member => ({
20
+ member,
21
+ 'hydra:member': member,
22
+ totalItems: member.length,
23
+ 'hydra:totalItems': member.length,
24
+ summary: {},
25
+ });
26
+
27
+ const mockConnectionsApi = async page => {
28
+ const company = {
29
+ id: 3,
30
+ name: 'Teste',
31
+ alias: 'TESTE',
32
+ panel_enabled: true,
33
+ enabled: true,
34
+ commercial_enabled: true,
35
+ theme: {colors: {primary: '#0EA5E9', success: '#10b981'}},
36
+ };
37
+
38
+ const connections = [
39
+ {
40
+ id: 21,
41
+ name: 'Atendimento',
42
+ phone: {ddd: '11', phone: '988887777'},
43
+ type: 'crm',
44
+ channel: 'whatsapp',
45
+ status: {status: 'connected'},
46
+ },
47
+ {
48
+ id: 22,
49
+ name: 'Suporte',
50
+ phone: {ddd: '21', phone: '977776666'},
51
+ type: 'support',
52
+ channel: 'whatsapp',
53
+ status: {status: 'pending'},
54
+ },
55
+ ];
56
+
57
+ await page.route(`${API_ORIGIN}/**`, async route => {
58
+ const request = route.request();
59
+ const url = new URL(request.url());
60
+ const pathname = url.pathname.replace(/^\/+/, '');
61
+ const method = request.method().toUpperCase();
62
+
63
+ if (method === 'OPTIONS') {
64
+ return route.fulfill({status: 204, headers: CORS_HEADERS, body: ''});
65
+ }
66
+
67
+ if (pathname === 'companies' || pathname.startsWith('people/')) {
68
+ return route.fulfill({
69
+ status: 200,
70
+ headers: jsonHeaders(),
71
+ body: JSON.stringify(company),
72
+ });
73
+ }
74
+
75
+ if (pathname === 'connections' || pathname.startsWith('connections')) {
76
+ return route.fulfill({
77
+ status: 200,
78
+ headers: jsonHeaders(),
79
+ body: JSON.stringify(collection(connections)),
80
+ });
81
+ }
82
+
83
+ return route.fulfill({
84
+ status: 200,
85
+ headers: jsonHeaders(),
86
+ body: JSON.stringify(collection([])),
87
+ });
88
+ });
89
+
90
+ await page.addInitScript(
91
+ ({appVersion}) => {
92
+ const set = (k, v) => {
93
+ try {
94
+ localStorage.setItem(k, v);
95
+ } catch {}
96
+ };
97
+ set(
98
+ 'session',
99
+ JSON.stringify({
100
+ id: 7,
101
+ people: '/people/7',
102
+ api_key: 'test-api-key',
103
+ active: 1,
104
+ mycompany: 3,
105
+ roles: ['ROLE_ADMIN'],
106
+ }),
107
+ );
108
+ set('config', JSON.stringify({language: 'pt-br'}));
109
+ set('app-type', 'ERP');
110
+ set(
111
+ 'device',
112
+ JSON.stringify({
113
+ id: 'web-erp',
114
+ device: 'web-erp',
115
+ type: 'WEB',
116
+ appName: 'Browser ERP',
117
+ appVersion,
118
+ buildNumber: appVersion,
119
+ systemName: 'web',
120
+ systemVersion: 'web',
121
+ deviceType: 'web',
122
+ metadata: {},
123
+ }),
124
+ );
125
+ },
126
+ {appVersion: APP_VERSION},
127
+ );
128
+ };
129
+
130
+ test.describe('connections browser smoke', () => {
131
+ test('renders connections page with DefaultTable', async ({page}) => {
132
+ await mockConnectionsApi(page);
133
+ await page.goto('/connections-page');
134
+
135
+ await expect(page.getByText(/Conex/i).first()).toBeVisible({timeout: 15000});
136
+ await expect(page.getByText('WhatsApp').first()).toBeVisible();
137
+ await expect(page.getByText('Atendimento')).toBeVisible();
138
+ await expect(page.getByText('Suporte')).toBeVisible();
139
+ await expect(
140
+ page.getByPlaceholder(/Buscar conex/i),
141
+ ).toBeVisible();
142
+ });
143
+ });