@feedmepos/mf-order-setting 0.0.72-prod → 0.0.73-dev

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 (167) hide show
  1. package/.env +1 -1
  2. package/README.md +7 -23
  3. package/dist/{KioskDevicesView-DIiEVc0i.js → KioskDevicesView-Dztw-Q35.js} +1 -1
  4. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-BD0Olm4_.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-Ol419NZh.js} +3 -3
  5. package/dist/{KioskSettingView-Csm9he9M.js → KioskSettingView-BUHmoxyO.js} +183 -202
  6. package/dist/{KioskView-Ho2ts0j6.js → KioskView-B8j77zMA.js} +4 -4
  7. package/dist/OrderSettingsView-C5PK8CKZ.js +60009 -0
  8. package/dist/{app-xl2InG-H.js → app-C2_s0fkK.js} +5066 -4942
  9. package/dist/app.js +1 -1
  10. package/dist/{dayjs.min-BVqlMLNE.js → dayjs.min-B3nOmXcs.js} +1 -1
  11. package/dist/frontend/mf-order/src/api/menu/index.d.ts +1 -1
  12. package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +10 -3
  13. package/dist/frontend/mf-order/src/app.d.ts +44 -8
  14. package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +1 -1
  15. package/dist/frontend/mf-order/src/composables/useQrOrderingEnabled.d.ts +2 -0
  16. package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
  17. package/dist/frontend/mf-order/src/main.d.ts +44 -8
  18. package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +21 -21
  19. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +906 -1044
  20. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +36 -3
  21. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +5 -2
  22. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +2 -2
  23. package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +3 -8
  24. package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +3 -1
  25. package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +5 -1
  26. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +21 -0
  27. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
  28. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
  29. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +28 -2
  30. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue.d.ts +46 -0
  31. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue.d.ts +57 -0
  32. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +23 -1
  33. package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +27 -0
  34. package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +8 -0
  35. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  36. package/dist/index-6PQJ07gD.js +665 -0
  37. package/dist/{index-B4qdL9W3.js → index-B4XxBqiV.js} +1 -1
  38. package/dist/lineman-settings.dto-DcYJFu0U.js +60394 -0
  39. package/dist/package/entity/_type-assert.d.ts +7 -0
  40. package/dist/package/entity/booking/booking.dto.d.ts +24 -24
  41. package/dist/package/entity/delivery/delivery.dto.d.ts +8 -8
  42. package/dist/package/entity/delivery/delivery.enum.d.ts +12 -0
  43. package/dist/package/entity/delivery/gateway/grab.dto.d.ts +2 -2
  44. package/dist/package/entity/delivery/gateway/kosmo.dto.d.ts +16 -16
  45. package/dist/package/entity/delivery/gateway/pandago.dto.d.ts +4 -4
  46. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +282 -4591
  47. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +32 -24
  48. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +23 -11719
  49. package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +2 -2
  50. package/dist/package/entity/index.d.ts +12 -0
  51. package/dist/package/entity/kiosk/kiosk.do.d.ts +140 -140
  52. package/dist/package/entity/kiosk/kiosk.dto.d.ts +168 -168
  53. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +63 -7
  54. package/dist/package/entity/marketing/marketing.dto.d.ts +4 -4
  55. package/dist/package/entity/member/member.dto.d.ts +6 -0
  56. package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
  57. package/dist/package/entity/order/effects/effect.dto.d.ts +68 -16
  58. package/dist/package/entity/order/menu/menu.dto.d.ts +45 -8
  59. package/dist/package/entity/order/order-item/order-item.dto.d.ts +358 -3853
  60. package/dist/package/entity/order/order.do.d.ts +239 -42
  61. package/dist/package/entity/order/order.dto.d.ts +6497 -2236
  62. package/dist/package/entity/order/payment/payment.dto.d.ts +52 -12
  63. package/dist/package/entity/order-platform/base-integration.do.d.ts +8 -0
  64. package/dist/package/entity/order-platform/deliveroo/deliveroo-dto.d.ts +2 -2
  65. package/dist/package/entity/order-platform/deliveroo/deliveroo-order.do.d.ts +524 -524
  66. package/dist/package/entity/order-platform/deliveroo/deliveroo-setting.do.d.ts +2 -2
  67. package/dist/package/entity/order-platform/deliveroo/deliveroo.menu.dto.d.ts +58 -58
  68. package/dist/package/entity/order-platform/external/menu/external-master-menu.do.d.ts +212 -284
  69. package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +331 -589
  70. package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +1 -1
  71. package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +12 -12
  72. package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +275 -275
  73. package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +3 -3
  74. package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +3 -3
  75. package/dist/package/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +284 -284
  76. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +40 -40
  77. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +16 -16
  78. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +2 -2
  79. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +2 -2
  80. package/dist/package/entity/order-platform/gofood/gofood-order.do.d.ts +18 -18
  81. package/dist/package/entity/order-platform/gofood/gofood-settings.do.d.ts +2 -2
  82. package/dist/package/entity/order-platform/gofood/gofood-settings.dto.d.ts +2 -2
  83. package/dist/package/entity/order-platform/gofood/gofood.dto.d.ts +32 -32
  84. package/dist/package/entity/order-platform/grabfood/grabfood-edit-order.do.d.ts +12 -12
  85. package/dist/package/entity/order-platform/grabfood/grabfood-omni.do.d.ts +134 -115
  86. package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +187 -165
  87. package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +8 -2
  88. package/dist/package/entity/order-platform/grabfood/grabfood-webhook.dto.d.ts +49 -42
  89. package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +67 -54
  90. package/dist/package/entity/order-platform/grabfood/grabfood.enum.d.ts +1 -1
  91. package/dist/package/entity/order-platform/lineman/lineman-settings.do.d.ts +37 -0
  92. package/dist/package/entity/order-platform/lineman/lineman-settings.dto.d.ts +40 -0
  93. package/dist/package/entity/order-platform/menu.dto.d.ts +716 -13887
  94. package/dist/package/entity/order-platform/order-platform.dto.d.ts +136 -2
  95. package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
  96. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +176 -176
  97. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +62 -62
  98. package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +8 -2
  99. package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +8 -2
  100. package/dist/package/entity/order-platform/tng/tng-menu.do.d.ts +1061 -0
  101. package/dist/package/entity/order-platform/tng/tng-order.do.d.ts +1915 -0
  102. package/dist/package/entity/order-platform/tng/tng-settings.do.d.ts +379 -0
  103. package/dist/package/entity/order-platform/tng/tng-settings.dto.d.ts +301 -0
  104. package/dist/package/entity/order-platform/tng/tng.dto.d.ts +1162 -0
  105. package/dist/package/entity/order-platform/tng/tng.enum.d.ts +29 -0
  106. package/dist/package/entity/order-setting/delivery/inhouse-delivery.do.d.ts +12 -0
  107. package/dist/package/entity/order-setting/delivery/inhouse-delivery.dto.d.ts +12 -0
  108. package/dist/package/entity/order-setting/dine-in/dine-in.do.d.ts +11 -0
  109. package/dist/package/entity/order-setting/dine-in/dine-in.dto.d.ts +9 -0
  110. package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +2 -2
  111. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +2 -2
  112. package/dist/package/entity/order-setting/order-setting.do.d.ts +55 -4
  113. package/dist/package/entity/order-setting/order-setting.dto.d.ts +110 -8
  114. package/dist/package/entity/order-setting/pickup/pickup.do.d.ts +12 -0
  115. package/dist/package/entity/order-setting/pickup/pickup.dto.d.ts +12 -0
  116. package/dist/package/entity/payment/transaction.d.ts +80 -8
  117. package/dist/package/entity/printer/printer.do.d.ts +14 -14
  118. package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
  119. package/dist/package/entity/queue/queue.do.d.ts +236 -1901
  120. package/dist/package/entity/queue/queue.dto.d.ts +743 -445
  121. package/dist/package/entity/restaurant/restaurant.dto.d.ts +27 -4
  122. package/dist/package/entity/websocket/websocket.dto.d.ts +10 -10
  123. package/dist/style.css +1 -0
  124. package/golar.config.ts +20 -0
  125. package/package.json +28 -22
  126. package/src/Entry.vue +2 -10
  127. package/src/api/menu/index.ts +1 -1
  128. package/src/api/remoteOrder/index.ts +176 -110
  129. package/src/composables/useQrOrderingEnabled.ts +66 -0
  130. package/src/helpers/menu.ts +1 -1
  131. package/src/locales/en-US.json +421 -412
  132. package/src/locales/ja-JP.json +1769 -1760
  133. package/src/locales/th-TH.json +409 -400
  134. package/src/locales/zh-CN.json +417 -408
  135. package/src/main.ts +4 -44
  136. package/src/router/index.ts +2 -2
  137. package/src/stores/menu/menu.ts +48 -27
  138. package/src/stores/restaurant/index.ts +24 -9
  139. package/src/utils/firebase-storage.ts +3 -13
  140. package/src/views/kiosk/settings/KioskSettingView.vue +3 -2
  141. package/src/views/order-settings/OrderSettingsView.vue +31 -11
  142. package/src/views/order-settings/delivery/DeliverySetting.vue +223 -11
  143. package/src/views/order-settings/delivery/components/TaxInput.vue +1 -1
  144. package/src/views/order-settings/delivery/delivery.data.ts +31 -10
  145. package/src/views/order-settings/delivery/delivery.ts +60 -28
  146. package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +40 -1
  147. package/src/views/order-settings/delivery/integrated-delivery/DeliverooSetting.vue +1 -1
  148. package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +15 -7
  149. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +83 -27
  150. package/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue +79 -0
  151. package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +2 -0
  152. package/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue +749 -0
  153. package/src/views/order-settings/dine-in/DineInSetting.vue +54 -23
  154. package/src/views/order-settings/general/GeneralSetting.vue +15 -6
  155. package/src/views/order-settings/pickup/PickUpSettingDialog.vue +31 -3
  156. package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +34 -0
  157. package/src/views/order-settings/pickup/Preorder.vue +13 -12
  158. package/src/views/order-settings/queue/QueueSetting.vue +30 -1
  159. package/src/views/order-settings/servicecharge/RateInput.vue +9 -7
  160. package/vite.config.ts +16 -16
  161. package/dist/OrderSettingsView-C0G8kP3v.js +0 -32222
  162. package/dist/frontend/mf-order/src/api/auth/index.d.ts +0 -7
  163. package/dist/frontend/mf-order/src/stores/iframe/index.d.ts +0 -14
  164. package/dist/index-kCI8JdNP.js +0 -628
  165. package/dist/queue-transfer.dto-BLyCakS5.js +0 -45618
  166. package/src/api/auth/index.ts +0 -20
  167. package/src/stores/iframe/index.ts +0 -23
package/src/main.ts CHANGED
@@ -1,22 +1,17 @@
1
1
  import './assets/main.css'
2
2
 
3
- import { computed, createApp } from 'vue'
3
+ import { createApp } from 'vue'
4
4
  import { createPinia } from 'pinia'
5
5
  import Entry from './Entry.vue'
6
6
  import { router } from './router'
7
7
  import { initialize, useCoreStore } from '@feedmepos/mf-common'
8
8
  import { FeedMeUI } from '@feedmepos/ui-library';
9
- import { AuthApi } from './api/auth'
10
- import { signInWithCustomToken } from 'firebase/auth'
11
- import { useIframeStore } from './stores/iframe'
12
9
  import { createFeedMeI18n, type I18n, detectLocale } from "@feedmepos/mf-common"
13
10
  import enUS from "./locales/en-US.json"
14
11
  import zhCN from "./locales/zh-CN.json"
15
12
  import thTH from "./locales/th-TH.json"
16
13
  import jaJP from "./locales/ja-JP.json"
17
14
 
18
- import { getFirebaseAuth } from '@/utils/firebase-app'
19
-
20
15
  export const i18nMessages = {
21
16
  "en-US": enUS,
22
17
  "zh-CN": zhCN,
@@ -45,43 +40,8 @@ app.use(initI18n() as any)
45
40
 
46
41
 
47
42
  const CoreStore = useCoreStore();
48
- const iframeMode = computed(() => {
49
- return new URLSearchParams(window.location.search).get('iframe') === 'true';
50
- });
51
-
52
- useIframeStore().init(iframeMode.value);
53
-
54
- const firebaseAuth = getFirebaseAuth()
55
-
56
- async function signInWithToken(token: string) {
57
- const customToken = await AuthApi.getCustomToken(token);
58
- const { user } = await signInWithCustomToken(firebaseAuth, customToken);
59
- await CoreStore.signInWithToken({ ...user, id: user.uid }, await user.getIdToken());
60
- }
61
-
62
- async function init() {
63
- if (iframeMode.value) {
64
- router.beforeEach((to, from, next) => {
65
- window.addEventListener('message', async (event: MessageEvent<{ event: string, data: any }>) => {
66
- switch (event.data.event) {
67
- case 'init':
68
- await signInWithToken(event.data.data.token);
69
- await CoreStore.changeCountry(event.data.data.country);
70
- await CoreStore.changeBusiness(event.data.data.business);
71
- CoreStore.changeRestaurant(event.data.data.restaurant);
72
- break;
73
- default:
74
- break;
75
- }
76
- });
77
- next();
78
- });
79
- }
80
- if (!iframeMode.value || import.meta.env.VITE_DEBUG_MODE === 'true') {
81
- initialize(import.meta.env.VITE_AUTH_CLIENT_ID);
82
- CoreStore.setNamespace(import.meta.env.DEV ? 'dev' : 'prod');
83
- }
84
- }
85
43
 
44
+ initialize(import.meta.env.VITE_AUTH_CLIENT_ID);
45
+ CoreStore.setNamespace(import.meta.env.DEV ? 'dev' : 'prod');
86
46
 
87
- init().then(() => app.mount('#app'))
47
+ app.mount('#app')
@@ -3,8 +3,8 @@ import { routes } from './routes'
3
3
 
4
4
  const router = createRouter({
5
5
  history: createWebHistory(),
6
- routes,
6
+ routes
7
7
  })
8
8
 
9
9
  export { router }
10
- export default router;
10
+ export default router
@@ -1,5 +1,5 @@
1
1
  import { generator, overrideMenu } from '@feedmepos/menu';
2
- import { F_MENU_VERSION, FdoHasPosition, FdoItemOverriderV4, FdoItemVariant, FdoMenuV4, FdoMenuV4Catalog, FdoMenuV4Category, FdoMenuV4Item, FdoMenuV4VariantGroup, FdtoRestaurantWithMenuV4 } from '@feedmepos/menu/entity';
2
+ import { F_MENU_VERSION, FdoHasPosition, FdoItemOverriderV4, FdoItemVariant, FdoMenuV4, FdoMenuV4Catalog, FdoMenuV4Category, FdoMenuV4Item, FdoMenuV4VariantGroup, FdtoRestaurantWithMenuV4 } from '@feedmepos/entity';
3
3
 
4
4
  import { defineStore } from 'pinia';
5
5
  import { menuApi } from '@/api/menu';
@@ -10,10 +10,10 @@ import { useCoreStore } from '@feedmepos/mf-common';
10
10
 
11
11
  interface MenuState {
12
12
  restaurants: FdtoRestaurantWithMenuV4[];
13
- menu: { _rev: string } & FdoMenuV4;
13
+ menu: { _rev: string; } & FdoMenuV4;
14
14
  currentCatalogId: string | null;
15
15
  currentSchedulerId: string;
16
- catalogOptions: { label: string; value: string | null }[];
16
+ catalogOptions: { label: string; value: string | null; }[];
17
17
  loadingCatalogOptions: boolean;
18
18
  catalogOptionsError: string | null;
19
19
  }
@@ -35,7 +35,7 @@ export function sortPosition<T extends FdoHasPosition>(
35
35
  elseIf: keyof T | ((v: T) => string),
36
36
  ) {
37
37
  const cloned = arr;
38
- const result = cloned.reduce<{ hasPosition: T[], noPosition: T[] }>((pv, v) => {
38
+ const result = cloned.reduce<{ hasPosition: T[], noPosition: T[]; }>((pv, v) => {
39
39
  if (v.position == null) {
40
40
  pv.noPosition.push(v);
41
41
  } else {
@@ -53,8 +53,8 @@ export function sortPosition<T extends FdoHasPosition>(
53
53
  type Item = Omit<FdoMenuV4Item, 'variant'> & {
54
54
  codeName: string;
55
55
  variant?: Omit<FdoItemVariant, 'variantCombinations'> & {
56
- variantCombinations: (VariantItem & { codeName: string })[]
57
- }
56
+ variantCombinations: (VariantItem & { codeName: string; })[];
57
+ };
58
58
  };
59
59
 
60
60
  interface VariantItem extends FdoItemOverriderV4 {
@@ -63,10 +63,10 @@ interface VariantItem extends FdoItemOverriderV4 {
63
63
 
64
64
 
65
65
  export function categorizedItems(
66
- categories: (Omit<FdoMenuV4Category, '_id'> & { _id: string | null })[],
66
+ categories: (Omit<FdoMenuV4Category, '_id'> & { _id: string | null; })[],
67
67
  items: FdoMenuV4Item[],
68
68
  ): CategorizedItem[] {
69
- const mapped = items.reduce<{ [key: string]: Item[] }>((pv, p) => {
69
+ const mapped = items.reduce<{ [key: string]: Item[]; }>((pv, p) => {
70
70
  const key = p.category || '';
71
71
  const combinations = mapVariant(p.variant?.variantGroupIds);
72
72
  const i = {
@@ -105,28 +105,23 @@ export const useMenuStore = defineStore('menu', {
105
105
  version() {
106
106
  return (useCoreStore().currentBusiness?.value?.menuVersion || F_MENU_VERSION.enum.v3) as F_MENU_VERSION;
107
107
  },
108
-
109
108
  mergedMenu(): FdoMenuV4 {
110
109
  const res = overrideMenu({
111
110
  menu: this.menu as FdoMenuV4,
112
111
  catalogId: this.currentCatalogId,
113
-
114
112
  });
115
-
116
-
117
113
  return res;
118
-
119
114
  },
120
115
  catalogs(): FdoMenuV4Catalog[] {
121
116
  const catalogs = this.menu.modules.catalog;
122
- return catalogs
117
+ return catalogs;
123
118
  },
124
119
  currentCatalog: (state): FdoMenuV4Catalog | undefined => {
125
120
  return state.menu.modules.catalog.find(
126
121
  (catalog) => catalog._id === state.currentCatalogId
127
122
  );
128
123
  },
129
- categories(): (Omit<FdoMenuV4Category, '_id'> & { _id: string | null })[] {
124
+ categories(): (Omit<FdoMenuV4Category, '_id'> & { _id: string | null; })[] {
130
125
  const categories = this.mergedMenu.modules.category;
131
126
  return [
132
127
  ...this.rules.item.addon ? [{ _id: this.currentCatalogId ? '' : null, name: 'Addon', position: 0 }] : [],
@@ -137,17 +132,17 @@ export const useMenuStore = defineStore('menu', {
137
132
  const items = this.mergedMenu.modules.item;
138
133
  return sortPosition(items, (item) => item.code || item.name);
139
134
  },
140
- sortedItems(): { [key: string]: number } {
135
+ sortedItems(): { [key: string]: number; } {
141
136
  const category = this.menu.modules.category;
142
137
  const sorted = sortPosition(category, (c) => c.name)
143
- .reduce<{ [key: string]: number }>((pv, c, index) => {
138
+ .reduce<{ [key: string]: number; }>((pv, c, index) => {
144
139
  pv[c._id] = index;
145
140
  return pv;
146
141
  }, { ['']: 0 });
147
142
 
148
143
  const items = this.menu.modules.item;
149
144
  return sortPosition(items, (item) => item.code || item.name)
150
- .reduce<{ [key: string]: number }>((pv, item, index) => {
145
+ .reduce<{ [key: string]: number; }>((pv, item, index) => {
151
146
  pv[item._id] = index + sorted[item.category || ''];
152
147
  return pv;
153
148
  }, {});
@@ -160,6 +155,32 @@ export const useMenuStore = defineStore('menu', {
160
155
  categorizedItems(): CategorizedItem[] {
161
156
  return categorizedItems(this.categories, this.items);
162
157
  },
158
+ rawCategorizedItems(): CategorizedItem[] {
159
+ const grouped = this.menu.modules.item.reduce<Record<string, Item[]>>((acc, p) => {
160
+ const key = p.category || '';
161
+ const i: Item = {
162
+ ...p,
163
+ codeName: [p.code, p.name].filter(Boolean).join(' '),
164
+ variant: {
165
+ variantGroupIds: p.variant?.variantGroupIds ?? [],
166
+ variantCombinations: (p.variant?.variantCombinations ?? []).map((vc) => ({
167
+ ...vc,
168
+ codeName: [vc.code, vc.name].filter(Boolean).join(' ').trim() || '-',
169
+ })),
170
+ },
171
+ };
172
+ acc[key] = acc[key] ? [...acc[key], i] : [i];
173
+ return acc;
174
+ }, {});
175
+
176
+ const res = sortPosition(this.menu.modules.category, (c) => c.name).map((category) => ({
177
+ id: category._id,
178
+ name: category.name,
179
+ items: grouped[category._id] ?? [],
180
+ }));
181
+
182
+ return res
183
+ },
163
184
  rules(): MenuRules {
164
185
  const isDefault = this.currentCatalogId == undefined;
165
186
  const isV4 = this.version === F_MENU_VERSION.enum.v4;
@@ -247,24 +268,24 @@ export const useMenuStore = defineStore('menu', {
247
268
  async loadCatalogOptions(restaurantId: string) {
248
269
  this.loadingCatalogOptions = true;
249
270
  this.catalogOptionsError = null;
250
- const options: {label:string, value: string | null}[] = [{
271
+ const options: { label: string, value: string | null; }[] = [{
251
272
  label: 'Main',
252
273
  value: null,
253
274
  }];
254
275
 
255
276
  try {
256
- const resp = await menuApi.readCatalogOptions(restaurantId);
257
- const restaurntCatalogOptions = resp[restaurantId] ?? [];
258
- for (let index = 0; index < restaurntCatalogOptions.length; index++) {
259
- const opt = restaurntCatalogOptions[index];
277
+ const resp = await menuApi.readCatalogOptions(restaurantId);
278
+ const restaurntCatalogOptions = resp[restaurantId] ?? [];
279
+ for (let index = 0; index < restaurntCatalogOptions.length; index++) {
280
+ const opt = restaurntCatalogOptions[index];
260
281
  options.push({
261
282
  label: opt.name,
262
283
  value: opt._id
263
- })
264
- }
265
- this.catalogOptions = options;
284
+ });
285
+ }
286
+ this.catalogOptions = options;
266
287
  } catch (error) {
267
- console.error('Failed to load catalog options:', error)
288
+ console.error('Failed to load catalog options:', error);
268
289
  this.catalogOptionsError = 'order.failedToLoadCatalogOptions';
269
290
  } finally {
270
291
  this.loadingCatalogOptions = false;
@@ -20,6 +20,7 @@ import {
20
20
  FdoGrabfoodSettings,
21
21
  FdoExternalSetting,
22
22
  FdoFoodpandaSettings,
23
+ FdoLinemanSettings,
23
24
  FdoGoFoodSettings,
24
25
  FdoShopeeFoodSettings
25
26
  } from '@entity'
@@ -29,7 +30,6 @@ import { remoteOrderApi } from '@/api/remoteOrder'
29
30
  import { useI18n, useCoreStore } from '@feedmepos/mf-common'
30
31
  import { computed, ref, watch } from 'vue'
31
32
 
32
-
33
33
  export interface Profile extends FdoProfile {
34
34
  address: Address
35
35
  }
@@ -65,7 +65,9 @@ function initRestaurantState(): RestaurantState {
65
65
  export const useRestaurantStore = defineStore('restaurant', () => {
66
66
  const CoreStore = useCoreStore()
67
67
  const state = ref(initRestaurantState())
68
- const currentRestaurantSetting = computed<RestaurantSettingDoc | undefined>(() => state.value.restaurantSettings[CoreStore.currentRestaurant.value?._id || ''])
68
+ const currentRestaurantSetting = computed<RestaurantSettingDoc | undefined>(
69
+ () => state.value.restaurantSettings[CoreStore.currentRestaurant.value?._id || '']
70
+ )
69
71
 
70
72
  async function readRestaurantSetting(restaurantId: string) {
71
73
  const restaurantSetting = await restaurantApi.readRestaurantSetting(restaurantId)
@@ -104,20 +106,32 @@ export const useRestaurantStore = defineStore('restaurant', () => {
104
106
  async function updateFeedmeDelivery(restaurantId: string, dto: FdoRestaurantFeedmeDelivery) {
105
107
  return await remoteOrderApi.integratedDelivery.updateFeedme(restaurantId, dto)
106
108
  }
107
- async function updateIntegratedFoodpandaDelivery(restaurantId: string, dto: FdoFoodpandaSettings) {
109
+ async function updateIntegratedFoodpandaDelivery(
110
+ restaurantId: string,
111
+ dto: FdoFoodpandaSettings
112
+ ) {
108
113
  await remoteOrderApi.integratedDelivery.updateFoodpanda(restaurantId, dto)
109
114
  }
110
115
  async function updateIntegratedGrabfoodDelivery(restaurantId: string, dto: FdoGrabfoodSettings) {
111
116
  await remoteOrderApi.integratedDelivery.updateGrabfood(restaurantId, dto)
112
117
  }
113
- async function updateIntegratedShopeefoodDelivery(restaurantId: string, dto: FdoShopeeFoodSettings) {
118
+ async function updateIntegratedLinemanDelivery(restaurantId: string, dto: FdoLinemanSettings) {
119
+ await remoteOrderApi.integratedDelivery.updateLineman(restaurantId, dto)
120
+ }
121
+ async function updateIntegratedShopeefoodDelivery(
122
+ restaurantId: string,
123
+ dto: FdoShopeeFoodSettings
124
+ ) {
114
125
  await remoteOrderApi.integratedDelivery.updateShopeefood(restaurantId, dto)
115
126
  }
116
127
  async function updateIntegratedGofoodDelivery(restaurantId: string, dto: FdoGoFoodSettings) {
117
128
  await remoteOrderApi.integratedDelivery.updateGofood(restaurantId, dto)
118
129
  }
119
130
 
120
- async function updateIntegratedDeliverooDelivery(restaurantId: string, dto: FdoDeliverooSettings) {
131
+ async function updateIntegratedDeliverooDelivery(
132
+ restaurantId: string,
133
+ dto: FdoDeliverooSettings
134
+ ) {
121
135
  await remoteOrderApi.integratedDelivery.updateDeliveroo(restaurantId, dto)
122
136
  }
123
137
  async function updateExternalDelivery(restaurantId: string, dto: FdoExternalSetting) {
@@ -127,10 +141,10 @@ export const useRestaurantStore = defineStore('restaurant', () => {
127
141
  function getRestaurantEPayment(): true | string {
128
142
  const { t } = useI18n()
129
143
  if (!CoreStore.currentRestaurant.value) {
130
- return 'getRestaurantEPayment - Invalid restaurant ';
144
+ return 'getRestaurantEPayment - Invalid restaurant '
131
145
  }
132
- const payoutAccount = CoreStore.currentRestaurant.value.payoutAccount;
133
- const posVersion = CoreStore.currentRestaurant.value.posVersion;
146
+ const payoutAccount = CoreStore.currentRestaurant.value.payoutAccount
147
+ const posVersion = CoreStore.currentRestaurant.value.posVersion
134
148
 
135
149
  const validPosVersion =
136
150
  !!posVersion &&
@@ -163,10 +177,11 @@ export const useRestaurantStore = defineStore('restaurant', () => {
163
177
  updateFeedmeDelivery,
164
178
  updateIntegratedFoodpandaDelivery,
165
179
  updateIntegratedGrabfoodDelivery,
180
+ updateIntegratedLinemanDelivery,
166
181
  updateIntegratedShopeefoodDelivery,
167
182
  updateIntegratedGofoodDelivery,
168
183
  updateIntegratedDeliverooDelivery,
169
184
  updateExternalDelivery,
170
- getRestaurantEPayment,
185
+ getRestaurantEPayment
171
186
  }
172
187
  })
@@ -1,5 +1,4 @@
1
- import { AuthApi } from '@/api/auth'
2
- import { SvcConfig } from '@/api'
1
+ import { FeedMeAuth } from '@feedmepos/mf-common'
3
2
  import { signInWithCustomToken, signOut } from 'firebase/auth'
4
3
  import { ref, uploadBytes } from 'firebase/storage'
5
4
  import { getFirebaseAuth, getFirebaseStorage } from './firebase-app'
@@ -45,12 +44,7 @@ async function ensureFirebaseAuth(): Promise<void> {
45
44
 
46
45
  if (!pendingFirebaseSignIn) {
47
46
  pendingFirebaseSignIn = (async () => {
48
- const idToken = SvcConfig.getIdToken()
49
- if (!idToken) {
50
- throw new Error('Missing session token for Firebase authentication')
51
- }
52
-
53
- const customToken = await AuthApi.getCustomToken(idToken)
47
+ const customToken = await FeedMeAuth.getCustomToken()
54
48
  await signInWithCustomToken(auth, customToken)
55
49
  })().finally(() => {
56
50
  pendingFirebaseSignIn = null
@@ -65,16 +59,12 @@ async function ensureFirebaseAuth(): Promise<void> {
65
59
 
66
60
  async function forceRefreshFirebaseAuth(): Promise<void> {
67
61
  const auth = getFirebaseAuth()
68
- const idToken = SvcConfig.getIdToken()
69
- if (!idToken) {
70
- throw new Error('Missing session token for Firebase authentication')
71
- }
72
62
 
73
63
  if (auth.currentUser) {
74
64
  await signOut(auth)
75
65
  }
76
66
 
77
- const customToken = await AuthApi.getCustomToken(idToken)
67
+ const customToken = await FeedMeAuth.getCustomToken()
78
68
  await signInWithCustomToken(auth, customToken)
79
69
  }
80
70
 
@@ -337,13 +337,14 @@ const validKioskOrderSetting = computed<MfKioskOrderSetting | null>(() => {
337
337
  if (!ePayment) return null
338
338
 
339
339
  const hasCard = ePayment.card?.terminal || ePayment.card?.nfc
340
- const hasWallet =
340
+ const hasWallet =
341
341
  ePayment.eWallet?.qrPay ||
342
342
  ePayment.eWallet?.scanPay ||
343
343
  ePayment.eWallet?.terminalScanPay ||
344
344
  ePayment.eWallet?.terminalQrPay
345
+ const hasTerminal = ePayment.terminal
345
346
 
346
- if (!hasCard && !hasWallet) return null
347
+ if (!hasCard && !hasWallet && !hasTerminal) return null
347
348
  }
348
349
 
349
350
  // Return the form as-is if valid, with display stand disabled when dineIn is disabled
@@ -30,11 +30,13 @@ import QueueSetting from './queue/QueueSetting.vue'
30
30
  import { useI18n, useCoreStore } from '@feedmepos/mf-common'
31
31
  import { useMenuStore } from '@/stores/menu/menu'
32
32
  import { useSnackbarFunctions } from '@/components/snackbar'
33
+ import { useQrOrderingEnabled } from '@/composables/useQrOrderingEnabled'
33
34
 
34
35
  const { t } = useI18n()
35
36
  const { currentRestaurant } = useCoreStore()
36
37
  const menuStore = useMenuStore()
37
38
  const { showError } = useSnackbarFunctions()
39
+ const qrEnabled = useQrOrderingEnabled()
38
40
  type OrderSettingMenuItemValue =
39
41
  | 'delivery'
40
42
  | 'pickup'
@@ -47,17 +49,33 @@ type OrderSettingMenuItemValue =
47
49
  | 'queue'
48
50
  const selectedOrderSetting = ref<OrderSettingMenuItemValue>('delivery')
49
51
 
50
- const settingItem = computed<FmTabProps[]>(() => [
51
- { label: t('order.delivery'), value: 'delivery' },
52
- { label: t('order.pickup'), value: 'pickup' },
53
- { label: t('order.dineIn'), value: 'dinein' },
54
- { label: t('order.driveThru'), value: 'driveThru' },
55
- // { label: t('order.serviceCharge'), value: 'servicecharge' },
56
- // { label: t('order.discountRule.title'), value: 'discountRule' },
57
- { label: t('order.sms'), value: 'sms' },
58
- { label: t('order.general'), value: 'general' },
59
- { label: t('order.queue'), value: 'queue' }
60
- ])
52
+ const settingItem = computed<FmTabProps[]>(() => {
53
+ // QR ordering off -> expose only the Delivery tab (Local delivery company).
54
+ if (!qrEnabled.value) {
55
+ return [{ label: t('order.delivery'), value: 'delivery' }]
56
+ }
57
+ return [
58
+ { label: t('order.delivery'), value: 'delivery' },
59
+ { label: t('order.pickup'), value: 'pickup' },
60
+ { label: t('order.dineIn'), value: 'dinein' },
61
+ { label: t('order.driveThru'), value: 'driveThru' },
62
+ // { label: t('order.serviceCharge'), value: 'servicecharge' },
63
+ // { label: t('order.discountRule.title'), value: 'discountRule' },
64
+ { label: t('order.sms'), value: 'sms' },
65
+ { label: t('order.general'), value: 'general' },
66
+ { label: t('order.queue'), value: 'queue' }
67
+ ]
68
+ })
69
+
70
+ // When QR ordering is off, keep selection on the only visible tab so a
71
+ // previously-selected (now hidden) tab can't stay active.
72
+ watch(
73
+ qrEnabled,
74
+ (enabled) => {
75
+ if (!enabled) selectedOrderSetting.value = 'delivery'
76
+ },
77
+ { immediate: true }
78
+ )
61
79
 
62
80
  const currentComponent = computed(() => {
63
81
  switch (selectedOrderSetting.value) {
@@ -79,6 +97,8 @@ const currentComponent = computed(() => {
79
97
  return GeneralSetting
80
98
  case 'queue':
81
99
  return QueueSetting
100
+ default:
101
+ return DeliverySetting
82
102
  }
83
103
  })
84
104