@feedmepos/mf-order-setting 0.0.72-test.1 → 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.
- package/.env +1 -1
- package/README.md +7 -23
- package/dist/{KioskDevicesView-CP_cGMXE.js → KioskDevicesView-Dztw-Q35.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-CiNLqFw6.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-Ol419NZh.js} +3 -3
- package/dist/{KioskSettingView-BiKYEjfe.js → KioskSettingView-BUHmoxyO.js} +183 -202
- package/dist/{KioskView-BYxPrI7N.js → KioskView-B8j77zMA.js} +4 -4
- package/dist/OrderSettingsView-C5PK8CKZ.js +60009 -0
- package/dist/{app-BN02cB5o.js → app-C2_s0fkK.js} +4921 -4797
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-Bml-FvS7.js → dayjs.min-B3nOmXcs.js} +1 -1
- package/dist/frontend/mf-order/src/api/menu/index.d.ts +1 -1
- package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +10 -3
- package/dist/frontend/mf-order/src/app.d.ts +44 -8
- package/dist/frontend/mf-order/src/components/GoogleMap.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/composables/useQrOrderingEnabled.d.ts +2 -0
- package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
- package/dist/frontend/mf-order/src/main.d.ts +44 -8
- package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +21 -21
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +906 -1044
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +36 -3
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +5 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/components/TaxInput.vue.d.ts +3 -8
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +3 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +5 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +21 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +1 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +28 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue.d.ts +46 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue.d.ts +57 -0
- package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +23 -1
- package/dist/frontend/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +27 -0
- package/dist/frontend/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +8 -0
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/index-6PQJ07gD.js +665 -0
- package/dist/{index-BlKeAWPk.js → index-B4XxBqiV.js} +1 -1
- package/dist/lineman-settings.dto-DcYJFu0U.js +60394 -0
- package/dist/package/entity/_type-assert.d.ts +7 -0
- package/dist/package/entity/booking/booking.dto.d.ts +24 -24
- package/dist/package/entity/delivery/delivery.dto.d.ts +8 -8
- package/dist/package/entity/delivery/delivery.enum.d.ts +12 -0
- package/dist/package/entity/delivery/gateway/grab.dto.d.ts +2 -2
- package/dist/package/entity/delivery/gateway/kosmo.dto.d.ts +16 -16
- package/dist/package/entity/delivery/gateway/pandago.dto.d.ts +4 -4
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +282 -4591
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +32 -24
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +23 -11719
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +2 -2
- package/dist/package/entity/index.d.ts +12 -0
- package/dist/package/entity/kiosk/kiosk.do.d.ts +140 -140
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +168 -168
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +63 -7
- package/dist/package/entity/marketing/marketing.dto.d.ts +4 -4
- package/dist/package/entity/member/member.dto.d.ts +6 -0
- package/dist/package/entity/order/dine-in/dine-in.do.d.ts +8 -8
- package/dist/package/entity/order/effects/effect.dto.d.ts +68 -16
- package/dist/package/entity/order/menu/menu.dto.d.ts +45 -8
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +358 -3853
- package/dist/package/entity/order/order.do.d.ts +239 -42
- package/dist/package/entity/order/order.dto.d.ts +6497 -2236
- package/dist/package/entity/order/payment/payment.dto.d.ts +52 -12
- package/dist/package/entity/order-platform/base-integration.do.d.ts +8 -0
- package/dist/package/entity/order-platform/deliveroo/deliveroo-dto.d.ts +2 -2
- package/dist/package/entity/order-platform/deliveroo/deliveroo-order.do.d.ts +524 -524
- package/dist/package/entity/order-platform/deliveroo/deliveroo-setting.do.d.ts +2 -2
- package/dist/package/entity/order-platform/deliveroo/deliveroo.menu.dto.d.ts +58 -58
- package/dist/package/entity/order-platform/external/menu/external-master-menu.do.d.ts +212 -284
- package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +331 -589
- package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +1 -1
- package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +12 -12
- package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +275 -275
- package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +3 -3
- package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +3 -3
- package/dist/package/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +284 -284
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +40 -40
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +16 -16
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood-order.do.d.ts +18 -18
- package/dist/package/entity/order-platform/gofood/gofood-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood-settings.dto.d.ts +2 -2
- package/dist/package/entity/order-platform/gofood/gofood.dto.d.ts +32 -32
- package/dist/package/entity/order-platform/grabfood/grabfood-edit-order.do.d.ts +12 -12
- package/dist/package/entity/order-platform/grabfood/grabfood-omni.do.d.ts +134 -115
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +187 -165
- package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +8 -2
- package/dist/package/entity/order-platform/grabfood/grabfood-webhook.dto.d.ts +49 -42
- package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +67 -54
- package/dist/package/entity/order-platform/grabfood/grabfood.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/lineman/lineman-settings.do.d.ts +37 -0
- package/dist/package/entity/order-platform/lineman/lineman-settings.dto.d.ts +40 -0
- package/dist/package/entity/order-platform/menu.dto.d.ts +716 -13887
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +136 -2
- package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +176 -176
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +62 -62
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +8 -2
- package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +8 -2
- package/dist/package/entity/order-platform/tng/tng-menu.do.d.ts +1061 -0
- package/dist/package/entity/order-platform/tng/tng-order.do.d.ts +1915 -0
- package/dist/package/entity/order-platform/tng/tng-settings.do.d.ts +379 -0
- package/dist/package/entity/order-platform/tng/tng-settings.dto.d.ts +301 -0
- package/dist/package/entity/order-platform/tng/tng.dto.d.ts +1162 -0
- package/dist/package/entity/order-platform/tng/tng.enum.d.ts +29 -0
- package/dist/package/entity/order-setting/delivery/inhouse-delivery.do.d.ts +12 -0
- package/dist/package/entity/order-setting/delivery/inhouse-delivery.dto.d.ts +12 -0
- package/dist/package/entity/order-setting/dine-in/dine-in.do.d.ts +11 -0
- package/dist/package/entity/order-setting/dine-in/dine-in.dto.d.ts +9 -0
- package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +2 -2
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +2 -2
- package/dist/package/entity/order-setting/order-setting.do.d.ts +55 -4
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +110 -8
- package/dist/package/entity/order-setting/pickup/pickup.do.d.ts +12 -0
- package/dist/package/entity/order-setting/pickup/pickup.dto.d.ts +12 -0
- package/dist/package/entity/payment/transaction.d.ts +80 -8
- package/dist/package/entity/printer/printer.do.d.ts +14 -14
- package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
- package/dist/package/entity/queue/queue.do.d.ts +236 -1901
- package/dist/package/entity/queue/queue.dto.d.ts +743 -445
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +27 -4
- package/dist/package/entity/websocket/websocket.dto.d.ts +10 -10
- package/dist/style.css +1 -0
- package/golar.config.ts +20 -0
- package/package.json +9 -3
- package/src/Entry.vue +2 -10
- package/src/api/menu/index.ts +1 -1
- package/src/api/remoteOrder/index.ts +176 -110
- package/src/composables/useQrOrderingEnabled.ts +66 -0
- package/src/helpers/menu.ts +1 -1
- package/src/locales/en-US.json +421 -412
- package/src/locales/ja-JP.json +1769 -1760
- package/src/locales/th-TH.json +409 -400
- package/src/locales/zh-CN.json +417 -408
- package/src/main.ts +4 -44
- package/src/router/index.ts +2 -2
- package/src/stores/menu/menu.ts +48 -27
- package/src/stores/restaurant/index.ts +24 -9
- package/src/utils/firebase-storage.ts +3 -13
- package/src/views/kiosk/settings/KioskSettingView.vue +3 -2
- package/src/views/order-settings/OrderSettingsView.vue +31 -11
- package/src/views/order-settings/delivery/DeliverySetting.vue +223 -11
- package/src/views/order-settings/delivery/components/TaxInput.vue +1 -1
- package/src/views/order-settings/delivery/delivery.data.ts +31 -10
- package/src/views/order-settings/delivery/delivery.ts +60 -28
- package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +40 -1
- package/src/views/order-settings/delivery/integrated-delivery/DeliverooSetting.vue +1 -1
- package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +15 -7
- package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +83 -27
- package/src/views/order-settings/delivery/integrated-delivery/LinemanSetting.vue +79 -0
- package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +2 -0
- package/src/views/order-settings/delivery/integrated-delivery/TngSetting.vue +749 -0
- package/src/views/order-settings/dine-in/DineInSetting.vue +54 -23
- package/src/views/order-settings/dine-in/PaymentType.vue +9 -12
- package/src/views/order-settings/general/GeneralSetting.vue +15 -6
- package/src/views/order-settings/pickup/PickUpSettingDialog.vue +31 -3
- package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +34 -0
- package/src/views/order-settings/pickup/Preorder.vue +13 -12
- package/src/views/order-settings/queue/QueueSetting.vue +30 -1
- package/src/views/order-settings/servicecharge/RateInput.vue +9 -7
- package/vite.config.ts +16 -16
- package/dist/OrderSettingsView-C7Y-_y5U.js +0 -32222
- package/dist/frontend/mf-order/src/api/auth/index.d.ts +0 -7
- package/dist/frontend/mf-order/src/stores/iframe/index.d.ts +0 -14
- package/dist/index-DZA8A0m4.js +0 -630
- package/dist/queue-transfer.dto-C7nRZOZH.js +0 -45618
- package/src/api/auth/index.ts +0 -20
- 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 {
|
|
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
|
-
|
|
47
|
+
app.mount('#app')
|
package/src/router/index.ts
CHANGED
package/src/stores/menu/menu.ts
CHANGED
|
@@ -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/
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
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>(
|
|
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(
|
|
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
|
|
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(
|
|
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 {
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|