@feedmepos/mf-menu 0.31.58-prod → 0.31.59-prod

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 (99) hide show
  1. package/dist/{App-CEwyPSKB.js → App-BOPLjp2t.js} +8 -8
  2. package/dist/{ApplyProduct.vue_vue_type_script_setup_true_lang-B1PaP0os.js → ApplyProduct.vue_vue_type_script_setup_true_lang-B0w-0323.js} +3 -3
  3. package/dist/{Catalog-CrgKBjTt.js → Catalog-gBWbOsnM.js} +6 -6
  4. package/dist/{Category-Brt03UVR.js → Category-CeF88DtX.js} +4 -4
  5. package/dist/{Category-Do3tDNNq.js → Category-D5ppD_g8.js} +6 -6
  6. package/dist/{CookingGuide-DtkAi9bK.js → CookingGuide-CJukilxD.js} +4 -4
  7. package/dist/{CustomAttributeChip.vue_vue_type_script_setup_true_lang-8ObJv2LZ.js → CustomAttributeChip.vue_vue_type_script_setup_true_lang-BMP7V0dP.js} +1 -1
  8. package/dist/{Group-gQPAHr2A.js → Group-C-zR2RKW.js} +3 -3
  9. package/dist/{Group-CX1rH4Ba.js → Group-CEQbAUmY.js} +1 -1
  10. package/dist/{Group.vue_vue_type_script_setup_true_lang-DWVGPzwc.js → Group.vue_vue_type_script_setup_true_lang-h5FbAvbs.js} +7 -7
  11. package/dist/{GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-PQJm4GbD.js → GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-Cy2NGGs0.js} +5 -5
  12. package/dist/{ImportProductDialog.vue_vue_type_script_setup_true_lang-DLVjK7wR.js → ImportProductDialog.vue_vue_type_script_setup_true_lang-Gtkau8ku.js} +1617 -1616
  13. package/dist/{Ingredient-_nl97wdl.js → Ingredient-B0Ms0Ol5.js} +3 -3
  14. package/dist/{InventoryBinding.vue_vue_type_script_setup_true_lang-DAO5hp3N.js → InventoryBinding.vue_vue_type_script_setup_true_lang-B4BxYfdg.js} +2 -2
  15. package/dist/{LinkProductSideSheet-0p5Z66Ua.js → LinkProductSideSheet-B1y2Ayvj.js} +3 -3
  16. package/dist/{MenuSetting-CHOMVwXS.js → MenuSetting-DclPszys.js} +5 -5
  17. package/dist/{PrintRoute-PR9yqoD5.js → PrintRoute-BnzR0uWT.js} +4 -4
  18. package/dist/{Product-D74PpxCy.js → Product-BoSo8lss.js} +1 -1
  19. package/dist/{Product.vue_vue_type_script_setup_true_lang-CW6W8Ros.js → Product.vue_vue_type_script_setup_true_lang-DIjDOk5_.js} +13 -13
  20. package/dist/{ProductInternalTools-BH4Rtb8s.js → ProductInternalTools-Bdte6TiU.js} +5 -5
  21. package/dist/{Products-BoP_Sfwi.js → Products-nv1C711P.js} +12 -12
  22. package/dist/Publish-C780zto1.js +582 -0
  23. package/dist/{Recipe-C8KXjAzg.js → Recipe-mjjd4B1O.js} +4 -4
  24. package/dist/{Scheduler-CkAclfQw.js → Scheduler-mfPG6062.js} +3 -3
  25. package/dist/{ServingSequence-BlUDI5uT.js → ServingSequence-CRs6qSMs.js} +3 -3
  26. package/dist/{Setting-B7jaIIPx.js → Setting-DZ2GbgN6.js} +5 -5
  27. package/dist/{Subcategory-ZoTKyleD.js → Subcategory-Cgd9qnoN.js} +4 -4
  28. package/dist/{Takeaway-hSioiPLy.js → Takeaway-B8m-KeUW.js} +4 -4
  29. package/dist/{Takeaway-bOnEUU7z.js → Takeaway-BiDzpaT9.js} +1 -1
  30. package/dist/{Takeaway.vue_vue_type_script_setup_true_lang-B5HjkmRS.js → Takeaway.vue_vue_type_script_setup_true_lang-vYeVX-ZM.js} +5 -5
  31. package/dist/{Thumbnail.vue_vue_type_script_setup_true_lang-SR02hz_g.js → Thumbnail.vue_vue_type_script_setup_true_lang-DeeXDIAS.js} +4 -4
  32. package/dist/{TreeEditorOpenner.vue_vue_type_script_setup_true_lang-D6_okQqi.js → TreeEditorOpenner.vue_vue_type_script_setup_true_lang-hHOmCp8A.js} +14 -14
  33. package/dist/{Unit-iVeouD8Q.js → Unit-CALtexAk.js} +2 -2
  34. package/dist/{Variant-09Ayb-LB.js → Variant-DzkUpsBK.js} +3 -3
  35. package/dist/{_id_-T4NFKO76.js → _id_-B3dZqQFx.js} +10 -10
  36. package/dist/{app-BeeqJ5ia.js → app-CcaKJaQg.js} +1 -1
  37. package/dist/{app-G1eIeNve.js → app-L6-9-FPx.js} +30 -30
  38. package/dist/app.js +1 -1
  39. package/dist/apps/mf-menu/src/app.d.ts +4 -0
  40. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProduct.vue.d.ts +12 -0
  41. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/ApplyProductDialog.vue.d.ts +6 -0
  42. package/dist/apps/mf-menu/src/components/feature/ApplyProduct/index.d.ts +32 -0
  43. package/dist/apps/mf-menu/src/components/feature/GroupManager/OptionTable.vue.d.ts +10 -0
  44. package/dist/apps/mf-menu/src/components/feature/GroupManager/UpdateForm.vue.d.ts +6 -0
  45. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierButton.vue.d.ts +14 -0
  46. package/dist/apps/mf-menu/src/components/feature/PriceTier/PriceTierForm.vue.d.ts +14 -0
  47. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/item.d.ts +14 -0
  48. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/scheduler.d.ts +12 -0
  49. package/dist/apps/mf-menu/src/components/feature/TreeEditor/composable/useItemFormManagement.d.ts +7 -0
  50. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/OptionTable.vue.d.ts +10 -0
  51. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/UpdateForm.vue.d.ts +6 -0
  52. package/dist/apps/mf-menu/src/components/feature/TreeEditor/form/GroupManager/index.d.ts +24 -0
  53. package/dist/apps/mf-menu/src/components/feature/TreeEditor/item/ItemForm.vue.d.ts +21 -0
  54. package/dist/apps/mf-menu/src/components/feature/TreeEditor/menuUtils.d.ts +7 -0
  55. package/dist/apps/mf-menu/src/components/feature/TreeEditor/store/menuV2.d.ts +73 -0
  56. package/dist/apps/mf-menu/src/components/import/PreviewAddonContent.vue.d.ts +14 -0
  57. package/dist/apps/mf-menu/src/composable/linkProducts.d.ts +12 -0
  58. package/dist/apps/mf-menu/src/helper/import-export-utils.d.ts +0 -1
  59. package/dist/apps/mf-menu/src/helper/itemCategories.d.ts +7 -0
  60. package/dist/apps/mf-menu/src/helper/menu.d.ts +80 -0
  61. package/dist/apps/mf-menu/src/helper/menuImport.d.ts +73 -0
  62. package/dist/apps/mf-menu/src/manager/menu/item.d.ts +73 -0
  63. package/dist/apps/mf-menu/src/stores/manager/item.d.ts +21 -0
  64. package/dist/apps/mf-menu/src/stores/manager/scheduler.d.ts +12 -0
  65. package/dist/apps/mf-menu/src/stores/menu.d.ts +73 -0
  66. package/dist/apps/mf-menu/src/views/Catalog/Edit/AddProductPopup/Form.vue.d.ts +14 -0
  67. package/dist/apps/mf-menu/src/views/Publish/UpdateCatalogDialog.vue.d.ts +46 -0
  68. package/dist/apps/mf-menu/src/views/Scheduler/FilterForm.vue.d.ts +10 -0
  69. package/dist/apps/mf-menu/src/views/Scheduler/SchedulerDialog.vue.d.ts +10 -0
  70. package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -1
  71. package/dist/assets/linked-status-focDgSo7.js +13 -0
  72. package/dist/assets/override-menu-B4q9lesJ.js +13 -0
  73. package/dist/assets/validate-menu-De0Bu4qH.js +13 -0
  74. package/dist/{catalog-DireBPbe.js → catalog-DC9IVpL1.js} +1 -1
  75. package/dist/{catalogSetting-8687T4sf.js → catalogSetting-Crbl9TFz.js} +1 -1
  76. package/dist/{category-CxZ7l7TH.js → category-C8Q_lN6Q.js} +1 -1
  77. package/dist/{currency-C-x74Ihc.js → currency-vandbXgQ.js} +1 -1
  78. package/dist/{customAttributes-PLOo5TFF.js → customAttributes-Cj0PdMZu.js} +1 -1
  79. package/dist/{dayjs.min-D4oh6LGN.js → dayjs.min-B4sm2fZr.js} +1 -1
  80. package/dist/{index-Deb8Se9C.js → index-COwTqSNG.js} +4 -4
  81. package/dist/{index-Dr70dTcK.js → index-DRl2ccS-.js} +1 -1
  82. package/dist/{index-B6y1Idp6.js → index-DvKBm3gm.js} +3 -3
  83. package/dist/{index-CWlWCkLQ.js → index-NPN9_5oT.js} +1 -1
  84. package/dist/{item-8v-mL4Tk.js → item-mzvS_pFv.js} +16 -16
  85. package/dist/{jszip.min-BlCVvZNl.js → jszip.min-UpFUrh5P.js} +2 -2
  86. package/dist/menu-CDIfnu9y.js +132665 -0
  87. package/dist/{menu-DhH8YWvV.js → menu-CebF4MOX.js} +1 -1
  88. package/dist/{menuV2-B3QHrvzJ.js → menuV2-C0BdBTv7.js} +73 -73
  89. package/dist/{priceTier-BHuvA89h.js → priceTier-BEA_b-IX.js} +1 -1
  90. package/dist/{scheduler-PDDah5xR.js → scheduler-oUiE2ldE.js} +4 -4
  91. package/dist/{subcategory-B-usgK3T.js → subcategory-2hHCLbWG.js} +2 -2
  92. package/dist/{toExcel-C6kSxe7z.js → toExcel-zRg8UHeP.js} +2 -2
  93. package/dist/{unit-CtG4RVnF.js → unit-CYPHVVUz.js} +2 -2
  94. package/package.json +2 -2
  95. package/dist/Publish-B82vhm2_.js +0 -567
  96. package/dist/assets/linked-status-D54oQ8ty.js +0 -13
  97. package/dist/assets/override-menu-CTzTh4oF.js +0 -13
  98. package/dist/assets/validate-menu-DEP4gzNo.js +0 -13
  99. package/dist/menu-CbIzWmhP.js +0 -108625
@@ -0,0 +1,582 @@
1
+ import { defineComponent as G, ref as A, computed as F, onMounted as re, resolveComponent as C, createElementBlock as R, openBlock as h, createVNode as s, createElementVNode as o, toDisplayString as I, unref as u, Fragment as O, renderList as W, createBlock as T, withCtx as L, createCommentVNode as ce, withModifiers as K, h as Y } from "vue";
2
+ import { D as ae } from "./dayjs.min-B4sm2fZr.js";
3
+ import { useRouter as de } from "vue-router";
4
+ import { B as me, e as pe, G as te, a7 as ge, H as Z, I as ve, u as be, A as fe } from "./menu-CDIfnu9y.js";
5
+ import { useI18n as J, useCoreStore as _e, RestaurantSelector as he } from "@feedmepos/mf-common";
6
+ import { useSnackbar as le, useDialogChild as ye, useDialog as Ce, components as ee } from "@feedmepos/ui-library";
7
+ import { _ as ke } from "./TextChip.vue_vue_type_script_setup_true_lang-8frWuZFL.js";
8
+ import { _ as we } from "./app-L6-9-FPx.js";
9
+ import { c as xe } from "./iteration-BoeoXAHD.js";
10
+ import { a as Ve, w as Se, p as Fe } from "./tooltip-CQW9YRO5.js";
11
+ import { u as Ie } from "./discardConfirm-BHni0LNu.js";
12
+ import { _ as Ae } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
13
+ function oe(w) {
14
+ return w ? ae(w).format("DD/MM/YY HH:mm") : "-";
15
+ }
16
+ function Me(w, x, l) {
17
+ const c = (r, p = !1) => {
18
+ var y;
19
+ return r === void 0 && !p ? "-" : ((y = l.find((b) => b.value === (r || null))) == null ? void 0 : y.label) || "-";
20
+ };
21
+ return w.map((r) => {
22
+ var g;
23
+ const p = (g = x.find(({ _id: t }) => t === r._id)) == null ? void 0 : g.posVersion, y = !!p && !!me.Pos.canUse({ feature: pe.F_FEATURE.enum.taxAndServiceChargeV4, posVersion: p }), b = c(r.catalogId);
24
+ return {
25
+ ...r,
26
+ _default: b,
27
+ _posTakeaway: r.takeawayCatalog ? c(r.takeawayCatalog) : b,
28
+ _additionalCatalogs: (r.additionalCatalogs || []).map((t) => c(t)),
29
+ _lastUpdate: oe(r.updatedAt),
30
+ _pickup: y ? c(r.pickupCatalog, !0) : "-",
31
+ _canUsePickup: y,
32
+ _posVersion: p || "-"
33
+ };
34
+ });
35
+ }
36
+ const $e = {
37
+ key: 0,
38
+ class: "flex items-center justify-center"
39
+ }, Re = {
40
+ key: 1,
41
+ class: "space-y-16"
42
+ }, De = { class: "text-fm-color-typo-secondary" }, Ue = { class: "space-y-4" }, Pe = /* @__PURE__ */ G({
43
+ __name: "RevertDialog",
44
+ props: {
45
+ restaurant: {}
46
+ },
47
+ setup(w) {
48
+ const x = w, l = le(), { custom: c } = te(l), r = A(!1), p = A(null);
49
+ async function y() {
50
+ await c(
51
+ async () => {
52
+ var d;
53
+ p.value = await ge.readMenuById(((d = x.restaurant.revertConfig) == null ? void 0 : d._id) || "");
54
+ },
55
+ { isLoading: r }
56
+ );
57
+ }
58
+ const b = F(() => {
59
+ var d;
60
+ return [
61
+ { label: "Main", value: null },
62
+ ...(((d = p.value) == null ? void 0 : d.modules.catalog) || []).map((_) => ({
63
+ label: _.name,
64
+ value: _._id
65
+ }))
66
+ ];
67
+ }), { t: g } = J(), t = F(() => {
68
+ var k;
69
+ const d = x.restaurant.revertConfig;
70
+ if (!d) return [];
71
+ const _ = Me(
72
+ [
73
+ {
74
+ ...d,
75
+ catalogId: d.catalogId || null
76
+ }
77
+ ],
78
+ _e().restaurants.value,
79
+ b.value
80
+ )[0];
81
+ return [
82
+ { label: g("menu.revert.labels.restaurant"), value: x.restaurant.name },
83
+ {
84
+ label: g("menu.revert.labels.revert_to"),
85
+ value: oe((k = p.value) == null ? void 0 : k.updatedAt)
86
+ },
87
+ { label: g("menu.revert.labels.default"), value: _._default },
88
+ { label: g("menu.revert.labels.pos_takeaway"), value: _._posTakeaway },
89
+ { label: g("menu.revert.labels.pickup"), value: _._pickup },
90
+ {
91
+ label: g("menu.revert.labels.additional_catalogs"),
92
+ value: _._additionalCatalogs.join(", ")
93
+ }
94
+ ];
95
+ });
96
+ re(async () => y());
97
+ const { emitData: D } = ye();
98
+ return (d, _) => {
99
+ const k = C("FmCircularProgress");
100
+ return r.value ? (h(), R("div", $e, [
101
+ s(k, { size: "lg" })
102
+ ])) : (h(), R("div", Re, [
103
+ o("div", De, I(u(g)("menu.revert.description", { name: x.restaurant.name })), 1),
104
+ o("div", Ue, [
105
+ (h(!0), R(O, null, W(t.value, (M) => (h(), T(Ve, {
106
+ key: M.label,
107
+ name: M.label,
108
+ value: M.value || "--"
109
+ }, null, 8, ["name", "value"]))), 128))
110
+ ])
111
+ ]));
112
+ };
113
+ }
114
+ }), Le = { class: "fm-typo-en-title-md-600" }, Be = { class: "mt-40" }, Ee = { class: "fm-typo-en-title-sm-600" }, Oe = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary mt-4 mb-8" }, Te = { class: "flex gap-8 items-center justify-start" }, Ne = /* @__PURE__ */ G({
115
+ __name: "UpdateCatalogDialog",
116
+ props: {
117
+ catalogs: {
118
+ type: Array,
119
+ required: !0
120
+ }
121
+ },
122
+ emits: ["onComplete"],
123
+ setup(w, { expose: x, emit: l }) {
124
+ const { t: c } = J(), r = w;
125
+ x({
126
+ show: _,
127
+ hide: k
128
+ });
129
+ const p = l;
130
+ function y() {
131
+ return {
132
+ restaurantId: "",
133
+ catalogId: void 0,
134
+ takeawayCatalog: void 0,
135
+ pickupCatalog: null,
136
+ additionalCatalogs: []
137
+ };
138
+ }
139
+ const b = F(() => [
140
+ {
141
+ label: c("menu.publish.update_catalog_dialog.sections.default.use_default"),
142
+ value: null
143
+ },
144
+ ...r.catalogs.map((m) => ({
145
+ label: m.name,
146
+ value: m._id
147
+ }))
148
+ ]), g = F(() => [
149
+ {
150
+ label: c("menu.publish.update_catalog_dialog.sections.default.use_default"),
151
+ value: null
152
+ },
153
+ ...r.catalogs.map((m) => ({
154
+ label: m.name,
155
+ value: m._id
156
+ }))
157
+ ]), t = A(y()), D = A(!1), d = A(void 0);
158
+ function _(m) {
159
+ d.value = m ? Z(m) : y(), t.value = Z(d.value), D.value = !0;
160
+ }
161
+ function k() {
162
+ D.value = !1;
163
+ }
164
+ const M = Ie(
165
+ () => !ve.isEqual(d.value, t.value),
166
+ () => {
167
+ k();
168
+ }
169
+ );
170
+ function N() {
171
+ k(), p("onComplete", t.value);
172
+ }
173
+ return (m, v) => {
174
+ const U = C("FmSelect"), z = C("FmCheckbox"), E = C("FmButton"), $ = C("FmSideSheet");
175
+ return h(), T($, {
176
+ modelValue: D.value,
177
+ "onUpdate:modelValue": v[5] || (v[5] = (f) => D.value = f),
178
+ "max-width": 560,
179
+ "onOn:clickedAway": u(M)
180
+ }, {
181
+ "side-sheet-header": L(() => [
182
+ o("span", Le, I(u(c)("menu.publish.update_catalog_dialog.title")), 1)
183
+ ]),
184
+ "side-sheet-footer": L(() => [
185
+ o("div", Te, [
186
+ s(E, {
187
+ label: u(c)("menu.publish.update_catalog_dialog.actions.update"),
188
+ size: "lg",
189
+ variant: "primary",
190
+ onClick: v[4] || (v[4] = () => N())
191
+ }, null, 8, ["label"]),
192
+ s(E, {
193
+ label: u(c)("menu.publish.update_catalog_dialog.actions.cancel"),
194
+ size: "lg",
195
+ variant: "tertiary",
196
+ onClick: k
197
+ }, null, 8, ["label"])
198
+ ])
199
+ ]),
200
+ default: L(() => [
201
+ s(U, {
202
+ modelValue: t.value.catalogId,
203
+ "onUpdate:modelValue": v[0] || (v[0] = (f) => t.value.catalogId = f),
204
+ items: b.value,
205
+ class: "mb-24",
206
+ label: u(c)("menu.publish.update_catalog_dialog.sections.default.label")
207
+ }, null, 8, ["modelValue", "items", "label"]),
208
+ s(U, {
209
+ modelValue: t.value.takeawayCatalog,
210
+ "onUpdate:modelValue": v[1] || (v[1] = (f) => t.value.takeawayCatalog = f),
211
+ items: g.value,
212
+ class: "mb-24",
213
+ label: u(c)("menu.publish.update_catalog_dialog.sections.pos_takeaway.label")
214
+ }, null, 8, ["modelValue", "items", "label"]),
215
+ s(U, {
216
+ modelValue: t.value.pickupCatalog,
217
+ "onUpdate:modelValue": v[2] || (v[2] = (f) => t.value.pickupCatalog = f),
218
+ items: g.value,
219
+ label: u(c)("menu.publish.update_catalog_dialog.sections.pickup.label")
220
+ }, null, 8, ["modelValue", "items", "label"]),
221
+ o("div", Be, [
222
+ o("div", Ee, I(u(c)("menu.publish.update_catalog_dialog.sections.additional.title")), 1),
223
+ o("div", Oe, I(u(c)("menu.publish.update_catalog_dialog.sections.additional.subtitle")), 1),
224
+ (h(!0), R(O, null, W(w.catalogs, (f) => (h(), R("div", {
225
+ key: f._id
226
+ }, [
227
+ s(z, {
228
+ modelValue: t.value.additionalCatalogs,
229
+ "onUpdate:modelValue": v[3] || (v[3] = (B) => t.value.additionalCatalogs = B),
230
+ label: f.name,
231
+ value: f._id
232
+ }, null, 8, ["modelValue", "label", "value"])
233
+ ]))), 128))
234
+ ])
235
+ ]),
236
+ _: 1
237
+ }, 8, ["modelValue", "onOn:clickedAway"]);
238
+ };
239
+ }
240
+ }), ze = {
241
+ class: "flex flex-col p-24 bg-fm-color-neutral-white min-h-[calc(100dvh-56px)] xs:max-h-[calc(100dvh-56px)]"
242
+ }, He = {
243
+ class: "flex items-center xs:mb-8 mb-24"
244
+ }, Ke = {
245
+ class: "mr-8"
246
+ }, je = {
247
+ class: "fm-typo-en-title-md-600"
248
+ }, Ye = {
249
+ class: "xs:hidden mr-16"
250
+ }, qe = {
251
+ class: "xs:hidden"
252
+ }, Ge = {
253
+ class: "pb-8 flex justify-between xs:flex-col gap-8"
254
+ }, We = {
255
+ class: "grow flex flex-col gap-4"
256
+ }, Je = {
257
+ class: "flex gap-8 items-center"
258
+ }, Qe = {
259
+ class: "fm-typo-en-body-md-600 text-fm-color-typo-secondary"
260
+ }, Xe = {
261
+ class: "space-y-4"
262
+ }, Ze = {
263
+ class: "fm-typo-en-body-lg-600"
264
+ }, ea = {
265
+ class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary"
266
+ }, aa = {
267
+ class: "flex gap-8"
268
+ }, ta = {
269
+ class: "xs:block hidden fixed bottom-72 right-16"
270
+ }, q = 40, va = /* @__PURE__ */ G({
271
+ __name: "Publish",
272
+ setup(w) {
273
+ const x = de(), {
274
+ t: l
275
+ } = J(), c = (e) => t.state.menu.updatedAt === e.updatedAt, r = ({
276
+ row: e
277
+ }) => {
278
+ const a = c(e);
279
+ return s(ke, {
280
+ label: l(a ? "menu.publish.table.status.latest" : "menu.publish.table.status.outdated"),
281
+ variant: a ? "success" : "warning"
282
+ }, null);
283
+ }, p = A({}), y = [{
284
+ accessorKey: "name",
285
+ header: () => l("menu.publish.table.columns.restaurant"),
286
+ cell: (e) => e.getValue(),
287
+ enableSorting: !0
288
+ }, {
289
+ accessorKey: "catalog",
290
+ header: () => l("menu.publish.table.columns.default"),
291
+ enableSorting: !1,
292
+ cell: (e) => e.getValue().default
293
+ }, {
294
+ accessorKey: "catalog",
295
+ header: () => l("menu.publish.table.columns.pos_takeaway"),
296
+ enableSorting: !1,
297
+ cell: (e) => e.getValue().takeaway
298
+ }, {
299
+ accessorKey: "catalog",
300
+ header: () => l("menu.publish.table.columns.pickup"),
301
+ enableSorting: !1,
302
+ cell: (e) => e.getValue().pickup
303
+ }, {
304
+ accessorKey: "updatedAt",
305
+ header: () => l("menu.publish.table.columns.version"),
306
+ enableSorting: !1,
307
+ cell: (e) => {
308
+ const a = e.getValue();
309
+ return M(a);
310
+ }
311
+ }, {
312
+ accessorKey: "status",
313
+ header: () => l("menu.common.labels.status"),
314
+ enableSorting: !1,
315
+ cell: (e) => s(r, {
316
+ row: e.row.original
317
+ }, null)
318
+ }, {
319
+ accessorKey: "_id",
320
+ header: "",
321
+ size: 52,
322
+ enableSorting: !1,
323
+ cell: (e) => {
324
+ const a = e.row.original;
325
+ return t.state.menu.updatedAt, a.updatedAt, Y("div", {
326
+ class: "flex justify-end gap-8"
327
+ }, [d.value && a.revertConfig ? Se(Y(ee.FmButton, {
328
+ prependIcon: "undo",
329
+ variant: "secondary",
330
+ onClick: K(async () => {
331
+ await _(e.row.original);
332
+ }, ["stop", "prevent"])
333
+ }), l("menu.publish.actions.revert")) : null, Y(ee.FmButton, {
334
+ label: l("menu.publish.actions.publish"),
335
+ icon: "ios_share",
336
+ variant: "secondary",
337
+ onClick: K(async () => {
338
+ const i = U(e.row.original);
339
+ await f(i);
340
+ }, ["stop", "prevent"])
341
+ })]);
342
+ },
343
+ meta: {
344
+ width: "150px"
345
+ }
346
+ }], b = A(""), g = A(), t = be(), D = Ce(), d = F(() => t.version !== fe.F_MENU_VERSION.enum.v3);
347
+ async function _(e) {
348
+ e.revertConfig && D.open({
349
+ title: "Revert menu",
350
+ contentComponent: Pe,
351
+ contentComponentProps: {
352
+ restaurant: e
353
+ },
354
+ primaryActions: {
355
+ text: "Revert",
356
+ close: !0
357
+ },
358
+ secondaryActions: {
359
+ text: "Cancel",
360
+ close: !0
361
+ }
362
+ }).onPrimary(async () => {
363
+ await $.minor(async () => {
364
+ await t.revertRestaurantMenu(e._id);
365
+ }, {
366
+ customId: e._id,
367
+ message: `Revert menu of ${e.name}`
368
+ });
369
+ });
370
+ }
371
+ const k = F(() => l("menu.publish.labels.main_version", {
372
+ version: M(t.state.menu.updatedAt)
373
+ }));
374
+ function M(e) {
375
+ return e ? ae(e).format("DD/MM/YYYY hh:mmA") : "";
376
+ }
377
+ const N = F(() => t.state.menu.modules.catalog), m = F(() => $.queue.value.some((e) => e.id === t.state.menu._id));
378
+ function v(e) {
379
+ var a;
380
+ return e ? ((a = N.value.find((i) => i._id === e)) == null ? void 0 : a.name) ?? l("menu.publish.labels.catalog.invalid") : l("menu.publish.labels.catalog.main");
381
+ }
382
+ function U(e) {
383
+ return {
384
+ restaurantId: e._id,
385
+ catalogId: e.catalogId,
386
+ takeawayCatalog: e.takeawayCatalog,
387
+ pickupCatalog: e.pickupCatalog || null,
388
+ additionalCatalogs: e.additionalCatalogs
389
+ };
390
+ }
391
+ function z(e) {
392
+ var i;
393
+ const a = U(e);
394
+ (i = g.value) == null || i.show(a);
395
+ }
396
+ const E = le(), $ = te(E);
397
+ async function f(e) {
398
+ var i;
399
+ const a = (i = V.value.find((P) => P._id === e.restaurantId)) == null ? void 0 : i.name;
400
+ await $.minor(async () => await t.publishMenu(e), {
401
+ customId: t.state.menu._id,
402
+ message: `Publishing menu for ${a}`,
403
+ successMessage: `Published to ${a}`
404
+ });
405
+ }
406
+ const B = A(null), V = F(() => t.state.restaurants.filter((e) => {
407
+ var a;
408
+ return !B.value || ((a = B.value) == null ? void 0 : a.includes(e._id));
409
+ }).map((e) => ({
410
+ ...e,
411
+ catalog: {
412
+ default: v(e.catalogId),
413
+ takeaway: v(e.takeawayCatalog),
414
+ pickup: v(e.pickupCatalog)
415
+ }
416
+ }))), se = F(() => {
417
+ const e = b.value.toLowerCase();
418
+ return V.value.filter(({
419
+ name: a,
420
+ catalog: i
421
+ }) => a.toLowerCase().includes(e) || i.default.toLowerCase().includes(e) || i.takeaway.toLowerCase().includes(e) || i.pickup.toLowerCase().includes(e));
422
+ });
423
+ async function ne(e) {
424
+ const a = e.map((S) => S._id), i = xe(a, q), P = A("");
425
+ await $.minor(async () => {
426
+ await Fe({
427
+ items: i,
428
+ processor: async (S) => await t.publishMultipleMenu(S, !1),
429
+ batchSize: 1,
430
+ batchDelay: 50,
431
+ // 50ms delay to reduce server load
432
+ onProgress({
433
+ total: S,
434
+ batchStart: H,
435
+ batchEnd: X
436
+ }) {
437
+ const j = (H - 1) * q;
438
+ P.value = `Processed ${j} of ${e.length} restaurants`;
439
+ }
440
+ }), await t.readRestaurants(), await t.readMenu();
441
+ }, {
442
+ customId: t.state.menu._id,
443
+ message: "Publishing menu",
444
+ caption: P,
445
+ successMessage: `Published to ${e.length} restaurant${e.length > 1 ? "s" : ""}`
446
+ });
447
+ }
448
+ async function ue() {
449
+ await $.minor(async () => await t.readRestaurants(), {
450
+ customId: t.state.menu._id
451
+ });
452
+ }
453
+ async function Q() {
454
+ if (m.value) return;
455
+ const e = Object.keys(p.value).map(Number).filter((i) => p.value[i]), a = e.length === 0 || e.length === V.value.length ? V.value : e.map((i) => V.value[i]);
456
+ e.length === 0 || e.length === V.value.length ? V.value.length > q ? (t.publishAllMenu(), E.open({
457
+ type: "info",
458
+ title: "Publish menu request sent"
459
+ })) : await $.minor(async () => await t.publishAllMenu(), {
460
+ customId: t.state.menu._id
461
+ }) : await ne(a);
462
+ }
463
+ return (e, a) => {
464
+ const i = C("FmChip"), P = C("FmSpacer"), S = C("FmButton"), H = C("FmSearch"), X = C("FmTable"), j = C("FmListItem"), ie = C("FmList");
465
+ return h(), R(O, null, [o("div", ze, [o("div", He, [o("div", Ke, [o("div", je, I(u(l)("menu.publish.title")), 1), a[8] || (a[8] = o("div", {
466
+ class: "hidden xs:block fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
467
+ }, null, -1))]), s(i, {
468
+ label: k.value,
469
+ class: "xs:hidden text-fm-color-primary bg-fm-color-system-warning-100"
470
+ }, null, 8, ["label"]), s(P), o("div", Ye, [s(S, {
471
+ disabled: m.value,
472
+ label: u(l)("menu.publish.actions.refresh"),
473
+ variant: "secondary",
474
+ onClick: a[0] || (a[0] = () => ue())
475
+ }, null, 8, ["disabled", "label"])]), o("div", qe, [s(S, {
476
+ disabled: m.value,
477
+ icon: "ios_share",
478
+ label: u(l)("menu.publish.actions.publish_all"),
479
+ variant: "primary",
480
+ onClick: a[1] || (a[1] = () => Q())
481
+ }, null, 8, ["disabled", "label"])])]), o("div", Ge, [s(u(he), {
482
+ multiple: "",
483
+ modelValue: B.value,
484
+ "onUpdate:modelValue": a[3] || (a[3] = (n) => B.value = n)
485
+ }, {
486
+ "append-right": L(() => [s(P, {
487
+ class: "xs:hidden"
488
+ }), s(H, {
489
+ modelValue: b.value,
490
+ "onUpdate:modelValue": a[2] || (a[2] = (n) => b.value = n),
491
+ autofocus: "",
492
+ class: "w-[320px] xs:hidden",
493
+ placeholder: u(l)("menu.publish.table.search.placeholder")
494
+ }, null, 8, ["modelValue", "placeholder"])]),
495
+ _: 1
496
+ }, 8, ["modelValue"]), s(H, {
497
+ modelValue: b.value,
498
+ "onUpdate:modelValue": a[4] || (a[4] = (n) => b.value = n),
499
+ autofocus: "",
500
+ class: "w-full xs:block hidden",
501
+ placeholder: u(l)("menu.publish.table.search.placeholder")
502
+ }, null, 8, ["modelValue", "placeholder"])]), V.value.length > 0 ? (h(), R(O, {
503
+ key: 0
504
+ }, [s(we, {
505
+ class: "xs:hidden block"
506
+ }, {
507
+ default: L(() => [s(X, {
508
+ modelValue: p.value,
509
+ "onUpdate:modelValue": a[5] || (a[5] = (n) => p.value = n),
510
+ "column-defs": y,
511
+ loading: m.value,
512
+ "page-size": V.value.length,
513
+ "row-data": V.value,
514
+ "search-value": b.value,
515
+ shrinkAt: !1,
516
+ virtual: !0,
517
+ selection: "multiple",
518
+ "hide-footer": "",
519
+ "pin-header-row": "",
520
+ onRowClick: a[6] || (a[6] = (n) => z(n.original))
521
+ }, null, 8, ["modelValue", "loading", "page-size", "row-data", "search-value"])]),
522
+ _: 1
523
+ }), s(ie, {
524
+ class: "flex-col flex-1 min-h-0 overflow-auto xs:flex hidden w-full pb-64",
525
+ separator: ""
526
+ }, {
527
+ default: L(() => [(h(!0), R(O, null, W(se.value, (n) => (h(), T(j, {
528
+ key: n._id,
529
+ label: n.name,
530
+ style: {
531
+ padding: "12px 0 !important"
532
+ },
533
+ onClick: () => z(n)
534
+ }, {
535
+ default: L(() => [o("div", We, [o("div", Je, [o("div", Qe, I(M(n.updatedAt)), 1), s(r, {
536
+ row: n
537
+ }, null, 8, ["row"])]), o("div", Xe, [o("div", Ze, I(n.name), 1), o("div", ea, [o("div", null, "Default: " + I(n.catalog.default), 1), o("div", null, "POS takeaway: " + I(n.catalog.takeaway), 1), o("div", null, "Pickup: " + I(n.catalog.pickup), 1)])])]), o("div", aa, [d.value && n.revertConfig ? (h(), T(S, {
538
+ key: 0,
539
+ disabled: m.value,
540
+ icon: "undo",
541
+ variant: "tertiary",
542
+ onClick: K(() => _(n), ["stop"])
543
+ }, null, 8, ["disabled", "onClick"])) : ce("", !0), s(S, {
544
+ disabled: m.value,
545
+ icon: "ios_share",
546
+ variant: "tertiary",
547
+ onClick: K(() => f(U(n)), ["stop"])
548
+ }, null, 8, ["disabled", "onClick"])])]),
549
+ _: 2
550
+ }, 1032, ["label", "onClick"]))), 128))]),
551
+ _: 1
552
+ })], 64)) : (h(), T(u(Ae), {
553
+ key: 1,
554
+ title: u(l)("menu.publish.empty.title"),
555
+ subtitle: u(l)("menu.publish.empty.subtitle"),
556
+ action: {
557
+ text: u(l)("menu.publish.empty.action"),
558
+ icon: "add",
559
+ callback: () => {
560
+ u(x).push({
561
+ name: "$settings-my-business"
562
+ });
563
+ }
564
+ }
565
+ }, null, 8, ["title", "subtitle", "action"]))]), o("div", ta, [s(S, {
566
+ disabled: m.value,
567
+ icon: "ios_share",
568
+ label: u(l)("menu.publish.actions.publish_all"),
569
+ variant: "fab",
570
+ onClick: a[7] || (a[7] = () => Q())
571
+ }, null, 8, ["disabled", "label"])]), s(Ne, {
572
+ ref_key: "updateCatalogDialogRef",
573
+ ref: g,
574
+ catalogs: N.value,
575
+ onOnComplete: f
576
+ }, null, 8, ["catalogs"])], 64);
577
+ };
578
+ }
579
+ });
580
+ export {
581
+ va as default
582
+ };
@@ -2,15 +2,15 @@ import { defineComponent as z, computed as h, ref as w, reactive as Q, watch as
2
2
  import { useI18n as U } from "@feedmepos/mf-common";
3
3
  import { useSnackbar as A, components as j, useDialog as ne, FmButtonVariant as G, useBreakpoints as oe } from "@feedmepos/ui-library";
4
4
  import { _ as ae } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
5
- import { _ as le } from "./app-G1eIeNve.js";
6
- import { O as q, G as $, H as ie, D as P, I as se, e as Y, J as I, A as T, u as H } from "./menu-CbIzWmhP.js";
5
+ import { _ as le } from "./app-L6-9-FPx.js";
6
+ import { O as q, G as $, H as ie, D as P, I as se, e as Y, J as I, A as T, u as H } from "./menu-CDIfnu9y.js";
7
7
  import { _ as re } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
8
8
  import { _ as ce } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
9
9
  import { defineStore as ue } from "pinia";
10
- import { _ as B, g as me } from "./InventoryBinding.vue_vue_type_script_setup_true_lang-DAO5hp3N.js";
10
+ import { _ as B, g as me } from "./InventoryBinding.vue_vue_type_script_setup_true_lang-B4BxYfdg.js";
11
11
  import { u as de } from "./discardConfirm-BHni0LNu.js";
12
12
  import { c as pe } from "./check-C9mY6LiX.js";
13
- import "./unit-CtG4RVnF.js";
13
+ import "./unit-CYPHVVUz.js";
14
14
  import { c as fe } from "./createComponentProgrammatically-Bt2rn1IQ.js";
15
15
  const _e = { class: "fm-typo-en-title-md-600" }, ve = { class: "pt-8 space-y-40" }, ye = { class: "flex flex-row gap-16" }, ge = { class: "flex gap-8 items-center justify-start" }, be = /* @__PURE__ */ z({
16
16
  __name: "Form",
@@ -1,10 +1,10 @@
1
1
  import { defineComponent as N, computed as y, h as c, withModifiers as U, ref as V, resolveComponent as _, createBlock as k, openBlock as d, unref as m, withCtx as h, createElementBlock as D, createVNode as f, Fragment as H, createElementVNode as l, renderList as T, toDisplayString as S, createCommentVNode as I } from "vue";
2
- import { A as i, O as W, u as G, G as Q } from "./menu-CbIzWmhP.js";
2
+ import { A as i, O as W, u as G, G as Q } from "./menu-CDIfnu9y.js";
3
3
  import { useI18n as J } from "@feedmepos/mf-common";
4
4
  import { components as X, useDialog as Z, useSnackbar as ee } from "@feedmepos/ui-library";
5
5
  import { _ as te } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
6
- import { _ as ne } from "./app-G1eIeNve.js";
7
- import { d as ae, _ as oe, u as se, c as le } from "./scheduler-PDDah5xR.js";
6
+ import { _ as ne } from "./app-L6-9-FPx.js";
7
+ import { d as ae, _ as oe, u as se, c as le } from "./scheduler-oUiE2ldE.js";
8
8
  import { _ as re } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
9
9
  import { _ as ue } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
10
10
  const ce = {
@@ -1,15 +1,15 @@
1
1
  import { defineComponent as J, ref as L, computed as O, resolveComponent as h, createElementBlock as g, openBlock as d, Fragment as x, renderSlot as ae, createVNode as l, unref as t, withCtx as m, createElementVNode as y, toDisplayString as z, onBeforeMount as oe, watch as F, watchEffect as se, h as $, getCurrentInstance as le, onMounted as re, createBlock as j, createCommentVNode as G, isRef as ie, normalizeClass as Q, renderList as ue } from "vue";
2
2
  import { useRouter as ce } from "vue-router";
3
- import { H, u as W, G as X, O as Z, J as I, A as S } from "./menu-CbIzWmhP.js";
3
+ import { H, u as W, G as X, O as Z, J as I, A as S } from "./menu-CDIfnu9y.js";
4
4
  import { useI18n as ee, ItemSelector as de, useCoreStore as me } from "@feedmepos/mf-common";
5
5
  import { useSnackbar as ne, components as Y, useDialog as pe, FmButtonVariant as A, useBreakpoints as _e } from "@feedmepos/ui-library";
6
6
  import { _ as fe } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
7
- import { _ as ge, R as ve } from "./app-G1eIeNve.js";
7
+ import { _ as ge, R as ve } from "./app-L6-9-FPx.js";
8
8
  import { _ as he } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
9
9
  import { c as ye } from "./check-C9mY6LiX.js";
10
10
  import { _ as be } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
11
11
  import { u as ke } from "./search-BAPEUu1R.js";
12
- import { u as xe } from "./app-BeeqJ5ia.js";
12
+ import { u as xe } from "./app-CcaKJaQg.js";
13
13
  import { c as Se } from "./createComponentProgrammatically-Bt2rn1IQ.js";
14
14
  const Ce = { class: "fm-typo-en-title-md-600" }, qe = { class: "space-y-32 flex flex-col h-full" }, Ee = { class: "flex gap-8 items-center justify-start" }, Ve = /* @__PURE__ */ J({
15
15
  __name: "Form",
@@ -1,11 +1,11 @@
1
1
  import { defineComponent as oe, computed as p, ref as se, watch as ue, watchEffect as ie, resolveComponent as m, createElementBlock as V, openBlock as r, normalizeClass as z, createVNode as s, withCtx as c, createElementVNode as v, createBlock as g, createCommentVNode as k, unref as e, Fragment as D, renderList as B, createTextVNode as re, toDisplayString as N } from "vue";
2
- import { u as me, G as ce, A as f, O as de, B as pe, H as w } from "./menu-CbIzWmhP.js";
2
+ import { u as me, G as ce, A as f, O as de, B as pe, H as w } from "./menu-CDIfnu9y.js";
3
3
  import { useCoreStore as ve, useI18n as ge } from "@feedmepos/mf-common";
4
4
  import { useSnackbar as fe, useDialog as _e, FmButtonVariant as $, FmButtonColorThemeVariant as P, components as be } from "@feedmepos/ui-library";
5
- import { _ as ye, a as E } from "./customAttributes-PLOo5TFF.js";
6
- import { _ as H, a as ke } from "./GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-PQJm4GbD.js";
7
- import { C as _, a as x } from "./catalogSetting-8687T4sf.js";
8
- import { C as xe } from "./catalog-DireBPbe.js";
5
+ import { _ as ye, a as E } from "./customAttributes-Cj0PdMZu.js";
6
+ import { _ as H, a as ke } from "./GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-Cy2NGGs0.js";
7
+ import { C as _, a as x } from "./catalogSetting-Crbl9TFz.js";
8
+ import { C as xe } from "./catalog-DC9IVpL1.js";
9
9
  const Ce = {
10
10
  class: /* @__PURE__ */ z(["overflow-scroll", "flex-1", "xs:px-16 xs:py-16", "pt-16"])
11
11
  }, Oe = {
@@ -2,17 +2,17 @@ import { defineComponent as L, ref as w, watch as W, resolveComponent as y, crea
2
2
  import { useI18n as T } from "@feedmepos/mf-common";
3
3
  import { useSnackbar as B, components as j, useDialog as Y, FmButtonVariant as z, useBreakpoints as ae, FmButtonColorThemeVariant as oe } from "@feedmepos/ui-library";
4
4
  import { _ as ne } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
5
- import { G as D, u as N, O as A, J as K, A as G } from "./menu-CbIzWmhP.js";
5
+ import { G as D, u as N, O as A, J as K, A as G } from "./menu-CDIfnu9y.js";
6
6
  import { _ as le } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
7
- import { _ as se } from "./app-G1eIeNve.js";
7
+ import { _ as se } from "./app-L6-9-FPx.js";
8
8
  import { c as re } from "./createForm-BoUQeZTd.js";
9
9
  import { u as ie } from "./discardConfirm-BHni0LNu.js";
10
10
  import { c as I } from "./object-DVUNCr7w.js";
11
11
  import { r as ce } from "./rules-CIWTZQfh.js";
12
12
  import { c as ue } from "./check-C9mY6LiX.js";
13
- import { u as q } from "./subcategory-B-usgK3T.js";
13
+ import { u as q } from "./subcategory-2hHCLbWG.js";
14
14
  import { _ as de } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
15
- import { a as me } from "./menu-DhH8YWvV.js";
15
+ import { a as me } from "./menu-CebF4MOX.js";
16
16
  const pe = {
17
17
  class: "fm-typo-en-title-md-600"
18
18
  }, _e = {