@feedmepos/mf-menu 0.32.37 → 0.32.38-dev.1

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 (129) hide show
  1. package/dist/{App-Dl-BiHwh.js → App-DGdS9nht.js} +7 -7
  2. package/dist/{ApplyProduct.vue_vue_type_script_setup_true_lang-Z4PgBxr3.js → ApplyProduct.vue_vue_type_script_setup_true_lang-CBy3XScH.js} +3 -3
  3. package/dist/{Catalog-BSZ8BAbX.js → Catalog-BuI0IVpf.js} +6 -6
  4. package/dist/{Category-bGvXpr0F.js → Category-DSTt-Sl6.js} +9 -9
  5. package/dist/Category-DbL3CS-5.js +224 -0
  6. package/dist/{CookingGuide-DijUR2JM.js → CookingGuide-Baw7iMDl.js} +4 -4
  7. package/dist/{CustomAttributeChip.vue_vue_type_script_setup_true_lang-B30t_PW1.js → CustomAttributeChip.vue_vue_type_script_setup_true_lang-BDZDojOt.js} +1 -1
  8. package/dist/{Group-O4L3iHx0.js → Group-BnzmEllK.js} +1 -1
  9. package/dist/{Group-CrqE40ia.js → Group-D158_Fr0.js} +7 -7
  10. package/dist/{Group.vue_vue_type_script_setup_true_lang-CsM72Jnq.js → Group.vue_vue_type_script_setup_true_lang-C3H6xvlY.js} +227 -216
  11. package/dist/{GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-BGR4kFzj.js → GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-D2G40Yc6.js} +5 -5
  12. package/dist/{ImportProductDialog.vue_vue_type_script_setup_true_lang-wf0Wm51b.js → ImportProductDialog.vue_vue_type_script_setup_true_lang-D-JOSWUn.js} +1743 -1743
  13. package/dist/{Ingredient-DvvuwOdH.js → Ingredient-C-gP75uQ.js} +3 -3
  14. package/dist/{InventoryBinding.vue_vue_type_script_setup_true_lang-anFCPZZD.js → InventoryBinding.vue_vue_type_script_setup_true_lang-BpuYVaKl.js} +2 -2
  15. package/dist/{LinkProductSideSheet-ImK8azTA.js → LinkProductSideSheet-DN5fbJVw.js} +3 -3
  16. package/dist/{MenuSetting-BX0ohmwF.js → MenuSetting-CjQ6_Ti_.js} +5 -5
  17. package/dist/{PrintRoute-CXYZHJsf.js → PrintRoute-DK25vS8X.js} +4 -4
  18. package/dist/{Product-BnnwL5DZ.js → Product-DCEMAuw3.js} +1 -1
  19. package/dist/{Product.vue_vue_type_script_setup_true_lang-DUBnQJZ1.js → Product.vue_vue_type_script_setup_true_lang-DCutU0Ny.js} +348 -337
  20. package/dist/{ProductInternalTools-DzRnmE1r.js → ProductInternalTools-CiDa1V3D.js} +23 -23
  21. package/dist/{Products-CtzHONQZ.js → Products-DUxtMLiy.js} +32 -32
  22. package/dist/{Publish-DmIbDy8-.js → Publish-Bs5zVwDw.js} +3 -3
  23. package/dist/{Recipe-D_0Ezt1C.js → Recipe-_WCpFOU6.js} +4 -4
  24. package/dist/{RuleView.vue_vue_type_script_setup_true_lang-DdeQnyfQ.js → RuleView.vue_vue_type_script_setup_true_lang-3AVOVYpW.js} +366 -366
  25. package/dist/{Scheduler-BgQsbdVM.js → Scheduler-BqFwfRlm.js} +3 -3
  26. package/dist/{ServingSequence-DCRzJsrs.js → ServingSequence-ByNsE8ha.js} +3 -3
  27. package/dist/{Setting-CgtttPN_.js → Setting-widqJGfT.js} +5 -5
  28. package/dist/Subcategory-DXaz2g4-.js +345 -0
  29. package/dist/{Takeaway-BfcHs1we.js → Takeaway-Ce_y1_UW.js} +1 -1
  30. package/dist/{Takeaway-CExKsbN5.js → Takeaway-DVBJn6re.js} +4 -4
  31. package/dist/Takeaway.vue_vue_type_script_setup_true_lang-DK2Cp2Dg.js +316 -0
  32. package/dist/{Thumbnail.vue_vue_type_script_setup_true_lang-Br279NC_.js → Thumbnail.vue_vue_type_script_setup_true_lang-CAiNaQMP.js} +4 -4
  33. package/dist/TranslationSideSheet.vue_vue_type_script_setup_true_lang-BPs9D7Pq.js +185 -0
  34. package/dist/TreeEditorOpenner.vue_vue_type_script_setup_true_lang-nFLEeipN.js +6120 -0
  35. package/dist/{Unit-B6P_ykM-.js → Unit-XJLHLSYf.js} +2 -2
  36. package/dist/Variant-BA1AQl9-.js +247 -0
  37. package/dist/{_id_-D2ozS9Ck.js → _id_-CA2rV7Eb.js} +9 -9
  38. package/dist/app-C9zsFCoJ.js +363 -0
  39. package/dist/{app-DqyNXgYz.js → app-D2Sxejos.js} +1 -1
  40. package/dist/app.js +1 -1
  41. package/dist/apps/mf-menu/src/app.d.ts +264 -0
  42. package/dist/apps/mf-menu/src/components/ProductTranslationDialog.vue.d.ts +41 -0
  43. package/dist/apps/mf-menu/src/components/TranslationBadge.vue.d.ts +29 -0
  44. package/dist/apps/mf-menu/src/components/TranslationFieldSection.vue.d.ts +39 -0
  45. package/dist/apps/mf-menu/src/components/TranslationSideSheet.vue.d.ts +23 -0
  46. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProduct.vue.d.ts +12 -0
  47. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProductDialog.vue.d.ts +6 -0
  48. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/index.d.ts +54 -0
  49. package/dist/apps/mf-menu/src/components/feature/CategoryManager/Form.vue.d.ts +1 -0
  50. package/dist/apps/mf-menu/src/components/feature/Fields/ImageDropField.vue.d.ts +1 -0
  51. package/dist/apps/mf-menu/src/components/feature/GroupManager/OptionTable.vue.d.ts +16 -0
  52. package/dist/apps/mf-menu/src/components/feature/GroupManager/ProductOverrideTranslation.vue.d.ts +22 -0
  53. package/dist/apps/mf-menu/src/components/feature/GroupManager/UpdateForm.vue.d.ts +6 -0
  54. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierButton.vue.d.ts +20 -0
  55. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierForm.vue.d.ts +20 -0
  56. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/category.d.ts +8 -2
  57. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/item.d.ts +24 -1
  58. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/scheduler.d.ts +16 -0
  59. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/useItemFormManagement.d.ts +10 -0
  60. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/OptionTable.vue.d.ts +16 -0
  61. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/UpdateForm.vue.d.ts +6 -0
  62. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/index.d.ts +24 -0
  63. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ItemForm.vue.d.ts +30 -0
  64. package/dist/apps/mf-menu/src/components/feature/TreeEditor/menuUtils.d.ts +10 -0
  65. package/dist/apps/mf-menu/src/components/feature/TreeEditor/store/menuV2.d.ts +125 -1
  66. package/dist/apps/mf-menu/src/components/feature/VariantManager/ProductVariantTranslation.vue.d.ts +37 -0
  67. package/dist/apps/mf-menu/src/components/import/PreviewAddonContent.vue.d.ts +20 -0
  68. package/dist/apps/mf-menu/src/composable/linkProducts.d.ts +16 -0
  69. package/dist/apps/mf-menu/src/helper/item.d.ts +1 -0
  70. package/dist/apps/mf-menu/src/helper/itemCategories.d.ts +10 -0
  71. package/dist/apps/mf-menu/src/helper/menu.d.ts +11 -0
  72. package/dist/apps/mf-menu/src/helper/menuImport.d.ts +125 -1
  73. package/dist/apps/mf-menu/src/helper/menuSanitizer.d.ts +125 -1
  74. package/dist/apps/mf-menu/src/manager/menu/category.d.ts +8 -2
  75. package/dist/apps/mf-menu/src/manager/menu/group.d.ts +1 -0
  76. package/dist/apps/mf-menu/src/manager/menu/item.d.ts +125 -1
  77. package/dist/apps/mf-menu/src/manager/menu/subcategory.d.ts +6 -0
  78. package/dist/apps/mf-menu/src/stores/manager/item.d.ts +31 -1
  79. package/dist/apps/mf-menu/src/stores/manager/scheduler.d.ts +16 -0
  80. package/dist/apps/mf-menu/src/stores/manager/takeaway.d.ts +9 -0
  81. package/dist/apps/mf-menu/src/stores/menu.d.ts +125 -1
  82. package/dist/apps/mf-menu/src/utils/translation.d.ts +2 -0
  83. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddCategoryDialogContentComponent.vue.d.ts +1 -0
  84. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/Form.vue.d.ts +20 -0
  85. package/dist/apps/mf-menu/src/views/Publish/UpdateCatalogDialog.vue.d.ts +46 -0
  86. package/dist/apps/mf-menu/src/views/Scheduler/FilterForm.vue.d.ts +10 -0
  87. package/dist/apps/mf-menu/src/views/Scheduler/SchedulerDialog.vue.d.ts +10 -0
  88. package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -1
  89. package/dist/assets/linked-status-BrleJSCp.js +13 -0
  90. package/dist/assets/menu-export-Da3-wtnw.js +107 -0
  91. package/dist/assets/override-menu-ChjeVe4O.js +13 -0
  92. package/dist/assets/validate-menu-YVTxOfeq.js +13 -0
  93. package/dist/{catalog-CFKVaXk7.js → catalog-YvUT-JIh.js} +1 -1
  94. package/dist/{catalogSetting-N4nT-nGm.js → catalogSetting-CXOYJZO3.js} +1 -1
  95. package/dist/{currency-Bi_GukGE.js → currency-np4zdWW1.js} +1 -1
  96. package/dist/dayjs.min-CSuLNurY.js +6 -0
  97. package/dist/{index-uiJS0BKT.js → index-3wQe-6lg.js} +1 -1
  98. package/dist/index-CFbB7bM3.js +335 -0
  99. package/dist/index-Cek4Z9eM.js +539 -0
  100. package/dist/{index.vue_vue_type_script_setup_true_lang-CL6a622s.js → index.vue_vue_type_script_setup_true_lang-HZXySVXs.js} +18858 -18656
  101. package/dist/item-DR9qrNf6.js +8117 -0
  102. package/dist/{jszip.min-v__o3BM4.js → jszip.min-Bz8ZTO2s.js} +2 -2
  103. package/dist/{menu-LtIuM7Qj.js → menu-BWsDRctK.js} +1 -1
  104. package/dist/{menuV2-N0hB53Gw.js → menuV2-CfsbyMis.js} +39 -39
  105. package/dist/mf-menu.css +1 -1
  106. package/dist/{priceTier-DZeAvlXs.js → priceTier-BNCJtFVM.js} +1 -1
  107. package/dist/rules-DU-MRKWH.js +212 -0
  108. package/dist/{scheduler-FVlscyjB.js → scheduler-BizSj8q8.js} +4 -4
  109. package/dist/{toExcel-DBCbupeI.js → toExcel-DhRigI9c.js} +2 -2
  110. package/dist/translation-BeqjfyEb.js +75 -0
  111. package/dist/{unit-DNphv-4C.js → unit-CaOym7HP.js} +2 -2
  112. package/package.json +3 -3
  113. package/dist/Category-DMgNea31.js +0 -392
  114. package/dist/Subcategory-6SgvwWpX.js +0 -280
  115. package/dist/Takeaway.vue_vue_type_script_setup_true_lang-GAZ3S2_n.js +0 -305
  116. package/dist/TreeEditorOpenner.vue_vue_type_script_setup_true_lang-BFwMfAlB.js +0 -6024
  117. package/dist/Variant-DmNuLi96.js +0 -230
  118. package/dist/app-CE0yoao0.js +0 -363
  119. package/dist/assets/linked-status-BB6BrSUB.js +0 -13
  120. package/dist/assets/menu-export-C1TBcoi-.js +0 -107
  121. package/dist/assets/override-menu-C0RijOOI.js +0 -13
  122. package/dist/assets/validate-menu-9VpR7oZY.js +0 -13
  123. package/dist/category-BSGaVgyv.js +0 -156
  124. package/dist/dayjs.min-DgXlcVSD.js +0 -6
  125. package/dist/index-BaxQ5Nq0.js +0 -273
  126. package/dist/index-Bun2EboK.js +0 -239
  127. package/dist/item-DPivBmJh.js +0 -6950
  128. package/dist/rules-CIWTZQfh.js +0 -6
  129. package/dist/subcategory-CIctYwBF.js +0 -148
@@ -0,0 +1,75 @@
1
+ import { defineComponent as c, createElementBlock as p, openBlock as o, normalizeClass as u, unref as d, toDisplayString as m, resolveComponent as t, createVNode as i, createBlock as s } from "vue";
2
+ const f = /* @__PURE__ */ c({
3
+ __name: "TranslationBadge",
4
+ props: {
5
+ label: {},
6
+ spacing: { default: "md" }
7
+ },
8
+ setup(l) {
9
+ const a = l.spacing === "sm" ? "mb-4" : "mb-8";
10
+ return (n, r) => (o(), p("p", {
11
+ class: u([
12
+ "fm-typo-en-body-sm-600 text-fm-color-typo-secondary border inline-block rounded-full px-8 py-4",
13
+ d(a)
14
+ ])
15
+ }, m(n.label), 3));
16
+ }
17
+ }), h = /* @__PURE__ */ c({
18
+ __name: "TranslationFieldSection",
19
+ props: {
20
+ label: {},
21
+ modelValue: {},
22
+ type: { default: "text" },
23
+ readonly: { type: Boolean, default: !0 },
24
+ spacing: { default: "md" },
25
+ placeholder: {}
26
+ },
27
+ setup(l) {
28
+ return (e, a) => {
29
+ const n = t("FmTextField"), r = t("fm-textarea");
30
+ return o(), p("div", null, [
31
+ i(f, {
32
+ label: e.label,
33
+ spacing: e.spacing
34
+ }, null, 8, ["label", "spacing"]),
35
+ e.type === "text" ? (o(), s(n, {
36
+ key: 0,
37
+ "model-value": e.modelValue,
38
+ readonly: e.readonly,
39
+ placeholder: e.placeholder
40
+ }, null, 8, ["model-value", "readonly", "placeholder"])) : (o(), s(r, {
41
+ key: 1,
42
+ "model-value": e.modelValue,
43
+ readonly: e.readonly,
44
+ placeholder: e.placeholder
45
+ }, null, 8, ["model-value", "readonly", "placeholder"]))
46
+ ]);
47
+ };
48
+ }
49
+ });
50
+ function b(l) {
51
+ switch (l) {
52
+ case "en-US":
53
+ return "EN";
54
+ case "zh-CN":
55
+ return "简";
56
+ case "th-TH":
57
+ return "TH";
58
+ case "ja-JP":
59
+ return "JP";
60
+ case "zh-Hant":
61
+ return "繁";
62
+ default:
63
+ return "";
64
+ }
65
+ }
66
+ function g(l, e) {
67
+ const a = d(e).find((n) => n.code === l);
68
+ return (a == null ? void 0 : a.name) || l;
69
+ }
70
+ export {
71
+ h as _,
72
+ g as a,
73
+ f as b,
74
+ b as g
75
+ };
@@ -1,12 +1,12 @@
1
1
  import { defineStore as Q } from "pinia";
2
2
  import { defineComponent as T, computed as U, ref as h, watch as L, resolveComponent as V, createBlock as W, openBlock as F, withCtx as w, createVNode as m, createElementVNode as f, normalizeClass as H, createElementBlock as A, toDisplayString as M, unref as l, Fragment as q, renderSlot as X, renderList as Z, getCurrentInstance as ee } from "vue";
3
- import { a8 as P, a9 as te, a6 as B, I as k, Q as $, G as I, D as E, a7 as ne, M as C, A as D, J as oe, u as ae } from "./index.vue_vue_type_script_setup_true_lang-CL6a622s.js";
3
+ import { a7 as P, a8 as te, a5 as B, I as k, Q as $, G as I, D as E, a6 as ne, M as C, A as D, J as oe, u as ae } from "./index.vue_vue_type_script_setup_true_lang-HZXySVXs.js";
4
4
  import { useI18n as N } from "@feedmepos/mf-common";
5
5
  import { useSnackbar as j, components as le, useDialog as ue, FmButtonVariant as ie } from "@feedmepos/ui-library";
6
6
  import { u as se } from "./discardConfirm-BHni0LNu.js";
7
7
  import { c as re } from "./check-C9mY6LiX.js";
8
8
  import "./vuedraggable-CK8z7qA8.js";
9
- import "./menuV2-N0hB53Gw.js";
9
+ import "./menuV2-CfsbyMis.js";
10
10
  import "./app-5fxKLAzS.js";
11
11
  /* empty css */
12
12
  import { c as me } from "./createComponentProgrammatically-Bt2rn1IQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-menu",
3
- "version": "0.32.37",
3
+ "version": "0.32.38-dev.1",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -17,12 +17,12 @@
17
17
  "dependencies": {
18
18
  "@feedmepos/feature-flag": "^0.0.15",
19
19
  "@feedmepos/auth": "^1.1.14",
20
- "@feedmepos/core": "2.15.18",
20
+ "@feedmepos/core": "2.15.20",
21
21
  "@feedmepos/core-dart": "^0.2.6",
22
22
  "@feedmepos/core-legacy": "file:../../core-legacy-1.5.tar.gz",
23
23
  "@feedmepos/custom-attributes": "0.0.1-rc.4",
24
24
  "@feedmepos/inventory-core": "^0.2.6",
25
- "@feedmepos/menu": "1.9.2",
25
+ "@feedmepos/menu": "1.9.4",
26
26
  "@feedmepos/mf-inventory-portal": "https://registry.npmjs.org/@feedmepos/mf-inventory-portal/-/mf-inventory-portal-0.0.19-dev.6.tgz",
27
27
  "@feedmepos/mf-remy-panel": "^0.3.5",
28
28
  "@feedmepos/ui-library": "1.8.8",
@@ -1,392 +0,0 @@
1
- import { defineComponent as K, ref as F, computed as B, watch as se, resolveComponent as p, createElementBlock as E, openBlock as f, Fragment as Z, renderSlot as re, createVNode as d, unref as e, withCtx as g, createElementVNode as n, toDisplayString as T, h as N, withModifiers as D, getCurrentInstance as ie, renderList as ce, createBlock as L, createCommentVNode as ue } from "vue";
2
- import { useI18n as j } from "@feedmepos/mf-common";
3
- import { useSnackbar as Y, components as R, useDialog as ee, FmButtonVariant as H, useBreakpoints as de, FmButtonColorThemeVariant as me } from "@feedmepos/ui-library";
4
- import { _ as pe } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
5
- import { G, u as ge, a1 as fe, $ as _e, A, a4 as ye, Q as q, M as te, a5 as ve } from "./index.vue_vue_type_script_setup_true_lang-CL6a622s.js";
6
- import { _ as he } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
7
- import { _ as be } from "./app-CE0yoao0.js";
8
- import { c as xe } from "./createForm-BoUQeZTd.js";
9
- import { _ as J } from "./RuleView.vue_vue_type_script_setup_true_lang-DdeQnyfQ.js";
10
- import { u as Ce } from "./discardConfirm-BHni0LNu.js";
11
- import { c as X } from "./object-DVUNCr7w.js";
12
- import { r as ke } from "./rules-CIWTZQfh.js";
13
- import { u as Q, a as we } from "./menu-LtIuM7Qj.js";
14
- import { c as Fe } from "./check-C9mY6LiX.js";
15
- import { u as Ve } from "./item-DPivBmJh.js";
16
- import { u as ae } from "./category-BSGaVgyv.js";
17
- const $e = {
18
- class: "fm-typo-en-title-md-600"
19
- }, Me = {
20
- class: "flex flex-col gap-32 h-full min-h-0 py-16"
21
- }, Se = {
22
- class: "flex gap-24 items-center"
23
- }, Ee = {
24
- class: "text-fm-color-typo-secondary"
25
- }, Be = {
26
- class: "flex-1"
27
- }, Te = {
28
- class: "flex-1 overflow-hidden min-h-[300px]"
29
- }, Ue = {
30
- class: "flex gap-8 items-center justify-start"
31
- }, Le = /* @__PURE__ */ K({
32
- __name: "Form",
33
- props: {
34
- initialValue: {}
35
- },
36
- setup(O, {
37
- expose: h
38
- }) {
39
- const _ = O, V = Y(), b = G(V), $ = q(b), m = ge(), r = Ve(), {
40
- categories: x
41
- } = Q(), {
42
- t
43
- } = j(), U = F(!1), u = F(!1), M = (a) => {
44
- Fe.isBoolean(a) ? u.value = a : u.value = !u.value;
45
- }, i = F(X(_.initialValue)), C = F(""), S = B(() => {
46
- var k;
47
- const a = ((k = x.value.find((w) => w.id === i.value.id)) == null ? void 0 : k.items) || [], o = fe(i.value.id);
48
- return _e(a, (w) => w.code || w.name, o);
49
- }), P = [{
50
- accessorKey: "name",
51
- header: () => t("menu.category.products.columns.name"),
52
- enableSorting: !1
53
- }, {
54
- accessorKey: "code",
55
- header: () => t("menu.category.products.columns.code"),
56
- enableSorting: !1
57
- }, {
58
- id: "actions",
59
- size: 52,
60
- meta: {
61
- cellClass: "pl-16",
62
- headerContentClass: "-mx-16"
63
- },
64
- header: "",
65
- cell: (a) => {
66
- const o = a.row.original;
67
- return N("div", {
68
- class: "flex justify-end"
69
- }, [N(R.FmButton, {
70
- icon: "edit",
71
- outline: !0,
72
- variant: "tertiary",
73
- textColor: "neutral-gray-400",
74
- onClick: D(async () => {
75
- await s(o);
76
- }, ["stop", "prevent"])
77
- })]);
78
- }
79
- }];
80
- async function l() {
81
- await r.create(i.value.id);
82
- }
83
- async function s(a) {
84
- await r.update(a._id);
85
- }
86
- const y = B(() => m.version === A.F_MENU_VERSION.enum.v4);
87
- async function I(a) {
88
- const o = ye(a, i.value.id);
89
- await r.updateMany(o);
90
- }
91
- const z = Ce(() => i.value.name !== _.initialValue.name, () => {
92
- u.value = !1;
93
- });
94
- async function c() {
95
- const a = m.categories.find((k) => k._id === i.value.id), {
96
- updateMenu: o
97
- } = $;
98
- await o({
99
- module: A.F_MENU_MODULE_V4_KEY.enum.category,
100
- operation: te.F_OPERATION_TYPE.update,
101
- data: {
102
- ...a,
103
- name: i.value.name ?? (a == null ? void 0 : a.name)
104
- }
105
- }, i.value.name), M(!1);
106
- }
107
- return se(() => u.value, () => {
108
- u.value && (i.value = X(_.initialValue));
109
- }), h({
110
- trigger: M,
111
- show: u
112
- }), (a, o) => {
113
- const k = p("FmTextField"), w = p("FmButton"), oe = p("FmSearch"), ne = p("FmTable"), W = p("fm-button"), le = p("fm-side-sheet");
114
- return f(), E(Z, null, [re(a.$slots, "default", {
115
- trigger: M
116
- }), d(le, {
117
- id: "group-form",
118
- modelValue: u.value,
119
- "onUpdate:modelValue": o[4] || (o[4] = (v) => u.value = v),
120
- "is-container": e(R).FmForm,
121
- "is-container-props": {
122
- onValidationSuccess: c,
123
- blameFormChildOnValidationFailed: !0
124
- },
125
- "max-width": 560,
126
- "onOn:clickedAway": e(z)
127
- }, {
128
- "side-sheet-header": g(() => [n("p", $e, T(e(t)("menu.category.title")), 1)]),
129
- "side-sheet-footer": g(() => [n("div", Ue, [d(W, {
130
- label: e(t)("menu.common.actions.update"),
131
- loading: U.value,
132
- size: "lg",
133
- type: "submit",
134
- variant: "primary",
135
- disabled: !i.value.id
136
- }, null, 8, ["label", "loading", "disabled"]), d(W, {
137
- label: e(t)("menu.common.actions.cancel"),
138
- size: "lg",
139
- variant: "tertiary",
140
- onClick: o[3] || (o[3] = () => u.value = !1)
141
- }, null, 8, ["label"])])]),
142
- default: g(() => [n("div", Me, [d(J, {
143
- title: e(t)("menu.category.detail")
144
- }, {
145
- default: g(() => [d(k, {
146
- label: e(t)("menu.category.name"),
147
- modelValue: i.value.name,
148
- "onUpdate:modelValue": o[0] || (o[0] = (v) => i.value.name = v),
149
- disabled: !i.value.id,
150
- rules: [e(ke)]
151
- }, null, 8, ["label", "modelValue", "disabled", "rules"])]),
152
- _: 1
153
- }, 8, ["title"]), d(J, {
154
- title: e(t)("menu.category.products.title"),
155
- class: "flex-1 min-h-0",
156
- shrinkable: !0
157
- }, {
158
- "append-title": g(() => [d(w, {
159
- label: e(t)("menu.category.products.add"),
160
- variant: "secondary",
161
- "prepend-icon": "add",
162
- "text-color": "primary",
163
- "border-color": "primary",
164
- onClick: l
165
- }, null, 8, ["label"])]),
166
- default: g(() => [n("div", Se, [n("div", Ee, T(e(t)("menu.category.products.linked_count", {
167
- count: S.value.length
168
- })), 1), n("div", Be, [d(oe, {
169
- placeholder: e(t)("menu.common.actions.search"),
170
- modelValue: C.value,
171
- "onUpdate:modelValue": o[1] || (o[1] = (v) => C.value = v)
172
- }, null, 8, ["placeholder", "modelValue"])])]), n("div", Te, [d(ne, {
173
- "column-defs": P,
174
- draggable: y.value,
175
- "page-size": S.value.length,
176
- "row-data": S.value,
177
- "search-value": C.value,
178
- "shrink-at": !1,
179
- "hide-footer": "",
180
- "pin-header-row": "",
181
- onDndChanged: I,
182
- onRowClick: o[2] || (o[2] = (v) => s(v.original))
183
- }, null, 8, ["draggable", "page-size", "row-data", "search-value"])])]),
184
- _: 1
185
- }, 8, ["title"])])]),
186
- _: 1
187
- }, 8, ["modelValue", "is-container", "is-container-props", "onOn:clickedAway"])], 64);
188
- };
189
- }
190
- }), Ne = Le, Oe = {
191
- key: 0
192
- }, Pe = {
193
- class: "flex justify-end items-center"
194
- }, Ie = {
195
- class: "w-[320px]"
196
- }, ze = {
197
- key: 1,
198
- class: "flex-1 flex flex-col min-h-0"
199
- }, De = {
200
- class: "p-8"
201
- }, Re = {
202
- class: "flex flex-1 flex-col min-h-0 overflow-scroll divide-y divide-fm-color-neutral-gray-100 pb-64"
203
- }, Ae = ["onClick"], Ke = {
204
- class: "flex-1 space-y-4"
205
- }, je = {
206
- class: "fm-typo-en-body-lg-600"
207
- }, Ye = {
208
- class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary"
209
- }, Ge = /* @__PURE__ */ K({
210
- __name: "CategoryTable",
211
- setup(O) {
212
- const h = ee(), _ = Y(), V = G(_), b = q(V), $ = ae({
213
- dialog: h,
214
- menuLoader: b
215
- }), {
216
- categories: m
217
- } = Q(), r = F(""), x = B(() => m.value.filter((l) => l.name.toLowerCase().includes(r.value.toLowerCase()))), {
218
- t
219
- } = j(), U = F([{
220
- accessorKey: "name",
221
- header: () => t("menu.category.columns.title"),
222
- enableSorting: !1,
223
- meta: {
224
- width: "auto"
225
- }
226
- }, {
227
- accessorKey: "items",
228
- header: () => t("menu.category.columns.products"),
229
- enableSorting: !1,
230
- size: 200,
231
- cell: (l) => {
232
- const s = l.row.original;
233
- return t(s.items.length > 1 ? "menu.common.labels.product_linked_plural" : "menu.common.labels.product_linked_singular", {
234
- count: s.items.length
235
- });
236
- }
237
- }, {
238
- id: "actions",
239
- size: 52,
240
- meta: {
241
- cellClass: "pl-16",
242
- headerContentClass: "-mx-16"
243
- },
244
- header: "",
245
- cell: (l) => {
246
- const s = l.row.original;
247
- return N("div", {
248
- class: "flex justify-end"
249
- }, [N(R.FmButton, {
250
- icon: "delete",
251
- disabled: !s.id,
252
- variant: "tertiary",
253
- textColor: "neutral-gray-400",
254
- onClick: D(async () => {
255
- await u(s);
256
- }, ["stop", "prevent"])
257
- })]);
258
- }
259
- }]);
260
- async function u(l) {
261
- if (!l.id) {
262
- _.open({
263
- message: t("menu.category.dialog.remove.error"),
264
- type: "warning"
265
- });
266
- return;
267
- }
268
- h.open({
269
- title: t("menu.category.dialog.remove.title"),
270
- message: t("menu.common.dialog.remove_confirmation", {
271
- name: l.name
272
- }),
273
- primaryActions: {
274
- text: "Remove",
275
- close: !0,
276
- variant: H.Destructive
277
- },
278
- secondaryActions: {
279
- text: "Cancel",
280
- close: !0
281
- }
282
- }).onPrimary(async () => {
283
- await b.updateMenu({
284
- module: A.F_MENU_MODULE_V4_KEY.enum.category,
285
- operation: te.F_OPERATION_TYPE.delete,
286
- // `category.id` is guaranteed to be defined due to the earlier check in `deleteCategory`.
287
- data: l.id
288
- }, l.name, !0);
289
- });
290
- }
291
- async function M(l) {
292
- const s = l.map((y) => y.id).filter((y) => !!y);
293
- await $.rearrange(s);
294
- }
295
- const i = ie();
296
- async function C(l) {
297
- xe(i, Ne, {
298
- initialValue: l
299
- });
300
- }
301
- const S = de(), P = B(() => S.breakpoints.value.xs);
302
- return (l, s) => {
303
- const y = p("FmSearch"), I = p("FmTable"), z = p("FmButton");
304
- return P.value ? (f(), E("div", ze, [n("div", De, [d(y, {
305
- autofocus: "",
306
- modelValue: r.value,
307
- "onUpdate:modelValue": s[2] || (s[2] = (c) => r.value = c),
308
- class: "w-full",
309
- placeholder: e(t)("menu.common.labels.search_placeholder", {
310
- type: "categories"
311
- })
312
- }, null, 8, ["modelValue", "placeholder"])]), n("div", Re, [(f(!0), E(Z, null, ce(x.value, (c) => (f(), E("div", {
313
- key: c.id || "",
314
- class: "flex flex-row py-12 px-16",
315
- onClick: (a) => C(c)
316
- }, [n("div", Ke, [n("p", je, T(c.name), 1), n("p", Ye, T(e(t)(c.items.length > 1 ? "menu.common.labels.product_linked_plural" : "menu.common.labels.product_linked_singular", {
317
- count: c.items.length
318
- })), 1)]), d(z, {
319
- "text-color": e(me).NeutralGray400,
320
- variant: e(H).Tertiary,
321
- "prepend-icon": "delete",
322
- disabled: !c.id,
323
- onClick: D((a) => u(c), ["stop"])
324
- }, null, 8, ["text-color", "variant", "disabled", "onClick"])], 8, Ae))), 128))])])) : (f(), E("div", Oe, [n("div", Pe, [n("div", Ie, [d(y, {
325
- modelValue: r.value,
326
- "onUpdate:modelValue": s[0] || (s[0] = (c) => r.value = c),
327
- autofocus: "",
328
- class: "mb-8",
329
- placeholder: e(t)("menu.common.labels.search_placeholder", {
330
- type: e(t)("menu.category.title")
331
- })
332
- }, null, 8, ["modelValue", "placeholder"])])]), d(be, null, {
333
- default: g(() => [d(I, {
334
- "column-defs": U.value,
335
- draggable: !0,
336
- "page-size": e(m).length,
337
- "row-data": e(m),
338
- "search-value": r.value,
339
- "shrink-at": !1,
340
- "hide-footer": "",
341
- "pin-header-row": "",
342
- onDndChanged: M,
343
- onRowClick: s[1] || (s[1] = (c) => C(c.original))
344
- }, null, 8, ["column-defs", "page-size", "row-data", "search-value"])]),
345
- _: 1
346
- })]));
347
- };
348
- }
349
- }), qe = { class: "flex-1 flex justify-between gap-8 pl-8" }, Qe = { class: "flex items-center" }, We = { class: "bg-fm-color-neutral-gray-100 rounded-md px-8 py-4" }, He = { class: "fm-typo-en-body-md-600 font-semibold" }, pt = /* @__PURE__ */ K({
350
- __name: "Category",
351
- setup(O) {
352
- const h = ee(), _ = Y(), V = G(_), b = q(V), $ = ae({ dialog: h, menuLoader: b }), { categories: m } = Q(), { t: r } = j();
353
- function x() {
354
- $.create();
355
- }
356
- const t = B(() => m.value.length);
357
- return we().resetOnMount(), (U, u) => (f(), L(he, {
358
- heading: e(r)("menu.category.title")
359
- }, {
360
- default: g(() => [
361
- e(m).length > 0 ? (f(), L(Ge, { key: 0 })) : (f(), L(e(ve), {
362
- key: 1,
363
- action: {
364
- text: e(r)("menu.category.add"),
365
- callback: x
366
- },
367
- subtitle: e(r)("menu.category.empty.subtitle"),
368
- title: e(r)("menu.category.empty.title")
369
- }, null, 8, ["action", "subtitle", "title"]))
370
- ]),
371
- "append-heading": g(() => [
372
- n("div", qe, [
373
- n("div", Qe, [
374
- n("div", We, [
375
- n("p", He, T(t.value), 1)
376
- ])
377
- ]),
378
- e(m).length > 0 ? (f(), L(pe, {
379
- key: 0,
380
- label: e(r)("menu.category.add"),
381
- "prepend-icon": "add",
382
- onClick: x
383
- }, null, 8, ["label"])) : ue("", !0)
384
- ])
385
- ]),
386
- _: 1
387
- }, 8, ["heading"]));
388
- }
389
- });
390
- export {
391
- pt as default
392
- };