@feedmepos/mf-inventory-portal 1.2.11-dev.2 → 1.2.12-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 (70) hide show
  1. package/dist/{App-7THD1njR.js → App-DAWBJNxz.js} +44 -40
  2. package/dist/{ApprovalView-DMEJRr68.js → ApprovalView-B2WUwSN4.js} +30 -30
  3. package/dist/{BindingsDialog-BNzLPDnk.js → BindingsDialog-C3OOcB8g.js} +2 -2
  4. package/dist/{BindingsPicker-b6IVAFK_.js → BindingsPicker-R3Zz0fWB.js} +1 -1
  5. package/dist/{BindingsTable-C-4XGO_N.js → BindingsTable-B46C8p7M.js} +1 -1
  6. package/dist/{ClosingDraftView-DVTloUym.js → ClosingDraftView-a_QhmaM4.js} +180 -180
  7. package/dist/{ClosingTemplateView-C-eHKV0N.js → ClosingTemplateView-CEVmIsVw.js} +3 -3
  8. package/dist/{DeliveryOrderPrintPreview-ChIV_Wxd.js → DeliveryOrderPrintPreview-BeQFF6sn.js} +1 -1
  9. package/dist/{FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-DPkGmSYU.js → FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-DIG9NwPj.js} +3 -3
  10. package/dist/{FmMultiselectDialog-aRqxOX4h.js → FmMultiselectDialog-BunyF2O-.js} +1 -1
  11. package/dist/{FmUnitInput.vue_vue_type_script_setup_true_lang-_MPI8AAx.js → FmUnitInput.vue_vue_type_script_setup_true_lang-Bx0dzfHO.js} +39 -39
  12. package/dist/ImportView-CwBeBbXz.js +1220 -0
  13. package/dist/{IngredientBindedItem.vue_vue_type_script_setup_true_lang-BiHvGyAN.js → IngredientBindedItem.vue_vue_type_script_setup_true_lang-CfwprwJN.js} +1 -1
  14. package/dist/{IngredientGroupView-DtExVKaV.js → IngredientGroupView-CIPTj0hf.js} +16 -17
  15. package/dist/IngredientsView-BwBaeLtw.js +2240 -0
  16. package/dist/{IntegrationView-LnHPQMs8.js → IntegrationView-CvRD-5O6.js} +57 -57
  17. package/dist/{InventoryBindingForm-Cm9TOWWe.js → InventoryBindingForm-DLQTH1di.js} +1 -1
  18. package/dist/{InventoryBindingForm.vue_vue_type_script_setup_true_lang-DwGz8gLR.js → InventoryBindingForm.vue_vue_type_script_setup_true_lang-XvIklIYw.js} +31 -31
  19. package/dist/{InventoryBindingSummary-BQ6ysLf9.js → InventoryBindingSummary-BGFSPQIw.js} +1 -1
  20. package/dist/{NumberPrecisionInput.vue_vue_type_script_setup_true_lang-B_ASTDtr.js → NumberPrecisionInput.vue_vue_type_script_setup_true_lang-B3J0i5IU.js} +1 -1
  21. package/dist/{PremiumBadge.vue_vue_type_script_setup_true_lang-DdFHN7A8.js → PremiumBadge.vue_vue_type_script_setup_true_lang-CyMRTB5L.js} +1 -1
  22. package/dist/{PublishView-Dg_U3hW1.js → PublishView-7g0bx6KO.js} +16 -16
  23. package/dist/{PurchaseOrderPrintPreview-DnwHiTGF.js → PurchaseOrderPrintPreview-LEfLcjkd.js} +1 -1
  24. package/dist/{ReceiveRequestView-CIzZf6q8.js → ReceiveRequestView-DUNfHRGf.js} +193 -194
  25. package/dist/RecipeView-XzqGQg_a.js +636 -0
  26. package/dist/{StockView-D6RmCUZZ.js → StockView-vZr9etBj.js} +165 -166
  27. package/dist/{SubsidiaryTreeDialog.vue_vue_type_script_setup_true_lang-BAcaiBqq.js → SubsidiaryTreeDialog.vue_vue_type_script_setup_true_lang-3_csD6uU.js} +1 -1
  28. package/dist/{SupplierView-DmJXuznz.js → SupplierView-CUORFWJW.js} +52 -52
  29. package/dist/{TransferDetails.vue_vue_type_script_setup_true_lang-9wk6mQHT.js → TransferDetails.vue_vue_type_script_setup_true_lang-DhXoNkss.js} +5 -5
  30. package/dist/{TransferTemplateView-wcXRmuoK.js → TransferTemplateView-DeliKkYY.js} +97 -97
  31. package/dist/UnitView-B4NCl6jJ.js +674 -0
  32. package/dist/{WarehouseView-643lOh1p.js → WarehouseView-jLGGlnwV.js} +32 -32
  33. package/dist/api/inventory.d.ts +306 -0
  34. package/dist/{app-CsyUwsea.js → app-DJcCTZjT.js} +7663 -7341
  35. package/dist/app.d.ts +169 -0
  36. package/dist/app.js +1 -1
  37. package/dist/{closing-template-DaHVCTUh.js → closing-template-hM43IpP-.js} +1 -1
  38. package/dist/{decimal-DveC9JMl.js → decimal-BVu2HlCS.js} +1 -1
  39. package/dist/{format-unit-display-_9FgoZom.js → format-unit-display-C-M_AirC.js} +25 -25
  40. package/dist/helper/number.d.ts +1 -0
  41. package/dist/import-export.helper-C05Vl6i-.js +243 -0
  42. package/dist/{index-ChAOZMz9.js → index-CNQtmSfJ.js} +1 -1
  43. package/dist/{index-CZmm0Xbi.js → index-v6hU4gAy.js} +1 -1
  44. package/dist/{purchase-order-template-D2kAwN4O.js → purchase-order-template-BBCEFnbo.js} +1 -1
  45. package/dist/router/name.d.ts +1 -0
  46. package/dist/{stock-CL0X5Bnh.js → stock-CK3LBQmj.js} +1 -1
  47. package/dist/stores/inventory.d.ts +26 -199
  48. package/dist/{supplier-D3mOSUzY.js → supplier-CoCAyG12.js} +1 -1
  49. package/dist/tsconfig.app.tsbuildinfo +1 -1
  50. package/dist/{use-ingredient-select-dialog-Ba-l0gZ1.js → use-ingredient-select-dialog-DYfpyC4u.js} +1 -1
  51. package/dist/{use-inventory-binding-dialog-CpaprD6M.js → use-inventory-binding-dialog-CDwm6TPx.js} +1 -1
  52. package/dist/views/import/ImportView.vue.d.ts +3 -0
  53. package/dist/views/import/components/ImportDialog.vue.d.ts +2 -0
  54. package/dist/views/import/helper/import-export.helper.d.ts +4 -0
  55. package/dist/views/ingredients/helper/import-export.helper.d.ts +3 -1
  56. package/dist/views/recipe/RecipeView.vue.d.ts +1 -0
  57. package/dist/views/recipe/components/import-recipes/ImportRecipeItem.vue.d.ts +16 -0
  58. package/dist/views/recipe/components/import-recipes/ImportRecipes.vue.d.ts +2 -0
  59. package/dist/views/recipe/helper/import-recipe.d.ts +48 -0
  60. package/dist/views/unit/UnitView.vue.d.ts +1 -0
  61. package/dist/views/unit/components/import-units/ImportUnitItem.vue.d.ts +12 -0
  62. package/dist/views/unit/components/import-units/ImportUnitItemProps.d.ts +6 -0
  63. package/dist/views/unit/components/import-units/ImportUnits.vue.d.ts +9 -0
  64. package/dist/views/unit/components/import-units/ImportUnitsProps.d.ts +5 -0
  65. package/dist/views/unit/helper/import-export.helper.d.ts +40 -0
  66. package/package.json +3 -3
  67. package/dist/IngredientsView-DQUK8EMq.js +0 -2475
  68. package/dist/RecipeView-BQeJBUvu.js +0 -621
  69. package/dist/UnitView-C1cxS42T.js +0 -667
  70. package/dist/array-Ca8T3f_G.js +0 -44
@@ -1,621 +0,0 @@
1
- import { defineComponent as K, ref as E, onMounted as re, resolveComponent as $, openBlock as F, createElementBlock as B, Fragment as ie, createElementVNode as h, toDisplayString as ue, createVNode as g, createCommentVNode as q, computed as k, watch as ce, createBlock as L, withCtx as P, unref as b, isRef as ee, normalizeClass as de, normalizeStyle as me, Teleport as pe, normalizeProps as fe, guardReactiveProps as ve } from "vue";
2
- import { a as A, e as V, f as J, S as ye, i as ge, D as te, j as Y, l as U, F as H, p as be, U as _e, A as we, c as Re, w as ne, z as he, C as xe, B as Se, u as Ve, L as Ce, O as Ee, P as Fe, Q as $e, T as oe } from "./app-CsyUwsea.js";
3
- import { useDialog as ke, useSnackbar as se, useProxiedModel as ae, useBreakpoints as Ie } from "@feedmepos/ui-library";
4
- import { i as De, _ as Ae } from "./is-linked-ingredient-error-fJ2TJb3z.js";
5
- import { _ as le } from "./IngredientBindedItem.vue_vue_type_script_setup_true_lang-BiHvGyAN.js";
6
- import { defineStore as Be, storeToRefs as Pe } from "pinia";
7
- import { useI18n as O } from "@feedmepos/mf-common";
8
- import { _ as Te } from "./InventoryBindingForm.vue_vue_type_script_setup_true_lang-DwGz8gLR.js";
9
- import { _ as Ue } from "./FmCustomAttribute.vue_vue_type_script_setup_true_lang-D-IWRjRD.js";
10
- const Me = {
11
- key: 0,
12
- class: "flex flex-col items-center w-full h-full gap-24"
13
- }, Le = { key: 1 }, Ne = { key: 0 }, ze = /* @__PURE__ */ K({
14
- __name: "DeleteDialog",
15
- props: {
16
- type: {},
17
- data: {},
18
- message: {},
19
- bindedItems: {}
20
- },
21
- setup(w) {
22
- const p = w, f = E(p.bindedItems || []), l = E(!1);
23
- re(() => {
24
- r();
25
- });
26
- async function r() {
27
- var c, i;
28
- !l.value && ((c = p.data) != null && c._id) && (l.value = !0, f.value = await A().getAffectedMenu((i = p.data) == null ? void 0 : i._id), l.value = !1);
29
- }
30
- return (c, i) => {
31
- const v = $("FmSpacer"), d = $("FmCircularProgress");
32
- return F(), B(ie, null, [
33
- h("p", null, ue(c.message), 1),
34
- l.value ? (F(), B("div", Me, [
35
- g(v),
36
- h("div", null, [
37
- g(d, { size: "xl" })
38
- ]),
39
- i[0] || (i[0] = h("div", { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary pl-8" }, "Loading...", -1)),
40
- g(v)
41
- ])) : (F(), B("div", Le, [
42
- i[2] || (i[2] = h("br", null, null, -1)),
43
- f.value.length > 0 ? (F(), B("div", Ne, [
44
- i[1] || (i[1] = h("p", { class: "fm-typo-en-body-lg-600" }, "Affected menu items:", -1)),
45
- g(le, {
46
- name: "Menu",
47
- bindings: f.value
48
- }, null, 8, ["bindings"])
49
- ])) : q("", !0)
50
- ]))
51
- ], 64);
52
- };
53
- }
54
- }), Q = Be("recipeForm", function() {
55
- const p = ke(), f = se(), l = A(), r = E(!1), c = E();
56
- function i() {
57
- const t = {
58
- recipe: {},
59
- mode: V.CREATE,
60
- show: !0,
61
- "onUpdate:show"(n) {
62
- c.value.show = n;
63
- }
64
- };
65
- c.value = t;
66
- }
67
- async function v(t) {
68
- const n = {
69
- recipe: J(t),
70
- mode: V.UPDATE,
71
- show: !0,
72
- "onUpdate:show"(m) {
73
- c.value.show = m;
74
- }
75
- };
76
- c.value = n;
77
- }
78
- async function d(t) {
79
- r.value = !0;
80
- try {
81
- await l.deleteRecipe(t), f.open({
82
- title: "Success",
83
- message: `Deleted ${t.name}`,
84
- type: "success"
85
- });
86
- } catch (n) {
87
- n instanceof ye && De(n) ? p.open({
88
- title: "Cannot delete recipe",
89
- contentComponent: Ae,
90
- contentComponentProps: {
91
- subject: (t == null ? void 0 : t.name) ?? "",
92
- items: n.errorResponse.message
93
- },
94
- secondaryActions: {
95
- text: "Close",
96
- close: !0
97
- }
98
- }) : console.log("unable to delete recipe", n), f.open({
99
- title: `Cannot delete ${t == null ? void 0 : t.name}`,
100
- message: "Please try again.",
101
- type: "error"
102
- }), console.error("failed to delete recipe", n);
103
- } finally {
104
- r.value = !1;
105
- }
106
- }
107
- function u(t) {
108
- p.open({
109
- title: `Delete ${(t == null ? void 0 : t.name) ?? "recipe"}?`,
110
- closeButton: !1,
111
- primaryActions: {
112
- text: "Delete",
113
- close: !0,
114
- variant: "destructive"
115
- },
116
- secondaryActions: {
117
- text: "Cancel",
118
- close: !0
119
- },
120
- contentComponent: ze,
121
- contentComponentProps: {
122
- type: "menu",
123
- data: t,
124
- message: "You may not be able to delete this recipe if it is linked in any of the inventory modules."
125
- }
126
- }).onPrimary(() => d(t));
127
- }
128
- return {
129
- createRecipe: i,
130
- updateRecipe: v,
131
- deleteRecipe: u,
132
- recipeDialogProps: c,
133
- recipeViewLoading: r
134
- };
135
- });
136
- function Ge() {
137
- const { updateRecipe: w, deleteRecipe: p } = Q(), f = A(), { t: l } = O();
138
- async function r(d, u) {
139
- const t = J(u);
140
- if (d === Y.Edit) {
141
- await w(t);
142
- return;
143
- }
144
- if (d === Y.Delete) {
145
- await p(t);
146
- return;
147
- }
148
- }
149
- function c(d, u) {
150
- const t = d.filter((o) => o.type === H.enum.SKU), n = d.filter(
151
- (o) => o.type === H.enum.SKU_GROUP
152
- ), m = d.filter((o) => o.type === H.enum.RECIPE);
153
- return [
154
- ...t.map((o) => ({ ...o, recipeIds: [...u] })),
155
- ...n.map((o) => ({ ...o, isGroup: !0, recipeIds: [...u] })),
156
- ...m.filter((o) => f.recipeById[o.id] && !u.has(o.id)).flatMap(
157
- (o) => c(f.recipeById[o.id].contains, /* @__PURE__ */ new Set([...u, o.id]))
158
- )
159
- ];
160
- }
161
- const i = [
162
- {
163
- accessorKey: "recipe",
164
- header: () => l("inventory.recipe.name"),
165
- size: 400
166
- },
167
- {
168
- accessorKey: "ingredients",
169
- header: () => l("inventory.recipe.ingredients"),
170
- size: "auto"
171
- },
172
- {
173
- id: "action",
174
- header: "",
175
- cell(d) {
176
- return ge(
177
- [te[Y.Edit], te[Y.Delete]],
178
- (u) => {
179
- r(u, d.row.original.original);
180
- }
181
- );
182
- },
183
- enableSorting: !1,
184
- size: 40,
185
- meta: {
186
- cellClass: "",
187
- headerClass: ""
188
- }
189
- }
190
- ];
191
- function v(d) {
192
- const u = A();
193
- return d.map((t) => ({
194
- recipe: t.name,
195
- ingredients: c(t.contains, /* @__PURE__ */ new Set([t._id])).map((n) => {
196
- var o, _, a, y, C, x;
197
- if (n.isGroup) {
198
- const R = u.skuGroupById[n.id];
199
- return n.recipeIds.slice(1).length ? `(${(o = u.recipeById[n.recipeIds.at(-1) ?? ""]) == null ? void 0 : o.name}) ${R.name} (x ${U(n.amount)})` : `${R.name} (x${U(n.amount)})`;
200
- }
201
- const m = u.skuById[n.id];
202
- return m ? n.recipeIds.slice(1).length ? `(${(_ = u.recipeById[n.recipeIds.at(-1) ?? ""]) == null ? void 0 : _.name}) ${m.name} (${U(n.amount)}${((a = n.measurement) == null ? void 0 : a.abbrev) ?? ((y = m == null ? void 0 : m.unit) == null ? void 0 : y.abbrev)})` : `${m.name} (${U(n.amount)}${((C = n.measurement) == null ? void 0 : C.abbrev) ?? ((x = m == null ? void 0 : m.unit) == null ? void 0 : x.abbrev)})` : null;
203
- }).filter((n) => n).join(", "),
204
- original: t
205
- }));
206
- }
207
- return { columnDefs: i, formatRowData: v };
208
- }
209
- const je = { class: "flex flex-col gap-40" }, Ye = {
210
- key: 0,
211
- class: "col-span-2 mt-16 border-1 border-fm-color-neutral-gray-200 fm-corner-radius-lg flex flex-col p-16 gap-16"
212
- }, Ke = {
213
- key: 0,
214
- class: "flex flex-col items-center w-full h-full gap-24"
215
- }, Oe = { key: 1 }, He = { class: "mt-32" }, qe = /* @__PURE__ */ K({
216
- __name: "RecipeForm",
217
- props: {
218
- mode: {},
219
- modelValue: {},
220
- disabled: { type: Boolean }
221
- },
222
- emits: ["update:modelValue", "click:submit"],
223
- setup(w, { expose: p, emit: f }) {
224
- var R;
225
- const l = w, r = f, c = Re(), { t: i } = O(), v = k({
226
- get() {
227
- var e;
228
- return ((e = l.modelValue) == null ? void 0 : e.name) ?? "";
229
- },
230
- set(e) {
231
- const s = l.modelValue ?? {};
232
- s.name = e, r("update:modelValue", s);
233
- }
234
- }), d = k({
235
- get() {
236
- var e;
237
- return ((e = l.modelValue) == null ? void 0 : e.contains) ?? [];
238
- },
239
- set(e) {
240
- const s = l.modelValue ?? {};
241
- s.contains = e, r("update:modelValue", s);
242
- }
243
- }), u = k({
244
- get() {
245
- var e;
246
- return ((e = l.modelValue) == null ? void 0 : e.customAttributes) ?? {};
247
- },
248
- set(e) {
249
- const s = l.modelValue ? {
250
- ...l.modelValue
251
- } : {};
252
- s.customAttributes = e, r("update:modelValue", s);
253
- }
254
- });
255
- function t() {
256
- r("click:submit");
257
- }
258
- const n = E();
259
- p({
260
- validateInputs: () => {
261
- var e, s;
262
- (s = (e = n.value) == null ? void 0 : e.validateInputs) == null || s.call(e);
263
- },
264
- resetInputsValidation: () => {
265
- var e, s;
266
- (s = (e = n.value) == null ? void 0 : e.resetInputsValidation) == null || s.call(e);
267
- },
268
- resetInputs: () => {
269
- var e, s;
270
- (s = (e = n.value) == null ? void 0 : e.resetInputs) == null || s.call(e);
271
- }
272
- });
273
- const m = A(), o = E([]), _ = E(!1), a = E(!1);
274
- ce(_, async (e) => {
275
- y(e);
276
- });
277
- async function y(e) {
278
- var s, I;
279
- e && !a.value && ((s = l.modelValue) != null && s._id) && (a.value = !0, o.value = await m.getAffectedMenu((I = l.modelValue) == null ? void 0 : I._id).delayed(500), a.value = !1);
280
- }
281
- const C = k(
282
- () => m.recipes.map((e) => ({ label: e.name, value: e.name }))
283
- ), x = E((R = l.modelValue) == null ? void 0 : R.name);
284
- return (e, s) => {
285
- const I = $("FmTextField"), D = $("FmCard"), N = $("FmSwitch"), M = $("FmSpacer"), z = $("FmCircularProgress"), T = $("FmForm");
286
- return F(), L(T, {
287
- ref_key: "formRef",
288
- ref: n,
289
- onValidationSuccess: t
290
- }, {
291
- default: P(() => [
292
- h("div", je, [
293
- g(I, {
294
- disabled: e.disabled,
295
- label: b(i)("inventory.recipe.name"),
296
- "model-value": v.value,
297
- "onUpdate:modelValue": s[0] || (s[0] = (S) => v.value = S),
298
- rules: [
299
- b(be)(),
300
- b(_e)(C.value, x.value, (S) => `[${S.value}] already exists`)
301
- ],
302
- "label-mark": "required"
303
- }, null, 8, ["disabled", "label", "model-value", "rules"]),
304
- g(D, {
305
- variant: "outlined",
306
- class: "p-16"
307
- }, {
308
- default: P(() => {
309
- var S;
310
- return [
311
- g(Te, {
312
- id: (S = e.modelValue) == null ? void 0 : S._id,
313
- disabled: e.disabled,
314
- "model-value": d.value,
315
- "onUpdate:modelValue": s[1] || (s[1] = (G) => d.value = G),
316
- rules: [b(we)(1)],
317
- "enable-ingredient-group": b(c).enableIngredientGroup
318
- }, null, 8, ["id", "disabled", "model-value", "rules", "enable-ingredient-group"])
319
- ];
320
- }),
321
- _: 1
322
- })
323
- ]),
324
- e.mode !== b(V).CREATE ? (F(), B("div", Ye, [
325
- g(N, {
326
- label: "Show binded items",
327
- modelValue: _.value,
328
- "onUpdate:modelValue": s[2] || (s[2] = (S) => _.value = S),
329
- "label-placement": "right",
330
- disabled: a.value
331
- }, null, 8, ["modelValue", "disabled"]),
332
- a.value ? (F(), B("div", Ke, [
333
- g(M),
334
- h("div", null, [
335
- g(z, { size: "xl" })
336
- ]),
337
- s[4] || (s[4] = h("div", { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary pl-8" }, "Loading...", -1)),
338
- g(M)
339
- ])) : _.value && o.value.length ? (F(), B("div", Oe, [
340
- g(le, {
341
- name: "Menu",
342
- bindings: o.value
343
- }, null, 8, ["bindings"])
344
- ])) : q("", !0)
345
- ])) : q("", !0),
346
- h("div", He, [
347
- g(Ue, {
348
- entity: "inventoryRecipe",
349
- modelValue: u.value,
350
- "onUpdate:modelValue": s[3] || (s[3] = (S) => u.value = S)
351
- }, null, 8, ["modelValue"])
352
- ])
353
- ]),
354
- _: 1
355
- }, 512);
356
- };
357
- }
358
- }), Qe = { class: "flex gap-4" }, Je = /* @__PURE__ */ K({
359
- __name: "RecipeDialog",
360
- props: {
361
- show: { type: Boolean },
362
- recipe: {},
363
- mode: { default: V.READ }
364
- },
365
- emits: ["update:show"],
366
- setup(w) {
367
- const p = w, f = A(), l = se(), { t: r } = O(), c = ae(p, "show"), i = ae(p, "recipe"), v = k(() => {
368
- switch (p.mode) {
369
- case V.READ:
370
- return "";
371
- case V.UPDATE:
372
- return r("inventory.recipe.update.title");
373
- case V.CREATE:
374
- return r("inventory.recipe.create.title");
375
- }
376
- return "";
377
- }), d = k(() => {
378
- switch (p.mode) {
379
- case V.READ:
380
- return "";
381
- case V.UPDATE:
382
- return r("common.save");
383
- case V.CREATE:
384
- return r("common.add");
385
- }
386
- return "";
387
- }), u = E(), t = E(!1);
388
- async function n() {
389
- t.value = !0;
390
- try {
391
- const a = J(i.value);
392
- a.precision ?? (a.precision = 0), a.measurements ?? (a.measurements = []), await f.createRecipe(a), c.value = !1, l.open({
393
- title: r("inventory.common.success"),
394
- message: r("inventory.recipe.create.success", { name: i.value.name }),
395
- type: "success"
396
- });
397
- } catch (a) {
398
- a instanceof ne || l.open({
399
- title: r("inventory.recipe.create.error.title"),
400
- message: r("inventory.recipe.create.error.message"),
401
- type: "error"
402
- });
403
- } finally {
404
- t.value = !1;
405
- }
406
- }
407
- async function m() {
408
- t.value = !0;
409
- try {
410
- await f.updateRecipe(i.value), c.value = !1, l.open({
411
- title: r("inventory.common.success"),
412
- message: r("inventory.recipe.update.success", { name: i.value.name }),
413
- type: "success"
414
- });
415
- } catch (a) {
416
- a instanceof ne || l.open({
417
- title: r("inventory.recipe.update.error.title"),
418
- message: r("inventory.recipe.update.error.message"),
419
- type: "error"
420
- });
421
- } finally {
422
- t.value = !1;
423
- }
424
- }
425
- function o() {
426
- var a, y;
427
- (y = (a = u.value) == null ? void 0 : a.validateInputs) == null || y.call(a);
428
- }
429
- function _() {
430
- switch (p.mode) {
431
- case V.READ:
432
- return;
433
- case V.UPDATE:
434
- return m();
435
- case V.CREATE:
436
- return n();
437
- }
438
- }
439
- return (a, y) => {
440
- const C = $("FmButton"), x = $("FmSideSheet");
441
- return F(), L(x, {
442
- "model-value": b(c),
443
- "onUpdate:modelValue": y[3] || (y[3] = (R) => ee(c) ? c.value = R : null),
444
- header: v.value,
445
- "close-button": "",
446
- "dismiss-away": "",
447
- "max-width": 500
448
- }, {
449
- "side-sheet-footer": P(() => [
450
- h("div", Qe, [
451
- g(C, {
452
- loading: t.value,
453
- label: d.value,
454
- onClick: o
455
- }, null, 8, ["loading", "label"]),
456
- g(C, {
457
- disabled: t.value,
458
- label: b(r)("common.close"),
459
- variant: "tertiary",
460
- onClick: y[2] || (y[2] = (R) => c.value = !1)
461
- }, null, 8, ["disabled", "label"])
462
- ])
463
- ]),
464
- default: P(() => [
465
- g(qe, {
466
- class: "w-full",
467
- ref_key: "hasValidationExpose",
468
- ref: u,
469
- modelValue: b(i),
470
- "onUpdate:modelValue": y[0] || (y[0] = (R) => ee(i) ? i.value = R : null),
471
- mode: a.mode,
472
- disabled: t.value,
473
- "onClick:submit": y[1] || (y[1] = (R) => _())
474
- }, null, 8, ["modelValue", "mode", "disabled"])
475
- ]),
476
- _: 1
477
- }, 8, ["model-value", "header"]);
478
- };
479
- }
480
- });
481
- function We(w) {
482
- return !w || Object.keys(w).length === 0 ? "" : Object.entries(w).map(([p, f]) => `${p}: ${f}`).join(", ");
483
- }
484
- function Xe() {
485
- const w = A(), p = w.recipes, f = w.recipeById, l = w.skuById, r = p.flatMap((v, d) => {
486
- var t;
487
- const u = We(v.customAttributes);
488
- if ((t = v.contains) != null && t.length) {
489
- const n = v.contains.filter((o) => o.type === "RECIPE"), m = v.contains.filter((o) => o.type === "SKU");
490
- return [
491
- ...d === 0 ? [] : [["", "", "", "", "", "", ""]],
492
- ...n.map(
493
- (o, _) => {
494
- var a;
495
- return [
496
- _ === 0 ? v.name : "",
497
- "RECIPE",
498
- "",
499
- (a = f[o.id]) == null ? void 0 : a.name,
500
- U(o.amount),
501
- "UNIT",
502
- _ === 0 ? u : ""
503
- ];
504
- }
505
- ),
506
- ...m.map(
507
- (o, _) => {
508
- var a, y, C, x;
509
- return [
510
- !n.length && _ === 0 ? v.name : "",
511
- "INGREDIENT",
512
- (a = l[o.id]) == null ? void 0 : a.code,
513
- (y = l[o.id]) == null ? void 0 : y.name,
514
- U(o.amount),
515
- o.measurement ? o.measurement.abbrev : (x = (C = l[o.id]) == null ? void 0 : C.unit) == null ? void 0 : x.abbrev,
516
- !n.length && _ === 0 ? u : ""
517
- ];
518
- }
519
- )
520
- ];
521
- }
522
- return [
523
- ...d === 0 ? [] : [["", "", "", "", "", "", ""]],
524
- [v.name, "No bindings", "", "", "", "", u]
525
- ];
526
- }), i = he(r, ["Name", "Type", "Code", "Item", "Amount", "Unit", "Custom Attributes"]);
527
- xe(i, `RECIPE_${Se(/* @__PURE__ */ new Date(), "-", "-")}.xlsx`);
528
- }
529
- const Ze = { class: "flex flex-col py-8" }, et = { class: "fm-typo-en-body-lg-600 text-fm-color-typo-primary" }, tt = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, dt = /* @__PURE__ */ K({
530
- __name: "RecipeView",
531
- setup(w) {
532
- const p = A(), f = k(() => p.recipes), l = Ve(), { createRecipe: r, updateRecipe: c } = Q(), { recipeDialogProps: i, recipeViewLoading: v } = Pe(Q()), { columnDefs: d, formatRowData: u } = Ge(), t = k(() => u(f.value));
533
- function n(R) {
534
- if (R === "add")
535
- return r();
536
- if (R === "export")
537
- return Xe();
538
- }
539
- const m = E(""), o = k(() => v.value), { breakpoints: _ } = Ie(), a = k(() => _.value.xs || _.value.sm), y = k(() => a.value ? 10 : 20), C = Ce(), { t: x } = O();
540
- return (R, e) => {
541
- const s = $("FmTable");
542
- return F(), L(Ee, {
543
- title: b(x)("inventory.recipe.title"),
544
- actions: [
545
- {
546
- label: b(x)("inventory.recipe.create.title"),
547
- value: "add",
548
- isPrimary: !0,
549
- prependIcon: "add"
550
- },
551
- { label: b(x)("common.export"), value: "export", isPrimary: !1 }
552
- ],
553
- "onClick:action": n
554
- }, {
555
- default: P(() => [
556
- h("div", {
557
- class: de([
558
- "flex flex-col gap-8 max-h-full",
559
- {
560
- "p-0": a.value,
561
- "px-24 ": !a.value
562
- }
563
- ])
564
- }, [
565
- g(Fe, {
566
- searchable: "",
567
- search: m.value,
568
- "onUpdate:search": e[0] || (e[0] = (I) => m.value = I)
569
- }, null, 8, ["search"]),
570
- (F(), L(s, {
571
- style: me(b(C).tableHeight),
572
- "column-defs": b(d),
573
- "row-data": t.value,
574
- "search-value": m.value,
575
- loading: !b(l)._currentLocation || o.value,
576
- onRowClick: e[1] || (e[1] = (I) => b(c)(I.original.original)),
577
- key: f.value.length,
578
- "page-size": y.value
579
- }, {
580
- "list-row": P((I) => [
581
- g($e, {
582
- row: I,
583
- onRowClick: (D) => b(c)(D.original)
584
- }, {
585
- default: P((D) => {
586
- var N, M, z, T, S, G, W, X, j, Z;
587
- return [
588
- h("div", Ze, [
589
- h("div", et, [
590
- g(b(oe), {
591
- render: (z = (M = (N = D.recipe) == null ? void 0 : N.column) == null ? void 0 : M.columnDef) == null ? void 0 : z.cell,
592
- props: (S = (T = D.recipe) == null ? void 0 : T.getContext) == null ? void 0 : S.call(T)
593
- }, null, 8, ["render", "props"])
594
- ]),
595
- h("div", tt, [
596
- g(b(oe), {
597
- render: (X = (W = (G = D.ingredients) == null ? void 0 : G.column) == null ? void 0 : W.columnDef) == null ? void 0 : X.cell,
598
- props: (Z = (j = D.ingredients) == null ? void 0 : j.getContext) == null ? void 0 : Z.call(j)
599
- }, null, 8, ["render", "props"])
600
- ])
601
- ])
602
- ];
603
- }),
604
- _: 2
605
- }, 1032, ["row", "onRowClick"])
606
- ]),
607
- _: 1
608
- }, 8, ["style", "column-defs", "row-data", "search-value", "loading", "page-size"]))
609
- ], 2),
610
- (F(), L(pe, { to: "body" }, [
611
- g(Je, fe(ve(b(i))), null, 16)
612
- ]))
613
- ]),
614
- _: 1
615
- }, 8, ["title", "actions"]);
616
- };
617
- }
618
- });
619
- export {
620
- dt as default
621
- };