@feedmepos/mf-order-setting 0.0.4 → 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.
Files changed (368) hide show
  1. package/.env.dev +13 -0
  2. package/.env.example +11 -0
  3. package/.env.prod +12 -0
  4. package/.eslintrc.cjs +15 -0
  5. package/.nvmrc +1 -0
  6. package/.prettierrc.json +8 -0
  7. package/.vscode/extensions.json +8 -0
  8. package/README.md +31 -0
  9. package/dist/KioskSettingView-BTDNtWJ1.js +4 -0
  10. package/{app-B7lXikwq.js → dist/app-XcwzVa60.js} +2 -2
  11. package/{app.js → dist/app.js} +1 -1
  12. package/env.d.ts +95 -0
  13. package/index.html +16 -0
  14. package/package.json +5 -4
  15. package/postcss.config.js +6 -0
  16. package/public/favicon.ico +0 -0
  17. package/src/App.vue +19 -0
  18. package/src/Entry.vue +42 -0
  19. package/src/api/auth/index.ts +20 -0
  20. package/src/api/delivery/index.ts +15 -0
  21. package/src/api/index.ts +171 -0
  22. package/src/api/kiosk/index.ts +22 -0
  23. package/src/api/menu/index.ts +13 -0
  24. package/src/api/order/index.ts +15 -0
  25. package/src/api/order-setting/index.ts +25 -0
  26. package/src/api/public-setting/index.ts +11 -0
  27. package/src/api/remoteOrder/index.ts +142 -0
  28. package/src/api/restaurant-setting/index.ts +55 -0
  29. package/src/api/table-setting/index.ts +30 -0
  30. package/src/app.ts +7 -0
  31. package/src/assets/base.css +6 -0
  32. package/src/assets/images/no-data.svg +35 -0
  33. package/src/assets/logo.svg +1 -0
  34. package/src/assets/main.css +1 -0
  35. package/src/components/GoogleMap.vue +216 -0
  36. package/src/components/RestaurantSelection.vue +34 -0
  37. package/src/components/index.ts +7 -0
  38. package/src/components/snackbar.ts +44 -0
  39. package/src/components/type.ts +103 -0
  40. package/src/composables/index.ts +7 -0
  41. package/src/composables/loading/index.ts +51 -0
  42. package/src/composables/search.ts +18 -0
  43. package/src/helpers/currency.ts +6 -0
  44. package/src/helpers/date.ts +29 -0
  45. package/src/helpers/iteration.ts +87 -0
  46. package/src/helpers/map.ts +92 -0
  47. package/src/helpers/menu.ts +166 -0
  48. package/src/helpers/number.ts +25 -0
  49. package/src/helpers/object.ts +12 -0
  50. package/src/helpers/profile.ts +52 -0
  51. package/src/i18n.ts +43 -0
  52. package/src/index.d.ts +3 -0
  53. package/src/main.ts +77 -0
  54. package/src/modules/kiosk/interface.ts +16 -0
  55. package/src/modules/order-setting/interface.ts +4 -0
  56. package/src/modules/order-setting/kiosk/interface.ts +52 -0
  57. package/src/plugins/google-maps.ts +28 -0
  58. package/src/router/index.ts +10 -0
  59. package/src/router/routes.ts +43 -0
  60. package/src/stores/app/index.ts +58 -0
  61. package/src/stores/iframe/index.ts +23 -0
  62. package/src/stores/kiosk/index.ts +40 -0
  63. package/src/stores/kiosk/mapper.ts +25 -0
  64. package/src/stores/menu/menu.ts +258 -0
  65. package/src/stores/order-setting/index.ts +61 -0
  66. package/src/stores/order-setting/mapper.ts +104 -0
  67. package/src/stores/restaurant/index.ts +138 -0
  68. package/src/stores/table-settings.ts +160 -0
  69. package/src/stores/type.ts +65 -0
  70. package/src/utils/constants/route.ts +15 -0
  71. package/src/utils/number.ts +16 -0
  72. package/src/utils/object.ts +15 -0
  73. package/src/views/all-orders/ActionMenuCell.vue +92 -0
  74. package/src/views/all-orders/FilterRestaurant.vue +71 -0
  75. package/src/views/all-orders/FilterStatus.vue +121 -0
  76. package/src/views/all-orders/FilterStatusMenu.vue +44 -0
  77. package/src/views/all-orders/Orders.vue +524 -0
  78. package/src/views/all-orders/ReflowOrder.vue +105 -0
  79. package/src/views/all-orders/UpdateDeliveryOrderDialog.vue +313 -0
  80. package/src/views/all-orders/order.ts +584 -0
  81. package/src/views/feedme-express/FeedMeExpress.vue +139 -0
  82. package/src/views/feedme-express/FeedMeExpressSummary.vue +62 -0
  83. package/src/views/kiosk/KioskSummary.vue +74 -0
  84. package/src/views/kiosk/KioskView.vue +140 -0
  85. package/src/views/kiosk/devices/KioskDeviceCard.vue +105 -0
  86. package/src/views/kiosk/devices/KioskDeviceDetail.vue +28 -0
  87. package/src/views/kiosk/devices/KioskDevicesView.vue +27 -0
  88. package/src/views/kiosk/devices/KioskOtpDialog.vue +15 -0
  89. package/src/views/kiosk/devices/KioskUnbindConfirm.vue +28 -0
  90. package/src/views/kiosk/settings/KioskDineInSection.vue +86 -0
  91. package/src/views/kiosk/settings/KioskDisplayStandSection.vue +98 -0
  92. package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +25 -0
  93. package/src/views/kiosk/settings/KioskSettingView.vue +61 -0
  94. package/src/views/kiosk/settings/KioskTakeawaySection.vue +39 -0
  95. package/src/views/order-settings/OrderSettingsView.vue +52 -0
  96. package/src/views/order-settings/components/RestaurantSelector.vue +77 -0
  97. package/src/views/order-settings/delivery/DeliverySetting.vue +799 -0
  98. package/src/views/order-settings/delivery/LocalDelivery.vue +0 -0
  99. package/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue +167 -0
  100. package/src/views/order-settings/delivery/delivery.data.ts +75 -0
  101. package/src/views/order-settings/delivery/delivery.ts +41 -0
  102. package/src/views/order-settings/delivery/inhouse/CurrencyInput.vue +47 -0
  103. package/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue +235 -0
  104. package/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue +236 -0
  105. package/src/views/order-settings/delivery/inhouse/DeliveryTime.vue +143 -0
  106. package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +186 -0
  107. package/src/views/order-settings/delivery/inhouse/TimePicker.vue +76 -0
  108. package/src/views/order-settings/delivery/inhouse/ZoneDialog.vue +143 -0
  109. package/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue +244 -0
  110. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue +110 -0
  111. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +261 -0
  112. package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +128 -0
  113. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +272 -0
  114. package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +135 -0
  115. package/src/views/order-settings/delivery/integrated.data.interface.ts +0 -0
  116. package/src/views/order-settings/dinein/DineInSetting.vue +128 -0
  117. package/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue +51 -0
  118. package/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue +44 -0
  119. package/src/views/order-settings/dinein/PaymentType.vue +172 -0
  120. package/src/views/order-settings/pickup/AddressInput.vue +48 -0
  121. package/src/views/order-settings/pickup/CustomPayment.vue +84 -0
  122. package/src/views/order-settings/pickup/PaymentSidesheet.vue +167 -0
  123. package/src/views/order-settings/pickup/PickUpPointDialog.vue +125 -0
  124. package/src/views/order-settings/pickup/PickUpPointDialogContent.vue +95 -0
  125. package/src/views/order-settings/pickup/PickUpSetting.vue +233 -0
  126. package/src/views/order-settings/pickup/PickUpSettingDialog.vue +148 -0
  127. package/src/views/order-settings/pickup/PickUpSideSheet.vue +15 -0
  128. package/src/views/order-settings/pickup/Preorder.vue +139 -0
  129. package/src/views/order-settings/servicecharge/RateInput.vue +34 -0
  130. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +453 -0
  131. package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +233 -0
  132. package/src/views/order-settings/sms/SmsSetting.vue +162 -0
  133. package/tailwind.config.js +20 -0
  134. package/tsconfig.app.json +25 -0
  135. package/tsconfig.json +18 -0
  136. package/tsconfig.node.json +16 -0
  137. package/vite.config.ts +60 -0
  138. package/KioskSettingView-CdcHony9.js +0 -4
  139. /package/{common → dist/common}/booking/index.d.ts +0 -0
  140. /package/{common → dist/common}/config/bank/index.d.ts +0 -0
  141. /package/{common → dist/common}/config/bank/malaysia.d.ts +0 -0
  142. /package/{common → dist/common}/config/bank/singapore.d.ts +0 -0
  143. /package/{common → dist/common}/config/index.d.ts +0 -0
  144. /package/{common → dist/common}/convertor/index.d.ts +0 -0
  145. /package/{common → dist/common}/index.d.ts +0 -0
  146. /package/{common → dist/common}/number/index.d.ts +0 -0
  147. /package/{common → dist/common}/sms/index.d.ts +0 -0
  148. /package/{common → dist/common}/util/index.d.ts +0 -0
  149. /package/{favicon.ico → dist/favicon.ico} +0 -0
  150. /package/{frontend → dist/frontend}/mf-order/src/App.vue.d.ts +0 -0
  151. /package/{frontend → dist/frontend}/mf-order/src/Entry.vue.d.ts +0 -0
  152. /package/{frontend → dist/frontend}/mf-order/src/api/auth/index.d.ts +0 -0
  153. /package/{frontend → dist/frontend}/mf-order/src/api/delivery/index.d.ts +0 -0
  154. /package/{frontend → dist/frontend}/mf-order/src/api/index.d.ts +0 -0
  155. /package/{frontend → dist/frontend}/mf-order/src/api/kiosk/index.d.ts +0 -0
  156. /package/{frontend → dist/frontend}/mf-order/src/api/menu/index.d.ts +0 -0
  157. /package/{frontend → dist/frontend}/mf-order/src/api/order/index.d.ts +0 -0
  158. /package/{frontend → dist/frontend}/mf-order/src/api/order-setting/index.d.ts +0 -0
  159. /package/{frontend → dist/frontend}/mf-order/src/api/public-setting/index.d.ts +0 -0
  160. /package/{frontend → dist/frontend}/mf-order/src/api/remoteOrder/index.d.ts +0 -0
  161. /package/{frontend → dist/frontend}/mf-order/src/api/restaurant-setting/index.d.ts +0 -0
  162. /package/{frontend → dist/frontend}/mf-order/src/api/table-setting/index.d.ts +0 -0
  163. /package/{frontend → dist/frontend}/mf-order/src/app.d.ts +0 -0
  164. /package/{frontend → dist/frontend}/mf-order/src/components/GoogleMap.vue.d.ts +0 -0
  165. /package/{frontend → dist/frontend}/mf-order/src/components/RestaurantSelection.vue.d.ts +0 -0
  166. /package/{frontend → dist/frontend}/mf-order/src/components/index.d.ts +0 -0
  167. /package/{frontend → dist/frontend}/mf-order/src/components/snackbar.d.ts +0 -0
  168. /package/{frontend → dist/frontend}/mf-order/src/components/type.d.ts +0 -0
  169. /package/{frontend → dist/frontend}/mf-order/src/composables/index.d.ts +0 -0
  170. /package/{frontend → dist/frontend}/mf-order/src/composables/loading/index.d.ts +0 -0
  171. /package/{frontend → dist/frontend}/mf-order/src/composables/search.d.ts +0 -0
  172. /package/{frontend → dist/frontend}/mf-order/src/helpers/currency.d.ts +0 -0
  173. /package/{frontend → dist/frontend}/mf-order/src/helpers/date.d.ts +0 -0
  174. /package/{frontend → dist/frontend}/mf-order/src/helpers/iteration.d.ts +0 -0
  175. /package/{frontend → dist/frontend}/mf-order/src/helpers/map.d.ts +0 -0
  176. /package/{frontend → dist/frontend}/mf-order/src/helpers/menu.d.ts +0 -0
  177. /package/{frontend → dist/frontend}/mf-order/src/helpers/number.d.ts +0 -0
  178. /package/{frontend → dist/frontend}/mf-order/src/helpers/object.d.ts +0 -0
  179. /package/{frontend → dist/frontend}/mf-order/src/helpers/profile.d.ts +0 -0
  180. /package/{frontend → dist/frontend}/mf-order/src/i18n.d.ts +0 -0
  181. /package/{frontend → dist/frontend}/mf-order/src/main.d.ts +0 -0
  182. /package/{frontend → dist/frontend}/mf-order/src/modules/kiosk/interface.d.ts +0 -0
  183. /package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/interface.d.ts +0 -0
  184. /package/{frontend → dist/frontend}/mf-order/src/modules/order-setting/kiosk/interface.d.ts +0 -0
  185. /package/{frontend → dist/frontend}/mf-order/src/plugins/google-maps.d.ts +0 -0
  186. /package/{frontend → dist/frontend}/mf-order/src/router/index.d.ts +0 -0
  187. /package/{frontend → dist/frontend}/mf-order/src/router/routes.d.ts +0 -0
  188. /package/{frontend → dist/frontend}/mf-order/src/stores/app/index.d.ts +0 -0
  189. /package/{frontend → dist/frontend}/mf-order/src/stores/iframe/index.d.ts +0 -0
  190. /package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/index.d.ts +0 -0
  191. /package/{frontend → dist/frontend}/mf-order/src/stores/kiosk/mapper.d.ts +0 -0
  192. /package/{frontend → dist/frontend}/mf-order/src/stores/menu/menu.d.ts +0 -0
  193. /package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/index.d.ts +0 -0
  194. /package/{frontend → dist/frontend}/mf-order/src/stores/order-setting/mapper.d.ts +0 -0
  195. /package/{frontend → dist/frontend}/mf-order/src/stores/restaurant/index.d.ts +0 -0
  196. /package/{frontend → dist/frontend}/mf-order/src/stores/table-settings.d.ts +0 -0
  197. /package/{frontend → dist/frontend}/mf-order/src/stores/type.d.ts +0 -0
  198. /package/{frontend → dist/frontend}/mf-order/src/utils/constants/route.d.ts +0 -0
  199. /package/{frontend → dist/frontend}/mf-order/src/utils/number.d.ts +0 -0
  200. /package/{frontend → dist/frontend}/mf-order/src/utils/object.d.ts +0 -0
  201. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ActionMenuCell.vue.d.ts +0 -0
  202. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterRestaurant.vue.d.ts +0 -0
  203. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatus.vue.d.ts +0 -0
  204. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/FilterStatusMenu.vue.d.ts +0 -0
  205. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/Orders.vue.d.ts +0 -0
  206. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +0 -0
  207. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/UpdateDeliveryOrderDialog.vue.d.ts +0 -0
  208. /package/{frontend → dist/frontend}/mf-order/src/views/all-orders/order.d.ts +0 -0
  209. /package/{frontend → dist/frontend}/mf-order/src/views/feedme-express/FeedMeExpress.vue.d.ts +0 -0
  210. /package/{frontend → dist/frontend}/mf-order/src/views/feedme-express/FeedMeExpressSummary.vue.d.ts +0 -0
  211. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/KioskSummary.vue.d.ts +0 -0
  212. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/KioskView.vue.d.ts +0 -0
  213. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceCard.vue.d.ts +0 -0
  214. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDeviceDetail.vue.d.ts +0 -0
  215. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskDevicesView.vue.d.ts +0 -0
  216. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskOtpDialog.vue.d.ts +0 -0
  217. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/devices/KioskUnbindConfirm.vue.d.ts +0 -0
  218. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDineInSection.vue.d.ts +0 -0
  219. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskDisplayStandSection.vue.d.ts +0 -0
  220. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskPickAtCounterSection.vue.d.ts +0 -0
  221. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskSettingView.vue.d.ts +0 -0
  222. /package/{frontend → dist/frontend}/mf-order/src/views/kiosk/settings/KioskTakeawaySection.vue.d.ts +0 -0
  223. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/OrderSettingsView.vue.d.ts +0 -0
  224. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/components/RestaurantSelector.vue.d.ts +0 -0
  225. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +0 -0
  226. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/LocalDelivery.vue.d.ts +0 -0
  227. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue.d.ts +0 -0
  228. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.d.ts +0 -0
  229. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +0 -0
  230. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/CurrencyInput.vue.d.ts +0 -0
  231. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue.d.ts +0 -0
  232. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue.d.ts +0 -0
  233. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/DeliveryTime.vue.d.ts +0 -0
  234. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +0 -0
  235. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/TimePicker.vue.d.ts +0 -0
  236. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/inhouse/ZoneDialog.vue.d.ts +0 -0
  237. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue.d.ts +0 -0
  238. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue.d.ts +0 -0
  239. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue.d.ts +0 -0
  240. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue.d.ts +0 -0
  241. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue.d.ts +0 -0
  242. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +0 -0
  243. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/delivery/integrated.data.interface.d.ts +0 -0
  244. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/DineInSetting.vue.d.ts +0 -0
  245. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue.d.ts +0 -0
  246. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue.d.ts +0 -0
  247. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/dinein/PaymentType.vue.d.ts +0 -0
  248. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/AddressInput.vue.d.ts +0 -0
  249. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/CustomPayment.vue.d.ts +0 -0
  250. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +0 -0
  251. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialog.vue.d.ts +0 -0
  252. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpPointDialogContent.vue.d.ts +0 -0
  253. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSetting.vue.d.ts +0 -0
  254. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSettingDialog.vue.d.ts +0 -0
  255. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/PickUpSideSheet.vue.d.ts +0 -0
  256. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/pickup/Preorder.vue.d.ts +0 -0
  257. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/RateInput.vue.d.ts +0 -0
  258. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/ServiceChargeRule.vue.d.ts +0 -0
  259. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/servicecharge/ServiceChargeSetting.vue.d.ts +0 -0
  260. /package/{frontend → dist/frontend}/mf-order/src/views/order-settings/sms/SmsSetting.vue.d.ts +0 -0
  261. /package/{frontend → dist/frontend}/mf-order/tsconfig.app.tsbuildinfo +0 -0
  262. /package/{package → dist/package}/entity/booking/booking.do.d.ts +0 -0
  263. /package/{package → dist/package}/entity/booking/booking.dto.d.ts +0 -0
  264. /package/{package → dist/package}/entity/booking/booking.enum.d.ts +0 -0
  265. /package/{package → dist/package}/entity/business/business.dto.d.ts +0 -0
  266. /package/{package → dist/package}/entity/clickup/clickup.dto.d.ts +0 -0
  267. /package/{package → dist/package}/entity/cursor/cursor.dto.d.ts +0 -0
  268. /package/{package → dist/package}/entity/delivery/delivery.do.d.ts +0 -0
  269. /package/{package → dist/package}/entity/delivery/delivery.dto.d.ts +0 -0
  270. /package/{package → dist/package}/entity/delivery/delivery.enum.d.ts +0 -0
  271. /package/{package → dist/package}/entity/delivery/gateway/grab.dto.d.ts +0 -0
  272. /package/{package → dist/package}/entity/delivery/gateway/grab.enum.d.ts +0 -0
  273. /package/{package → dist/package}/entity/delivery/gateway/kosmo.dto.d.ts +0 -0
  274. /package/{package → dist/package}/entity/delivery/gateway/kosmo.enum.d.ts +0 -0
  275. /package/{package → dist/package}/entity/delivery/gateway/manual.dto.d.ts +0 -0
  276. /package/{package → dist/package}/entity/delivery/gateway/manual.enum.d.ts +0 -0
  277. /package/{package → dist/package}/entity/delivery/gateway/pandago.dto.d.ts +0 -0
  278. /package/{package → dist/package}/entity/delivery/gateway/pandago.enum.d.ts +0 -0
  279. /package/{package → dist/package}/entity/delivery/linked-delivery.do.d.ts +0 -0
  280. /package/{package → dist/package}/entity/food-court/food-court.do.d.ts +0 -0
  281. /package/{package → dist/package}/entity/food-court/food-court.dto.d.ts +0 -0
  282. /package/{package → dist/package}/entity/food-court/food-court.enum.d.ts +0 -0
  283. /package/{package → dist/package}/entity/food-court/order.do.d.ts +0 -0
  284. /package/{package → dist/package}/entity/food-court/order.dto.d.ts +0 -0
  285. /package/{package → dist/package}/entity/general/dateTime.dto.d.ts +0 -0
  286. /package/{package → dist/package}/entity/general/number.dto.d.ts +0 -0
  287. /package/{package → dist/package}/entity/general/search.dto.d.ts +0 -0
  288. /package/{package → dist/package}/entity/incoming-order/incoming-order-to-bill.dto.d.ts +0 -0
  289. /package/{package → dist/package}/entity/incoming-order/incoming-order.do.d.ts +0 -0
  290. /package/{package → dist/package}/entity/incoming-order/incoming-order.dto.d.ts +0 -0
  291. /package/{package → dist/package}/entity/incoming-order/incoming-order.enum.d.ts +0 -0
  292. /package/{package → dist/package}/entity/index.d.ts +0 -0
  293. /package/{package → dist/package}/entity/kiosk/kiosk.do.d.ts +0 -0
  294. /package/{package → dist/package}/entity/kiosk/kiosk.dto.d.ts +0 -0
  295. /package/{package → dist/package}/entity/kiosk/marketing/marketing.dto.d.ts +0 -0
  296. /package/{package → dist/package}/entity/kiosk/scanner/scanner.do.d.ts +0 -0
  297. /package/{package → dist/package}/entity/kiosk/scanner/scanner.dto.d.ts +0 -0
  298. /package/{package → dist/package}/entity/kiosk/scanner/scanner.enum.d.ts +0 -0
  299. /package/{package → dist/package}/entity/marketing/marketing.dto.d.ts +0 -0
  300. /package/{package → dist/package}/entity/member/member.dto.d.ts +0 -0
  301. /package/{package → dist/package}/entity/money/money.enum.d.ts +0 -0
  302. /package/{package → dist/package}/entity/order/dine-in/dine-in.do.d.ts +0 -0
  303. /package/{package → dist/package}/entity/order/dine-in/dine-in.dto.d.ts +0 -0
  304. /package/{package → dist/package}/entity/order/dine-in/qr.do.d.ts +0 -0
  305. /package/{package → dist/package}/entity/order/dine-in/reservation.do.d.ts +0 -0
  306. /package/{package → dist/package}/entity/order/dine-in/reservation.dto.d.ts +0 -0
  307. /package/{package → dist/package}/entity/order/effects/effect.dto.d.ts +0 -0
  308. /package/{package → dist/package}/entity/order/effects/effect.enum.d.ts +0 -0
  309. /package/{package → dist/package}/entity/order/menu/menu.dto.d.ts +0 -0
  310. /package/{package → dist/package}/entity/order/order-item/order-item.dto.d.ts +0 -0
  311. /package/{package → dist/package}/entity/order/order.do.d.ts +0 -0
  312. /package/{package → dist/package}/entity/order/order.dto.d.ts +0 -0
  313. /package/{package → dist/package}/entity/order/order.enum.d.ts +0 -0
  314. /package/{package → dist/package}/entity/order/payment/payment.dto.d.ts +0 -0
  315. /package/{package → dist/package}/entity/order/pickup/pickup.do.d.ts +0 -0
  316. /package/{package → dist/package}/entity/order/pickup/pickup.dto.d.ts +0 -0
  317. /package/{package → dist/package}/entity/order/timeslot/timeslot.dto.d.ts +0 -0
  318. /package/{package → dist/package}/entity/order/timeslot/timeslot.enum.d.ts +0 -0
  319. /package/{package → dist/package}/entity/order-platform/base-integration.do.d.ts +0 -0
  320. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-menu.dto.d.ts +0 -0
  321. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +0 -0
  322. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +0 -0
  323. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +0 -0
  324. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +0 -0
  325. /package/{package → dist/package}/entity/order-platform/foodpanda/foodpanda.enum.d.ts +0 -0
  326. /package/{package → dist/package}/entity/order-platform/grabfood/grabfood-menu.do.d.ts +0 -0
  327. /package/{package → dist/package}/entity/order-platform/grabfood/grabfood-order.do.d.ts +0 -0
  328. /package/{package → dist/package}/entity/order-platform/grabfood/grabfood-settings.do.d.ts +0 -0
  329. /package/{package → dist/package}/entity/order-platform/grabfood/grabfood.dto.d.ts +0 -0
  330. /package/{package → dist/package}/entity/order-platform/grabfood/grabfood.enum.d.ts +0 -0
  331. /package/{package → dist/package}/entity/order-platform/menu.dto.d.ts +0 -0
  332. /package/{package → dist/package}/entity/order-platform/order-platform.dto.d.ts +0 -0
  333. /package/{package → dist/package}/entity/order-platform/order-platform.enum.d.ts +0 -0
  334. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-menu.do.d.ts +0 -0
  335. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +0 -0
  336. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +0 -0
  337. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +0 -0
  338. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +0 -0
  339. /package/{package → dist/package}/entity/order-platform/shopeefood/shopeefood.enum.d.ts +0 -0
  340. /package/{package → dist/package}/entity/order-setting/customization/color.do.d.ts +0 -0
  341. /package/{package → dist/package}/entity/order-setting/customization/color.dto.d.ts +0 -0
  342. /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.do.d.ts +0 -0
  343. /package/{package → dist/package}/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -0
  344. /package/{package → dist/package}/entity/order-setting/order-setting.do.d.ts +0 -0
  345. /package/{package → dist/package}/entity/order-setting/order-setting.dto.d.ts +0 -0
  346. /package/{package → dist/package}/entity/order-setting/queue/queue.do.d.ts +0 -0
  347. /package/{package → dist/package}/entity/order-setting/queue/queue.dto.d.ts +0 -0
  348. /package/{package → dist/package}/entity/order-setting/reservation/reservation.do.d.ts +0 -0
  349. /package/{package → dist/package}/entity/order-setting/reservation/reservation.dto.d.ts +0 -0
  350. /package/{package → dist/package}/entity/order-setting/sequence/sequence.do.d.ts +0 -0
  351. /package/{package → dist/package}/entity/order-setting/sequence/sequence.dto.d.ts +0 -0
  352. /package/{package → dist/package}/entity/order-setting/sms/sms.do.d.ts +0 -0
  353. /package/{package → dist/package}/entity/order-setting/sms/sms.dto.d.ts +0 -0
  354. /package/{package → dist/package}/entity/order-setting/sms/sms.enum.d.ts +0 -0
  355. /package/{package → dist/package}/entity/order-setting/upselling/upselling.do.d.ts +0 -0
  356. /package/{package → dist/package}/entity/order-setting/upselling/upselling.dto.d.ts +0 -0
  357. /package/{package → dist/package}/entity/order-setting/v3/v3.do.d.ts +0 -0
  358. /package/{package → dist/package}/entity/order-setting/v3/v3.dto.d.ts +0 -0
  359. /package/{package → dist/package}/entity/pagination/pagination.dto.d.ts +0 -0
  360. /package/{package → dist/package}/entity/payment/payment.enum.d.ts +0 -0
  361. /package/{package → dist/package}/entity/printer/printer.do.d.ts +0 -0
  362. /package/{package → dist/package}/entity/queue/queue.do.d.ts +0 -0
  363. /package/{package → dist/package}/entity/queue/queue.dto.d.ts +0 -0
  364. /package/{package → dist/package}/entity/queue/queue.enum.d.ts +0 -0
  365. /package/{package → dist/package}/entity/restaurant/restaurant.dto.d.ts +0 -0
  366. /package/{package → dist/package}/entity/user/user.do.d.ts +0 -0
  367. /package/{package → dist/package}/entity/websocket/websocket.dto.d.ts +0 -0
  368. /package/{package → dist/package}/entity/websocket/websocket.enum.d.ts +0 -0
@@ -0,0 +1,799 @@
1
+ <template>
2
+ <div class="flex justify-between items-center">
3
+ <RestaurantSelector :model-value="currentRestaurant?._id ?? undefined" />
4
+ <FmSearch v-model="searchValue" placeholder="Search" class="mr-5" />
5
+ </div>
6
+ <div class="block m-5">
7
+ <FmPageHead
8
+ class="flex-grow"
9
+ title="Integrated delivery company"
10
+ description="We integrated with these deliveries with your POS system. You can deliver meal to your customers in faster and more secure way."
11
+ />
12
+ <FmTable
13
+ v-model="model"
14
+ class="h-[500px]"
15
+ :row-data="filteredCompanies"
16
+ :column-defs="columns"
17
+ :search-value="searchValue"
18
+ :hideFooter="true"
19
+ :loading="loading"
20
+ @row-click="(rowData: any) => toggleIntegratedSidesheet(rowData)"
21
+ />
22
+ </div>
23
+
24
+ <FmSideSheet
25
+ :header="title"
26
+ dismiss-away
27
+ :maxWidth="600"
28
+ :model-value="sideSheetIntegrated"
29
+ @update:model-value="sideSheetIntegrated = $event"
30
+ >
31
+ <FoodpandaSetting
32
+ v-if="componentProps.key === AUTO_INTEGRATION_CLIENT.foodpanda"
33
+ :initial-value="componentProps.initialValue"
34
+ :company="componentProps.company"
35
+ :can-use-auto-delivery-integration="componentProps.canUseAuto"
36
+ @update:model-value="handleModelValueUpdate"
37
+ />
38
+ <GrabfoodSetting
39
+ v-if="componentProps.key === AUTO_INTEGRATION_CLIENT.grabfood"
40
+ :initial-value="componentProps.initialValue"
41
+ :company="componentProps.company"
42
+ :can-use-auto-delivery-integration="componentProps.canUseAuto"
43
+ @update:model-value="handleModelValueUpdate"
44
+ />
45
+ <ShopeefoodSetting
46
+ v-if="componentProps.key === AUTO_INTEGRATION_CLIENT.shopeefood"
47
+ :initial-value="componentProps.initialValue"
48
+ :company="componentProps.company"
49
+ :can-use-auto-delivery-integration="componentProps.canUseAuto"
50
+ @update:model-value="handleModelValueUpdate"
51
+ />
52
+ <FeedmeDelivery
53
+ v-if="feedMeComponentProps.key === F_ORDER_PLATFORM.enum.FEEDME"
54
+ :initial-value="feedMeComponentProps.initialValue"
55
+ @update:model-value="handleModelValueUpdateFeedme"
56
+ @validation-result="handleValidationResult"
57
+ />
58
+
59
+ <InHouseDelivery
60
+ v-if="inHouseComponentProps.key === F_ORDER_PLATFORM.enum.IN_HOUSE"
61
+ :initial-value="inHouseComponentProps.initialValue"
62
+ :allow-e-payment="inHouseComponentProps.allowEPayment"
63
+ :address="formatAddress(currentRestaurant?.profile.address)"
64
+ @update:model-value="handleModelValueUpdateInHouse"
65
+ />
66
+ <template #side-sheet-footer v-if="feedmeValidate !== false">
67
+ <div class="flex gap-8 items-center justify-start">
68
+ <FmButton
69
+ variant="primary"
70
+ label="Save"
71
+ size="lg"
72
+ @click="updateIntegratedDeliveryCompany"
73
+ />
74
+ <FmButton
75
+ variant="secondary"
76
+ label="Cancel"
77
+ size="lg"
78
+ @click="closeIntegratedDeliverySideSheet"
79
+ />
80
+ </div>
81
+ </template>
82
+ </FmSideSheet>
83
+
84
+ <div class="block m-5">
85
+ <FmPageHead
86
+ class="flex-grow"
87
+ title="Local delivery company"
88
+ description="Activate the delivery companies to create new order at POS system."
89
+ />
90
+ <FmTable
91
+ v-model="model"
92
+ class="h-[500px]"
93
+ :row-data="localDeliveryCompanies"
94
+ :column-defs="columns"
95
+ :search-value="searchValue"
96
+ :hideFooter="true"
97
+ :pageSize="100"
98
+ :loading="loading"
99
+ @row-click="toggleLocalSidesheet"
100
+ />
101
+ </div>
102
+
103
+ <div class="flex">
104
+ <FmSideSheet
105
+ header="Update delivery company"
106
+ dismiss-away
107
+ :maxWidth="600"
108
+ :model-value="sideSheet"
109
+ @update:model-value="sideSheet = $event"
110
+ >
111
+ <ManualIntegratedDeliverySetting
112
+ :model-value="localDoc"
113
+ :company="selectedLocalRow.original.doc"
114
+ :catalog-options="menuStore.catalogOptions"
115
+ @update:model-value="(v: any) => (localDocUpdate = v)"
116
+ />
117
+ <template #side-sheet-footer>
118
+ <div class="flex gap-8 items-center justify-start">
119
+ <FmButton variant="primary" label="Save" size="lg" @click="updateLocalDeliveryCompany" />
120
+ <FmButton
121
+ variant="secondary"
122
+ label="Cancel"
123
+ size="lg"
124
+ @click="closeLocalDeliverySideSheet"
125
+ />
126
+ </div>
127
+ </template>
128
+ </FmSideSheet>
129
+ </div>
130
+ </template>
131
+
132
+ <script setup lang="ts">
133
+ import { computed, h, ref, watch } from 'vue'
134
+ import RestaurantSelector from '../components/RestaurantSelector.vue'
135
+ import type { ColumnDef } from '@feedmepos/ui-library'
136
+ import { useCoreStore } from '@feedmepos/mf-common'
137
+ import type { FdoFoodpandaSettings } from '@entity'
138
+ import type {
139
+ FdoLinkedDelivery,
140
+ FdoRestaurantFeedmeDelivery,
141
+ FdoRestaurantInHouseDelivery
142
+ } from '@feedmepos/core/entity'
143
+ import { FdoGrabfoodSettings, FdoShopeeFoodSettings } from '@entity'
144
+ import { F_DELIVERY_TYPE, F_ORDER_PLATFORM } from '@feedmepos/core/entity'
145
+ import deliveryData from './delivery.data'
146
+ import { useDelivery, type DeliveryCompany, type LinkedDeliveryDoc } from './delivery'
147
+ import { useLoading } from '@/composables/loading'
148
+ import { remoteOrderApi } from '@/api/remoteOrder'
149
+ import { AUTO_INTEGRATION_CLIENT } from '../delivery/delivery'
150
+ import { useMenuStore } from '@/stores/menu/menu'
151
+ import ManualIntegratedDeliverySetting from './components/ManualIntegratedDeliverySetting.vue'
152
+ import { insertOrUpdate, remove, sort } from '@/helpers/iteration'
153
+ import type { FdoRestaurantFeedme } from '../delivery/integrated-delivery/FeedmeDelivery.vue'
154
+ import FoodpandaSetting from './integrated-delivery/FoodpandaSetting.vue'
155
+ import GrabfoodSetting from './integrated-delivery/GrabfoodSetting.vue'
156
+ import ShopeefoodSetting from './integrated-delivery/ShopeefoodSetting.vue'
157
+ import { useRestaurantStore } from '@/stores/restaurant'
158
+ import FeedmeDelivery from './integrated-delivery/FeedmeDelivery.vue'
159
+ import InHouseDelivery, { type InhouseDialogData } from './inhouse/InHouseDelivery.vue'
160
+ import { formatAddress } from '@/helpers/profile'
161
+ import { useSnackbarFunctions } from '@/components/snackbar'
162
+
163
+ const { showSuccess } = useSnackbarFunctions()
164
+ const restaurantStore = useRestaurantStore()
165
+ const { currentRestaurant, currentBusiness, readRestaurants, changeRestaurant } = useCoreStore()
166
+ const menuStore = useMenuStore()
167
+ const linkedCompanies = ref<LinkedDeliveryDoc[]>([])
168
+ const deliveryCompanies = ref<DeliveryCompany[]>([])
169
+ export interface DeliveryRow {
170
+ id: string
171
+ key: string
172
+ catalog: string
173
+ name: string
174
+ paymentType: string
175
+ status: string[]
176
+ }
177
+ type IntegratedDeliveryCompany =
178
+ | FdoRestaurantInHouseDelivery
179
+ | FdoRestaurantFeedmeDelivery
180
+ | FdoFoodpandaSettings
181
+ | FdoGrabfoodSettings
182
+ | FdoShopeeFoodSettings
183
+ interface IntegratedDeliveryRow extends DeliveryRow {
184
+ setting: IntegratedDeliveryCompany
185
+ company?: DeliveryCompany
186
+ doc?: LinkedDeliveryDoc
187
+ canUseAutoDeliveryIntegration?: string | boolean
188
+ }
189
+
190
+ const sideSheet = ref<boolean>(false)
191
+ const loading = computed(() => {
192
+ return !currentRestaurant.value || loadingDpi.value
193
+ })
194
+ let localDoc: any
195
+ let localDocUpdate: any
196
+ const selectedIntegratedRow = ref<any>(null)
197
+ const sideSheetIntegrated = ref<boolean>(false)
198
+ const selectedLocalRow = ref<any>(null)
199
+ async function toggleLocalSidesheet(rowData: any) {
200
+ selectedLocalRow.value = rowData
201
+ localDoc = getLinkedDeliveryDoc(linkedCompanies.value, rowData.original.doc.key)
202
+ sideSheet.value = true
203
+ }
204
+
205
+ const title = ref('')
206
+ async function toggleIntegratedSidesheet(rowData: any) {
207
+ selectedIntegratedRow.value = rowData.original.key
208
+ sideSheetIntegrated.value = true
209
+ switch (selectedIntegratedRow.value) {
210
+ case AUTO_INTEGRATION_CLIENT.foodpanda:
211
+ title.value = 'Manage foodpanda delivery'
212
+ updateIntegratedDeliveryType(rowData.original)
213
+ break
214
+ case AUTO_INTEGRATION_CLIENT.grabfood:
215
+ title.value = 'Manage grabfood delivery'
216
+ updateIntegratedDeliveryType(rowData.original)
217
+ break
218
+ case AUTO_INTEGRATION_CLIENT.shopeefood:
219
+ title.value = 'Manage shopeefood delivery'
220
+ updateIntegratedDeliveryType(rowData.original)
221
+ break
222
+ case F_ORDER_PLATFORM.enum.FEEDME:
223
+ title.value = 'Update FeedMe express'
224
+ updateFeedmeExpress(rowData.original)
225
+ break
226
+ case F_ORDER_PLATFORM.enum.IN_HOUSE:
227
+ title.value = 'Manage in-house delivery'
228
+ updateInHouse(rowData.original)
229
+ break
230
+ }
231
+ }
232
+
233
+ const componentProps = ref({
234
+ key: '' as string,
235
+ company: {} as DeliveryCompany,
236
+ initialValue: {
237
+ manual: null as any,
238
+ integrated: {} as any
239
+ },
240
+ canUseAuto: {} as boolean | string
241
+ })
242
+
243
+ const feedMeComponentProps = ref({
244
+ key: '' as string,
245
+ initialValue: {} as FdoRestaurantFeedme
246
+ })
247
+
248
+ const inHouseComponentProps = ref({
249
+ key: '' as string,
250
+ initialValue: {} as InhouseDialogData,
251
+ allowEPayment: false as boolean | string
252
+ })
253
+
254
+ function clearComponentProps() {
255
+ feedMeComponentProps.value = {
256
+ key: '',
257
+ initialValue: {} as any
258
+ }
259
+
260
+ inHouseComponentProps.value = {
261
+ key: '',
262
+ initialValue: {} as any,
263
+ allowEPayment: false
264
+ }
265
+
266
+ componentProps.value = {
267
+ key: '',
268
+ company: {} as DeliveryCompany,
269
+ initialValue: {
270
+ manual: {} as any,
271
+ integrated: {} as any
272
+ },
273
+ canUseAuto: {} as boolean | string
274
+ }
275
+ }
276
+
277
+ async function updateIntegratedDeliveryType({
278
+ key,
279
+ company,
280
+ doc,
281
+ setting,
282
+ canUseAutoDeliveryIntegration
283
+ }: IntegratedDeliveryRow) {
284
+ clearComponentProps()
285
+
286
+ const dc = company as DeliveryCompany
287
+
288
+ componentProps.value = {
289
+ key: key,
290
+ company: dc,
291
+ initialValue: {
292
+ manual: doc,
293
+ integrated: setting
294
+ },
295
+ canUseAuto: canUseAutoDeliveryIntegration as boolean | string
296
+ }
297
+ }
298
+
299
+ async function updateFeedmeExpress({ key, setting }: IntegratedDeliveryRow) {
300
+ clearComponentProps()
301
+
302
+ feedMeComponentProps.value = {
303
+ key: key,
304
+ initialValue: setting as FdoRestaurantFeedme
305
+ }
306
+ }
307
+
308
+ async function updateInHouse({ key, setting }: IntegratedDeliveryRow) {
309
+ clearComponentProps()
310
+
311
+ const inhouseSetting = setting as FdoRestaurantInHouseDelivery
312
+ const allowEPayment = restaurantStore.currentRestaurant?.allowEPayment || false
313
+ const address = restaurantStore.currentRestaurant?.profile.address
314
+
315
+ inHouseComponentProps.value = {
316
+ key,
317
+ initialValue: {
318
+ ...inhouseSetting,
319
+ deliveryTime: inhouseSetting.deliveryTime || null,
320
+ paymentTypes: inhouseSetting.paymentTypes || [],
321
+ offlinePaymentTypes: inhouseSetting.offlinePaymentTypes || [],
322
+ ignoreStock: inhouseSetting.ignoreStock || false
323
+ },
324
+ allowEPayment
325
+ }
326
+ }
327
+
328
+ const { startAsyncCall, isLoading } = useLoading()
329
+ const columns: ColumnDef<any>[] = [
330
+ {
331
+ accessorKey: 'name',
332
+ header: () => 'Company',
333
+ enableSorting: false
334
+ },
335
+ {
336
+ accessorKey: 'catalog',
337
+ header: () => 'Catalog',
338
+ enableSorting: false
339
+ },
340
+ {
341
+ accessorKey: 'paymentType',
342
+ header: () => 'Payment Type',
343
+ enableSorting: false
344
+ },
345
+ {
346
+ accessorKey: 'status',
347
+ header: () => 'Status',
348
+ cell: (info: any) => {
349
+ const statuses = info.row.original.status as StatusType[]
350
+
351
+ const classes = statuses.map((status) => getClassForStatus(status)).join(' ')
352
+
353
+ return h('div', { class: classes }, statuses.join(', '))
354
+ },
355
+ enableSorting: false
356
+ }
357
+ ]
358
+
359
+ type StatusType = 'Manual' | 'Active' | 'Inactive'
360
+ const getClassForStatus = (enabled: StatusType): string => {
361
+ switch (enabled) {
362
+ case 'Manual':
363
+ return ' bg-fm-color-system-warning-100 fm-typo-en-body-md-600 border fm-corner-radius-lg w-max gap-8 p-4 text-fm-color-typo-warning'
364
+ case 'Active':
365
+ return ' bg-fm-color-system-success-100 fm-typo-en-body-md-600 border fm-corner-radius-lg w-max gap-8 p-4 text-fm-color-typo-success'
366
+ case 'Inactive':
367
+ return ' bg-fm-color-system-info-100 fm-typo-en-body-md-600 border fm-corner-radius-lg w-max gap-8 p-4 text-fm-color-typo-info'
368
+ default:
369
+ return ''
370
+ }
371
+ }
372
+
373
+ const model = ref()
374
+ const searchValue = ref('')
375
+
376
+ const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)
377
+
378
+ const inhouseDelivery = computed<FdoRestaurantInHouseDelivery>(() => {
379
+ return {
380
+ ...deliveryData.initInhouseDelivery(),
381
+ ...currentRestaurant?.value?.inHouseDelivery
382
+ }
383
+ })
384
+
385
+ const feedmeExpress = computed<FdoRestaurantFeedmeDelivery>(() => {
386
+ return {
387
+ ...deliveryData.initFeedmeExpress(),
388
+ ...currentRestaurant?.value?.feedmeDelivery
389
+ }
390
+ })
391
+
392
+ const foodpanda = computed<FdoFoodpandaSettings>(() => {
393
+ return {
394
+ ...deliveryData.initFoodpandaDelivery(),
395
+ ...foodpandaSetting.value,
396
+ autoAccept: foodpandaSetting?.value?.autoAccept ?? false,
397
+ ignoreDiscount: foodpandaSetting?.value?.ignoreDiscount ?? false
398
+ }
399
+ })
400
+
401
+ const grabfood = computed<FdoGrabfoodSettings>(() => {
402
+ return {
403
+ ...deliveryData.initGrabfoodDelivery(),
404
+ ...grabfoodSetting.value,
405
+ partnerMerchantID: grabfoodSetting?.value?._id
406
+ }
407
+ })
408
+
409
+ const shopee = computed<FdoShopeeFoodSettings>(() => {
410
+ return {
411
+ ...deliveryData.initShopeefoodDelivery(),
412
+ ...shopeefoodSetting.value
413
+ }
414
+ })
415
+ const localDeliveryCompanies = computed<DeliveryRow[]>(() => {
416
+ const res = filterLocalDeliveryCompanies(deliveryCompanies.value).map<DeliveryRow>((company) => {
417
+ const { name, paymentTypeKey, key } = company
418
+ const doc = getLinkedDeliveryDoc(linkedCompanies.value, key)
419
+
420
+ const payment = doc?.paymentTypeKey || paymentTypeKey
421
+ return {
422
+ id: loadingKey.value.local(key),
423
+ key,
424
+ name,
425
+ paymentType: getPaymentType(payment),
426
+ status: !!doc ? ['Active'] : ['Inactive'],
427
+ doc: company,
428
+ catalog: getCatalog(doc?.catalogId || null)
429
+ }
430
+ })
431
+ return res.filter((r) => filter([r.name, r.paymentType, r.status.join(' ')]))
432
+ })
433
+
434
+ const { getLinkedDeliveryDoc, filterLocalDeliveryCompanies, getPaymentType, equalKey } =
435
+ useDelivery()
436
+
437
+ function getCatalog(catalogId: string | null) {
438
+ return menuStore.catalogOptions.find(({ value }) => value === catalogId)?.label || ''
439
+ }
440
+
441
+ const canUseAutoDeliveryIntegration = (client: string) => true // Placeholder
442
+ const filter = (fields: any[]) =>
443
+ fields.some((field: string | string[]) => field.includes(searchValue.value)) // Placeholder
444
+
445
+ const integratedCompanies = computed<IntegratedDeliveryRow[]>(() => {
446
+ const fpManual = getLinkedDeliveryDoc(linkedCompanies.value, AUTO_INTEGRATION_CLIENT.foodpanda)
447
+ const gfManual = getLinkedDeliveryDoc(linkedCompanies.value, AUTO_INTEGRATION_CLIENT.grabfood)
448
+ const sfManual = getLinkedDeliveryDoc(linkedCompanies.value, AUTO_INTEGRATION_CLIENT.shopeefood)
449
+
450
+ const getIntegrateDoc = (client: AUTO_INTEGRATION_CLIENT) =>
451
+ deliveryCompanies.value.find(({ key }) => equalKey(key, client))
452
+ const fpIntegrate = getIntegrateDoc(AUTO_INTEGRATION_CLIENT.foodpanda)
453
+ const grabIntegrate = getIntegrateDoc(AUTO_INTEGRATION_CLIENT.grabfood)
454
+ const sfIntegrate = getIntegrateDoc(AUTO_INTEGRATION_CLIENT.shopeefood)
455
+
456
+ const generateStatus = (manualActive: boolean, integrateActive: boolean) => {
457
+ if (manualActive && integrateActive) return 'Active'
458
+ if (manualActive) return 'Manual'
459
+ if (integrateActive) return 'Active'
460
+ return 'Inactive'
461
+ }
462
+
463
+ return [
464
+ {
465
+ id: loadingKey.value.inhouse,
466
+ name: 'In house delivery',
467
+ key: F_DELIVERY_TYPE.enum.IN_HOUSE,
468
+ paymentType: (inhouseDelivery.value.paymentTypes || ['-'])
469
+ .map((v) => capitalizeFirstLetter(v))
470
+ .join(', '),
471
+ status: inhouseDelivery.value.enable ? ['Active'] : ['Inactive'],
472
+ setting: inhouseDelivery.value,
473
+ catalog: getCatalog(inhouseDelivery.value.catalogId)
474
+ },
475
+ {
476
+ id: loadingKey.value.fm,
477
+ name: 'FeedMe express',
478
+ key: F_DELIVERY_TYPE.enum.FEEDME,
479
+ paymentType: 'E-payment',
480
+ status: feedmeExpress.value.enable ? ['Active'] : ['Inactive'],
481
+ setting: feedmeExpress.value,
482
+ catalog: getCatalog(feedmeExpress.value.catalogId || null)
483
+ },
484
+ {
485
+ id: loadingKey.value.fp,
486
+ name: 'FoodPanda delivery',
487
+ key: AUTO_INTEGRATION_CLIENT.foodpanda,
488
+ company: fpIntegrate,
489
+ paymentType: foodpanda.value.enable ? getPaymentType(fpManual?.paymentTypeKey) : '-',
490
+ status: [generateStatus(!!fpManual, foodpanda.value.enable)],
491
+ setting: foodpanda.value,
492
+ doc: fpManual,
493
+ catalog: getCatalog(fpManual?.catalogId || null),
494
+ canUseAutoDeliveryIntegration: canUseAutoDeliveryIntegration(
495
+ AUTO_INTEGRATION_CLIENT.foodpanda
496
+ )
497
+ },
498
+ {
499
+ id: loadingKey.value.gf,
500
+ name: 'GrabFood delivery',
501
+ key: AUTO_INTEGRATION_CLIENT.grabfood,
502
+ company: grabIntegrate,
503
+ paymentType: grabfood.value.enable ? getPaymentType(gfManual?.paymentTypeKey) : '-',
504
+ status: [generateStatus(!!gfManual, grabfood.value.enable)],
505
+ setting: grabfood.value,
506
+ doc: gfManual,
507
+ catalog: getCatalog(gfManual?.catalogId || null),
508
+ canUseAutoDeliveryIntegration: canUseAutoDeliveryIntegration(AUTO_INTEGRATION_CLIENT.grabfood)
509
+ },
510
+ {
511
+ id: loadingKey.value.sf,
512
+ name: 'ShopeeFood delivery',
513
+ key: AUTO_INTEGRATION_CLIENT.shopeefood,
514
+ company: sfIntegrate,
515
+ paymentType: shopee.value.enable ? getPaymentType(sfManual?.paymentTypeKey) : '-',
516
+ status: [generateStatus(!!sfManual, shopee.value.enable)],
517
+ setting: shopee.value,
518
+ doc: sfManual,
519
+ catalog: getCatalog(sfManual?.catalogId || null),
520
+ canUseAutoDeliveryIntegration: canUseAutoDeliveryIntegration(
521
+ AUTO_INTEGRATION_CLIENT.shopeefood
522
+ )
523
+ }
524
+ ]
525
+ })
526
+
527
+ const loadingKey = computed(() => {
528
+ const id = currentRestaurant.value?._id || ''
529
+ return {
530
+ inhouse: `${id}_inhouse`,
531
+ fp: `${id}_fp`,
532
+ gf: `${id}_gf`,
533
+ sf: `${id}_sf`,
534
+ fm: `${id}_fm`,
535
+ local: (deliveryName: string) => `${id}_${deliveryName}`
536
+ }
537
+ })
538
+
539
+ async function updateIntegratedDeliveryCompany(company: IntegratedDeliveryRow) {
540
+ switch (selectedIntegratedRow.value) {
541
+ case AUTO_INTEGRATION_CLIENT.foodpanda:
542
+ await updateIntegratedDeliverySetting()
543
+ break
544
+ case AUTO_INTEGRATION_CLIENT.grabfood:
545
+ await updateIntegratedDeliverySetting()
546
+ break
547
+ case AUTO_INTEGRATION_CLIENT.shopeefood:
548
+ await updateIntegratedDeliverySetting()
549
+ break
550
+ case F_ORDER_PLATFORM.enum.FEEDME:
551
+ await updateFeedmeExpressSetting()
552
+ break
553
+ case F_ORDER_PLATFORM.enum.IN_HOUSE:
554
+ await updateInHouseSetting()
555
+ break
556
+ }
557
+ }
558
+
559
+ const filteredCompanies = computed(() => {
560
+ return integratedCompanies.value.filter(({ name, paymentType, status }) =>
561
+ filter([name, paymentType, status.join(' ')])
562
+ )
563
+ })
564
+
565
+ const grabfoodSetting = ref<FdoGrabfoodSettings | null>(null)
566
+ const foodpandaSetting = ref<FdoFoodpandaSettings | null>(null)
567
+ const shopeefoodSetting = ref<FdoShopeeFoodSettings | null>(null)
568
+ const loadingDpi = ref<boolean>(false)
569
+
570
+ async function readData() {
571
+
572
+ await startAsyncCall(async () => {
573
+ loadingDpi.value = true
574
+ linkedCompanies.value = await remoteOrderApi.readLinkedDeliveryCompanies()
575
+ const resp = await remoteOrderApi.readLocalDeliveryCompanies()
576
+ deliveryCompanies.value = sort(resp, { selector: 'name' })
577
+ grabfoodSetting.value = await remoteOrderApi.integratedDelivery.readGrabfood(
578
+ currentRestaurant.value?._id || ''
579
+ )
580
+ foodpandaSetting.value = await remoteOrderApi.integratedDelivery.readFoodpanda(
581
+ currentRestaurant.value?._id || ''
582
+ )
583
+ shopeefoodSetting.value = await remoteOrderApi.integratedDelivery.readShopeefood(
584
+ currentRestaurant.value?._id || ''
585
+ )
586
+ })
587
+ loadingDpi.value = false
588
+ }
589
+
590
+ async function updateLocalDeliveryCompany() {
591
+ sideSheet.value = false
592
+ const linkedDoc = getLinkedDeliveryDoc(
593
+ linkedCompanies.value,
594
+ selectedLocalRow.value?.original.doc.key
595
+ )
596
+ await updateManualDelivery({
597
+ doc: linkedDoc,
598
+ company: selectedLocalRow.value?.original.doc,
599
+ data: localDocUpdate
600
+ })
601
+ showSuccess('Delivery setting updated. ')
602
+ }
603
+
604
+ async function updateManualDelivery({
605
+ doc,
606
+ company,
607
+ data
608
+ }: {
609
+ doc?: LinkedDeliveryDoc
610
+ company: DeliveryCompany
611
+ data: FdoLinkedDelivery | null
612
+ }) {
613
+ if (!!data) {
614
+ const resp = await createOrUpdateManualDeliveryDoc({ doc, company, data })
615
+
616
+ if (resp) updateCached(resp)
617
+ } else if (!!doc) {
618
+ await remoteOrderApi.deleteDeliveryCompany(doc)
619
+ deleteCached(doc)
620
+ }
621
+ }
622
+
623
+ async function createOrUpdateManualDeliveryDoc({
624
+ doc,
625
+ company,
626
+ data
627
+ }: {
628
+ doc?: LinkedDeliveryDoc
629
+ company: DeliveryCompany
630
+ data: FdoLinkedDelivery
631
+ }): Promise<LinkedDeliveryDoc | undefined> {
632
+ const { paymentTypeKey, catalogId, rounding } = data
633
+ let newDoc: LinkedDeliveryDoc
634
+
635
+ if (doc) {
636
+ newDoc = await remoteOrderApi.updateDeliveryCompany({
637
+ ...doc,
638
+ paymentTypeKey,
639
+ catalogId,
640
+ rounding
641
+ })
642
+ } else {
643
+ newDoc = await remoteOrderApi.createDeliveryCompany({
644
+ ...company,
645
+ paymentTypeKey,
646
+ catalogId,
647
+ rounding
648
+ })
649
+ }
650
+
651
+ return newDoc
652
+ }
653
+
654
+ function updateCached(doc: LinkedDeliveryDoc) {
655
+ linkedCompanies.value = insertOrUpdate(linkedCompanies.value, doc, 'key')
656
+ }
657
+
658
+ function deleteCached(doc: LinkedDeliveryDoc) {
659
+ linkedCompanies.value = remove(linkedCompanies.value, doc, 'key')
660
+ }
661
+
662
+ function closeLocalDeliverySideSheet() {
663
+ sideSheet.value = false
664
+ }
665
+
666
+ function closeIntegratedDeliverySideSheet() {
667
+ sideSheetIntegrated.value = false
668
+ }
669
+
670
+ async function updateIntegratedDeliverySetting() {
671
+ sideSheetIntegrated.value = false
672
+ await startAsyncCall(async () => {
673
+ await updateDelivery(
674
+ componentProps.value.key as AUTO_INTEGRATION_CLIENT,
675
+ {
676
+ doc: componentProps.value.initialValue.manual as LinkedDeliveryDoc,
677
+ company: componentProps.value.company,
678
+ data: integratedDoc.value.manual as FdoLinkedDelivery | null
679
+ },
680
+ integratedDoc.value.auto as FdoFoodpandaSettings,
681
+ !!componentProps.value.initialValue.integrated,
682
+ componentProps.value.canUseAuto
683
+ )
684
+ })
685
+ showSuccess('Delivery setting updated. ')
686
+ }
687
+
688
+ async function updateFeedmeExpressSetting() {
689
+ sideSheetIntegrated.value = false
690
+ await restaurantStore.updateFeedmeDelivery(currentRestaurant.value?._id ?? '', feedMeDoc.value)
691
+ const res = (await readRestaurants())?.find((res) => res._id === currentRestaurant.value?._id)
692
+ if (!!res) {
693
+ changeRestaurant(res)
694
+ }
695
+ showSuccess('Delivery setting updated. ')
696
+ }
697
+
698
+ async function updateInHouseSetting() {
699
+ sideSheetIntegrated.value = false
700
+ await restaurantStore.updateInhouseDelivery(currentRestaurant.value?._id ?? '', inHouseDoc.value)
701
+ const res = (await readRestaurants())?.find((res) => res._id === currentRestaurant.value?._id)
702
+ if (!!res) {
703
+ changeRestaurant(res)
704
+ }
705
+ showSuccess('Delivery setting updated. ')
706
+ }
707
+
708
+ async function updateDelivery(
709
+ client: AUTO_INTEGRATION_CLIENT,
710
+ manual: {
711
+ doc?: LinkedDeliveryDoc
712
+ company: DeliveryCompany
713
+ data: FdoLinkedDelivery | null
714
+ },
715
+ integrated: FdoFoodpandaSettings | FdoGrabfoodSettings | FdoShopeeFoodSettings,
716
+ hasOriDeliverySetting: boolean,
717
+ canUseAutoDeliveryIntegration?: string | boolean
718
+ ) {
719
+ await updateManualDelivery({ doc: manual.doc, company: manual.company, data: manual.data })
720
+ if ((canUseAutoDeliveryIntegration === true && hasOriDeliverySetting) || integrated.enable) {
721
+ switch (client) {
722
+ case AUTO_INTEGRATION_CLIENT.foodpanda:
723
+ const integratedDocument = integrated as FdoFoodpandaSettings
724
+
725
+ await restaurantStore.updateIntegratedFoodpandaDelivery(
726
+ currentRestaurant.value?._id ?? '',
727
+ { ...integratedDocument, autoAccept: integratedDocument.autoAccept ?? false }
728
+ )
729
+ break
730
+ case AUTO_INTEGRATION_CLIENT.grabfood:
731
+ await restaurantStore.updateIntegratedGrabfoodDelivery(
732
+ currentRestaurant.value?._id ?? '',
733
+ integrated as FdoGrabfoodSettings
734
+ )
735
+ break
736
+ case AUTO_INTEGRATION_CLIENT.shopeefood:
737
+ await restaurantStore.updateIntegratedShopeefoodDelivery(
738
+ currentRestaurant.value?._id ?? '',
739
+ integrated as FdoShopeeFoodSettings
740
+ )
741
+ break
742
+ }
743
+ }
744
+
745
+ const res = (await readRestaurants())?.find((res) => res._id === currentRestaurant.value?._id)
746
+ if (!!res) {
747
+ changeRestaurant(res)
748
+ }
749
+ }
750
+
751
+ const feedMeDoc = computed(() => feedMeComponentProps.value.initialValue)
752
+ const inHouseDoc = computed(() => inHouseComponentProps.value.initialValue)
753
+
754
+ const localManual = ref<LinkedDeliveryDoc>(componentProps.value.initialValue.manual)
755
+ const localAuto = ref(componentProps.value.initialValue.integrated)
756
+
757
+ const integratedDoc = computed(() => ({
758
+ manual: localManual.value,
759
+ auto: localAuto.value
760
+ }))
761
+
762
+ function handleModelValueUpdate({ manual, auto }: { manual: any; auto: any }) {
763
+ localManual.value = manual ?? null
764
+ localAuto.value = auto
765
+ }
766
+ function handleModelValueUpdateFeedme(v: any) {
767
+ feedMeComponentProps.value.initialValue = v
768
+ }
769
+
770
+ function handleModelValueUpdateInHouse(v: any) {
771
+ inHouseComponentProps.value.initialValue = v
772
+ }
773
+
774
+ const feedmeValidate = ref<boolean | null>(null)
775
+ function handleValidationResult(v: boolean) {
776
+ feedmeValidate.value = v
777
+ }
778
+
779
+ watch(
780
+ () => currentRestaurant.value,
781
+
782
+ async (newRestaurant) => {
783
+ if (newRestaurant) {
784
+ await readData()
785
+ }
786
+ },
787
+ { immediate: true }
788
+ )
789
+
790
+ watch(
791
+ () => currentBusiness.value,
792
+ async (newBusiness) => {
793
+ if (newBusiness) {
794
+ await menuStore.readMenu()
795
+ }
796
+ },
797
+ { immediate: true }
798
+ )
799
+ </script>