sme-pos-package 1.0.14 → 1.0.15

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 (314) hide show
  1. package/dist/index.d.mts +1 -1
  2. package/dist/index.mjs +1 -0
  3. package/package.json +4 -1
  4. package/dist/index.css.map +0 -1
  5. package/dist/index.mjs.map +0 -1
  6. package/dist/tailwind.preset.mjs.map +0 -1
  7. package/public/assets/images/bank-logos.png +0 -0
  8. package/public/assets/images/banner1.png +0 -0
  9. package/public/assets/images/banner2.png +0 -0
  10. package/public/assets/images/banner3.png +0 -0
  11. package/public/assets/images/banner4.png +0 -0
  12. package/public/assets/images/cashier.svg +0 -9
  13. package/public/assets/images/empty-cart.png +0 -0
  14. package/public/assets/images/empty-table-state.png +0 -0
  15. package/public/assets/images/layout-display/left-layout.png +0 -0
  16. package/public/assets/images/layout-display/right-layout.png +0 -0
  17. package/public/assets/images/modal-illustration.png +0 -0
  18. package/public/assets/images/order-empty-state.png +0 -0
  19. package/public/assets/images/order.png +0 -0
  20. package/public/assets/images/payment-success-label.png +0 -0
  21. package/public/assets/images/table-empty.png +0 -0
  22. package/public/assets/images/take-away.png +0 -0
  23. package/public/assets/lottie/loading.json +0 -1
  24. package/public/assets/lottie/soft_pos.json +0 -1
  25. package/public/assets/lottie/success.json +0 -1
  26. package/public/config.json +0 -27
  27. package/public/env.json +0 -17
  28. package/src/animations/success.json +0 -9730
  29. package/src/assets/icons/breadcrumbs-icon.tsx +0 -85
  30. package/src/assets/icons/cart-icon.tsx +0 -14
  31. package/src/assets/icons/common.tsx +0 -270
  32. package/src/assets/icons/customer-view-icon.tsx +0 -20
  33. package/src/assets/icons/dining-table.tsx +0 -34
  34. package/src/assets/icons/edit-line-icon.tsx +0 -18
  35. package/src/assets/icons/emenu-icon.tsx +0 -39
  36. package/src/assets/icons/file-close-line-icon.tsx +0 -18
  37. package/src/assets/icons/helper-icon.tsx +0 -84
  38. package/src/assets/icons/home-gear-line-icon.tsx +0 -18
  39. package/src/assets/icons/kanban-icon.tsx +0 -16
  40. package/src/assets/icons/loading-icon.tsx +0 -45
  41. package/src/assets/icons/logout-box-line-icon.tsx +0 -18
  42. package/src/assets/icons/order-icon.tsx +0 -92
  43. package/src/assets/icons/payment-icon.tsx +0 -429
  44. package/src/assets/icons/pincode.tsx +0 -196
  45. package/src/assets/icons/pos-connect-icon.tsx +0 -67
  46. package/src/assets/icons/pos-device-icon.tsx +0 -52
  47. package/src/assets/icons/pos-icon.tsx +0 -75
  48. package/src/assets/icons/printer-line-icon.tsx +0 -18
  49. package/src/assets/icons/star-icon.tsx +0 -174
  50. package/src/assets/icons/table-icon.tsx +0 -77
  51. package/src/assets/icons/user-add-line-icon.tsx +0 -33
  52. package/src/assets/icons/user-icon.tsx +0 -65
  53. package/src/components/common/button-action.tsx +0 -46
  54. package/src/components/common/button-icon.tsx +0 -23
  55. package/src/components/common/dropdown/index.tsx +0 -79
  56. package/src/components/common/empty-state.tsx +0 -60
  57. package/src/components/common/header/index.tsx +0 -89
  58. package/src/components/common/header/tabs.tsx +0 -119
  59. package/src/components/common/image.tsx +0 -20
  60. package/src/components/common/input/index.tsx +0 -55
  61. package/src/components/common/input/radio-group.tsx +0 -75
  62. package/src/components/common/input/text-area.tsx +0 -28
  63. package/src/components/common/modal/delete-confirm-modal-container.tsx +0 -65
  64. package/src/components/common/modal/index.ts +0 -2
  65. package/src/components/common/modal/modal-direction.tsx +0 -125
  66. package/src/components/common/modal/modal-header.tsx +0 -37
  67. package/src/components/common/modal/modal-wrapper.tsx +0 -56
  68. package/src/components/common/modal/modal-zoom.tsx +0 -61
  69. package/src/components/common/pagination.tsx +0 -95
  70. package/src/components/common/refresh-button.tsx +0 -28
  71. package/src/components/common/search-bar.tsx +0 -27
  72. package/src/components/common/search.tsx +0 -59
  73. package/src/components/common/skeleton.tsx +0 -7
  74. package/src/components/common/tabs-layout.tsx +0 -98
  75. package/src/components/common/use-check-session.tsx +0 -19
  76. package/src/components/customer-management/add-customer/add-customer-drawer.tsx +0 -286
  77. package/src/components/customer-management/add-customer/address-select.tsx +0 -51
  78. package/src/components/customer-management/choose-customer-drawer.tsx +0 -177
  79. package/src/components/customer-management/customer-info-drawer.tsx +0 -166
  80. package/src/components/customer-management/customer-no-data.tsx +0 -18
  81. package/src/components/emenu/emenu-qr-code.tsx +0 -59
  82. package/src/components/emenu/menu-link.tsx +0 -67
  83. package/src/components/index.ts +0 -8
  84. package/src/components/kanban-template/kitchen-template.tsx +0 -60
  85. package/src/components/kanban-template/pos-order-template.tsx +0 -77
  86. package/src/components/kanban-template/pos-template.tsx +0 -170
  87. package/src/components/kitchen-management/change-status-confirm-modal.tsx +0 -61
  88. package/src/components/kitchen-management/index.ts +0 -1
  89. package/src/components/kitchen-management/kitchen-order/index.tsx +0 -153
  90. package/src/components/kitchen-management/kitchen-order/line.tsx +0 -78
  91. package/src/components/kitchen-management/kitchen-order/state.tsx +0 -52
  92. package/src/components/kitchen-management/kitchen-status.tsx +0 -69
  93. package/src/components/kitchen-management/orders-kitchen-management.tsx +0 -113
  94. package/src/components/order-management/index.tsx +0 -128
  95. package/src/components/order-management/order-actions.tsx +0 -46
  96. package/src/components/order-management/order-detail/header.tsx +0 -37
  97. package/src/components/order-management/order-detail/index.ts +0 -3
  98. package/src/components/order-management/order-detail/information.tsx +0 -96
  99. package/src/components/order-management/order-detail/order-detail.tsx +0 -84
  100. package/src/components/order-management/order-detail/order-line.tsx +0 -56
  101. package/src/components/order-management/order-detail/summary.tsx +0 -221
  102. package/src/components/order-management/order-header.tsx +0 -113
  103. package/src/components/order-management/order-pagination.tsx +0 -49
  104. package/src/components/order-management/order-status.tsx +0 -58
  105. package/src/components/order-management/order-table.tsx +0 -179
  106. package/src/components/order-management/order-tabs.tsx +0 -48
  107. package/src/components/pos-management/add-product-from-barcode/index.tsx +0 -97
  108. package/src/components/pos-management/cart-content/action-line.tsx +0 -81
  109. package/src/components/pos-management/cart-content/cancel-order-line-modal.tsx +0 -41
  110. package/src/components/pos-management/cart-content/cart-item.tsx +0 -173
  111. package/src/components/pos-management/cart-content/cart-items.tsx +0 -130
  112. package/src/components/pos-management/cart-content/draft-orders/draft-order-line.tsx +0 -67
  113. package/src/components/pos-management/cart-content/draft-orders/index.tsx +0 -40
  114. package/src/components/pos-management/cart-content/edit-cart-modal.tsx +0 -11
  115. package/src/components/pos-management/cart-content/index.tsx +0 -260
  116. package/src/components/pos-management/cart-content/no-select-order.tsx +0 -26
  117. package/src/components/pos-management/cart-content/order-info/customer-info.tsx +0 -53
  118. package/src/components/pos-management/cart-content/order-info/index.tsx +0 -109
  119. package/src/components/pos-management/cart-content/order-total.tsx +0 -36
  120. package/src/components/pos-management/cart-content/orders-line.tsx +0 -72
  121. package/src/components/pos-management/menu-content/category-tab.tsx +0 -38
  122. package/src/components/pos-management/menu-content/create-order-modal.tsx +0 -65
  123. package/src/components/pos-management/menu-content/product-content.tsx +0 -93
  124. package/src/components/pos-management/menu-content/product-detail/info.tsx +0 -28
  125. package/src/components/pos-management/menu-content/product-detail/modal.tsx +0 -148
  126. package/src/components/pos-management/menu-content/product-detail/option.tsx +0 -87
  127. package/src/components/pos-management/menu-content/product-detail/quantity-control.tsx +0 -155
  128. package/src/components/pos-management/menu-content/product-detail/sale-keypad.tsx +0 -100
  129. package/src/components/pos-management/menu-content/product-item.tsx +0 -65
  130. package/src/components/pos-management/order-helper/cancel-order-confirm.tsx +0 -43
  131. package/src/components/pos-management/order-helper/history-call.tsx +0 -105
  132. package/src/components/pos-management/order-helper/order-helper-modal.tsx +0 -116
  133. package/src/components/pos-management/payment-content/bill/actions.tsx +0 -46
  134. package/src/components/pos-management/payment-content/bill/content.tsx +0 -207
  135. package/src/components/pos-management/payment-content/bill/index.tsx +0 -18
  136. package/src/components/pos-management/payment-content/card-payment/index.tsx +0 -124
  137. package/src/components/pos-management/payment-content/card-payment/pos-payment/pos-connect.tsx +0 -183
  138. package/src/components/pos-management/payment-content/card-payment/pos-payment/qr-connect.tsx +0 -185
  139. package/src/components/pos-management/payment-content/card-payment/waiting-for-payment-pos-modal.tsx +0 -37
  140. package/src/components/pos-management/payment-content/cash-payment/index.tsx +0 -216
  141. package/src/components/pos-management/payment-content/index.tsx +0 -70
  142. package/src/components/pos-management/payment-content/payment-info.tsx +0 -67
  143. package/src/components/pos-management/payment-content/payment-layout.tsx +0 -16
  144. package/src/components/pos-management/payment-content/payment-method-cards.tsx +0 -99
  145. package/src/components/pos-management/payment-content/qr-payment/index.tsx +0 -118
  146. package/src/components/pos-management/payment-content/qr-payment/qr_code.js +0 -29
  147. package/src/components/pos-management/payment-content/qr-payment/vietqr.js +0 -436
  148. package/src/components/pos-management/payment-content/session-close-modal.tsx +0 -35
  149. package/src/components/pos-management/payment-content/soft-pos-payment/index.tsx +0 -48
  150. package/src/components/pos-management/pos-helpers/back-confirm.tsx +0 -45
  151. package/src/components/pos-management/pos-helpers/index.tsx +0 -135
  152. package/src/components/pos-management/pos-helpers/layout-display-modal.tsx +0 -99
  153. package/src/components/pos-management/search.tsx +0 -48
  154. package/src/components/pos-management/table-content/filtered-tables.tsx +0 -59
  155. package/src/components/pos-management/table-content/floor-tabs.tsx +0 -65
  156. package/src/components/pos-management/table-content/index.tsx +0 -76
  157. package/src/components/pos-management/table-content/table-item.tsx +0 -127
  158. package/src/components/pos-management/table-content/tables.tsx +0 -96
  159. package/src/components/restaurant-management/add-floor-modal.tsx +0 -133
  160. package/src/components/restaurant-management/add-table-modal.tsx +0 -198
  161. package/src/components/restaurant-management/delete-floor-confirm-modal.tsx +0 -42
  162. package/src/components/restaurant-management/delete-table-confirm-modal.tsx +0 -51
  163. package/src/components/restaurant-management/header.tsx +0 -22
  164. package/src/components/restaurant-management/index.tsx +0 -54
  165. package/src/components/restaurant-management/left-side.tsx +0 -51
  166. package/src/components/restaurant-management/right-side.tsx +0 -179
  167. package/src/components/restaurant-management/table-empty.tsx +0 -43
  168. package/src/components/session-management/close-session-modal/actions.tsx +0 -45
  169. package/src/components/session-management/close-session-modal/close-session-confirm.tsx +0 -157
  170. package/src/components/session-management/close-session-modal/close-session-ticket.tsx +0 -218
  171. package/src/components/session-management/close-session-modal/container.tsx +0 -25
  172. package/src/components/session-management/close-session-modal/draft-orders-confirm.tsx +0 -53
  173. package/src/components/session-management/close-session-modal/draft-orders-summary.tsx +0 -82
  174. package/src/components/session-management/close-session-modal/draft-orders.tsx +0 -34
  175. package/src/components/session-management/close-session-modal/index.tsx +0 -35
  176. package/src/components/session-management/close-session-modal/order/index.ts +0 -1
  177. package/src/components/session-management/close-session-modal/order/order-line.tsx +0 -64
  178. package/src/components/session-management/close-session-modal/order/orders-in-draft.tsx +0 -31
  179. package/src/components/session-management/close-session-modal/session-summary.tsx +0 -165
  180. package/src/components/session-management/index.ts +0 -1
  181. package/src/components/session-management/open-shift/index.tsx +0 -172
  182. package/src/components/table-management/index.tsx +0 -0
  183. package/src/constants/api/index.ts +0 -1
  184. package/src/constants/headers.constant.tsx +0 -24
  185. package/src/constants/index.ts +0 -1
  186. package/src/constants/language.store.ts +0 -21
  187. package/src/constants/methods.constant.ts +0 -10
  188. package/src/constants/order-state.ts +0 -8
  189. package/src/constants/payment-color.constant.ts +0 -26
  190. package/src/constants/query.constant.ts +0 -14
  191. package/src/constants/routes.constants.ts +0 -23
  192. package/src/constants/template-name.constant.ts +0 -9
  193. package/src/hooks/bill/use-get-bill-information.ts +0 -49
  194. package/src/hooks/bill/use-print-bill.tsx +0 -0
  195. package/src/hooks/common/load-env-config.ts +0 -98
  196. package/src/hooks/common/use-back.ts +0 -13
  197. package/src/hooks/common/use-broadcast.ts +0 -22
  198. package/src/hooks/common/use-click-outside.ts +0 -58
  199. package/src/hooks/common/use-get-base64-photo.ts +0 -71
  200. package/src/hooks/common/use-get-query.ts +0 -25
  201. package/src/hooks/common/use-pos.ts +0 -21
  202. package/src/hooks/common/use-query-params.ts +0 -89
  203. package/src/hooks/common/use-speech.ts +0 -36
  204. package/src/hooks/customer/use-customer-provider.ts +0 -247
  205. package/src/hooks/floor/use-floor-provider.ts +0 -172
  206. package/src/hooks/kitchen/use-kitchen-provider.ts +0 -80
  207. package/src/hooks/order/use-get-point-reward.ts +0 -50
  208. package/src/hooks/order/use-loop-fetch-order.ts +0 -30
  209. package/src/hooks/order/use-order-items.ts +0 -61
  210. package/src/hooks/order/use-orders.ts +0 -76
  211. package/src/hooks/payment/use-payment-provider.ts +0 -221
  212. package/src/hooks/product/use-product-provider.ts +0 -87
  213. package/src/hooks/session/use-check-session.tsx +0 -19
  214. package/src/hooks/session/use-session-provider.ts +0 -79
  215. package/src/hooks/table/use-pos-table-provider.ts +0 -193
  216. package/src/index.css +0 -5
  217. package/src/index.ts +0 -13
  218. package/src/layouts/common.tsx +0 -15
  219. package/src/layouts/index.ts +0 -4
  220. package/src/layouts/pos-layout.tsx +0 -33
  221. package/src/layouts/pos-order-layout.tsx +0 -43
  222. package/src/layouts/sale-layout.tsx +0 -25
  223. package/src/locales/en.json +0 -394
  224. package/src/locales/vi.json +0 -400
  225. package/src/pages/index.ts +0 -4
  226. package/src/pages/login/index.tsx +0 -128
  227. package/src/pages/pincode/index.tsx +0 -198
  228. package/src/pages/pos/kitchen-management/layout.tsx +0 -18
  229. package/src/pages/pos/management-floor/index.tsx +0 -7
  230. package/src/pages/pos/management-order/index.tsx +0 -7
  231. package/src/pages/pos/management-order/order-detail/index.tsx +0 -7
  232. package/src/pages/pos/management-table/index.tsx +0 -0
  233. package/src/pages/pos/payment-success/index.tsx +0 -75
  234. package/src/provider/app-provider.tsx +0 -56
  235. package/src/provider/fallback/custom-error.tsx +0 -26
  236. package/src/provider/main-provider.tsx +0 -41
  237. package/src/provider/meta-provider.tsx +0 -72
  238. package/src/provider/modal-provider.tsx +0 -48
  239. package/src/provider/notification-provider.tsx +0 -64
  240. package/src/provider/pos-provider/close-session-provider/index.tsx +0 -207
  241. package/src/provider/pos-provider/customer-provider/index.tsx +0 -30
  242. package/src/provider/pos-provider/floor-provider/index.tsx +0 -39
  243. package/src/provider/pos-provider/index.ts +0 -6
  244. package/src/provider/pos-provider/kitchen-provider/index.tsx +0 -30
  245. package/src/provider/pos-provider/order-detail-provider/index.tsx +0 -233
  246. package/src/provider/pos-provider/order-provider/index.tsx +0 -803
  247. package/src/provider/pos-provider/payment-provider/index.tsx +0 -30
  248. package/src/provider/pos-provider/product-provider/index.tsx +0 -30
  249. package/src/provider/pos-provider/sale-provider/index.tsx +0 -168
  250. package/src/provider/pos-provider/session-provider/index.tsx +0 -30
  251. package/src/provider/pos-provider/socket-provider/index.tsx +0 -118
  252. package/src/provider/pos-provider/table-provider/index.tsx +0 -30
  253. package/src/provider/public-provider.tsx +0 -104
  254. package/src/provider/use-session-provider.ts +0 -79
  255. package/src/router/app-router.tsx +0 -38
  256. package/src/router/index.tsx +0 -26
  257. package/src/router/pos-route.tsx +0 -75
  258. package/src/router/protected-route.tsx +0 -16
  259. package/src/router/public-route.tsx +0 -11
  260. package/src/store/header/index.ts +0 -21
  261. package/src/store/session/index.ts +0 -25
  262. package/src/store/states/cart.state.ts +0 -135
  263. package/src/store/states/close-session.state.ts +0 -20
  264. package/src/store/states/customer.state.ts +0 -19
  265. package/src/store/states/payment.state.ts +0 -14
  266. package/src/styles/base.css +0 -212
  267. package/src/styles/common.css +0 -65
  268. package/src/styles/lib/tailwind.css +0 -0
  269. package/src/styles/lib/tailwind.theme.css +0 -34
  270. package/src/styles/loading.css +0 -72
  271. package/src/styles/main.css +0 -5
  272. package/src/styles/refreshing-content.css +0 -55
  273. package/src/styles/text.css +0 -44
  274. package/src/types/account.ts +0 -61
  275. package/src/types/branch.ts +0 -6
  276. package/src/types/category.ts +0 -13
  277. package/src/types/common.ts +0 -4
  278. package/src/types/customer.ts +0 -52
  279. package/src/types/dashboard.ts +0 -18
  280. package/src/types/edc.ts +0 -37
  281. package/src/types/export-e-invoice.ts +0 -17
  282. package/src/types/filter.d.ts +0 -12
  283. package/src/types/floor/floor.ts +0 -16
  284. package/src/types/floor.d.ts +0 -36
  285. package/src/types/index.ts +0 -127
  286. package/src/types/invoice.ts +0 -32
  287. package/src/types/modal.ts +0 -15
  288. package/src/types/notification.ts +0 -12
  289. package/src/types/order.ts +0 -182
  290. package/src/types/payment.ts +0 -44
  291. package/src/types/product/product.ts +0 -47
  292. package/src/types/product.ts +0 -137
  293. package/src/types/provider-info.d.ts +0 -14
  294. package/src/types/qr.d.ts +0 -25
  295. package/src/types/report.d.ts +0 -43
  296. package/src/types/sale.d.ts +0 -68
  297. package/src/types/search.d.ts +0 -7
  298. package/src/types/session.d.ts +0 -30
  299. package/src/types/shop-qr.d.ts +0 -89
  300. package/src/types/staff.d.ts +0 -35
  301. package/src/types/store.d.ts +0 -25
  302. package/src/types/table.d.ts +0 -57
  303. package/src/utils/close-session-ticket.tsx +0 -129
  304. package/src/utils/functions.ts +0 -299
  305. package/src/utils/i18n.ts +0 -25
  306. package/src/utils/pos/bill.ts +0 -156
  307. package/src/utils/pos/convert-order.ts +0 -58
  308. package/src/utils/pos/helpers.ts +0 -48
  309. package/src/utils/pos/session.ts +0 -44
  310. package/src/utils/storages/index.ts +0 -1
  311. package/src/utils/storages/local-storage.ts +0 -72
  312. package/tailwind.preset.ts +0 -25
  313. package/tsconfig.json +0 -30
  314. package/tsup.config.ts +0 -30
@@ -1,153 +0,0 @@
1
- import { FileListFillIcon } from "@assets/icons/common";
2
- import { Line } from "@assets/icons/customer-view-icon";
3
- import { useKitchen } from "@provider/pos-provider/kitchen-provider";
4
- import {
5
- TChangeOrderStatusPayload,
6
- TKitchenOrder,
7
- TKitchenOrderLineWithComplete,
8
- } from "@type/order";
9
- import { useEffect, useMemo, useState } from "react";
10
- import { useTranslation } from "react-i18next";
11
- import { useParams } from "react-router-dom";
12
- import { toast } from "react-toastify";
13
- import ChangeStatusConfirmModal from "../change-status-confirm-modal";
14
- import KitchenOrderLine from "./line";
15
-
16
- type TProps = {
17
- order: TKitchenOrder;
18
- isCompleteOrder: boolean;
19
- };
20
-
21
- const KitchenOrder = ({ order, isCompleteOrder }: TProps) => {
22
- const { t } = useTranslation();
23
- const { changeOrderPreparationState } = useKitchen();
24
- const params = useParams();
25
- const preparationDisplayId = params.kitchenId;
26
- const { displayDataQueryResult } = useKitchen();
27
- const [openConfirmModal, setOpenConfirmModal] = useState(false);
28
- const [orderLines, setOrderLines] = useState<TKitchenOrderLineWithComplete[]>(
29
- []
30
- );
31
- const nextOrderStatusName = useMemo(() => {
32
- const stage = displayDataQueryResult.data?.stages.find(
33
- (item: any) => item.id === order.stage_id + 1
34
- );
35
- return stage?.name;
36
- }, [displayDataQueryResult.data?.stages, order.stage_id]);
37
-
38
- const onCancelProductInOrder = (id: number) => {
39
- setOrderLines((prev) =>
40
- prev.map((line) =>
41
- line.id === id ? { ...line, isComplete: false } : line
42
- )
43
- );
44
- };
45
-
46
- useEffect(() => {
47
- setOrderLines(
48
- order.orderlines.map((line) => ({ ...line, isComplete: false }))
49
- );
50
- }, [order]);
51
-
52
- const onChangeOrderStatus = () => {
53
- const payload: TChangeOrderStatusPayload = {
54
- orderId: order.id,
55
- stageId: order.stage_id + 1,
56
- preparationDisplayId: Number(preparationDisplayId),
57
- };
58
-
59
- changeOrderPreparationState.mutateAsync(payload).then(() => {
60
- toast.success(t("changeOrderStatusSuccess"));
61
- return displayDataQueryResult.refetch();
62
- });
63
- };
64
-
65
- const onCompleteProductInOrder = (id: number) => {
66
- setOrderLines((prev) => {
67
- const updated = prev.map((line) =>
68
- line.id === id ? { ...line, isComplete: true } : line
69
- );
70
-
71
- const allCompleteNow = updated.every((line) => line.isComplete);
72
-
73
- if (allCompleteNow) {
74
- onChangeOrderStatus();
75
- }
76
-
77
- return updated;
78
- });
79
- };
80
-
81
- return (
82
- <div
83
- style={{
84
- boxShadow: "0 16px 32px -12px rgba(88, 92, 95, 0.10)",
85
- }}
86
- className="p-2 flex flex-col gap-2 rounded-xl border border-stroke-disabled bg-white"
87
- >
88
- <div className="flex justify-between items-center">
89
- <div className="flex items-center gap-2 ">
90
- <div className="w-7 rounded-lg aspect-square bg-brand-50 flex items-center justify-center">
91
- <FileListFillIcon />
92
- </div>
93
-
94
- <div>
95
- <p className="text-sm font-medium leading-5 tracking-[-0.12px] text-text-secondary">
96
- {t("order")}{" "}
97
- <span className="text-black">DH-{order.pos_order_id}</span>
98
- </p>
99
- <p className="text-xs font-semibold">
100
- {t("table")} {order.table.table_number}
101
- </p>
102
- </div>
103
- </div>
104
- {!isCompleteOrder && (
105
- <div
106
- onClick={() => setOpenConfirmModal(true)}
107
- className="flex gap-1 items-center cursor-pointer"
108
- >
109
- <svg
110
- xmlns="http://www.w3.org/2000/svg"
111
- width="12"
112
- height="8"
113
- viewBox="0 0 12 8"
114
- fill="none"
115
- >
116
- <path
117
- d="M4.79985 5.9035L10.315 0.387695L11.164 1.2361L4.79985 7.6003L0.981445 3.7819L1.82985 2.9335L4.79985 5.9035Z"
118
- fill="#1FC163"
119
- />
120
- </svg>
121
- <p className="text-colored-success text-sm">{t("mark_as_done")}</p>
122
- </div>
123
- )}
124
- </div>
125
-
126
- <Line />
127
-
128
- <div className="flex flex-col justify-center gap-1">
129
- {orderLines.map((orderLine: TKitchenOrderLineWithComplete) => (
130
- <KitchenOrderLine
131
- isCompleteOrder={isCompleteOrder}
132
- key={orderLine.id}
133
- orderLine={orderLine}
134
- onCancelProductInOrder={onCancelProductInOrder}
135
- onCompleteProductInOrder={onCompleteProductInOrder}
136
- />
137
- ))}
138
- </div>
139
-
140
- {openConfirmModal && (
141
- <ChangeStatusConfirmModal
142
- onChangeOrderStatus={onChangeOrderStatus}
143
- isOpen={openConfirmModal}
144
- onClose={() => setOpenConfirmModal(false)}
145
- orderId={order.pos_order_id}
146
- toOrderStatus={nextOrderStatusName}
147
- />
148
- )}
149
- </div>
150
- );
151
- };
152
-
153
- export default KitchenOrder;
@@ -1,78 +0,0 @@
1
- import { CheckBoxStick } from "@assets/icons/common";
2
- import { TKitchenOrderLineWithComplete } from "@type/order";
3
-
4
- type TProps = {
5
- orderLine: TKitchenOrderLineWithComplete;
6
- onCompleteProductInOrder: (id: number) => void;
7
- onCancelProductInOrder: (id: number) => void;
8
- isCompleteOrder: boolean;
9
- };
10
-
11
- function KitchenOrderLine({
12
- orderLine,
13
- onCancelProductInOrder,
14
- onCompleteProductInOrder,
15
- isCompleteOrder,
16
- }: TProps) {
17
- return (
18
- <div className="px-2 rounded bg-neutral-50-98">
19
- <div className="flex items-center gap-2 py-[10px]">
20
- <p className="text-sm font-medium leading-5 text-text-secondary tracking-[-0.12px]">
21
- x{orderLine.product_quantity}
22
- </p>
23
-
24
- <p className="text-sm font-semibold flex-1 leading-5 tracking-[-0.12px] text-text-primary">
25
- {orderLine.product_name}
26
- </p>
27
-
28
- {!isCompleteOrder &&
29
- (orderLine.isComplete ? (
30
- <button
31
- onClick={() => onCancelProductInOrder(orderLine.id)}
32
- className="cursor-pointer"
33
- >
34
- <CheckBoxStick />
35
- </button>
36
- ) : (
37
- <div
38
- onClick={() => onCompleteProductInOrder(orderLine.id)}
39
- className="w-5 h-5 rounded border-[1.5px] border-stroke-disabled bg-white cursor-pointer"
40
- />
41
- ))}
42
- </div>
43
- {((orderLine.pickAttributeValue &&
44
- orderLine.pickAttributeValue.length > 0) ||
45
- orderLine.product_cancelled > 0) && (
46
- <div className="flex flex-col pl-4 border-l-2 border-stroke-disabled ml-2 py-3">
47
- {orderLine.product_cancelled > 0 && (
48
- <div className="flex justify-between items-center text-xs font-semibold text-error">
49
- <div className=" flex gap-1 items-center">
50
- <span>x{orderLine.product_cancelled}</span>
51
- <span className="line-through">{orderLine.product_name}</span>
52
- </div>
53
- <div className="h-6 p-2 flex items-center rounded bg-danger">
54
- Huỷ
55
- </div>
56
- </div>
57
- )}
58
- {orderLine.pickAttributeValue?.map((attributeLine: any) => {
59
- return (
60
- <div key={attributeLine.id} className="flex gap-1 items-start">
61
- <span className="text-xs font-semibold text-text-secondary">
62
- {attributeLine.name}:
63
- </span>
64
- <span className="text-xs font-medium text-text-secondary">
65
- {attributeLine.value_string
66
- .map((val: any) => val.name)
67
- .join(",")}
68
- </span>
69
- </div>
70
- );
71
- })}
72
- </div>
73
- )}
74
- </div>
75
- );
76
- }
77
-
78
- export default KitchenOrderLine;
@@ -1,52 +0,0 @@
1
- import { QUERY_KEYS } from "@constants/query.constant"
2
- import useGetQuery from "@hooks/common/use-get-query"
3
- import { useQueryParams } from "@hooks/common/use-query-params"
4
- import { useEffect } from "react"
5
-
6
- type TProps = {
7
- kitchenOrderStages: any
8
- }
9
-
10
- const OrderState = ({ kitchenOrderStages }: TProps) => {
11
- const { updateQuery } = useQueryParams()
12
- const { kitchenOrderStatus } = useGetQuery()
13
-
14
- useEffect(() => {
15
- !kitchenOrderStatus &&
16
- kitchenOrderStages[0]?.id &&
17
- updateQuery(QUERY_KEYS.KITCHEN_ORDER_STATUS, kitchenOrderStages[0]?.id)
18
- }, [kitchenOrderStatus, kitchenOrderStages])
19
-
20
- return (
21
- <div className="flex justify-center">
22
- {kitchenOrderStages.map((status: any) => {
23
- const isActive = kitchenOrderStatus === status.id
24
- return (
25
- <button
26
- key={status.id}
27
- onClick={() =>
28
- updateQuery(QUERY_KEYS.KITCHEN_ORDER_STATUS, status.id)
29
- }
30
- className={`px-5 py-3 h-11 flex items-center border-b-[3px] justify-center ${
31
- isActive
32
- ? "bg-brand-50 border-brand-default"
33
- : "border-transparent"
34
- }`}
35
- >
36
- <p
37
- className={`text-sm leading-5 tracking-[-0.12px] ${
38
- isActive
39
- ? "text-text-primary font-semibold"
40
- : "text-text-secondary font-medium"
41
- }`}
42
- >
43
- {status.display_name}
44
- </p>
45
- </button>
46
- )
47
- })}
48
- </div>
49
- )
50
- }
51
-
52
- export default OrderState
@@ -1,69 +0,0 @@
1
- type TStage = {
2
- alert_timer: number;
3
- color: string;
4
- display_name: string;
5
- id: number;
6
- name: string;
7
- sequence: number;
8
- write_date: string;
9
- icon_url: string;
10
- };
11
-
12
- type TProps = {
13
- stages: TStage[];
14
- };
15
-
16
- const KitchenStatus = (props: TProps) => {
17
- if (!props?.stages?.length || props?.stages?.length === 0) return null;
18
-
19
- const imgUrl = (iconUrl: string) => {
20
- const url = `https://sme-api-dev.atomsolution.vn/wesap/${iconUrl}`;
21
-
22
- return url;
23
- };
24
-
25
- return (
26
- <div className="grid grid-cols-2 gap-2">
27
- {props.stages.map((stage: TStage, index) => {
28
- return (
29
- <div
30
- style={{
31
- backgroundColor: stage.color + "33",
32
- }}
33
- key={index}
34
- className="flex flex-col gap-1 p-2 rounded-lg"
35
- >
36
- <div className="flex items-center justify-between">
37
- {/* <p
38
- style={{
39
- color: stage.color,
40
- }}
41
- className="text-lg font-semibold leading-[26px]"
42
- >
43
- {stage.sequence}
44
- </p> */}
45
-
46
- <img
47
- src={imgUrl(stage.icon_url)}
48
- className="w-6 aspect-square "
49
- />
50
- </div>
51
-
52
- <p
53
- style={{
54
- color: stage.color,
55
- }}
56
- className="text-sm font-medium leading-5 tracking-[-0.2px]"
57
- >
58
- {stage.display_name}
59
- </p>
60
- </div>
61
- );
62
- })}
63
- </div>
64
- );
65
- };
66
-
67
- export default KitchenStatus;
68
-
69
- const StatusStyle = {};
@@ -1,113 +0,0 @@
1
- import { useEffect, useMemo } from "react";
2
-
3
- import { QUERY_KEYS } from "@constants/query.constant";
4
- import { EmptyTable } from "@fctc/sme-widget-ui";
5
- import { useQueryParams } from "@hooks/common/use-query-params";
6
-
7
- import useGetQuery from "@hooks/common/use-get-query";
8
- import usePos from "@hooks/common/use-pos";
9
- import useOrders from "@hooks/order/use-orders";
10
- import { useKitchen } from "@provider/pos-provider/kitchen-provider";
11
- import { LoadDataModel, useSale } from "@provider/pos-provider/sale-provider";
12
- import {
13
- convertMessage,
14
- useSocketData,
15
- } from "@provider/pos-provider/socket-provider";
16
- import { TKitchenOrder } from "@type/order";
17
- import { useTranslation } from "react-i18next";
18
- import { toast } from "react-toastify";
19
- import { SearchBar } from "../common/search-bar";
20
- import KitchenOrder from "./kitchen-order";
21
- import OrderState from "./kitchen-order/state";
22
-
23
- const OrdersKitchenManagement = () => {
24
- const { displayDataQueryResult, displayDataRefresh } = useKitchen();
25
- const { getData } = useSale();
26
- const { onSearchChange, kitchenOrdersFiltered } = useOrders();
27
- const { getQuery, updateQuery } = useQueryParams();
28
- const { dataUser } = usePos();
29
- const { kitchenOrderStatus } = useGetQuery();
30
- const { clientMtqq } = useSocketData();
31
- const { t } = useTranslation();
32
-
33
- const displayData = useMemo(() => {
34
- return displayDataQueryResult?.data;
35
- }, [displayDataQueryResult.data]);
36
-
37
- const kitchenOrderStages = useMemo(
38
- () => displayData?.stages ?? [],
39
- [displayData]
40
- );
41
-
42
- const kitchenAccessToken = useMemo(() => {
43
- return displayData?.access_token;
44
- }, [displayData]);
45
-
46
- useEffect(() => {
47
- clientMtqq &&
48
- displayData?.access_token &&
49
- clientMtqq.subscribe(
50
- `["${dataUser?.x_node}","${displayData?.access_token}"]`
51
- );
52
- clientMtqq?.on("message", (topic: any, payload: any) => {
53
- const messages = convertMessage(payload.toString());
54
- if (messages?.type === "LOAD_ORDERS") {
55
- toast.success(t("noti_new_order"));
56
- displayDataRefresh();
57
- }
58
- });
59
- }, [clientMtqq, kitchenAccessToken]);
60
-
61
- useEffect(() => {
62
- const mapKitchenWithPOS = getData(
63
- LoadDataModel.POS_PREPARATION_DISPLAY_DISPLAY
64
- );
65
- const posSession = mapKitchenWithPOS?.pos_config_ids?.find(
66
- (item: any) => item.current_session_id
67
- );
68
- if (posSession && !getQuery(QUERY_KEYS.SESSION_ID)) {
69
- updateQuery(QUERY_KEYS.SESSION_ID, posSession?.current_session_id);
70
- }
71
- }, []);
72
-
73
- return (
74
- <div className="flex flex-col justify-center h-full bg-gray-50">
75
- <div className="bg-white border-b border-stroke-disabled">
76
- <OrderState kitchenOrderStages={kitchenOrderStages} />
77
- </div>
78
-
79
- <div className="py-4 flex justify-center">
80
- <SearchBar
81
- onSearchChange={onSearchChange}
82
- placeholder="Nhập tên bàn, mã đơn..."
83
- className="w-full!"
84
- />
85
- </div>
86
-
87
- <div className="flex-1 p-4 overflow-y-auto">
88
- {kitchenOrderStages && kitchenOrdersFiltered.length > 0 ? (
89
- <div className="grid grid-cols-3 gap-2">
90
- {kitchenOrdersFiltered.map((order: TKitchenOrder) => {
91
- return (
92
- <KitchenOrder
93
- order={order}
94
- key={order.id}
95
- isCompleteOrder={
96
- kitchenOrderStatus ===
97
- kitchenOrderStages[kitchenOrderStages.length - 1]?.id
98
- }
99
- />
100
- );
101
- })}
102
- </div>
103
- ) : (
104
- <div className="w-full flex justify-center">
105
- <EmptyTable />
106
- </div>
107
- )}
108
- </div>
109
- </div>
110
- );
111
- };
112
-
113
- export default OrdersKitchenManagement;
@@ -1,128 +0,0 @@
1
- import { ORDER_STATE } from "@constants/order-state";
2
- import { QUERY_KEYS } from "@constants/query.constant";
3
- import { useOrder } from "@provider/pos-provider/order-provider";
4
- import { TBasicOrder } from "@type/order";
5
- import { TOrder } from "@type/sale";
6
- import { useEffect, useMemo, useState } from "react";
7
- import { useNavigate, useSearchParams } from "react-router-dom";
8
- import OrderHeader from "./order-header";
9
- import OrderPagination from "./order-pagination";
10
- import OrderTable from "./order-table";
11
- import POSPath from "@constants/routes.constants";
12
-
13
- export const ManagementOrder = () => {
14
- const [selectedStatus, setSelectedStatus] = useState(ORDER_STATE.ALL);
15
- const [selectedType, setSelectedType] = useState(OrderTab.ALL);
16
- const [page, setPage] = useState(1);
17
- const [pageSize, setPageSize] = useState(10);
18
- const [searchValue, setSearchValue] = useState("");
19
- const [searchParams] = useSearchParams();
20
- const { orders } = useOrder();
21
- const navigate = useNavigate();
22
-
23
- const filterOrderType = (
24
- type: OrderTab,
25
- state: ORDER_STATE
26
- ): TBasicOrder[] => {
27
- return orders
28
- .filter((order) => {
29
- switch (type) {
30
- case OrderTab.AT_TABLE:
31
- return order.table_id;
32
- case OrderTab.TAKE_AWAY:
33
- return !order.table_id;
34
- default:
35
- return true;
36
- }
37
- })
38
- .filter((order) => {
39
- return state === ORDER_STATE.ALL ? true : order.state === state;
40
- });
41
- };
42
-
43
- const orderFilteredData = useMemo(() => {
44
- const filterOrdersType = filterOrderType(selectedType, selectedStatus);
45
- return searchValue
46
- ? filterOrdersType.filter((item) => {
47
- const sv = searchValue.toLowerCase();
48
- item.pos_reference?.toString().toLowerCase().includes(sv);
49
- })
50
- : filterOrdersType;
51
- }, [selectedType, orders, searchValue, selectedStatus, pageSize, page]);
52
-
53
- const totalPages = useMemo(
54
- () => Math.ceil(orderFilteredData.length / pageSize),
55
- [orderFilteredData, pageSize]
56
- );
57
-
58
- const orderLinesByPage = useMemo(
59
- () => orderFilteredData.slice(0 + (page - 1) * pageSize, pageSize * page),
60
- [page, orderFilteredData]
61
- );
62
-
63
- const onViewOrderDetail = (order: TOrder) => {
64
- const keys = [
65
- QUERY_KEYS.POS_ID,
66
- QUERY_KEYS.SESSION_ID,
67
- QUERY_KEYS.ORDER_ID,
68
- QUERY_KEYS.TABLE_ID,
69
- QUERY_KEYS.FLOOR,
70
- ];
71
-
72
- const finalQuery = new URLSearchParams(
73
- keys.map((key) => [
74
- key,
75
- key === QUERY_KEYS.ORDER_ID
76
- ? String(order.id)
77
- : searchParams.get(key) ?? "",
78
- ])
79
- );
80
-
81
- navigate({
82
- pathname: POSPath.ORDER_DETAIL,
83
- search: finalQuery.toString(),
84
- });
85
- };
86
-
87
- useEffect(() => {
88
- setPage(1);
89
- }, [selectedType, selectedStatus, pageSize]);
90
-
91
- return (
92
- <div className="flex flex-col h-full bg-white">
93
- <div className="flex flex-col flex-1 overflow-y-auto">
94
- <OrderHeader
95
- onRefreshOrder={() => {}}
96
- searchValue={searchValue}
97
- setSearchValue={setSearchValue}
98
- onStatusChange={setSelectedStatus}
99
- activeTab={selectedType}
100
- onActiveTabChange={(tab) => setSelectedType(tab as OrderTab)}
101
- selectedStatus={selectedStatus}
102
- />
103
-
104
- <div className="flex-1 overflow-y-auto">
105
- <OrderTable
106
- orderData={orderLinesByPage}
107
- handleClick={onViewOrderDetail}
108
- isLoading={false}
109
- />
110
- </div>
111
-
112
- <OrderPagination
113
- page={page}
114
- setPage={setPage}
115
- pageSize={pageSize}
116
- setPageSize={setPageSize}
117
- totalPages={totalPages}
118
- />
119
- </div>
120
- </div>
121
- );
122
- };
123
-
124
- export enum OrderTab {
125
- ALL = "all",
126
- AT_TABLE = "at-table",
127
- TAKE_AWAY = "take-away",
128
- }
@@ -1,46 +0,0 @@
1
- import { IcPlus } from "@assets/icons/breadcrumbs-icon";
2
- import ButtonAction from "@components/common/button-action";
3
- import { useTranslation } from "react-i18next";
4
-
5
- const OrderActions = ({
6
- orderStatus,
7
- onAddItem,
8
- onPayment,
9
- onIssueInvoice,
10
- onPrintInvoice,
11
- }: {
12
- orderStatus: string;
13
- onAddItem?: () => void;
14
- onPayment?: () => void;
15
- onIssueInvoice?: () => void;
16
- onPrintInvoice?: () => void;
17
- }) => {
18
- const { t } = useTranslation();
19
-
20
- return (
21
- <div className="flex items-center gap-3 justify-center">
22
- <ButtonAction
23
- className="button-secondary"
24
- onClick={() => {
25
- orderStatus === "draft"
26
- ? onAddItem && onAddItem()
27
- : onIssueInvoice && onIssueInvoice();
28
- }}
29
- iconSrc={<IcPlus />}
30
- text={orderStatus === "draft" ? t("add_dish") : t("create_invoice")}
31
- />
32
-
33
- <ButtonAction
34
- className="button-primary"
35
- onClick={() => {
36
- orderStatus === "draft"
37
- ? onPayment && onPayment()
38
- : onPrintInvoice && onPrintInvoice();
39
- }}
40
- text={orderStatus === "draft" ? t("payment") : t("print_invoice")}
41
- />
42
- </div>
43
- );
44
- };
45
-
46
- export default OrderActions;
@@ -1,37 +0,0 @@
1
- import useBack from "@hooks/common/use-back";
2
- import { useMemo } from "react";
3
- import OrderStatus from "../order-status";
4
- import { TBasicOrder } from "@type/order";
5
-
6
- type TProps = {
7
- orderDetailData: TBasicOrder;
8
- };
9
-
10
- const Header = ({ orderDetailData }: TProps) => {
11
- const onBack = useBack();
12
-
13
- const orderState = useMemo(() => {
14
- return orderDetailData?.state;
15
- }, [orderDetailData]);
16
-
17
- return (
18
- <div className="flex items-center justify-between p-4">
19
- <div className="flex items-center justify-center gap-2">
20
- <button
21
- onClick={onBack}
22
- className="w-12 aspect-square cursor-pointer bg-neutral-disabled rounded-lg"
23
- >
24
-
25
- </button>
26
- <div className="flex items-center gap-4">
27
- <p className="text-2xl font-semibold leading-8 text-text-primary tracking-[-0.24px]">
28
- {orderDetailData?.pos_reference}
29
- </p>
30
- <OrderStatus status={orderState} />
31
- </div>
32
- </div>
33
- </div>
34
- );
35
- };
36
-
37
- export default Header;
@@ -1,3 +0,0 @@
1
- export { default as Header } from "./header";
2
- export { default as OrderDetailInformation } from "./information";
3
- export { default as OrderDetailSummary } from "./summary";