@controleonline/ui-common 1.2.88 → 1.2.90
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/package.json +1 -1
- package/src/api/localDB.js +86 -131
- package/src/react/components/CopyDeviceConfigModal.js +7 -4
- package/src/react/config/deviceConfigBootstrap.js +71 -233
- package/src/react/config/deviceConfigValues.js +238 -0
- package/src/react/pages/Connections.js +5 -7
- package/src/react/pages/Devices/detail/DeviceChargePermissionSection.js +32 -0
- package/src/react/pages/Devices/detail/DeviceDetailPdvConfigSection.js +7 -0
- package/src/react/pages/Devices/detail/DeviceDetailScreen.js +5 -1
- package/src/react/pages/Devices/detail/deviceDetailHelpers.js +2 -11
- package/src/react/pages/MercadoLivreIntegrationPage.js +5 -75
- package/src/react/pages/mercadoLivreIntegrationHelpers.js +79 -0
- package/src/react/utils/confirmAction.js +12 -0
- package/src/tests/browser/manager/bottom-navigation-role-toolbar.spec.js +14 -0
- package/src/tests/browser/manager/connections.spec.js +18 -0
- package/src/tests/browser/manager/device-detail-alias-save.spec.js +2 -0
- package/src/tests/browser/manager/device-detail-copy-config.spec.js +6 -0
- package/src/tests/browser/manager/device-detail-pdv-current-company.spec.js +2 -0
- package/src/tests/browser/manager/devices-current.spec.js +345 -343
- package/src/tests/browser/manager/devices-type-filters.spec.js +2 -0
- package/src/tests/browser/manager/managerSession.fixture.js +28 -0
- package/src/tests/react/pages/DeviceChargePermissionSection.test.js +42 -0
package/package.json
CHANGED
package/src/api/localDB.js
CHANGED
|
@@ -1,131 +1,86 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const DB_NAME =
|
|
4
|
-
|
|
5
|
-
export default class localDB {
|
|
6
|
-
constructor(state) {
|
|
7
|
-
this.state = state;
|
|
8
|
-
|
|
9
|
-
this.
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async initDB() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const db = await this.checkAndGetDB();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
await
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const db = await this.checkAndGetDB();
|
|
90
|
-
return db.get(this.state.resourceEndpoint, id);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
async saveItems(items) {
|
|
94
|
-
const db = await this.checkAndGetDB();
|
|
95
|
-
const tx = db.transaction(this.state.resourceEndpoint, "readwrite");
|
|
96
|
-
const store = tx.objectStore(this.state.resourceEndpoint);
|
|
97
|
-
await Promise.all(items.map((item) => store.put(item)));
|
|
98
|
-
await tx.done;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async saveItem(item) {
|
|
102
|
-
const db = await this.checkAndGetDB();
|
|
103
|
-
return db.put(this.state.resourceEndpoint, item);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async getItemsByFilters() {
|
|
107
|
-
if (!(await this.storeExists())) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const db = await this.checkAndGetDB();
|
|
111
|
-
if (Object.keys(this.state.filters).length === 0) {
|
|
112
|
-
return this.getAll();
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const filterPromises = Object.entries(this.state.filters).map(
|
|
116
|
-
async ([key, value]) => {
|
|
117
|
-
const column = this.state.columns.find((col) => col.name === key);
|
|
118
|
-
if (column && (column.sortable || column.externalFilter === false)) {
|
|
119
|
-
return this.getItemsByColumn(key, value);
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
const filterResults = await Promise.all(filterPromises);
|
|
126
|
-
return filterResults.reduce((acc, curr) => {
|
|
127
|
-
if (!acc || acc.length === 0) return curr;
|
|
128
|
-
return acc.filter((item) => curr.some((result) => result.id === item.id));
|
|
129
|
-
}, []);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
1
|
+
import {openDB} from 'idb';
|
|
2
|
+
|
|
3
|
+
const DB_NAME = 'ControleOnline';
|
|
4
|
+
|
|
5
|
+
export default class localDB {
|
|
6
|
+
constructor(state) {
|
|
7
|
+
this.state = state;
|
|
8
|
+
this.db = null;
|
|
9
|
+
this.opening = null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async initDB() {
|
|
13
|
+
const endpoint = this.state.resourceEndpoint;
|
|
14
|
+
const upgrade = db => {
|
|
15
|
+
if (db.objectStoreNames.contains(endpoint)) return;
|
|
16
|
+
const store = db.createObjectStore(endpoint, {keyPath: 'id'});
|
|
17
|
+
(this.state.columns || []).forEach(column => {
|
|
18
|
+
if (column.name && (column.sortable || column.externalFilter === false)) {
|
|
19
|
+
store.createIndex(column.name, column.name, {unique: false});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const blocking = () => { this.db?.close(); this.db = null; };
|
|
24
|
+
let db = await openDB(DB_NAME, undefined, {upgrade, blocking});
|
|
25
|
+
if (!db.objectStoreNames.contains(endpoint)) {
|
|
26
|
+
const version = db.version + 1;
|
|
27
|
+
db.close();
|
|
28
|
+
db = await openDB(DB_NAME, version, {upgrade, blocking});
|
|
29
|
+
}
|
|
30
|
+
this.db = db;
|
|
31
|
+
return db;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getCurrentVersion() {
|
|
35
|
+
return (await this.checkAndGetDB()).version;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
checkAndGetDB() {
|
|
39
|
+
if (this.db) return Promise.resolve(this.db);
|
|
40
|
+
if (!this.opening) {
|
|
41
|
+
this.opening = this.initDB().finally(() => { this.opening = null; });
|
|
42
|
+
}
|
|
43
|
+
return this.opening;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async storeExists() {
|
|
47
|
+
return (await this.checkAndGetDB()).objectStoreNames.contains(this.state.resourceEndpoint);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async getAll() {
|
|
51
|
+
return (await this.checkAndGetDB()).getAll(this.state.resourceEndpoint);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async getItemsByColumn(columnName, value) {
|
|
55
|
+
const db = await this.checkAndGetDB();
|
|
56
|
+
const tx = db.transaction(this.state.resourceEndpoint, 'readonly');
|
|
57
|
+
if (!tx.store.indexNames.contains(columnName)) return [];
|
|
58
|
+
const items = await tx.store.index(columnName).getAll(value);
|
|
59
|
+
await tx.done;
|
|
60
|
+
return items;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async get(id) {
|
|
64
|
+
return (await this.checkAndGetDB()).get(this.state.resourceEndpoint, id);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async saveItems(items) {
|
|
68
|
+
const db = await this.checkAndGetDB();
|
|
69
|
+
const tx = db.transaction(this.state.resourceEndpoint, 'readwrite');
|
|
70
|
+
await Promise.all(items.map(item => tx.store.put(item)));
|
|
71
|
+
await tx.done;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async saveItem(item) {
|
|
75
|
+
return (await this.checkAndGetDB()).put(this.state.resourceEndpoint, item);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async getItemsByFilters() {
|
|
79
|
+
const filters = Object.entries(this.state.filters || {});
|
|
80
|
+
if (!filters.length) return this.getAll();
|
|
81
|
+
const matches = await Promise.all(filters.map(([key, value]) =>
|
|
82
|
+
this.getItemsByColumn(key, value)));
|
|
83
|
+
return matches.reduce((items, next) => items.filter(item =>
|
|
84
|
+
next.some(result => result.id === item.id)));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -100,10 +100,13 @@ export default function CopyDeviceConfigModal({
|
|
|
100
100
|
</View>
|
|
101
101
|
|
|
102
102
|
<Text style={styles.message} testID="copy-device-config-hint">
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
{`${
|
|
104
|
+
tt('device_action', 'copyConfigHint') ||
|
|
105
|
+
'Escolha o device origem. As configurações serão aplicadas em'
|
|
106
|
+
} "${destinationAlias || destinationDeviceString || 'destino'}" (${
|
|
107
|
+
tt('device_action', 'copyConfigIdentityHint') ||
|
|
108
|
+
'identidade do destino não muda'
|
|
109
|
+
}).`}
|
|
107
110
|
</Text>
|
|
108
111
|
|
|
109
112
|
{loading ? (
|
|
@@ -1,237 +1,48 @@
|
|
|
1
|
+
import {appendScreenMetrics, hasScreenMetricsChanges} from '@controleonline/ui-common/src/react/utils/screenMetrics.js';
|
|
2
|
+
import {normalizeBooleanConfig, SHOP_LOYALTY_COUPONS_ENABLED_CONFIG_KEY} from '@controleonline/ui-common/src/react/utils/shopConfig.js';
|
|
1
3
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
export
|
|
44
|
-
export const POS_OPERATION_MODE_WAITER = 'waiter';
|
|
45
|
-
export const POS_OPERATION_MODE_TOTEM = 'totem';
|
|
46
|
-
export const POS_OPERATION_MODE_SINGLE_ITEM = 'single-item';
|
|
47
|
-
export const POS_OPERATION_MODE_CASHIER = 'cashier';
|
|
48
|
-
export const POS_CHECK_ORDER_TYPE_NONE = 'none';
|
|
49
|
-
export const POS_CHECK_ORDER_TYPE_TAB = 'tab';
|
|
50
|
-
export const POS_CHECK_ORDER_TYPE_TABLE = 'table';
|
|
51
|
-
export const POS_CHECK_ORDER_TYPE_STAMP = 'stamp';
|
|
52
|
-
export const POS_CHECK_ORDER_MANAGEMENT_MODE_MANAGE = 'manage';
|
|
53
|
-
export const POS_CHECK_ORDER_MANAGEMENT_MODE_EXISTING_ONLY = 'existing-only';
|
|
54
|
-
export const POS_OPERATION_MODE_DEFAULT = POS_OPERATION_MODE_COUNTER;
|
|
55
|
-
export const POS_PRINT_MODE_ORDER = 'order';
|
|
56
|
-
export const POS_PRINT_MODE_FORM = 'form';
|
|
57
|
-
export const POS_PRINT_MODE_DEFAULT = POS_PRINT_MODE_ORDER;
|
|
58
|
-
export const POS_CASH_MANAGEMENT_MODE_CASH_REGISTER = 'cash-register';
|
|
59
|
-
export const POS_CASH_MANAGEMENT_MODE_DAILY = 'daily';
|
|
60
|
-
export const POS_CASH_MANAGEMENT_MODE_DEFAULT =
|
|
61
|
-
POS_CASH_MANAGEMENT_MODE_CASH_REGISTER;
|
|
62
|
-
export const POS_OPERATION_MODE_OPTIONS = [
|
|
63
|
-
{
|
|
64
|
-
value: POS_OPERATION_MODE_COUNTER,
|
|
65
|
-
translationKey: 'counterService',
|
|
66
|
-
descriptionKey: 'counterServiceDescription',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
value: POS_OPERATION_MODE_WAITER,
|
|
70
|
-
translationKey: 'waiterService',
|
|
71
|
-
descriptionKey: 'waiterServiceDescription',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
value: POS_OPERATION_MODE_TOTEM,
|
|
75
|
-
translationKey: 'selfServiceKiosk',
|
|
76
|
-
descriptionKey: 'selfServiceKioskDescription',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
value: POS_OPERATION_MODE_SINGLE_ITEM,
|
|
80
|
-
translationKey: 'singleItemSale',
|
|
81
|
-
descriptionKey: 'singleItemSaleDescription',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
value: POS_OPERATION_MODE_CASHIER,
|
|
85
|
-
translationKey: 'cashierPOS',
|
|
86
|
-
descriptionKey: 'cashierPOSDescription',
|
|
87
|
-
},
|
|
88
|
-
];
|
|
89
|
-
|
|
90
|
-
export const DEFAULT_DEVICE_CONFIGS = {
|
|
91
|
-
'pos-type': 'full',
|
|
92
|
-
'print-mode': 'order',
|
|
93
|
-
'check-type': 'manual',
|
|
94
|
-
'product-input-type': 'manual',
|
|
95
|
-
'selection-type': 'single',
|
|
96
|
-
sound: '0',
|
|
97
|
-
vibration: '0',
|
|
98
|
-
[DEVICE_ORDER_VISIBILITY_KEY]: DEVICE_ORDER_VISIBILITY_DEVICE,
|
|
99
|
-
[POS_DELIVERY_ENABLED_CONFIG_KEY]: '1',
|
|
100
|
-
[DEVICE_ALERT_SOUND_ENABLED_KEY]: '0',
|
|
101
|
-
[DEVICE_ALERT_SOUND_URL_KEY]: '',
|
|
102
|
-
[DEVICE_RUNTIME_DEBUG_INFO_ENABLED_KEY]: '0',
|
|
103
|
-
[DEVICE_ANDROID_LAUNCHER_ENABLED_CONFIG_KEY]: '0',
|
|
104
|
-
[DISPLAY_ALLOW_PRINTER_CHANGE_CONFIG_KEY]: '0',
|
|
105
|
-
[DISPLAY_SIZE_CONFIG_KEY]: String(DISPLAY_SIZE_DEFAULT),
|
|
106
|
-
[DISPLAY_SIDE_BREAK_CONFIG_KEY]: '0',
|
|
107
|
-
[POS_CHECK_ORDER_TYPE_CONFIG_KEY]: POS_CHECK_ORDER_TYPE_NONE,
|
|
108
|
-
[POS_CHECK_ORDER_MANAGEMENT_MODE_CONFIG_KEY]:
|
|
109
|
-
POS_CHECK_ORDER_MANAGEMENT_MODE_MANAGE,
|
|
110
|
-
[POS_OPERATION_MODE_CONFIG_KEY]: POS_OPERATION_MODE_DEFAULT,
|
|
111
|
-
[POS_PRODUCT_SHOWCASE_CONFIG_KEY]: '',
|
|
112
|
-
[POS_AUTO_PRINT_ENABLED_CONFIG_KEY]: '0',
|
|
113
|
-
[POS_CASH_MANAGEMENT_MODE_CONFIG_KEY]: POS_CASH_MANAGEMENT_MODE_DEFAULT,
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export const isTruthyValue = value =>
|
|
117
|
-
value === true || value === '1' || value === 1 || value === 'true';
|
|
118
|
-
|
|
119
|
-
export const isMissingConfigValue = value =>
|
|
120
|
-
value === undefined || value === null || value === '';
|
|
121
|
-
|
|
122
|
-
export const parseConfigsObject = configs => {
|
|
123
|
-
if (!configs) return {};
|
|
124
|
-
|
|
125
|
-
if (typeof configs === 'string') {
|
|
126
|
-
try {
|
|
127
|
-
const parsed = JSON.parse(configs);
|
|
128
|
-
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
129
|
-
} catch {
|
|
130
|
-
return {};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return typeof configs === 'object' ? {...configs} : {};
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
export const normalizeDisplaySize = value => {
|
|
138
|
-
const normalizedValue = String(value ?? '').trim();
|
|
139
|
-
|
|
140
|
-
if (normalizedValue === '') {
|
|
141
|
-
return DISPLAY_SIZE_DEFAULT;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const numericValue = Number(normalizedValue);
|
|
145
|
-
|
|
146
|
-
if (!Number.isFinite(numericValue)) {
|
|
147
|
-
return DISPLAY_SIZE_DEFAULT;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return Math.min(
|
|
151
|
-
DISPLAY_SIZE_MAX,
|
|
152
|
-
Math.max(DISPLAY_SIZE_MIN, Math.round(numericValue)),
|
|
153
|
-
);
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
export const resolveDisplaySize = configs =>
|
|
157
|
-
normalizeDisplaySize(
|
|
158
|
-
parseConfigsObject(configs)?.[DISPLAY_SIZE_CONFIG_KEY],
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
export const isDisplaySideBreakEnabled = configs =>
|
|
162
|
-
isTruthyValue(
|
|
163
|
-
parseConfigsObject(configs)?.[DISPLAY_SIDE_BREAK_CONFIG_KEY],
|
|
164
|
-
);
|
|
165
|
-
|
|
166
|
-
export const normalizePosOperationMode = value => {
|
|
167
|
-
const normalizedValue = String(value || '')
|
|
168
|
-
.trim()
|
|
169
|
-
.toLowerCase()
|
|
170
|
-
.normalize('NFD')
|
|
171
|
-
.replace(/[\u0300-\u036f]/g, '')
|
|
172
|
-
.replace(/[\s_]/g, '-');
|
|
173
|
-
|
|
174
|
-
if (
|
|
175
|
-
[
|
|
176
|
-
POS_OPERATION_MODE_COUNTER,
|
|
177
|
-
'balcao',
|
|
178
|
-
'counter-service',
|
|
179
|
-
'front-counter',
|
|
180
|
-
].includes(normalizedValue)
|
|
181
|
-
) {
|
|
182
|
-
return POS_OPERATION_MODE_COUNTER;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (
|
|
186
|
-
[
|
|
187
|
-
POS_OPERATION_MODE_WAITER,
|
|
188
|
-
'garcon',
|
|
189
|
-
'garcom',
|
|
190
|
-
'table-service',
|
|
191
|
-
].includes(normalizedValue)
|
|
192
|
-
) {
|
|
193
|
-
return POS_OPERATION_MODE_WAITER;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (
|
|
197
|
-
[
|
|
198
|
-
POS_OPERATION_MODE_TOTEM,
|
|
199
|
-
].includes(normalizedValue)
|
|
200
|
-
) {
|
|
201
|
-
return POS_OPERATION_MODE_TOTEM;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (
|
|
205
|
-
[
|
|
206
|
-
POS_OPERATION_MODE_SINGLE_ITEM,
|
|
207
|
-
'single-sale',
|
|
208
|
-
'single-item-sale',
|
|
209
|
-
'sale-unit',
|
|
210
|
-
'sale-single',
|
|
211
|
-
'venda-unitaria',
|
|
212
|
-
'venda-unica',
|
|
213
|
-
'item-unico',
|
|
214
|
-
'unit-sale',
|
|
215
|
-
'unitary-sale',
|
|
216
|
-
].includes(normalizedValue)
|
|
217
|
-
) {
|
|
218
|
-
return POS_OPERATION_MODE_SINGLE_ITEM;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
if (
|
|
222
|
-
[
|
|
223
|
-
POS_OPERATION_MODE_CASHIER,
|
|
224
|
-
'pdv',
|
|
225
|
-
'pos',
|
|
226
|
-
'checkout',
|
|
227
|
-
'cashier-pos',
|
|
228
|
-
].includes(normalizedValue)
|
|
229
|
-
) {
|
|
230
|
-
return POS_OPERATION_MODE_CASHIER;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return '';
|
|
234
|
-
};
|
|
4
|
+
CIELO_DEVICES,
|
|
5
|
+
SUPPORTED_POS_GATEWAYS,
|
|
6
|
+
DEVICE_ORDER_VISIBILITY_KEY,
|
|
7
|
+
DEVICE_ORDER_VISIBILITY_DEVICE,
|
|
8
|
+
DEVICE_ORDER_VISIBILITY_COMPANY,
|
|
9
|
+
POS_DELIVERY_ENABLED_CONFIG_KEY,
|
|
10
|
+
DEVICE_RUNTIME_DEBUG_INFO_ENABLED_KEY,
|
|
11
|
+
DISPLAY_ALLOW_PRINTER_CHANGE_CONFIG_KEY,
|
|
12
|
+
POS_OPERATION_MODE_CONFIG_KEY,
|
|
13
|
+
POS_LOCAL_CHARGE_ENABLED_CONFIG_KEY,
|
|
14
|
+
ORDER_CHARGE_ENABLED_CONFIG_KEY,
|
|
15
|
+
isOrderChargeEnabled,
|
|
16
|
+
DEVICE_ANDROID_KIOSK_ENABLED_CONFIG_KEY,
|
|
17
|
+
DEVICE_ANDROID_LAUNCHER_ENABLED_CONFIG_KEY,
|
|
18
|
+
POS_AUTO_PRINT_ENABLED_CONFIG_KEY,
|
|
19
|
+
POS_CASH_MANAGEMENT_MODE_CONFIG_KEY,
|
|
20
|
+
POS_CHECK_ORDER_TYPE_CONFIG_KEY,
|
|
21
|
+
POS_CHECK_ORDER_MANAGEMENT_MODE_CONFIG_KEY,
|
|
22
|
+
POS_OPERATION_MODE_COUNTER,
|
|
23
|
+
POS_OPERATION_MODE_WAITER,
|
|
24
|
+
POS_OPERATION_MODE_TOTEM,
|
|
25
|
+
POS_OPERATION_MODE_SINGLE_ITEM,
|
|
26
|
+
POS_CHECK_ORDER_TYPE_NONE,
|
|
27
|
+
POS_CHECK_ORDER_TYPE_TAB,
|
|
28
|
+
POS_CHECK_ORDER_TYPE_TABLE,
|
|
29
|
+
POS_CHECK_ORDER_TYPE_TABLE_TAB,
|
|
30
|
+
POS_CHECK_ORDER_TYPE_STAMP,
|
|
31
|
+
POS_CHECK_ORDER_MANAGEMENT_MODE_MANAGE,
|
|
32
|
+
POS_CHECK_ORDER_MANAGEMENT_MODE_EXISTING_ONLY,
|
|
33
|
+
POS_PRINT_MODE_FORM,
|
|
34
|
+
POS_PRINT_MODE_DEFAULT,
|
|
35
|
+
POS_CASH_MANAGEMENT_MODE_CASH_REGISTER,
|
|
36
|
+
POS_CASH_MANAGEMENT_MODE_DAILY,
|
|
37
|
+
POS_CASH_MANAGEMENT_MODE_DEFAULT,
|
|
38
|
+
POS_OPERATION_MODE_OPTIONS,
|
|
39
|
+
DEFAULT_DEVICE_CONFIGS,
|
|
40
|
+
isTruthyValue,
|
|
41
|
+
isMissingConfigValue,
|
|
42
|
+
parseConfigsObject,
|
|
43
|
+
normalizePosOperationMode,
|
|
44
|
+
} from './deviceConfigValues';
|
|
45
|
+
export * from './deviceConfigValues';
|
|
235
46
|
|
|
236
47
|
export const resolvePosOperationMode = configs =>
|
|
237
48
|
normalizePosOperationMode(
|
|
@@ -264,6 +75,10 @@ export const normalizePosCheckOrderType = value => {
|
|
|
264
75
|
return POS_CHECK_ORDER_TYPE_TABLE;
|
|
265
76
|
}
|
|
266
77
|
|
|
78
|
+
if (normalizedValue === POS_CHECK_ORDER_TYPE_TABLE_TAB) {
|
|
79
|
+
return POS_CHECK_ORDER_TYPE_TABLE_TAB;
|
|
80
|
+
}
|
|
81
|
+
|
|
267
82
|
if (
|
|
268
83
|
[
|
|
269
84
|
POS_CHECK_ORDER_TYPE_STAMP,
|
|
@@ -306,6 +121,21 @@ export const resolvePosCheckOrderTypeForShop = (
|
|
|
306
121
|
return resolvedType;
|
|
307
122
|
};
|
|
308
123
|
|
|
124
|
+
// A device mode is not an Order.orderType. The current entry starts at the
|
|
125
|
+
// table; the waiter navigation can then resolve a concrete tab under that table.
|
|
126
|
+
export const resolvePosCheckOrderEntryTypeForShop = (deviceConfigs, shopConfigs) => {
|
|
127
|
+
const type = resolvePosCheckOrderTypeForShop(deviceConfigs, shopConfigs);
|
|
128
|
+
return type === POS_CHECK_ORDER_TYPE_TABLE_TAB ? POS_CHECK_ORDER_TYPE_TABLE : type;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const resolvePosCheckOrderTypesForShop = (deviceConfigs, shopConfigs) => {
|
|
132
|
+
const type = resolvePosCheckOrderTypeForShop(deviceConfigs, shopConfigs);
|
|
133
|
+
if (type === POS_CHECK_ORDER_TYPE_TABLE_TAB) {
|
|
134
|
+
return [POS_CHECK_ORDER_TYPE_TABLE, POS_CHECK_ORDER_TYPE_TAB];
|
|
135
|
+
}
|
|
136
|
+
return type === POS_CHECK_ORDER_TYPE_NONE ? [] : [type];
|
|
137
|
+
};
|
|
138
|
+
|
|
309
139
|
export const normalizePosCheckOrderManagementMode = value => {
|
|
310
140
|
const normalizedValue = String(value || '')
|
|
311
141
|
.trim()
|
|
@@ -513,6 +343,14 @@ export const isPosLocalChargeEnabled = configs => {
|
|
|
513
343
|
);
|
|
514
344
|
};
|
|
515
345
|
|
|
346
|
+
// Entry-point visibility only. The consultation and invoice API enforce capability.
|
|
347
|
+
export const isPosChargeEntryEnabled = configs => {
|
|
348
|
+
const parsed = parseConfigsObject(configs);
|
|
349
|
+
return Object.prototype.hasOwnProperty.call(parsed, ORDER_CHARGE_ENABLED_CONFIG_KEY)
|
|
350
|
+
? isOrderChargeEnabled(parsed)
|
|
351
|
+
: isPosLocalChargeEnabled(parsed);
|
|
352
|
+
};
|
|
353
|
+
|
|
516
354
|
export const getPosOperationModeOption = mode => {
|
|
517
355
|
|
|
518
356
|
const normalizedMode = normalizePosOperationMode(mode);
|