@feedmepos/mf-order-setting 0.0.2 → 0.0.6
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.dev +13 -0
- package/.env.example +11 -0
- package/.env.prod +12 -0
- package/.eslintrc.cjs +15 -0
- package/.nvmrc +1 -0
- package/.prettierrc.json +8 -0
- package/.vscode/extensions.json +8 -0
- package/README.md +31 -0
- package/dist/KioskSettingView-BTDNtWJ1.js +4 -0
- package/{app-gcisgtft.js → dist/app-XcwzVa60.js} +7363 -7390
- package/dist/app.js +6 -0
- package/dist/frontend/mf-order/src/app.d.ts +4 -0
- package/dist/frontend/mf-order/src/router/routes.d.ts +3 -0
- package/dist/frontend/mf-order/src/views/order-settings/sms/SmsSetting.vue.d.ts +2 -0
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -0
- package/env.d.ts +95 -0
- package/index.html +16 -0
- package/package.json +5 -4
- package/postcss.config.js +6 -0
- package/public/favicon.ico +0 -0
- package/src/App.vue +19 -0
- package/src/Entry.vue +42 -0
- package/src/api/auth/index.ts +20 -0
- package/src/api/delivery/index.ts +15 -0
- package/src/api/index.ts +171 -0
- package/src/api/kiosk/index.ts +22 -0
- package/src/api/menu/index.ts +13 -0
- package/src/api/order/index.ts +15 -0
- package/src/api/order-setting/index.ts +25 -0
- package/src/api/public-setting/index.ts +11 -0
- package/src/api/remoteOrder/index.ts +142 -0
- package/src/api/restaurant-setting/index.ts +55 -0
- package/src/api/table-setting/index.ts +30 -0
- package/src/app.ts +7 -0
- package/src/assets/base.css +6 -0
- package/src/assets/images/no-data.svg +35 -0
- package/src/assets/logo.svg +1 -0
- package/src/assets/main.css +1 -0
- package/src/components/GoogleMap.vue +216 -0
- package/src/components/RestaurantSelection.vue +34 -0
- package/src/components/index.ts +7 -0
- package/src/components/snackbar.ts +44 -0
- package/src/components/type.ts +103 -0
- package/src/composables/index.ts +7 -0
- package/src/composables/loading/index.ts +51 -0
- package/src/composables/search.ts +18 -0
- package/src/helpers/currency.ts +6 -0
- package/src/helpers/date.ts +29 -0
- package/src/helpers/iteration.ts +87 -0
- package/src/helpers/map.ts +92 -0
- package/src/helpers/menu.ts +166 -0
- package/src/helpers/number.ts +25 -0
- package/src/helpers/object.ts +12 -0
- package/src/helpers/profile.ts +52 -0
- package/src/i18n.ts +43 -0
- package/src/index.d.ts +3 -0
- package/src/main.ts +77 -0
- package/src/modules/kiosk/interface.ts +16 -0
- package/src/modules/order-setting/interface.ts +4 -0
- package/src/modules/order-setting/kiosk/interface.ts +52 -0
- package/src/plugins/google-maps.ts +28 -0
- package/src/router/index.ts +10 -0
- package/src/router/routes.ts +43 -0
- package/src/stores/app/index.ts +58 -0
- package/src/stores/iframe/index.ts +23 -0
- package/src/stores/kiosk/index.ts +40 -0
- package/src/stores/kiosk/mapper.ts +25 -0
- package/src/stores/menu/menu.ts +258 -0
- package/src/stores/order-setting/index.ts +61 -0
- package/src/stores/order-setting/mapper.ts +104 -0
- package/src/stores/restaurant/index.ts +138 -0
- package/src/stores/table-settings.ts +160 -0
- package/src/stores/type.ts +65 -0
- package/src/utils/constants/route.ts +15 -0
- package/src/utils/number.ts +16 -0
- package/src/utils/object.ts +15 -0
- package/src/views/all-orders/ActionMenuCell.vue +92 -0
- package/src/views/all-orders/FilterRestaurant.vue +71 -0
- package/src/views/all-orders/FilterStatus.vue +121 -0
- package/src/views/all-orders/FilterStatusMenu.vue +44 -0
- package/src/views/all-orders/Orders.vue +524 -0
- package/src/views/all-orders/ReflowOrder.vue +105 -0
- package/src/views/all-orders/UpdateDeliveryOrderDialog.vue +313 -0
- package/src/views/all-orders/order.ts +584 -0
- package/src/views/feedme-express/FeedMeExpress.vue +139 -0
- package/src/views/feedme-express/FeedMeExpressSummary.vue +62 -0
- package/src/views/kiosk/KioskSummary.vue +74 -0
- package/src/views/kiosk/KioskView.vue +140 -0
- package/src/views/kiosk/devices/KioskDeviceCard.vue +105 -0
- package/src/views/kiosk/devices/KioskDeviceDetail.vue +28 -0
- package/src/views/kiosk/devices/KioskDevicesView.vue +27 -0
- package/src/views/kiosk/devices/KioskOtpDialog.vue +15 -0
- package/src/views/kiosk/devices/KioskUnbindConfirm.vue +28 -0
- package/src/views/kiosk/settings/KioskDineInSection.vue +86 -0
- package/src/views/kiosk/settings/KioskDisplayStandSection.vue +98 -0
- package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +25 -0
- package/src/views/kiosk/settings/KioskSettingView.vue +61 -0
- package/src/views/kiosk/settings/KioskTakeawaySection.vue +39 -0
- package/src/views/order-settings/OrderSettingsView.vue +52 -0
- package/src/views/order-settings/components/RestaurantSelector.vue +77 -0
- package/src/views/order-settings/delivery/DeliverySetting.vue +799 -0
- package/src/views/order-settings/delivery/LocalDelivery.vue +0 -0
- package/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue +167 -0
- package/src/views/order-settings/delivery/delivery.data.ts +75 -0
- package/src/views/order-settings/delivery/delivery.ts +41 -0
- package/src/views/order-settings/delivery/inhouse/CurrencyInput.vue +47 -0
- package/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue +235 -0
- package/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue +236 -0
- package/src/views/order-settings/delivery/inhouse/DeliveryTime.vue +143 -0
- package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +186 -0
- package/src/views/order-settings/delivery/inhouse/TimePicker.vue +76 -0
- package/src/views/order-settings/delivery/inhouse/ZoneDialog.vue +143 -0
- package/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue +244 -0
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue +110 -0
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +261 -0
- package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +128 -0
- package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +272 -0
- package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +135 -0
- package/src/views/order-settings/delivery/integrated.data.interface.ts +0 -0
- package/src/views/order-settings/dinein/DineInSetting.vue +128 -0
- package/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue +51 -0
- package/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue +44 -0
- package/src/views/order-settings/dinein/PaymentType.vue +172 -0
- package/src/views/order-settings/pickup/AddressInput.vue +48 -0
- package/src/views/order-settings/pickup/CustomPayment.vue +84 -0
- package/src/views/order-settings/pickup/PaymentSidesheet.vue +167 -0
- package/src/views/order-settings/pickup/PickUpPointDialog.vue +125 -0
- package/src/views/order-settings/pickup/PickUpPointDialogContent.vue +95 -0
- package/src/views/order-settings/pickup/PickUpSetting.vue +233 -0
- package/src/views/order-settings/pickup/PickUpSettingDialog.vue +148 -0
- package/src/views/order-settings/pickup/PickUpSideSheet.vue +15 -0
- package/src/views/order-settings/pickup/Preorder.vue +139 -0
- package/src/views/order-settings/servicecharge/RateInput.vue +34 -0
- package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +453 -0
- package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +233 -0
- package/src/views/order-settings/sms/SmsSetting.vue +162 -0
- package/tailwind.config.js +20 -0
- package/tsconfig.app.json +25 -0
- package/tsconfig.json +18 -0
- package/tsconfig.node.json +16 -0
- package/vite.config.ts +60 -0
- package/KioskSettingView-BRJpaAwI.js +0 -4
- package/app.js +0 -5
- package/frontend/mf-order/src/app.d.ts +0 -2
- package/frontend/mf-order/tsconfig.app.tsbuildinfo +0 -1
- package/style.css +0 -1
- package/{common → dist/common}/booking/index.d.ts +0 -0
- package/{common → dist/common}/config/bank/index.d.ts +0 -0
- package/{common → dist/common}/config/bank/malaysia.d.ts +0 -0
- package/{common → dist/common}/config/bank/singapore.d.ts +0 -0
- package/{common → dist/common}/config/index.d.ts +0 -0
- package/{common → dist/common}/convertor/index.d.ts +0 -0
- package/{common → dist/common}/index.d.ts +0 -0
- package/{common → dist/common}/number/index.d.ts +0 -0
- package/{common → dist/common}/sms/index.d.ts +0 -0
- package/{common → dist/common}/util/index.d.ts +0 -0
- package/{favicon.ico → dist/favicon.ico} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/App.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/all-orders/Orders.vue.d.ts → dist/frontend/mf-order/src/Entry.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/auth/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/delivery/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/kiosk/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/menu/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/order/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/order-setting/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/public-setting/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/remoteOrder/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/restaurant-setting/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/api/table-setting/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/components/GoogleMap.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/components/RestaurantSelection.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/components/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/components/snackbar.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/components/type.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/composables/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/composables/loading/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/composables/search.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/currency.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/date.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/iteration.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/map.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/menu.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/number.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/object.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/helpers/profile.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/i18n.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/main.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/modules/kiosk/interface.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/interface.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/kiosk/interface.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/plugins/google-maps.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/router/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/app/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/iframe/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/mapper.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/menu/menu.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/mapper.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/restaurant/index.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/table-settings.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/stores/type.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/utils/constants/route.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/utils/number.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/utils/object.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/feedme-express/FeedMeExpress.vue.d.ts → dist/frontend/mf-order/src/views/all-orders/Orders.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/all-orders/order.d.ts +2 -2
- package/{frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts → dist/frontend/mf-order/src/views/feedme-express/FeedMeExpress.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/feedme-express/FeedMeExpressSummary.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/OrderSettingsView.vue.d.ts → dist/frontend/mf-order/src/views/kiosk/KioskView.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/delivery/LocalDelivery.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/OrderSettingsView.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/components/RestaurantSelector.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/dinein/DineInSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/delivery/LocalDelivery.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated.data.interface.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/pickup/PickUpSideSheet.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/dinein/DineInSetting.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/PaymentType.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSetting.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSideSheet.vue.d.ts} +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +0 -0
- package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +0 -0
- package/{frontend/mf-order/src/views/order-settings/sms/SmsSetting.vue.d.ts → dist/frontend/mf-order/src/views/order-settings/servicecharge/ServiceChargeSetting.vue.d.ts} +0 -0
- package/{package → dist/package}/entity/booking/booking.do.d.ts +0 -0
- package/{package → dist/package}/entity/booking/booking.dto.d.ts +0 -0
- package/{package → dist/package}/entity/booking/booking.enum.d.ts +0 -0
- package/{package → dist/package}/entity/business/business.dto.d.ts +0 -0
- package/{package → dist/package}/entity/clickup/clickup.dto.d.ts +0 -0
- package/{package → dist/package}/entity/cursor/cursor.dto.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/delivery.do.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/delivery.dto.d.ts +28 -28
- package/{package → dist/package}/entity/delivery/delivery.enum.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/grab.dto.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/grab.enum.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/kosmo.dto.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/kosmo.enum.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/manual.dto.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/manual.enum.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/gateway/pandago.dto.d.ts +2 -2
- package/{package → dist/package}/entity/delivery/gateway/pandago.enum.d.ts +0 -0
- package/{package → dist/package}/entity/delivery/linked-delivery.do.d.ts +0 -0
- package/{package → dist/package}/entity/food-court/food-court.do.d.ts +0 -0
- package/{package → dist/package}/entity/food-court/food-court.dto.d.ts +0 -0
- package/{package → dist/package}/entity/food-court/food-court.enum.d.ts +0 -0
- package/{package → dist/package}/entity/food-court/order.do.d.ts +0 -0
- package/{package → dist/package}/entity/food-court/order.dto.d.ts +0 -0
- package/{package → dist/package}/entity/general/dateTime.dto.d.ts +0 -0
- package/{package → dist/package}/entity/general/number.dto.d.ts +0 -0
- package/{package → dist/package}/entity/general/search.dto.d.ts +0 -0
- package/{package → dist/package}/entity/incoming-order/incoming-order-to-bill.dto.d.ts +0 -0
- package/{package → dist/package}/entity/incoming-order/incoming-order.do.d.ts +0 -0
- package/{package → dist/package}/entity/incoming-order/incoming-order.dto.d.ts +0 -0
- package/{package → dist/package}/entity/incoming-order/incoming-order.enum.d.ts +0 -0
- package/{package → dist/package}/entity/index.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/kiosk.do.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/kiosk.dto.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/marketing/marketing.dto.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/scanner/scanner.do.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/scanner/scanner.dto.d.ts +0 -0
- package/{package → dist/package}/entity/kiosk/scanner/scanner.enum.d.ts +0 -0
- package/{package → dist/package}/entity/marketing/marketing.dto.d.ts +0 -0
- package/{package → dist/package}/entity/member/member.dto.d.ts +0 -0
- package/{package → dist/package}/entity/money/money.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order/dine-in/dine-in.do.d.ts +0 -0
- package/{package → dist/package}/entity/order/dine-in/dine-in.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/dine-in/qr.do.d.ts +0 -0
- package/{package → dist/package}/entity/order/dine-in/reservation.do.d.ts +0 -0
- package/{package → dist/package}/entity/order/dine-in/reservation.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/effects/effect.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/effects/effect.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order/menu/menu.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/order-item/order-item.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/order.do.d.ts +0 -0
- package/{package → dist/package}/entity/order/order.dto.d.ts +4 -4
- package/{package → dist/package}/entity/order/order.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order/payment/payment.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/pickup/pickup.do.d.ts +0 -0
- package/{package → dist/package}/entity/order/pickup/pickup.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/timeslot/timeslot.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order/timeslot/timeslot.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/base-integration.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +48 -48
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +16 -16
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +6 -6
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/grabfood/grabfood-menu.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/grabfood/grabfood-order.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/grabfood/grabfood-settings.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/grabfood/grabfood.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/grabfood/grabfood.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/menu.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/order-platform.dto.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/order-platform.enum.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-menu.do.d.ts +0 -0
- package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +20 -20
- /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood.enum.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/customization/color.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/customization/color.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/order-setting.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/order-setting.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/queue/queue.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/queue/queue.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/reservation/reservation.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/reservation/reservation.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/sequence/sequence.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/sequence/sequence.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/sms/sms.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/sms/sms.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/sms/sms.enum.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/upselling/upselling.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/upselling/upselling.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/v3/v3.do.d.ts +0 -0
- /package/{package → dist/package}/entity/order-setting/v3/v3.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/pagination/pagination.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/payment/payment.enum.d.ts +0 -0
- /package/{package → dist/package}/entity/printer/printer.do.d.ts +0 -0
- /package/{package → dist/package}/entity/queue/queue.do.d.ts +0 -0
- /package/{package → dist/package}/entity/queue/queue.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/queue/queue.enum.d.ts +0 -0
- /package/{package → dist/package}/entity/restaurant/restaurant.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/user/user.do.d.ts +0 -0
- /package/{package → dist/package}/entity/websocket/websocket.dto.d.ts +0 -0
- /package/{package → dist/package}/entity/websocket/websocket.enum.d.ts +0 -0
package/env.d.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
interface ImportMeta {
|
|
4
|
+
readonly env: ImportMetaEnv
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface ImportMetaEnv {
|
|
8
|
+
VITE_AUTH_CLIENT_ID: string
|
|
9
|
+
VITE_GOOGLE_MAP_API_KEY: string
|
|
10
|
+
VITE_FIREBASE_API_KEY: string;
|
|
11
|
+
VITE_FIREBASE_AUTH_DOMAIN: string;
|
|
12
|
+
VITE_FIREBASE_DATABASE_URL: string;
|
|
13
|
+
VITE_FIREBASE_PROJECT_ID: string;
|
|
14
|
+
VITE_FIREBASE_STORAGE_BUCKET: string;
|
|
15
|
+
VITE_FIREBASE_MESSAGING_SENDER_ID: string;
|
|
16
|
+
VITE_FIREBASE_APP_ID: string;
|
|
17
|
+
VITE_FIREBASE_MEASUREMENT_ID: string;
|
|
18
|
+
VITE_DEBUG_MODE: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare module '*.vue' {
|
|
22
|
+
import type { DefineComponent } from 'vue'
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
|
24
|
+
const component: DefineComponent<{}, {}, any>
|
|
25
|
+
export default component
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// vite define
|
|
29
|
+
declare const devInfo: {
|
|
30
|
+
mode: 'production' | 'development'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
declare const appApi: {
|
|
34
|
+
googleMap: string
|
|
35
|
+
firebase: {
|
|
36
|
+
apiKey: string
|
|
37
|
+
authDomain: string
|
|
38
|
+
databaseURL: string
|
|
39
|
+
projectId: string
|
|
40
|
+
storageBucket: string
|
|
41
|
+
messagingSenderId: string
|
|
42
|
+
appId: string
|
|
43
|
+
measurementId: string
|
|
44
|
+
}
|
|
45
|
+
assetBucketUrl: string
|
|
46
|
+
imageBucketUrl: string
|
|
47
|
+
aiSettings: {
|
|
48
|
+
remy: {
|
|
49
|
+
enable: boolean
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
r2: {
|
|
53
|
+
endPoint: string
|
|
54
|
+
bucketName: string
|
|
55
|
+
accessKeyId: string
|
|
56
|
+
secretAccessKey: string
|
|
57
|
+
} | null
|
|
58
|
+
gtm: {
|
|
59
|
+
id: string
|
|
60
|
+
serverUrl: string
|
|
61
|
+
serverMeasurementId: string
|
|
62
|
+
env: string
|
|
63
|
+
debug: boolean
|
|
64
|
+
}
|
|
65
|
+
feedMeClientId: string
|
|
66
|
+
}
|
|
67
|
+
declare const appEndpoint: {
|
|
68
|
+
customerApp: string
|
|
69
|
+
customerV3App: string
|
|
70
|
+
dealer: string
|
|
71
|
+
portalV1: string
|
|
72
|
+
marketingPortal: string
|
|
73
|
+
inventoryPortal: string
|
|
74
|
+
report: string
|
|
75
|
+
licensePortal: string
|
|
76
|
+
tableMapping: string | undefined
|
|
77
|
+
templateBuilder: string | undefined
|
|
78
|
+
mainBackend: string | undefined
|
|
79
|
+
menuV4Backend: string | undefined
|
|
80
|
+
smsBackend: string | undefined
|
|
81
|
+
linkedDeliveryBackend: string | undefined
|
|
82
|
+
foodMarketHubBackend: string | undefined
|
|
83
|
+
foodpandaBackend: string | undefined
|
|
84
|
+
grabfoodBackend: string | undefined
|
|
85
|
+
shopeefoodBackend: string | undefined
|
|
86
|
+
mallIntegrationBackend: string | undefined
|
|
87
|
+
cubeJsBackend: string | undefined
|
|
88
|
+
marketingV2Backend: string | undefined
|
|
89
|
+
hrBackend: string | undefined
|
|
90
|
+
inventoryBackend: string | undefined
|
|
91
|
+
paymentBackend: string | undefined
|
|
92
|
+
remy: string
|
|
93
|
+
eInvoiceBackend: string | undefined
|
|
94
|
+
mdmPortal: string
|
|
95
|
+
}
|
package/index.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<link rel="icon" href="/favicon.ico">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
+
<title>Vite App</title>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script type="module" src="/src/main.ts"></script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feedmepos/mf-order-setting",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"module": "./app.js",
|
|
5
|
+
"module": "./dist/app.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
9
|
-
"import": "./app.js"
|
|
9
|
+
"import": "./dist/app.js"
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"build:mf": "vite build --mode fmmf",
|
|
18
18
|
"build:dts": "NODE_OPTIONS=--max-old-space-size=16384 vue-tsc --declaration --emitDeclarationOnly -p tsconfig.app.json --outDir ./dist",
|
|
19
19
|
"publish-npm": "yarn build && yarn npm publish --no-git-checks",
|
|
20
|
-
"build-only": "yarn build:mf && yarn build:dts
|
|
20
|
+
"build-only": "dotenv -e .env.dev -- yarn build:mf && yarn build:dts",
|
|
21
21
|
"build:dev": "cross-env NODE_ENV=dev vite build --mode dev",
|
|
22
22
|
"build:prod": "vite build --mode prod",
|
|
23
23
|
"type-check": "set NODE_OPTIONS=--max-old-space-size=16384 && vue-tsc --noEmit -p tsconfig.app.json --composite false",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"vue-router": "^4.2.5"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
+
"dotenv-cli": "^7.4.2",
|
|
50
51
|
"@babel/types": "^7.24.7",
|
|
51
52
|
"@rushstack/eslint-patch": "^1.3.3",
|
|
52
53
|
"@tsconfig/node18": "^18.2.2",
|
|
Binary file
|
package/src/App.vue
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { onMounted } from 'vue'
|
|
3
|
+
import { setGoogleMap } from './helpers/map'
|
|
4
|
+
import { Loader } from 'google-maps'
|
|
5
|
+
|
|
6
|
+
onMounted(async () => {
|
|
7
|
+
const loader = new Loader(import.meta.env.VITE_GOOGLE_MAP_API_KEY, {
|
|
8
|
+
libraries: ['places']
|
|
9
|
+
})
|
|
10
|
+
const map = await loader.load()
|
|
11
|
+
setGoogleMap(map)
|
|
12
|
+
})
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<div class="flex-1 overflow-auto">
|
|
17
|
+
<RouterView />
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
package/src/Entry.vue
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { FmNavBar } from '@feedmepos/mf-common'
|
|
3
|
+
import { computed } from 'vue'
|
|
4
|
+
import { useRoute } from 'vue-router'
|
|
5
|
+
import { onMounted } from 'vue'
|
|
6
|
+
import { setGoogleMap } from './helpers/map'
|
|
7
|
+
import { Loader } from 'google-maps'
|
|
8
|
+
import { useIframeStore } from '@/stores/iframe'
|
|
9
|
+
import App from './App.vue'
|
|
10
|
+
|
|
11
|
+
const route = useRoute()
|
|
12
|
+
const showHeader = computed(() => route.query.showHeader !== 'false')
|
|
13
|
+
const { state } = useIframeStore()
|
|
14
|
+
|
|
15
|
+
onMounted(async () => {
|
|
16
|
+
if (state.isIframe) {
|
|
17
|
+
parent.postMessage({ event: 'ready' }, '*')
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const loader = new Loader(import.meta.env.VITE_GOOGLE_MAP_API_KEY, {
|
|
21
|
+
libraries: ['places']
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const map = await loader.load()
|
|
25
|
+
setGoogleMap(map)
|
|
26
|
+
})
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<div style="height: 100dvh; width: 100dvw" class="flex flex-col overflow-hidden">
|
|
31
|
+
<div v-if="!state.isIframe" style="height: 64px">
|
|
32
|
+
<FmNavBar />
|
|
33
|
+
</div>
|
|
34
|
+
<App/>
|
|
35
|
+
</div>
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<style>
|
|
39
|
+
.app-container {
|
|
40
|
+
display: none;
|
|
41
|
+
}
|
|
42
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { authInstance } from "..";
|
|
2
|
+
|
|
3
|
+
async function getCustomToken(token: string) {
|
|
4
|
+
const reponse = await authInstance({
|
|
5
|
+
customIdToken: token,
|
|
6
|
+
}).post(`/token`, { token });
|
|
7
|
+
return reponse.data;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async function getIdToken(customToken: string) {
|
|
11
|
+
const reponse = await authInstance({
|
|
12
|
+
customIdToken: customToken,
|
|
13
|
+
}).post(`/token/idtoken`, { customToken: customToken });
|
|
14
|
+
return reponse.data;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const AuthApi = {
|
|
18
|
+
getCustomToken,
|
|
19
|
+
getIdToken,
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import type { DeliveryCancelDto, FdtoDeliveryManualWebhook, OrderPortalDto } from '@entity';
|
|
3
|
+
import { baseClientInstance, getData } from '..';
|
|
4
|
+
|
|
5
|
+
export const deliveryApi = {
|
|
6
|
+
async updateManualOrder(payload: FdtoDeliveryManualWebhook): Promise<OrderPortalDto> {
|
|
7
|
+
return getData(await baseClientInstance().post('/deliveries/update-manual-status', payload));
|
|
8
|
+
},
|
|
9
|
+
async cancelDeliveryOrder(payload: DeliveryCancelDto): Promise<OrderPortalDto> {
|
|
10
|
+
return getData(await baseClientInstance().post('/deliveries/cancel-delivery', payload));
|
|
11
|
+
},
|
|
12
|
+
async refetchDeliveryOrder(orderId: string): Promise<OrderPortalDto> {
|
|
13
|
+
return getData(await baseClientInstance().post(`/deliveries/${orderId}/refresh`));
|
|
14
|
+
}
|
|
15
|
+
};
|
package/src/api/index.ts
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import axios, { AxiosError, type AxiosInstance, type AxiosResponse } from 'axios'
|
|
2
|
+
import { F_COUNTRY } from '@feedmepos/core/entity'
|
|
3
|
+
import { useCoreStore } from '@feedmepos/mf-common'
|
|
4
|
+
|
|
5
|
+
export const defaultCountry = F_COUNTRY.enum.MY
|
|
6
|
+
type ApiVariant = 'portal' | 'auth' | 'localhost';
|
|
7
|
+
|
|
8
|
+
interface ApiUrl {
|
|
9
|
+
portalBackendUrl: string
|
|
10
|
+
websocketBackendUrl: string
|
|
11
|
+
linkedDeliveryBackend: string
|
|
12
|
+
menuBackendUrl: string;
|
|
13
|
+
smsBackendUrl: string;
|
|
14
|
+
accountBackendUrl: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let apiUrl: ApiUrl | null = null
|
|
18
|
+
|
|
19
|
+
export const SvcConfig = {
|
|
20
|
+
getIdToken(): string | null {
|
|
21
|
+
const idToken = useCoreStore().sessionUser.value?.token
|
|
22
|
+
return idToken ?? null
|
|
23
|
+
},
|
|
24
|
+
getBusinessId(): string | null {
|
|
25
|
+
return useCoreStore().currentBusiness.value?._id ?? null;
|
|
26
|
+
},
|
|
27
|
+
getRestaurantId(): string | null {
|
|
28
|
+
return useCoreStore().currentRestaurant.value?._id ?? null
|
|
29
|
+
},
|
|
30
|
+
setRestaurantId(restaurantId: string | null): void {
|
|
31
|
+
const coreStore = useCoreStore()
|
|
32
|
+
if (restaurantId) {
|
|
33
|
+
const restaurant = coreStore.restaurants.value.find((r) => r._id === restaurantId)
|
|
34
|
+
if (restaurant) {
|
|
35
|
+
coreStore.changeRestaurant(restaurant)
|
|
36
|
+
} else {
|
|
37
|
+
console.warn(`Restaurant with ID ${restaurantId} not found.`)
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
coreStore.changeRestaurant(undefined)
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
setBackendUrl() {
|
|
44
|
+
const _country = useCoreStore().currentCountry.value || defaultCountry
|
|
45
|
+
apiUrl = generateBackendUrl(_country)
|
|
46
|
+
},
|
|
47
|
+
getBackendUrl(): ApiUrl {
|
|
48
|
+
const _country = useCoreStore().currentCountry.value || defaultCountry
|
|
49
|
+
return apiUrl || generateBackendUrl(_country)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function generateBackendUrl(country: F_COUNTRY): ApiUrl {
|
|
54
|
+
const { namespace } = useCoreStore()
|
|
55
|
+
const isDev = namespace.value === "dev"
|
|
56
|
+
const area = country !== F_COUNTRY.enum.MY ? `.${country.toLowerCase()}` : '';
|
|
57
|
+
const domain = `${isDev ? '-dev' : ''}${area}.feedmeapi.com`;
|
|
58
|
+
const portalBackendUrl = `https://portal-v2${domain}`;
|
|
59
|
+
const accountBackendUrl = `https://account${domain}`;
|
|
60
|
+
return {
|
|
61
|
+
portalBackendUrl,
|
|
62
|
+
websocketBackendUrl: `wss://94ilf9iqc0.execute-api.ap-southeast-1.amazonaws.com/${isDev ? 'dev' : 'prod'}`,
|
|
63
|
+
linkedDeliveryBackend: `${portalBackendUrl}/linked-deliveries`,
|
|
64
|
+
menuBackendUrl: `${portalBackendUrl}/menu-v4`,
|
|
65
|
+
smsBackendUrl: `https://sms${domain}`,
|
|
66
|
+
accountBackendUrl
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
71
|
+
interface SvcMasterCompanyResponse<T = {}> {
|
|
72
|
+
status: string
|
|
73
|
+
success: boolean
|
|
74
|
+
data: T
|
|
75
|
+
error: SvsMasterCompanyError
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface SvsMasterCompanyError {
|
|
79
|
+
message: string
|
|
80
|
+
code: string
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
class ApiError extends Error {
|
|
84
|
+
constructor(message?: string) {
|
|
85
|
+
super(message)
|
|
86
|
+
this.name = 'ApiError'
|
|
87
|
+
Object.setPrototypeOf(this, new.target.prototype)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export class SvcCompanyApiError extends ApiError {
|
|
92
|
+
constructor(message: string) {
|
|
93
|
+
super(message)
|
|
94
|
+
this.name = 'SvcCompanyApiError'
|
|
95
|
+
this.message = message
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function getBaseUrl(variant: ApiVariant, port?: string): string {
|
|
100
|
+
switch (variant) {
|
|
101
|
+
case 'portal':
|
|
102
|
+
return SvcConfig.getBackendUrl().portalBackendUrl;
|
|
103
|
+
case 'auth':
|
|
104
|
+
return SvcConfig.getBackendUrl().accountBackendUrl;
|
|
105
|
+
case 'localhost':
|
|
106
|
+
return `http://localhost${port ? `:${port}` : ''}`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export const baseClientInstance = (
|
|
111
|
+
path = '',
|
|
112
|
+
variant: ApiVariant = 'portal',
|
|
113
|
+
config?: { noIdRequired?: boolean, url?: string, customIdToken?: string },
|
|
114
|
+
port?: string,
|
|
115
|
+
): AxiosInstance => {
|
|
116
|
+
const url = config?.url ?? getBaseUrl(variant, port)
|
|
117
|
+
const idToken = SvcConfig.getIdToken();
|
|
118
|
+
if (idToken || config?.noIdRequired || config?.customIdToken) {
|
|
119
|
+
const client = axios.create({
|
|
120
|
+
baseURL: `${url}${path}`,
|
|
121
|
+
headers: {
|
|
122
|
+
Authorization: `Bearer ${config?.customIdToken || idToken}`
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
client.interceptors.response.use(
|
|
126
|
+
(response: AxiosResponse<SvcMasterCompanyResponse>) => response,
|
|
127
|
+
async (error): Promise<unknown> => {
|
|
128
|
+
if (error instanceof AxiosError) {
|
|
129
|
+
const data = error.response?.data
|
|
130
|
+
const errMsg = data?.message || data?.error || `${error.message}` || `${error}`
|
|
131
|
+
return Promise.reject(new SvcCompanyApiError(errMsg))
|
|
132
|
+
}
|
|
133
|
+
return Promise.reject(error)
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
return client
|
|
137
|
+
} else {
|
|
138
|
+
throw new Error('Unauthorized request')
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const authInstance = (config?: { noIdRequired?: boolean, url?: string, customIdToken?: string },): AxiosInstance => {
|
|
143
|
+
return baseClientInstance('/', 'auth', config);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export const restaurantClientInstance = (prefix?: string): AxiosInstance => {
|
|
147
|
+
const restaurantId = SvcConfig.getRestaurantId();
|
|
148
|
+
const restaurantPath = `${prefix ?? ''}/restaurants/${restaurantId}`;
|
|
149
|
+
if (restaurantId) {
|
|
150
|
+
return baseClientInstance(restaurantPath);
|
|
151
|
+
} else {
|
|
152
|
+
throw new Error('Invalid restaurant');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export const menuClientInstance = (): AxiosInstance => {
|
|
157
|
+
const businessId = SvcConfig.getBusinessId();
|
|
158
|
+
if (!businessId) throw new Error('Invalid business ID');
|
|
159
|
+
const { menuBackendUrl } = SvcConfig.getBackendUrl();
|
|
160
|
+
const url = `${menuBackendUrl}/businesses/${businessId}/menu-v4`;
|
|
161
|
+
return baseClientInstance('', 'portal', { url });
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export const smsBackendClientInstance = (): AxiosInstance => {
|
|
165
|
+
const { smsBackendUrl } = SvcConfig.getBackendUrl();
|
|
166
|
+
return baseClientInstance('', 'portal', { url: smsBackendUrl });
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export function getData<T>(response: AxiosResponse<T>): T {
|
|
170
|
+
return response.data
|
|
171
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getData, restaurantClientInstance } from '@/api';
|
|
2
|
+
import { KioskOtpDto, KioskDeviceDto } from '@entity';
|
|
3
|
+
|
|
4
|
+
async function requestOtp() : Promise<KioskOtpDto>{
|
|
5
|
+
const result = await restaurantClientInstance().get('/kiosk/otp');
|
|
6
|
+
return getData<KioskOtpDto>(result);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function getDevices(): Promise<KioskDeviceDto[]>{
|
|
10
|
+
const result = await restaurantClientInstance().get('/kiosk/devices');
|
|
11
|
+
return getData<KioskDeviceDto[]>(result);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async function unbind(machineId: string): Promise<void>{
|
|
15
|
+
await restaurantClientInstance().delete(`/kiosk/unbind/${machineId}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const KioskApi = {
|
|
19
|
+
requestOtp,
|
|
20
|
+
getDevices,
|
|
21
|
+
unbind
|
|
22
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getData, menuClientInstance } from '..';
|
|
2
|
+
import { FdoMenuV4 } from '@feedmepos/menu/entity';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
interface MenuV4Doc extends FdoMenuV4{
|
|
6
|
+
_rev: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const menuApi = {
|
|
10
|
+
async readMenu(): Promise<MenuV4Doc> {
|
|
11
|
+
return getData(await menuClientInstance().get(''));
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OrderPortalDto, OrderQueryDto, OrderRefundDto } from '@entity';
|
|
2
|
+
import { baseClientInstance, getData } from '..';
|
|
3
|
+
import type { FdtoDeliveryManualWebhook } from '@feedmepos/ordering/package/entity';
|
|
4
|
+
|
|
5
|
+
export const orderApi = {
|
|
6
|
+
async read(dto: OrderQueryDto): Promise<OrderPortalDto[]> {
|
|
7
|
+
return getData(await baseClientInstance().post('/orders', dto));
|
|
8
|
+
},
|
|
9
|
+
async refund(dto: OrderRefundDto): Promise<OrderPortalDto> {
|
|
10
|
+
return getData(await baseClientInstance().post('/orders/refund', dto));
|
|
11
|
+
},
|
|
12
|
+
async updateManualOrder(payload: FdtoDeliveryManualWebhook): Promise<OrderPortalDto> {
|
|
13
|
+
return getData(await baseClientInstance().post('/deliveries/update-manual-status', payload));
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getData, restaurantClientInstance, smsBackendClientInstance, SvcConfig } from '@/api';
|
|
2
|
+
import { OrderSettingsDto, OrderSettingUpdateDto } from '@entity';
|
|
3
|
+
|
|
4
|
+
async function getOrderSetting() : Promise<OrderSettingsDto>{
|
|
5
|
+
const result = await restaurantClientInstance().get('/order-settings');
|
|
6
|
+
return getData<OrderSettingsDto>(result);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async function updateOrderSetting(payload: OrderSettingUpdateDto): Promise<OrderSettingsDto>{
|
|
10
|
+
const result = await restaurantClientInstance().put('/order-settings', payload);
|
|
11
|
+
return getData<OrderSettingsDto>(result);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const OrderSettingApi = {
|
|
15
|
+
getOrderSetting,
|
|
16
|
+
updateOrderSetting,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
async function read() {
|
|
20
|
+
return getData(await smsBackendClientInstance().get(`balance/${SvcConfig.getBusinessId()}`));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const smsApi = {
|
|
24
|
+
read,
|
|
25
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FdoPublicSetting } from '@feedmepos/core/entity';
|
|
2
|
+
import { baseClientInstance, getData } from '..';
|
|
3
|
+
|
|
4
|
+
export const publicSettingApi = {
|
|
5
|
+
async read(): Promise<FdoPublicSetting> {
|
|
6
|
+
return getData(await baseClientInstance().get('/public-setting'));
|
|
7
|
+
},
|
|
8
|
+
async update(dto: FdoPublicSetting): Promise<FdoPublicSetting> {
|
|
9
|
+
return getData(await baseClientInstance().put('/public-setting', dto));
|
|
10
|
+
},
|
|
11
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
import { baseClientInstance, getData, SvcConfig } from '..';
|
|
3
|
+
import type { DeliveryCompany, LinkedDeliveryDoc } from '../../views/order-settings/delivery/delivery';
|
|
4
|
+
import { FdoFoodpandaSettings, FdoLinkedDelivery, FdoRestaurant, FdoRestaurantFeedmeDelivery, FdoRestaurantInHouseDelivery, FdoShopeeFoodOrder } from '@feedmepos/core/entity';
|
|
5
|
+
import type { FdoFoodpandaOrderOutput, FdoGrabfoodOrderOutput, FdoGrabfoodSettings, FdoShopeeFoodOrderOutput, FdoShopeeFoodSettings, FdtoGetOrderReq } from '@entity';
|
|
6
|
+
|
|
7
|
+
type DeliveryCompanyUrl = 'foodpanda' | 'grabfood' | 'shopeefood'
|
|
8
|
+
|
|
9
|
+
const deliveryClientInstance = (
|
|
10
|
+
deliveryCompany: DeliveryCompanyUrl
|
|
11
|
+
): AxiosInstance => {
|
|
12
|
+
const path = `/${deliveryCompany}`;
|
|
13
|
+
return baseClientInstance(path, 'portal');
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const linkedDeliveryClientInstance = () => {
|
|
17
|
+
const restaurantId = SvcConfig.getRestaurantId();
|
|
18
|
+
if (!restaurantId) throw new Error('Invalid restaurant ID');
|
|
19
|
+
const { linkedDeliveryBackend } = SvcConfig.getBackendUrl();
|
|
20
|
+
const url = `${linkedDeliveryBackend}/restaurants/${restaurantId}/linked-deliveries`;
|
|
21
|
+
return baseClientInstance('', 'portal', { url });
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export const remoteOrderApi = {
|
|
26
|
+
async readLinkedDeliveryCompanies(): Promise<LinkedDeliveryDoc[]> {
|
|
27
|
+
return getData(await linkedDeliveryClientInstance().get(''));
|
|
28
|
+
},
|
|
29
|
+
async readLocalDeliveryCompanies(): Promise<DeliveryCompany[]> {
|
|
30
|
+
return getData(await baseClientInstance().get('/deliveries'));
|
|
31
|
+
},
|
|
32
|
+
async createDeliveryCompany(delivery: FdoLinkedDelivery): Promise<LinkedDeliveryDoc> {
|
|
33
|
+
return getData(await linkedDeliveryClientInstance().post('', delivery));
|
|
34
|
+
},
|
|
35
|
+
async updateDeliveryCompany(delivery: LinkedDeliveryDoc): Promise<LinkedDeliveryDoc> {
|
|
36
|
+
return getData(await linkedDeliveryClientInstance().put(`/${delivery._id}`, delivery));
|
|
37
|
+
},
|
|
38
|
+
async deleteDeliveryCompany(delivery: LinkedDeliveryDoc): Promise<LinkedDeliveryDoc> {
|
|
39
|
+
return getData(await linkedDeliveryClientInstance().delete(`/${delivery._id}`));
|
|
40
|
+
},
|
|
41
|
+
integratedDelivery: {
|
|
42
|
+
async updateInhouse(restaurantId: string, dto: FdoRestaurantInHouseDelivery): Promise<FdoRestaurant> {
|
|
43
|
+
return getData(await baseClientInstance().put(`/restaurants/${restaurantId}/in-house-delivery`, dto));
|
|
44
|
+
},
|
|
45
|
+
async updateFeedme(restaurantId: string, dto: FdoRestaurantFeedmeDelivery): Promise<FdoRestaurant> {
|
|
46
|
+
return getData(await baseClientInstance().put(`/restaurants/${restaurantId}/feedme-delivery`, dto));
|
|
47
|
+
},
|
|
48
|
+
async readFoodpanda(restaurantId: string): Promise<FdoFoodpandaSettings | null> {
|
|
49
|
+
return getData(await deliveryClientInstance('foodpanda').get(`/setting/${restaurantId}`));
|
|
50
|
+
},
|
|
51
|
+
async readFoodpandaOrders(req: FdtoGetOrderReq): Promise<FdoFoodpandaOrderOutput[]> {
|
|
52
|
+
return getData(await deliveryClientInstance('foodpanda').get('/order', { params: req }));
|
|
53
|
+
},
|
|
54
|
+
async reflowFoodpandaOrders(orderId: string): Promise<FdoFoodpandaOrderOutput> {
|
|
55
|
+
return getData(await deliveryClientInstance('foodpanda').put(`/order/reflow/${orderId}`));
|
|
56
|
+
},
|
|
57
|
+
async rejectFoodpandaOrders(orderId: string): Promise<FdoFoodpandaOrderOutput> {
|
|
58
|
+
return getData(await deliveryClientInstance('foodpanda').put(`/order/void/${orderId}`));
|
|
59
|
+
},
|
|
60
|
+
async updateFoodpanda(restaurantId: string, dto: FdoFoodpandaSettings): Promise<FdoFoodpandaSettings> {
|
|
61
|
+
return getData(await deliveryClientInstance('foodpanda').put(`/setting/${restaurantId}`, {
|
|
62
|
+
_id: restaurantId,
|
|
63
|
+
...dto,
|
|
64
|
+
}));
|
|
65
|
+
},
|
|
66
|
+
async syncFoodpandaMenu(restaurantId: string): Promise<FdoFoodpandaSettings> {
|
|
67
|
+
return getData(await deliveryClientInstance('foodpanda').put(`/menu-sync/${restaurantId}`));
|
|
68
|
+
},
|
|
69
|
+
async readGrabfood(restaurantId: string): Promise<FdoGrabfoodSettings | null> {
|
|
70
|
+
return getData(await deliveryClientInstance('grabfood').get(`/setting/${restaurantId}`));
|
|
71
|
+
},
|
|
72
|
+
async readGrabfoodOrders(req: FdtoGetOrderReq): Promise<FdoGrabfoodOrderOutput[]> {
|
|
73
|
+
return getData(await deliveryClientInstance('grabfood').get('/order', { params: req }));
|
|
74
|
+
},
|
|
75
|
+
async reflowGrabfoodOrders(orderId: string): Promise<FdoGrabfoodOrderOutput> {
|
|
76
|
+
return getData(await deliveryClientInstance('grabfood').put(`/order/reflow/${orderId}`));
|
|
77
|
+
},
|
|
78
|
+
async rejectGrabfoodOrders(orderId: string): Promise<FdoGrabfoodOrderOutput> {
|
|
79
|
+
return getData(await deliveryClientInstance('grabfood').put(`/order/void/${orderId}`));
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
async updateGrabfood(restaurantId: string, dto: FdoGrabfoodSettings): Promise<FdoRestaurant> {
|
|
83
|
+
return getData(await deliveryClientInstance('grabfood').put(`/setting/${restaurantId}`, {
|
|
84
|
+
_id: restaurantId,
|
|
85
|
+
...dto,
|
|
86
|
+
}));
|
|
87
|
+
},
|
|
88
|
+
async syncGrabfoodMenu(merchantId: string): Promise<FdoGrabfoodSettings> {
|
|
89
|
+
return getData(await deliveryClientInstance('grabfood').get(`/menu-sync/${merchantId}`));
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
async readShopeefood(restaurantId: string): Promise<FdoShopeeFoodSettings | null> {
|
|
93
|
+
return getData(await deliveryClientInstance('shopeefood').get(`/setting/${restaurantId}`));
|
|
94
|
+
},
|
|
95
|
+
async readShopeefoodOrders(req: FdtoGetOrderReq): Promise<(FdoShopeeFoodOrderOutput & FdoShopeeFoodOrder)[]> {
|
|
96
|
+
return getData(await deliveryClientInstance('shopeefood').get('/order', { params: req }));
|
|
97
|
+
},
|
|
98
|
+
async reflowShopeefoodOrders(orderId: string): Promise<FdoShopeeFoodOrderOutput> {
|
|
99
|
+
return getData(await deliveryClientInstance('shopeefood').put(`/order/reflow/${orderId}`));
|
|
100
|
+
},
|
|
101
|
+
async rejectShopeefoodOrders(orderId: string): Promise<FdoShopeeFoodOrderOutput> {
|
|
102
|
+
return getData(await deliveryClientInstance('shopeefood').put(`/order/void/${orderId}`));
|
|
103
|
+
},
|
|
104
|
+
async updateShopeefood(restaurantId: string, dto: FdoShopeeFoodSettings): Promise<FdoRestaurant> {
|
|
105
|
+
return getData(await deliveryClientInstance('shopeefood').put(`/setting/${restaurantId}`, {
|
|
106
|
+
_id: restaurantId,
|
|
107
|
+
...dto,
|
|
108
|
+
}));
|
|
109
|
+
},
|
|
110
|
+
async syncShopeefoodMenu(storeId: string): Promise<FdoShopeeFoodSettings> {
|
|
111
|
+
return getData(await deliveryClientInstance('shopeefood').get(`/menu-sync/${storeId}`));
|
|
112
|
+
},
|
|
113
|
+
async flowTestOrder(
|
|
114
|
+
restaurantId: string,
|
|
115
|
+
platform: DeliveryCompanyUrl
|
|
116
|
+
): Promise<void> {
|
|
117
|
+
return getData(
|
|
118
|
+
await deliveryClientInstance(platform).put(`/test-order/${restaurantId}`)
|
|
119
|
+
);
|
|
120
|
+
},
|
|
121
|
+
async cancelTestOrder(
|
|
122
|
+
restaurantId: string,
|
|
123
|
+
platform: DeliveryCompanyUrl
|
|
124
|
+
): Promise<void> {
|
|
125
|
+
return getData(
|
|
126
|
+
await deliveryClientInstance(platform).put(
|
|
127
|
+
`/test-order/cancel/${restaurantId}`,
|
|
128
|
+
)
|
|
129
|
+
);
|
|
130
|
+
},
|
|
131
|
+
async reflowFpOrderNotInDb(payload: { restaurantId: string; slot: string }): Promise<void> {
|
|
132
|
+
return getData(
|
|
133
|
+
await deliveryClientInstance('foodpanda').put('/order/reconcile', payload)
|
|
134
|
+
);
|
|
135
|
+
},
|
|
136
|
+
async reflowGfOrderNotInDb(payload: { restaurantId: string; slot: string; date: string }): Promise<void> {
|
|
137
|
+
return getData(
|
|
138
|
+
await deliveryClientInstance('grabfood').put('/order/reconcile', payload)
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
};
|