@feedmepos/mf-order-setting 0.0.21-beta.3 → 0.0.22

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 (84) hide show
  1. package/dist/{KioskDevicesView-Cb7Rw7t8.js → KioskDevicesView-C6YmdLKc.js} +1 -1
  2. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-raPhhBpi.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DiLHpWbm.js} +2 -2
  3. package/dist/{KioskSettingView-BQgyeWbo.js → KioskSettingView-D-muNxlb.js} +1 -1
  4. package/dist/{KioskView-BLkuqfZ_.js → KioskView-kcjjk4fF.js} +4 -4
  5. package/dist/{OrderSettingsView-BJ1b1Qjg.js → OrderSettingsView-D_bGK-3J.js} +34007 -32821
  6. package/dist/{app-BY258ajB.js → app-C5qwExhL.js} +41 -23
  7. package/dist/app.js +1 -1
  8. package/dist/common/convertor/index.d.ts +2 -0
  9. package/dist/common/sms/index.d.ts +1 -1
  10. package/dist/common/util/index.d.ts +6 -0
  11. package/dist/{dayjs.min-4COVK72W.js → dayjs.min-kEC9G7bx.js} +36 -36
  12. package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +5 -2
  13. package/dist/frontend/mf-order/src/app.d.ts +18 -0
  14. package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
  15. package/dist/frontend/mf-order/src/stores/app/index.d.ts +14 -4
  16. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +45 -35
  17. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +581 -716
  18. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +140 -174
  19. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +2 -2
  20. package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +2 -1
  21. package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +3 -0
  22. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +97 -0
  23. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +3 -3
  24. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  25. package/dist/{index-t_7ThPjm.js → index-C_53CwBa.js} +2 -2
  26. package/dist/package/entity/booking/booking.do.d.ts +1516 -1276
  27. package/dist/package/entity/delivery/delivery.dto.d.ts +298 -251
  28. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +539 -0
  29. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +114 -9
  30. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +862 -4
  31. package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +1 -1
  32. package/dist/package/entity/index.d.ts +34 -22
  33. package/dist/package/entity/kiosk/kiosk.do.d.ts +12 -12
  34. package/dist/package/entity/kiosk/kiosk.dto.d.ts +12 -12
  35. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1942 -1642
  36. package/dist/package/entity/member/member.dto.d.ts +33 -0
  37. package/dist/package/entity/order/order-item/order-item.dto.d.ts +15 -0
  38. package/dist/package/entity/order/order.do.d.ts +37 -0
  39. package/dist/package/entity/order/order.dto.d.ts +808 -17435
  40. package/dist/package/entity/order/order.enum.d.ts +2 -0
  41. package/dist/package/entity/order-platform/external/auth/external-auth.do.d.ts +12 -0
  42. package/dist/package/entity/order-platform/external/auth/external-auth.dto.d.ts +27 -0
  43. package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +2868 -0
  44. package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +21 -0
  45. package/dist/package/entity/order-platform/external/menu/external-menu.enum.d.ts +3 -0
  46. package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +1373 -0
  47. package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +2834 -0
  48. package/dist/package/entity/order-platform/external/order/external-order.enum.d.ts +9 -0
  49. package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +127 -0
  50. package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +95 -0
  51. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +82 -82
  52. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +339 -291
  53. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +4 -4
  54. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +3 -3
  55. package/dist/package/entity/order-platform/grabfood/grabfood-menu.do.d.ts +65 -65
  56. package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +311 -263
  57. package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +2 -2
  58. package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +7 -7
  59. package/dist/package/entity/order-platform/menu.dto.d.ts +126 -0
  60. package/dist/package/entity/order-platform/order-platform.dto.d.ts +4 -4
  61. package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
  62. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +298 -250
  63. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -41
  64. package/dist/package/entity/printer/printer.do.d.ts +2 -2
  65. package/dist/package/entity/pubsub/ably/ably.do.d.ts +60 -9
  66. package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
  67. package/dist/package/entity/queue/queue.do.d.ts +40 -0
  68. package/dist/{auth.dto-BOoRSQkS.js → queue.do-Vog69wnQ.js} +30760 -30095
  69. package/package.json +4 -3
  70. package/src/api/remoteOrder/index.ts +13 -2
  71. package/src/helpers/menu.ts +2 -2
  72. package/src/locales/en-US.json +11 -1
  73. package/src/locales/zh-CN.json +10 -1
  74. package/src/stores/restaurant/index.ts +4 -1
  75. package/src/views/order-settings/delivery/DeliverySetting.vue +82 -6
  76. package/src/views/order-settings/delivery/delivery.data.ts +16 -1
  77. package/src/views/order-settings/delivery/delivery.ts +1 -0
  78. package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +114 -0
  79. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +23 -6
  80. package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +21 -16
  81. package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +58 -59
  82. package/src/views/order-settings/pickup/PickUpSetting.vue +1 -1
  83. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +214 -158
  84. package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +1 -0
@@ -1,7 +1,6 @@
1
1
  <script setup lang="ts">
2
- import { sentenceCase } from 'change-case'
3
- import { type PropType, computed, onMounted, ref } from 'vue'
4
- import type { CategorizedItem } from '@/helpers/menu'
2
+ import { type PropType, computed, onMounted, ref, watch } from 'vue'
3
+ import type { CategorizedItem, Item } from '@/helpers/menu'
5
4
  import RateInput from './RateInput.vue'
6
5
  import type { FdoServiceChargeRule, FdoTable } from '@feedmepos/core/entity'
7
6
  import type { AdjustmentAmount } from '@/helpers/number'
@@ -46,14 +45,6 @@ const emits = defineEmits<{
46
45
  (event: 'delete'): void
47
46
  }>()
48
47
 
49
- const itemSelected = computed(() => {
50
- if (props.isLoadingMenu) return t('order.loadingMenu')
51
- if (!props.items.length) return t('order.noAvailableItem')
52
- const items = props.modelValue.condition.items
53
- if (!items) return t('order.all')
54
- return `${items.length} ${t('order.item')}`
55
- })
56
-
57
48
  const tableSelected = computed(() => {
58
49
  if (props.isLoadingTable) return t('order.loadingTable')
59
50
  if (!props.tables.length) return t('order.noAvailableTable')
@@ -76,8 +67,8 @@ function convertServiceChargeOrderToI18n(serviceChargeType: ServiceChargeOrderTy
76
67
  return t('order.dineIn')
77
68
  case ServiceChargeOrderType.takeaway:
78
69
  return t('order.takeaway')
79
- case ServiceChargeOrderType.inHouseDelivery:
80
- return t('order.deliveryTitle', {company: "In house"})
70
+ case ServiceChargeOrderType.inHouseDelivery:
71
+ return t('order.deliveryTitle', { company: 'In house' })
81
72
  case ServiceChargeOrderType.deliveryCompany:
82
73
  return t('order.deliveryCompany')
83
74
  case ServiceChargeOrderType.pickup:
@@ -99,33 +90,6 @@ const diningValue = computed(() => {
99
90
  return props.modelValue.condition.orderType
100
91
  })
101
92
 
102
- let initialValue = props.modelValue.condition.items
103
- if (!initialValue) {
104
- initialValue = props.items.reduce<string[]>((pv, category) => {
105
- pv = [...pv, ...category.items.map((item) => item._id)]
106
- return pv
107
- }, [])
108
- }
109
-
110
- let initialValueTable = props.modelValue.condition.tables || props.tables.map((table) => table.name)
111
- if (!initialValueTable) {
112
- initialValueTable = props.tables.map((table) => table.name)
113
- }
114
-
115
- const itemValue = ref<string[]>(initialValue)
116
- const tableValue = ref<string[]>(initialValueTable)
117
-
118
- function updateItems() {
119
- sideSheetItem.value = false
120
- emits('update:model-value', {
121
- ...props.modelValue,
122
- condition: {
123
- ...props.modelValue.condition,
124
- items: itemValue.value
125
- }
126
- })
127
- }
128
-
129
93
  function updateTable() {
130
94
  sideSheetTable.value = false
131
95
  emits('update:model-value', {
@@ -137,17 +101,6 @@ function updateTable() {
137
101
  })
138
102
  }
139
103
 
140
- function modifyItems(items: string[], parentId: string) {
141
- itemValue.value = items
142
- const parentItem = props.items.find((item) => item.id === parentId)
143
- if (parentItem) {
144
- const parentSelected = parentItem.items.every((subItem) =>
145
- itemValue.value.includes(subItem._id)
146
- )
147
- selectedCategoryItems.value[parentId] = parentSelected
148
- }
149
- }
150
-
151
104
  function updateRate(v: AdjustmentAmount) {
152
105
  emits('update:model-value', {
153
106
  ...props.modelValue,
@@ -168,13 +121,6 @@ function updateDiningOption(options: F_SERVICE_CHARGE_ORDER_TYPE[]) {
168
121
  const sideSheetItem = ref<boolean>(false)
169
122
  const sideSheetTable = ref<boolean>(false)
170
123
 
171
- function toggleSideSheet() {
172
- sideSheetItem.value = true
173
- }
174
- function toggleSideSheetTable() {
175
- sideSheetTable.value = true
176
- }
177
-
178
124
  const parent = ref<boolean>(false)
179
125
  const nestedVal = ref<F_SERVICE_CHARGE_ORDER_TYPE[]>(diningValue.value)
180
126
 
@@ -196,101 +142,128 @@ function handleChildUpdate(ev: F_SERVICE_CHARGE_ORDER_TYPE[]) {
196
142
  updateDiningOption(ev)
197
143
  }
198
144
 
199
- const parentTable = ref<boolean>(false)
200
- const nestedValTable = ref<string[]>(initialValueTable)
145
+ //Table
146
+ const tableValue = ref<string[] | null | undefined>(props.modelValue.condition.tables)
201
147
 
148
+ const selectedTables = computed<Record<string, { isSelected: boolean }>>(() => {
149
+ return props.tables?.reduce((pv: Record<string, { isSelected: boolean }>, curr: FdoTable) => {
150
+ const isSelected = !tableValue.value || tableValue.value?.includes(curr.name)
151
+
152
+ pv[curr.name ?? ''] = {
153
+ isSelected
154
+ }
155
+
156
+ return pv
157
+ }, {})
158
+ })
202
159
  const checkboxChildrenTable = computed(() => {
203
- const tables = props.tables.map((table) => table.name)
160
+ const tables = props.tables.map((table: FdoTable) => table.name)
204
161
  return Array.isArray(tables) ? tables : []
205
162
  })
206
163
 
207
164
  function handleParentUpdateTable(ev: boolean) {
208
- if (Array.isArray(checkboxChildrenTable.value)) {
209
- ev ? (nestedValTable.value = checkboxChildrenTable.value) : (nestedValTable.value = [])
210
- parentTable.value = ev
211
- tableValue.value = nestedValTable.value
165
+ if (ev) {
166
+ tableValue.value = null
167
+ } else {
168
+ tableValue.value = []
212
169
  }
213
170
  }
214
171
 
215
- function handleChildUpdateTable(ev: string[]) {
216
- nestedValTable.value = Array.isArray(ev) ? ev : []
217
- parentTable.value = nestedValTable.value.length === checkboxChildrenTable.value.length
218
- tableValue.value = ev
219
- }
220
-
221
- onMounted(() => {
222
- parent.value = nestedVal.value.length === checkboxChildren.value.length
223
-
224
- if (Array.isArray(nestedValTable.value) && Array.isArray(checkboxChildrenTable.value)) {
225
- parentTable.value = nestedValTable.value.length === checkboxChildrenTable.value.length
226
- }
227
-
228
- if (props.items.length > 0) {
229
- selectedCategoryItems.value = props.items.reduce(
230
- (acc, item) => {
231
- const allSubItemsSelected = item.items.every((subItem) =>
232
- itemValue.value.includes(subItem._id)
233
- )
234
- acc[item.id ?? ''] = allSubItemsSelected
235
- return acc
236
- },
237
- {} as Record<string, boolean>
238
- )
172
+ function handleChildUpdateTable(ev: boolean, name: string) {
173
+ if (ev) {
174
+ tableValue.value = [...(tableValue.value ?? []), name]
175
+ } else {
176
+ if (!tableValue.value) {
177
+ tableValue.value = props.tables.map((t) => t.name)
178
+ }
179
+ tableValue.value = tableValue.value.filter((t) => t !== name)
239
180
  }
240
181
 
241
- initializeMenuState(filteredItem.value);
242
-
243
- })
244
-
245
- const selectedCategoryItems = ref<Record<string, boolean>>({})
246
-
247
- function handleCategorySelection(categoryId: string, isSelected: boolean) {
248
- selectedCategoryItems.value = {
249
- ...selectedCategoryItems.value,
250
- [categoryId]: isSelected
251
- }
252
- if (isSelected) {
253
- itemValue.value = [
254
- ...itemValue.value,
255
- ...(props.items.find((item) => item.id === categoryId)?.items.map((subItem) => subItem._id) ||
256
- [])
257
- ]
258
- } else {
259
- itemValue.value = itemValue.value.filter(
260
- (id) =>
261
- !props.items
262
- .find((item) => item.id === categoryId)
263
- ?.items.map((subItem) => subItem._id)
264
- .includes(id)
265
- )
182
+ tableValue.value = Array.from(new Set(tableValue.value))
183
+ if (tableValue.value.length === props.tables.length) {
184
+ tableValue.value = null
266
185
  }
267
186
  }
268
187
 
269
- function isIndeterminate(parentId: string): boolean {
270
- const parentItem = props.items.find((item) => item.id === parentId)
271
- if (!parentItem) return false
272
-
273
- const selectedSubItemsCount = parentItem.items.filter((subItem) =>
274
- itemValue.value.includes(subItem._id)
275
- ).length
276
- return selectedSubItemsCount > 0 && selectedSubItemsCount < parentItem.items.length
277
- }
188
+ onMounted(() => {
189
+ parent.value = nestedVal.value.length === checkboxChildren.value.length
190
+ initializeMenuState(filteredItem.value)
191
+ })
278
192
 
279
193
  const searchValueTable = ref('')
280
-
281
194
  const filteredTable = computed(() =>
282
- props.tables.filter((e) =>
195
+ props.tables.filter((e: FdoTable) =>
283
196
  searchValueTable.value
284
197
  ? e.name.toLocaleLowerCase().includes(searchValueTable.value.toLocaleLowerCase())
285
198
  : true
286
199
  )
287
200
  )
288
201
 
202
+ const showTable = ref(true)
203
+ function toggleShowTable() {
204
+ showTable.value = !showTable.value
205
+ }
206
+
207
+ const showMenuState = ref<Record<string, boolean>>({})
208
+ function toggleShowMenu(itemId: number) {
209
+ showMenuState.value[itemId] = !showMenuState.value[itemId]
210
+ }
211
+ function initializeMenuState(items: any[]) {
212
+ showMenuState.value = items.reduce(
213
+ (acc, _, index) => {
214
+ acc[index] = true
215
+ return acc
216
+ },
217
+ {} as Record<number, boolean>
218
+ )
219
+ }
220
+
221
+ //Items
289
222
  const searchValueItem = ref('')
290
223
 
224
+ const itemValue = ref<string[] | null | undefined>(props.modelValue.condition.items)
225
+
226
+ const selectedCategories = computed<
227
+ Record<string, { isAllSelected: boolean; isSomeSelected: boolean }>
228
+ >(() => {
229
+ return props.items?.reduce(
230
+ (
231
+ pv: Record<string, { isAllSelected: boolean; isSomeSelected: boolean }>,
232
+ curr: CategorizedItem
233
+ ) => {
234
+ const selectedItems = curr.items.filter((itm) => itemValue.value?.includes(itm._id))
235
+ const _isAllItemSelected = !itemValue.value || selectedItems.length === curr.items.length
236
+
237
+ const isSomeSelected = !itemValue.value || selectedItems.length > 0
238
+
239
+ pv[curr?.id ?? ''] = {
240
+ isAllSelected: _isAllItemSelected,
241
+ isSomeSelected
242
+ }
243
+
244
+ return pv
245
+ },
246
+ {}
247
+ )
248
+ })
249
+
250
+ const totalCategorizedItemsCount = computed(() => {
251
+ return props.items.reduce((pv: number, curr: CategorizedItem) => {
252
+ pv += curr.items.length
253
+ return pv
254
+ }, 0)
255
+ })
256
+
257
+ const itemSelected = computed(() => {
258
+ if (props.isLoadingMenu) return t('order.loadingMenu')
259
+ if (!props.items.length) return t('order.noAvailableItem')
260
+ const items = props.modelValue.condition.items
261
+ if (!items) return t('order.all')
262
+ return `${items.length} ${t('order.item')}`
263
+ })
291
264
  const filteredItem = computed(() => {
292
265
  return props.items
293
- .map((item) => {
266
+ .map((item: CategorizedItem) => {
294
267
  const filteredSubItems = item.items.filter((subItem) =>
295
268
  searchValueItem.value
296
269
  ? subItem.name.toLowerCase().includes(searchValueItem.value.toLowerCase())
@@ -302,27 +275,79 @@ const filteredItem = computed(() => {
302
275
  items: filteredSubItems
303
276
  }
304
277
  })
305
- .filter((item) => item.items.length > 0)
278
+ .filter((item: CategorizedItem) => item.items.length > 0)
306
279
  })
307
280
 
308
- const showTable = ref(true)
309
- function toggleShowTable() {
310
- showTable.value = !showTable.value
281
+ function selectAllItems(v: boolean) {
282
+ if (v) {
283
+ itemValue.value = null
284
+ } else {
285
+ itemValue.value = []
286
+ }
311
287
  }
312
288
 
313
- const showMenuState = ref<Record<string, boolean>>({})
289
+ function handleCategorySelection(categoryId: string, isSelected: boolean) {
290
+ initItemValue(isSelected)
314
291
 
315
- function toggleShowMenu(itemId: number) {
316
- showMenuState.value[itemId] = !showMenuState.value[itemId]
292
+ const categoryItems =
293
+ props.items.find((item: CategorizedItem) => item.id === categoryId)?.items ?? []
294
+ const categoryItemIds = categoryItems.map((ci: Item) => ci._id)
295
+ if (isSelected) {
296
+ itemValue.value = [...(itemValue.value ?? []), ...categoryItemIds]
297
+ } else {
298
+ itemValue.value = itemValue.value?.filter((id: string) => !categoryItemIds.includes(id))
299
+ }
300
+ itemValue.value = Array.from(new Set(itemValue.value))
317
301
  }
318
302
 
319
- function initializeMenuState(items: any[]) {
320
- showMenuState.value = items.reduce((acc, _, index) => {
321
- acc[index] = true;
322
- return acc;
323
- }, {} as Record<number, boolean>);
303
+ function initItemValue(v: boolean) {
304
+ if (!itemValue.value) {
305
+ if (v) {
306
+ itemValue.value = []
307
+ } else {
308
+ itemValue.value = props.items.reduce((pv: string[], curr: CategorizedItem) => {
309
+ pv = [...pv, ...curr.items.map((i) => i._id)]
310
+ return pv
311
+ }, [])
312
+ }
313
+ }
314
+ }
315
+
316
+ function modifyItems(v: boolean, subItemId: string) {
317
+ initItemValue(v)
318
+ if (v) {
319
+ itemValue.value = [...(itemValue.value ?? []), subItemId]
320
+ } else {
321
+ itemValue.value = itemValue.value?.filter((i: string) => i !== subItemId)
322
+ }
323
+
324
+ itemValue.value = Array.from(new Set(itemValue.value))
325
+ }
326
+
327
+ function updateItems() {
328
+ sideSheetItem.value = false
329
+ emits('update:model-value', {
330
+ ...props.modelValue,
331
+ condition: {
332
+ ...props.modelValue.condition,
333
+ items: itemValue.value
334
+ }
335
+ })
324
336
  }
325
337
 
338
+ function toggleSideSheet() {
339
+ sideSheetItem.value = true
340
+ }
341
+ function toggleSideSheetTable() {
342
+ sideSheetTable.value = true
343
+ }
344
+
345
+ watch(
346
+ () => props.items,
347
+ () => {
348
+ initializeMenuState(filteredItem.value)
349
+ }
350
+ )
326
351
  </script>
327
352
 
328
353
  <template>
@@ -338,19 +363,31 @@ function initializeMenuState(items: any[]) {
338
363
  <FmSideSheet :header="t('order.selectItem')" :maxWidth="600" dismiss-away v-model="sideSheetItem">
339
364
  <div>
340
365
  <div class="text-fm-color-typo-secondary mt-5 mb-5 flex flex-row">
341
- {{ props.modelValue.condition.items?.length ?? initialValue?.length }} {{ t('order.productSelected') }}
342
- <FmSearch v-model:model-value="searchValueItem" class="ml-auto" :placeholder="t('order.search')" />
366
+ {{ itemValue?.length ?? totalCategorizedItemsCount }}
367
+ {{ t('order.productSelected') }}
368
+ <FmSearch
369
+ v-model:model-value="searchValueItem"
370
+ class="ml-auto"
371
+ :placeholder="t('order.search')"
372
+ />
343
373
  </div>
344
374
 
375
+ <FmCheckbox
376
+ :label="t('order.selectAllItemsIncludeCustomItem')"
377
+ :model-value="!itemValue"
378
+ value=""
379
+ @update:model-value="(v: boolean) => selectAllItems(v)"
380
+ ></FmCheckbox>
381
+
345
382
  <div v-for="(item, index) in filteredItem" :key="index" class="flex flex-col mb-6">
346
383
  <FmCard variant="outlined" class="p-5">
347
384
  <div class="fm-corner-radius-lg flex flex-col">
348
385
  <div class="flex flex-row">
349
386
  <div class="flex flex-row">
350
387
  <FmCheckbox
351
- :model-value="selectedCategoryItems[item.id ?? '']"
388
+ :model-value="selectedCategories[item.id ?? ''].isAllSelected"
352
389
  value=""
353
- :indeterminate="isIndeterminate(item.id ?? '')"
390
+ :indeterminate="selectedCategories[item.id ?? ''].isSomeSelected"
354
391
  @update:model-value="handleCategorySelection(item.id ?? '', $event)"
355
392
  />
356
393
  <div class="font-bold ml-2">{{ item.name }}</div>
@@ -374,11 +411,12 @@ function initializeMenuState(items: any[]) {
374
411
  <FmCheckbox
375
412
  v-for="(subItem, subIndex) in item.items"
376
413
  :key="subIndex"
377
- :model-value="itemValue"
414
+ :model-value="!itemValue || itemValue.includes(subItem._id)"
378
415
  :label="subItem.name"
379
416
  :value="subItem._id"
380
- @update:model-value="(values: string[]) => modifyItems(values, item.id ?? '')"
381
- />
417
+ @update:model-value="(v: boolean) => modifyItems(v, subItem._id)"
418
+ >
419
+ </FmCheckbox>
382
420
  </div>
383
421
  </div>
384
422
  </FmCard>
@@ -387,7 +425,12 @@ function initializeMenuState(items: any[]) {
387
425
  <template #side-sheet-footer>
388
426
  <div class="flex gap-8 items-center justify-start">
389
427
  <FmButton variant="primary" :label="t('order.confirm')" size="lg" @click="updateItems" />
390
- <FmButton variant="secondary" :label="t('order.cancel')" size="lg" @click="sideSheetItem = false" />
428
+ <FmButton
429
+ variant="secondary"
430
+ :label="t('order.cancel')"
431
+ size="lg"
432
+ @click="sideSheetItem = false"
433
+ />
391
434
  </div>
392
435
  </template>
393
436
  </FmSideSheet>
@@ -396,21 +439,29 @@ function initializeMenuState(items: any[]) {
396
439
  <div class="font-semibold mb-3">{{ t('order.selectTable') }}</div>
397
440
  <FmButton variant="plain" :label="tableSelected" size="lg" @click="toggleSideSheetTable" />
398
441
  </div>
399
- <FmSideSheet :header="t('order.selectTable')" :maxWidth="600" dismiss-away v-model="sideSheetTable">
442
+ <FmSideSheet
443
+ :header="t('order.selectTable')"
444
+ :maxWidth="600"
445
+ dismiss-away
446
+ v-model="sideSheetTable"
447
+ >
400
448
  <div class="text-fm-color-typo-secondary mt-5 mb-5 flex flex-row">
401
- {{ props.modelValue.condition.tables?.length ?? props.tables.length }} {{ t('order.tableSelected') }}
402
- <FmSearch v-model:model-value="searchValueTable" class="ml-auto" :placeholder="t('order.search')" />
449
+ {{ props.modelValue.condition.tables?.length ?? props.tables.length }}
450
+ {{ t('order.tableSelected') }}
451
+ <FmSearch
452
+ v-model:model-value="searchValueTable"
453
+ class="ml-auto"
454
+ :placeholder="t('order.search')"
455
+ />
403
456
  </div>
404
457
 
405
458
  <FmCard variant="outlined" class="p-5">
406
459
  <div class="flex flex-row">
407
460
  <FmCheckbox
408
- :value="parentTable"
409
- :model-value="parentTable"
461
+ value=""
462
+ :model-value="!tableValue"
410
463
  :label="t('order.all')"
411
- :indeterminate="
412
- nestedValTable.length > 0 && nestedValTable.length < checkboxChildrenTable.length
413
- "
464
+ :indeterminate="!!tableValue && tableValue.length > 0"
414
465
  @update:model-value="handleParentUpdateTable"
415
466
  />
416
467
  <FmButton
@@ -436,10 +487,10 @@ function initializeMenuState(items: any[]) {
436
487
  v-if="showTable"
437
488
  >
438
489
  <FmCheckbox
439
- :model-value="nestedValTable"
490
+ :model-value="selectedTables[item.name].isSelected"
440
491
  :label="item.name"
441
- :value="item.name"
442
- @update:model-value="handleChildUpdateTable"
492
+ value=""
493
+ @update:model-value="(v: boolean) => handleChildUpdateTable(v, item.name)"
443
494
  />
444
495
  </div>
445
496
  </div>
@@ -447,7 +498,12 @@ function initializeMenuState(items: any[]) {
447
498
  <template #side-sheet-footer>
448
499
  <div class="flex gap-8 items-center justify-start">
449
500
  <FmButton variant="primary" :label="t('order.confirm')" size="lg" @click="updateTable" />
450
- <FmButton variant="secondary" :label="t('order.cancel')" size="lg" @click="sideSheetTable = false" />
501
+ <FmButton
502
+ variant="secondary"
503
+ :label="t('order.cancel')"
504
+ size="lg"
505
+ @click="sideSheetTable = false"
506
+ />
451
507
  </div>
452
508
  </template>
453
509
  </FmSideSheet>
@@ -253,6 +253,7 @@ watch(
253
253
  }
254
254
  initialize(restaurantSetting)
255
255
  await startAsyncCallWithErr(tableSettingStore.readTables)
256
+ await menuStore.readMenu()
256
257
  }
257
258
  },
258
259
  { immediate: true }