@feedmepos/mf-hrm-portal 2.2.3 → 2.2.5-dev

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 (48) hide show
  1. package/dist/{ApprovalCodeList-BnG3T_Lk.js → ApprovalCodeList-DgcWZ3SZ.js} +5 -5
  2. package/dist/{AuditLogList-CpK9-YkB.js → AuditLogList-vWKMMGvd.js} +235 -233
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CzKzq19d.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DuhXogXK.js} +2 -2
  4. package/dist/EmployeeList-Cu4RxVQX.js +889 -0
  5. package/dist/{GrantUserList-BJoj3ZcO.js → GrantUserList-BAW0C1bA.js} +6 -6
  6. package/dist/{Main-FPpK9B70.js → Main-B7Nn8CLQ.js} +11 -11
  7. package/dist/{Main-5QLhf80L.js → Main-NzpdRNB3.js} +8 -8
  8. package/dist/{Main-BEUu3Hba.js → Main-Wr6cTqfM.js} +5 -5
  9. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-BUI0Xsgc.js +85 -0
  10. package/dist/{PermissionSetList-DZGZ0Pm_.js → PermissionSetList-D6AFOleD.js} +7 -7
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BHEW1_dv.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Bzq2_BMn.js} +1268 -1275
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-Z-DH7ouY.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js} +1 -1
  13. package/dist/{RoleList-D5yToard.js → RoleList-BuqpmXn_.js} +9 -9
  14. package/dist/TeamMemberList-M6HA9BWu.js +1248 -0
  15. package/dist/{TimesheetList-DMo8KXoU.js → TimesheetList-B5FyVyCz.js} +92 -90
  16. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-2KHu-f8U.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C99Jr6Ax.js} +3 -3
  17. package/dist/{app-DlSD8S9A.js → app-8samJY5z.js} +214 -190
  18. package/dist/app.js +1 -1
  19. package/dist/{approval-code-BRClD2HN.js → approval-code-jIjkeVEb.js} +1 -1
  20. package/dist/{dayjs.min-DcI2auGP.js → dayjs.min-Ba4X_9nY.js} +1 -1
  21. package/dist/employee-BcFgm8Rt.js +204 -0
  22. package/dist/{grant-user-Dhi3ilC_.js → grant-user-SNiDV22U.js} +1 -1
  23. package/dist/{iteration-DSzPQ0fZ.js → iteration-Dhdew1jW.js} +1 -1
  24. package/dist/{lodash-Ce0IJ8Y3.js → lodash-CJ3mHku0.js} +1 -1
  25. package/dist/{restaurant-DiYb0pCm.js → restaurant-BTpBmfBV.js} +2 -2
  26. package/dist/{role-DkTkfUgR.js → role-BViYS7RK.js} +2 -2
  27. package/dist/{rule-B-REsmVM.js → rule-Dxt1ZSQS.js} +48 -40
  28. package/dist/src/api/employee/index.d.ts +5 -1
  29. package/dist/src/api/team/index.d.ts +3 -0
  30. package/dist/src/components/form/PasscodeGenerateButton.vue.d.ts +15 -0
  31. package/dist/src/components/form/PasscodePinField.vue.d.ts +18 -0
  32. package/dist/src/helpers/string.d.ts +2 -1
  33. package/dist/src/views/audit-log/locales/index.d.ts +4 -0
  34. package/dist/src/views/hr/locales/index.d.ts +8 -0
  35. package/dist/src/views/team/locales/index.d.ts +12 -0
  36. package/dist/src/views/team/member/AddMemberForm.vue.d.ts +1 -0
  37. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +9 -0
  38. package/dist/string-VNuQNweN.js +15 -0
  39. package/dist/style.css +1 -1
  40. package/dist/tsconfig.app.tsbuildinfo +1 -1
  41. package/dist/{useAppStore-BGhlB1_1.js → useAppStore-DCwd8GWN.js} +1 -1
  42. package/dist/{useLoading-CvgqVDbF.js → useLoading-CXzTpIVv.js} +1 -1
  43. package/dist/{useReportPermissions-VCzAQXKz.js → useReportPermissions-BiyAfGvZ.js} +3 -3
  44. package/package.json +1 -1
  45. package/dist/EmployeeList-CUsRanu7.js +0 -887
  46. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-B4PxNMwq.js +0 -16
  47. package/dist/TeamMemberList-C4-AHxO4.js +0 -1216
  48. package/dist/employee-C_cvCoHM.js +0 -201
@@ -1,1216 +0,0 @@
1
- import { defineComponent as we, resolveComponent as F, createElementBlock as M, openBlock as y, createElementVNode as i, createVNode as d, toDisplayString as k, unref as r, computed as w, ref as b, createCommentVNode as K, withCtx as ue, createBlock as z, watch as fe, Fragment as Ne, renderList as us, withKeys as Te, withModifiers as Ve, nextTick as ms, onUnmounted as ds, h as cs, createTextVNode as ps } from "vue";
2
- import { useI18n as Pe, useCoreStore as Ye } from "@feedmepos/mf-common";
3
- import { useSnackbar as He, useDialog as es, useBreakpoints as ss, components as Be } from "@feedmepos/ui-library";
4
- import { u as fs } from "./useDebounce-B8ZPVS5C.js";
5
- import { _ as vs, S as ye } from "./SelectFilter-ATOm0hdn.js";
6
- import { b as qe, m as bs, O as hs, _ as ys, a as _s } from "./app-DlSD8S9A.js";
7
- import { u as gs, _ as Us } from "./useDiscardConfirm-DPhEV6v0.js";
8
- import { _ as xs } from "./TableEmptyState.vue_vue_type_script_setup_true_lang-IfAZmWr0.js";
9
- import { _ as Ss } from "./Skeleton.vue_vue_type_script_setup_true_lang-B4PxNMwq.js";
10
- import { u as Fs } from "./useLoading-CvgqVDbF.js";
11
- import { l as Se } from "./lodash-Ce0IJ8Y3.js";
12
- import { c as he } from "./iteration-DSzPQ0fZ.js";
13
- import { u as ts, c as je, b as Ke, m as Me, d as as, p as ze, i as Vs, j as Ge, k as We, l as Is, n as ws, o as Ps, q as ks, v as Rs, t as Fe } from "./rule-B-REsmVM.js";
14
- import { u as ls } from "./role-DkTkfUgR.js";
15
- import { u as os, i as $s } from "./PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-Z-DH7ouY.js";
16
- import { g as Je, b as Xe, u as rs } from "./restaurant-DiYb0pCm.js";
17
- import { _ as Cs } from "./PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BHEW1_dv.js";
18
- var ge = /* @__PURE__ */ ((n) => (n.Update = "Update", n.Remove = "Remove", n))(ge || {});
19
- const Ie = "__unassigned__";
20
- function Ze(n) {
21
- if (!(n != null && n.length) || n[0] === Ie) return n;
22
- const D = n.filter((u) => u !== Ie);
23
- return D.length === n.length ? n : [Ie, ...D];
24
- }
25
- const Ms = { class: "w-full flex flex-col gap-16" }, Ns = { class: "flex items-center gap-16" }, As = { class: "space-y-4 min-w-0 flex-1" }, Es = { class: "text-fm-color-typo-secondary fm-typo-en-body-lg-400" }, Ds = { class: "fm-typo-en-body-lg-600 truncate" }, Os = { class: "w-full flex gap-16 items-center" }, Bs = { class: "flex-1 flex flex-col gap-4 min-w-0" }, js = { class: "text-fm-color-typo-secondary fm-typo-en-body-lg-400" }, Ls = { class: "fm-typo-en-body-lg-600 truncate" }, Ts = { class: "flex-1 flex flex-col gap-4 min-w-0" }, qs = { class: "text-fm-color-typo-secondary fm-typo-en-body-lg-400" }, Ks = { class: "fm-typo-en-body-lg-600 truncate" }, zs = /* @__PURE__ */ we({
26
- __name: "MemberInfo",
27
- props: {
28
- data: {}
29
- },
30
- setup(n) {
31
- const { t: D } = Pe();
32
- return (u, a) => {
33
- const f = F("FmAvatar");
34
- return y(), M("div", Ms, [
35
- i("div", Ns, [
36
- d(f, {
37
- size: "xl",
38
- name: n.data.name
39
- }, null, 8, ["name"]),
40
- i("div", As, [
41
- i("p", Es, k(r(D)("team.memberForm.memberInfo.memberName")), 1),
42
- i("p", Ds, k(n.data.name || "--"), 1)
43
- ])
44
- ]),
45
- i("div", Os, [
46
- i("div", Bs, [
47
- i("p", js, k(r(D)("team.memberForm.memberInfo.mobileNumber")), 1),
48
- i("p", Ls, k(n.data.phoneNumber || "--"), 1)
49
- ]),
50
- i("div", Ts, [
51
- i("p", qs, k(r(D)("team.memberForm.memberInfo.emailAddress")), 1),
52
- i("p", Ks, k(n.data.email || "--"), 1)
53
- ])
54
- ])
55
- ]);
56
- };
57
- }
58
- }), Qe = {
59
- async readPermissionUserByPhoneNo(n) {
60
- return Je(
61
- await Xe().get(
62
- `/portal-users/search-by-phone/${encodeURIComponent(n)}`
63
- )
64
- );
65
- },
66
- async readPermissionUserByEmail(n) {
67
- return Je(
68
- await Xe().get(
69
- `/portal-users/search-by-email/${encodeURIComponent(n)}`
70
- )
71
- );
72
- }
73
- }, Gs = { class: "flex flex-col gap-24 w-full" }, Ws = {
74
- key: 0,
75
- class: "flex flex-col gap-8"
76
- }, Js = { class: "user-info-icon user-info-icon--lg" }, Xs = { class: "flex-1 overflow-hidden" }, Zs = { class: "profile-displayName" }, Qs = { class: "profile-email" }, Ys = { class: "profile-phone" }, Hs = { key: 2 }, et = /* @__PURE__ */ we({
77
- __name: "PortalUserSearcher",
78
- emits: ["invite"],
79
- setup(n, { emit: D }) {
80
- const u = D, { t: a } = Pe(), f = He(), N = Ye(), { supportedCountries: V, ready: R } = os(), se = w(() => {
81
- var l;
82
- const o = (l = N.currentCountry.value) == null ? void 0 : l.toUpperCase();
83
- return o && $s(o) ? o : void 0;
84
- }), g = b("phone"), S = b(""), p = b(""), h = b(), me = /^[^\s@]+@[^\s@]+\.[^\s@]+$/, j = w(() => me.test(p.value.trim()));
85
- async function L() {
86
- const o = g.value === "phone" ? S.value.replace(/ /g, "") : p.value.trim();
87
- if (!o) {
88
- f.open({
89
- type: "error",
90
- title: a("team.memberForm.searchUser.emptyError")
91
- });
92
- return;
93
- }
94
- if (g.value === "email" && !j.value) {
95
- f.open({
96
- type: "error",
97
- title: a("team.memberForm.searchUser.invalidEmail")
98
- });
99
- return;
100
- }
101
- const l = () => {
102
- h.value = void 0, f.open({
103
- type: "error",
104
- title: a("team.memberForm.searchUser.userNotFound")
105
- });
106
- };
107
- try {
108
- const v = g.value === "phone" ? await Qe.readPermissionUserByPhoneNo(o) : await Qe.readPermissionUserByEmail(o);
109
- if (!v) {
110
- l();
111
- return;
112
- }
113
- h.value = v;
114
- } catch {
115
- h.value = void 0, f.open({
116
- type: "error",
117
- title: a("team.memberForm.searchUser.searchFailed")
118
- });
119
- }
120
- }
121
- const $ = w(() => {
122
- var U;
123
- let o = ((U = h.value) == null ? void 0 : U.displayName) ?? "";
124
- o || (o = "Feed Me");
125
- const [l, v] = o.split(" ");
126
- return v ? `${l[0]}${v[0]}` : l.slice(0, 2);
127
- }), A = b(!1);
128
- function W(o) {
129
- u("invite", o), A.value = !0;
130
- }
131
- function te() {
132
- A.value = !1;
133
- }
134
- return (o, l) => {
135
- var B, m, _;
136
- const v = F("FmRadio"), U = F("FmPhoneNumber"), J = F("FmCircularProgress"), X = F("FmTextField"), O = F("FmRadioGroup"), E = F("FmButton");
137
- return y(), M("div", Gs, [
138
- A.value ? K("", !0) : (y(), M("div", Ws, [
139
- d(O, {
140
- modelValue: g.value,
141
- "onUpdate:modelValue": l[2] || (l[2] = (I) => g.value = I)
142
- }, {
143
- default: ue(() => [
144
- d(v, {
145
- value: "phone",
146
- label: r(a)("team.memberForm.searchUser.phoneNumber")
147
- }, null, 8, ["label"]),
148
- g.value === "phone" && r(R) ? (y(), z(U, {
149
- key: 0,
150
- modelValue: S.value,
151
- "onUpdate:modelValue": l[0] || (l[0] = (I) => S.value = I),
152
- "default-country": se.value,
153
- "extra-country-codes": r(V),
154
- class: "ml-8"
155
- }, null, 8, ["modelValue", "default-country", "extra-country-codes"])) : g.value === "phone" ? (y(), z(J, {
156
- key: 1,
157
- class: "ml-8"
158
- })) : K("", !0),
159
- d(v, {
160
- value: "email",
161
- label: r(a)("team.memberForm.searchUser.email")
162
- }, null, 8, ["label"]),
163
- g.value === "email" ? (y(), z(X, {
164
- key: 2,
165
- modelValue: p.value,
166
- "onUpdate:modelValue": l[1] || (l[1] = (I) => p.value = I),
167
- placeholder: r(a)("team.memberForm.searchUser.emailPlaceholder"),
168
- rules: [
169
- (I) => !I || j.value || r(a)("team.memberForm.searchUser.invalidEmail")
170
- ],
171
- class: "ml-8"
172
- }, null, 8, ["modelValue", "placeholder", "rules"])) : K("", !0)
173
- ]),
174
- _: 1
175
- }, 8, ["modelValue"]),
176
- d(E, {
177
- label: r(a)("team.memberForm.searchUser.search"),
178
- variant: "secondary",
179
- onClick: L
180
- }, null, 8, ["label"])
181
- ])),
182
- h.value ? (y(), M("div", {
183
- key: 1,
184
- class: "profile-menu--profile cursor-pointer hover:bg-fm-color-opacity-sm",
185
- onClick: l[3] || (l[3] = (I) => W(h.value))
186
- }, [
187
- i("div", Js, k($.value), 1),
188
- i("div", Xs, [
189
- i("p", Zs, k((B = h.value) == null ? void 0 : B.displayName), 1),
190
- i("p", Qs, k((m = h.value) == null ? void 0 : m.email), 1),
191
- i("p", Ys, k((_ = h.value) == null ? void 0 : _.phoneNumber), 1)
192
- ])
193
- ])) : K("", !0),
194
- A.value ? (y(), M("div", Hs, [
195
- d(E, {
196
- label: r(a)("team.memberForm.searchUser.changeUser"),
197
- variant: "secondary",
198
- onClick: te
199
- }, null, 8, ["label"])
200
- ])) : K("", !0)
201
- ]);
202
- };
203
- }
204
- }), st = /* @__PURE__ */ vs(et, [["__scopeId", "data-v-827dfd60"]]), tt = { class: "flex flex-col gap-40" }, at = { class: "flex items-center" }, lt = { class: "flex-1 flex flex-col" }, ot = { class: "fm-typo-en-title-sm-600" }, rt = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, nt = { class: "flex flex-row gap-16" }, it = { class: "flex flex-col gap-8" }, ut = { class: "fm-typo-en-body-lg-400" }, mt = { class: "space-y-16 rounded-lg border border-fm-color-neutral-gray-200 p-16" }, dt = { class: "fm-typo-en-title-sm-600" }, ct = { class: "space-y-16" }, pt = { class: "grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto] gap-16" }, ft = { class: "text-sm font-semibold text-fm-color-typo-primary" }, vt = { class: "text-sm font-semibold text-fm-color-typo-primary" }, bt = { class: "flex justify-self-end" }, ht = ["aria-label", "onClick", "onKeydown"], Le = 4, yt = /* @__PURE__ */ we({
205
- __name: "TeamMemberMasterUser",
206
- props: {
207
- modelValue: {
208
- type: Object,
209
- default: void 0
210
- },
211
- fallbackName: {
212
- type: String,
213
- required: !0
214
- },
215
- fallbackPasscode: {
216
- type: String,
217
- default: void 0
218
- },
219
- restaurants: {
220
- type: Array,
221
- required: !0
222
- },
223
- roles: {
224
- type: Array,
225
- required: !0
226
- }
227
- },
228
- emits: ["update:model-value"],
229
- setup(n, { emit: D }) {
230
- const u = n, a = D, { t: f } = Pe(), N = b(!0), V = b([]);
231
- function R() {
232
- return { restaurantId: "", roleId: "" };
233
- }
234
- const se = w(
235
- () => {
236
- var o;
237
- return ((o = u.modelValue) == null ? void 0 : o.roles.map((l) => l.restaurantId).filter(Boolean)) ?? [];
238
- }
239
- );
240
- function g(o) {
241
- o ? u.modelValue || a("update:model-value", {
242
- code: "",
243
- name: u.fallbackName,
244
- roles: [R()],
245
- passcode: u.fallbackPasscode || ""
246
- }) : a("update:model-value", null);
247
- }
248
- function S(o, l) {
249
- if (!u.modelValue || o === "passcode" && u.modelValue.passcode === l) return;
250
- const v = he(u.modelValue);
251
- v[o] = l, a("update:model-value", v);
252
- }
253
- function p(o = "") {
254
- return u.restaurants.filter((l) => l.managable || l._id === o).map((l) => ({
255
- label: `${l.profile.code ? `${l.profile.code} - ` : ""}${l.profile.name}`,
256
- value: l._id,
257
- disabled: se.value.includes(l._id) && l._id !== o
258
- }));
259
- }
260
- function h(o = "") {
261
- return u.roles.map((l) => ({
262
- label: l.label,
263
- value: l.value,
264
- disabled: !!l.disabled && l.value !== o
265
- }));
266
- }
267
- function me(o, l) {
268
- var O, E, B;
269
- if (!u.modelValue) return;
270
- const v = u.modelValue.roles.length > 0 ? [...u.modelValue.roles] : [R()], U = ((O = v[o]) == null ? void 0 : O.roleId) ?? "", J = h(U), X = ((E = J.find((m) => m.value === U && !m.disabled)) == null ? void 0 : E.value) ?? ((B = J.find((m) => !m.disabled)) == null ? void 0 : B.value) ?? "";
271
- v[o] = { restaurantId: l, roleId: X }, S("roles", v);
272
- }
273
- function j(o, l) {
274
- var U;
275
- if (!u.modelValue) return;
276
- const v = u.modelValue.roles.length > 0 ? [...u.modelValue.roles] : [R()];
277
- v[o] = {
278
- restaurantId: ((U = v[o]) == null ? void 0 : U.restaurantId) ?? "",
279
- roleId: l
280
- }, S("roles", v);
281
- }
282
- function L() {
283
- u.modelValue && S("roles", [...u.modelValue.roles, R()]);
284
- }
285
- function $(o) {
286
- if (!u.modelValue) return;
287
- const l = u.modelValue.roles.length > 0 ? [...u.modelValue.roles] : [R()];
288
- S(
289
- "roles",
290
- l.length === 1 ? [R()] : l.filter((v, U) => U !== o)
291
- );
292
- }
293
- const A = w(() => {
294
- if (!u.modelValue) return !1;
295
- const o = u.restaurants.some(
296
- (v) => v.managable && !se.value.includes(v._id)
297
- ), l = u.modelValue.roles.every(
298
- (v) => v.restaurantId && v.roleId
299
- );
300
- return o && l;
301
- });
302
- function W() {
303
- N.value && (N.value = !1, V.value = [], S("passcode", ""));
304
- }
305
- fe(
306
- () => {
307
- var o;
308
- return (o = u.modelValue) == null ? void 0 : o.passcode;
309
- },
310
- (o) => {
311
- o && o.length === Le ? (V.value = o.split(""), N.value = !0) : (V.value = [], N.value = !1);
312
- },
313
- { immediate: !0 }
314
- ), fe(
315
- () => {
316
- var o;
317
- return (o = u.modelValue) == null ? void 0 : o.roles;
318
- },
319
- (o) => {
320
- u.modelValue && (!o || o.length === 0) && S("roles", [R()]);
321
- },
322
- { immediate: !0, deep: !0 }
323
- );
324
- const te = w({
325
- get: () => {
326
- var o;
327
- return ((o = u.modelValue) == null ? void 0 : o.roles) ?? [];
328
- },
329
- set: () => {
330
- }
331
- });
332
- return (o, l) => {
333
- const v = F("FmSwitch"), U = F("FmTextField"), J = F("FmPinField"), X = F("FmFormGroup"), O = F("FmSelect"), E = F("FmIcon"), B = F("FmButton");
334
- return y(), M("div", tt, [
335
- i("div", at, [
336
- i("div", lt, [
337
- i("div", ot, k(r(f)("team.memberForm.masterUser.title")), 1),
338
- i("div", rt, k(r(f)("team.memberForm.masterUser.sublabel")), 1)
339
- ]),
340
- i("div", null, [
341
- d(v, {
342
- "model-value": !!n.modelValue,
343
- value: "master-user",
344
- "onUpdate:modelValue": g
345
- }, null, 8, ["model-value"])
346
- ])
347
- ]),
348
- n.modelValue ? (y(), M(Ne, { key: 0 }, [
349
- i("div", nt, [
350
- d(U, {
351
- "model-value": n.modelValue.code,
352
- label: r(f)("team.memberForm.masterUser.code"),
353
- "onUpdate:modelValue": l[0] || (l[0] = (m) => S("code", m))
354
- }, null, 8, ["model-value", "label"]),
355
- d(U, {
356
- "model-value": n.modelValue.name,
357
- class: "w-full",
358
- label: r(f)("team.memberForm.masterUser.name"),
359
- rules: [(m) => !!m || r(f)("team.memberForm.masterUser.nameEmptyError")],
360
- "onUpdate:modelValue": l[1] || (l[1] = (m) => S("name", m))
361
- }, null, 8, ["model-value", "label", "rules"])
362
- ]),
363
- i("div", it, [
364
- i("div", ut, k(r(f)("team.memberForm.masterUser.passcode")), 1),
365
- d(X, {
366
- modelValue: V.value,
367
- "onUpdate:modelValue": l[4] || (l[4] = (m) => V.value = m),
368
- rules: [
369
- (m) => (m == null ? void 0 : m.filter((_) => !!_).length) !== Le ? r(f)("team.memberForm.masterUser.passcodeRequired") : !0
370
- ]
371
- }, {
372
- default: ue(() => [
373
- (y(), z(J, {
374
- key: `pin-field-${N.value}`,
375
- modelValue: V.value,
376
- "onUpdate:modelValue": l[2] || (l[2] = (m) => V.value = m),
377
- length: Le,
378
- masked: N.value,
379
- onComplete: l[3] || (l[3] = (m) => S("passcode", m)),
380
- onFocus: W
381
- }, null, 8, ["modelValue", "masked"]))
382
- ]),
383
- _: 1
384
- }, 8, ["modelValue", "rules"])
385
- ]),
386
- d(X, {
387
- tag: "div",
388
- modelValue: te.value,
389
- "onUpdate:modelValue": l[5] || (l[5] = (m) => te.value = m),
390
- rules: [
391
- (m) => !m || m.length === 0 || m.every((_) => !_.restaurantId) ? r(f)("team.memberForm.masterUser.restaurantRequired") : m.some((_) => !_.restaurantId || !_.roleId) ? r(f)("team.memberForm.masterUser.roleRequired") : !0
392
- ]
393
- }, {
394
- default: ue(() => [
395
- i("div", mt, [
396
- i("div", dt, k(r(f)("team.memberForm.masterUser.assignmentSection")), 1),
397
- i("div", ct, [
398
- i("div", pt, [
399
- i("div", ft, k(r(f)("team.table.columns.restaurant")), 1),
400
- i("div", vt, k(r(f)("team.memberForm.masterUser.role")), 1),
401
- l[6] || (l[6] = i("div", null, null, -1))
402
- ]),
403
- (y(!0), M(Ne, null, us(n.modelValue.roles, (m, _) => (y(), M("div", {
404
- key: `${m.restaurantId || "new"}-${_}`,
405
- class: "grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto] items-center gap-16"
406
- }, [
407
- d(O, {
408
- class: "min-w-0",
409
- "model-value": m.restaurantId,
410
- items: p(m.restaurantId),
411
- multiselect: !1,
412
- placeholder: r(f)("team.table.columns.restaurant"),
413
- "onUpdate:modelValue": (I) => me(_, I)
414
- }, null, 8, ["model-value", "items", "placeholder", "onUpdate:modelValue"]),
415
- d(O, {
416
- class: "min-w-0",
417
- "model-value": m.roleId,
418
- items: h(m.roleId),
419
- multiselect: !1,
420
- placeholder: r(f)("team.memberForm.masterUser.role"),
421
- disabled: !m.restaurantId,
422
- "onUpdate:modelValue": (I) => j(_, I)
423
- }, null, 8, ["model-value", "items", "placeholder", "disabled", "onUpdate:modelValue"]),
424
- i("div", bt, [
425
- n.modelValue.roles.length > 1 ? (y(), M("div", {
426
- key: 0,
427
- role: "button",
428
- tabindex: "0",
429
- class: "inline-flex h-40 w-40 shrink-0 cursor-pointer items-center justify-center rounded-lg text-fm-color-neutral-gray-400 transition-colors hover:bg-fm-color-neutral-gray-100 focus:outline-none focus:ring-2 focus:ring-fm-color-primary",
430
- "aria-label": r(f)("common.remove"),
431
- onClick: Ve((I) => $(_), ["stop"]),
432
- onKeydown: [
433
- Te(Ve((I) => $(_), ["prevent", "stop"]), ["enter"]),
434
- Te(Ve((I) => $(_), ["prevent", "stop"]), ["space"])
435
- ]
436
- }, [
437
- d(E, {
438
- name: "delete",
439
- size: "md"
440
- })
441
- ], 40, ht)) : K("", !0)
442
- ])
443
- ]))), 128))
444
- ]),
445
- d(B, {
446
- type: "button",
447
- variant: "secondary",
448
- "text-color": "primary",
449
- "border-color": "primary",
450
- "prepend-icon": "add",
451
- label: r(f)("team.memberForm.masterUser.addAnother"),
452
- size: "md",
453
- disabled: !A.value,
454
- onClick: Ve(L, ["stop"])
455
- }, null, 8, ["label", "disabled"])
456
- ])
457
- ]),
458
- _: 1
459
- }, 8, ["modelValue", "rules"])
460
- ], 64)) : K("", !0)
461
- ]);
462
- };
463
- }
464
- }), _t = { class: "flex flex-col gap-32" }, gt = { class: "flex w-full" }, Ut = {
465
- key: 0,
466
- class: "space-y-24"
467
- }, xt = { class: "space-y-16 rounded-lg border border-fm-color-neutral-gray-200 p-16" }, St = { class: "fm-typo-en-title-sm-600" }, Ft = { class: "space-y-16" }, Vt = { class: "fm-typo-en-title-sm-600" }, It = {
468
- key: 1,
469
- class: "flex items-center justify-center py-64"
470
- }, wt = /* @__PURE__ */ we({
471
- __name: "AddMemberForm",
472
- props: {
473
- initialValue: {
474
- type: Object
475
- },
476
- roleErrorMessage: {
477
- type: String,
478
- default: ""
479
- },
480
- loading: {
481
- type: Boolean,
482
- default: !1
483
- }
484
- },
485
- setup(n, { expose: D }) {
486
- var Re, le, Z;
487
- const u = n, { t: a } = Pe(), f = es(), { breakpoints: N } = ss(), V = b(), R = ts(), se = w(
488
- () => R.permissionSets.value.map((s) => ({
489
- label: s.name,
490
- value: s.id
491
- }))
492
- ), g = b(((Re = u.initialValue) == null ? void 0 : Re.permissionSetIds) || []), S = w(
493
- () => je(g.value, R.permissionSets.value)
494
- ), p = b((le = u.initialValue) == null ? void 0 : le.posUser), h = b(
495
- Ke(
496
- Me(S.value),
497
- ((Z = u.initialValue) == null ? void 0 : Z.permissions) || []
498
- )
499
- ), { customReportPermissions: me, isLoaded: j } = as(), L = new Set(
500
- ze.filter((s) => s.subject.startsWith(Vs)).map((s) => s.subject)
501
- ), $ = w(() => {
502
- const s = new Set(L);
503
- for (const c of me.value) s.add(c.subject);
504
- return s;
505
- }), A = w(() => {
506
- const s = /* @__PURE__ */ new Set();
507
- for (const c of ze)
508
- c.category === qe.reports && s.add(c.subject);
509
- for (const c of me.value)
510
- c.category === qe.reports && s.add(c.subject);
511
- return s;
512
- }), W = rs(), te = ls().roles, o = w(() => Ge(h.value)), l = w(() => {
513
- const s = We(h.value);
514
- return s === null ? W.restaurants.value : W.restaurants.value.filter((c) => s.includes(c._id));
515
- }), v = w(() => {
516
- const s = o.value;
517
- return te.value.map(
518
- (c) => ({
519
- label: c.name,
520
- value: c._id,
521
- disabled: !!s && !s.includes(c._id)
522
- })
523
- );
524
- }), U = b({ permissionSetIds: [], userPermissions: [], posUser: void 0 });
525
- function J(s) {
526
- V.value = void 0, g.value = [...(s == null ? void 0 : s.permissionSetIds) ?? []], h.value = Ke(
527
- Me(
528
- je(
529
- g.value,
530
- R.permissionSets.value
531
- )
532
- ),
533
- (s == null ? void 0 : s.permissions) || []
534
- ), p.value = s != null && s.posUser ? ve(he(s.posUser), h.value) : void 0, be.value = !!p.value, U.value = {
535
- permissionSetIds: [...g.value],
536
- userPermissions: he(h.value),
537
- posUser: p.value ? he(p.value) : void 0
538
- };
539
- }
540
- function X() {
541
- return !u.initialValue && V.value ? !0 : !Se.isEqual(g.value, U.value.permissionSetIds) || !Se.isEqual(h.value, U.value.userPermissions) || !Se.isEqual(p.value, U.value.posUser);
542
- }
543
- function O(s) {
544
- V.value = s;
545
- }
546
- function E(s) {
547
- p.value = ve(p.value, s);
548
- }
549
- function B(s) {
550
- return Me(
551
- je(s, R.permissionSets.value)
552
- );
553
- }
554
- function m(s) {
555
- h.value = B(s);
556
- }
557
- function _(s) {
558
- const c = [...s ?? []];
559
- if (Se.isEqual(c, g.value)) return;
560
- const T = !Se.isEqual(
561
- h.value,
562
- B(g.value)
563
- );
564
- if (g.value = c, !T) {
565
- m(c);
566
- return;
567
- }
568
- f.open({
569
- title: a("permissionSet.form.overrideInherited.title"),
570
- message: a("permissionSet.form.overrideInherited.message"),
571
- minWidth: N.value.lg ? 588 : 0,
572
- primaryActions: {
573
- text: a("permissionSet.form.overrideInherited.override"),
574
- close: !1
575
- },
576
- secondaryActions: {
577
- text: a("permissionSet.form.overrideInherited.keepCurrent"),
578
- close: !0
579
- }
580
- }).onPrimary(() => {
581
- m(c), f.close();
582
- });
583
- }
584
- function I() {
585
- const s = j.value ? $.value : L, c = Ps(h.value, s);
586
- return ks(c, A.value);
587
- }
588
- function Ae() {
589
- const s = Me(S.value), c = Is(I());
590
- return ws(s, c);
591
- }
592
- function ke() {
593
- var T, G, Q, q, ce, Y, H, oe, pe, $e;
594
- const s = Ae(), c = I().filter((re) => !re.inverted);
595
- return {
596
- email: ((T = V.value) == null ? void 0 : T.email) ?? void 0,
597
- phoneNumber: ((G = V.value) == null ? void 0 : G.phoneNumber) ?? void 0,
598
- customPermissions: s,
599
- permissions: c.map((re) => ({
600
- ...re,
601
- subject: bs(re.subject)
602
- })),
603
- permissionSetIds: g.value,
604
- name: ((Q = V.value) == null ? void 0 : Q.displayName) || ((q = u.initialValue) == null ? void 0 : q.name) || "",
605
- posUser: p.value ? {
606
- ...p.value,
607
- name: p.value.name || ((Y = (ce = u.initialValue) == null ? void 0 : ce.posUser) == null ? void 0 : Y.name) || ((H = u.initialValue) == null ? void 0 : H.name) || ((oe = V.value) == null ? void 0 : oe.displayName) || "",
608
- code: p.value.code || (($e = (pe = u.initialValue) == null ? void 0 : pe.posUser) == null ? void 0 : $e.code) || "",
609
- passcode: p.value.passcode,
610
- roles: p.value.roles.filter((re) => !!re.roleId)
611
- } : p.value === null ? null : void 0
612
- };
613
- }
614
- const ae = b();
615
- function ve(s, c) {
616
- if (!s) return s;
617
- const T = Ge(c), G = We(c);
618
- if (T === null && G === null) return s;
619
- const Q = he(s);
620
- return Q.roles = Q.roles.filter(
621
- (q) => (T === null || T.includes(q.roleId)) && (G === null || G.includes(q.restaurantId))
622
- ), Q;
623
- }
624
- const be = b(!!p.value), de = b(!1);
625
- function Ee(s) {
626
- p.value = s, de.value = !0;
627
- }
628
- fe(
629
- () => !!p.value,
630
- async (s) => {
631
- s && !be.value && de.value && (await ms(), ae.value && ae.value.$el.scrollIntoView({ behavior: "smooth", block: "start" })), be.value = s;
632
- }
633
- );
634
- const Ue = b();
635
- async function De() {
636
- return (await Ue.value.validateInputsWithoutSubmit()).length ? null : ke();
637
- }
638
- return fe(
639
- () => u.initialValue,
640
- (s, c) => {
641
- if (!c || !s || c.id !== s.id) {
642
- de.value = !1, J(s);
643
- return;
644
- }
645
- s.posUser !== void 0 && !de.value && (p.value = s.posUser ? ve(he(s.posUser), h.value) : void 0, U.value = {
646
- ...U.value,
647
- posUser: p.value ? he(p.value) : void 0
648
- });
649
- },
650
- { immediate: !0 }
651
- ), fe(
652
- h,
653
- (s) => {
654
- p.value = ve(p.value, s);
655
- },
656
- { deep: !0 }
657
- ), D({
658
- readFormData: ke,
659
- validate: De,
660
- isModified: X
661
- }), (s, c) => {
662
- const T = F("FmSelect"), G = F("FmCircularProgress"), Q = F("FmForm");
663
- return y(), z(Q, {
664
- ref_key: "formRef",
665
- ref: Ue,
666
- class: "mx-4"
667
- }, {
668
- default: ue(() => {
669
- var q, ce, Y, H, oe;
670
- return [
671
- i("div", _t, [
672
- i("div", gt, [
673
- n.initialValue ? (y(), z(zs, {
674
- key: 1,
675
- data: n.initialValue
676
- }, null, 8, ["data"])) : (y(), z(st, {
677
- key: 0,
678
- onInvite: c[0] || (c[0] = (pe) => O(pe))
679
- }))
680
- ]),
681
- V.value || n.initialValue ? (y(), M(Ne, { key: 0 }, [
682
- (q = n.initialValue) != null && q.isOwner ? K("", !0) : (y(), M("div", Ut, [
683
- i("div", xt, [
684
- i("div", St, k(r(a)("team.memberForm.permissionSet.title")), 1),
685
- d(T, {
686
- "model-value": g.value,
687
- multiselect: "",
688
- searchable: "",
689
- "search-debounce": 300,
690
- items: se.value,
691
- placeholder: r(a)("team.memberForm.permissionSet.selectPlaceholder"),
692
- "onUpdate:modelValue": _
693
- }, null, 8, ["model-value", "items", "placeholder"])
694
- ]),
695
- i("div", Ft, [
696
- i("div", Vt, k(r(a)("team.memberForm.permissions.title")), 1),
697
- d(Cs, {
698
- modelValue: h.value,
699
- "onUpdate:modelValue": c[1] || (c[1] = (pe) => h.value = pe),
700
- "inherit-permissions": S.value,
701
- onPermissionChanged: E
702
- }, null, 8, ["modelValue", "inherit-permissions"])
703
- ])
704
- ])),
705
- n.loading ? (y(), M("div", It, [
706
- d(G, { size: "xl" })
707
- ])) : (y(), z(yt, {
708
- key: 2,
709
- ref_key: "masterUserContentRef",
710
- ref: ae,
711
- "model-value": p.value,
712
- "fallback-name": ((ce = n.initialValue) == null ? void 0 : ce.name) || ((Y = V.value) == null ? void 0 : Y.displayName) || "",
713
- "fallback-passcode": (oe = (H = n.initialValue) == null ? void 0 : H.posUser) == null ? void 0 : oe.passcode,
714
- roles: v.value,
715
- restaurants: l.value,
716
- "onUpdate:modelValue": Ee
717
- }, null, 8, ["model-value", "fallback-name", "fallback-passcode", "roles", "restaurants"]))
718
- ], 64)) : K("", !0)
719
- ])
720
- ];
721
- }),
722
- _: 1
723
- }, 512);
724
- };
725
- }
726
- }), Pt = {
727
- class: "space-y-24"
728
- }, kt = {
729
- class: "space-y-8"
730
- }, Rt = {
731
- key: 0,
732
- class: "flex w-full items-start justify-between px-16"
733
- }, $t = {
734
- class: "flex items-start gap-8"
735
- }, Ct = {
736
- key: 1,
737
- class: "space-y-4 px-16"
738
- }, Mt = {
739
- class: "flex items-start gap-8"
740
- }, Nt = {
741
- class: "flex h-full flex-col overflow-auto"
742
- }, At = {
743
- class: "flex w-full items-center justify-between"
744
- }, Et = {
745
- class: "fm-typo-en-title-md-600"
746
- }, Dt = {
747
- class: "flex items-center justify-start gap-8"
748
- }, _e = 100;
749
- var ee = /* @__PURE__ */ function(n) {
750
- return n[n.ADD = 0] = "ADD", n[n.UPDATE = 1] = "UPDATE", n[n.CLOSED = 2] = "CLOSED", n;
751
- }(ee || {});
752
- const sa = /* @__PURE__ */ we({
753
- __name: "TeamMemberList",
754
- setup(n, {
755
- expose: D
756
- }) {
757
- const {
758
- fetchCustomReportPermissions: u
759
- } = as();
760
- os();
761
- const {
762
- t: a
763
- } = Pe(), f = Ye(), N = rs(), V = ls(), R = He(), se = Fs(R), g = ts(), S = Rs(), p = b(!0), h = b(!1), me = w(() => N.isLoading.value), j = b([]), L = b(0), $ = b(1), A = b(""), W = b("");
764
- fe(N.restaurants, (e) => {
765
- if (e.length > 0 && j.value.length > 0) {
766
- const t = new Map(e.map((P) => [P._id, P.profile.name])), x = e.map((P) => P.profile.name).sort();
767
- j.value = j.value.map((P) => ({
768
- ...P,
769
- restaurants: P.managableRestaurantIds === null ? x : P.managableRestaurantIds.map((ne) => t.get(ne) ?? "").filter(Boolean).sort()
770
- }));
771
- }
772
- });
773
- const te = w(() => [{
774
- label: a("team.filter.unassigned_label"),
775
- value: Ie
776
- }, ...N.restaurants.value.map((e) => ({
777
- label: `${e.profile.code ? `${e.profile.code} - ` : ""}${e.profile.name}`,
778
- value: e._id
779
- }))]), o = ({
780
- member: e,
781
- className: t = ""
782
- }) => {
783
- const x = {
784
- label: a("team.actions.updateMember"),
785
- onClick: () => B(ge.Update, e)
786
- }, P = {
787
- label: a("team.actions.removeMember"),
788
- onClick: () => B(ge.Remove, e),
789
- itemClass: "text-fm-color-typo-error"
790
- }, ne = e.doc.isOwner ? [x] : [x, P];
791
- return d(Us, {
792
- class: t,
793
- items: ne
794
- }, null);
795
- }, l = (e) => e.doc.isOwner ? a("team.labels.businessOwner") : e.restaurants.join(", "), v = [{
796
- accessorKey: "name",
797
- header: () => a("team.table.columns.name"),
798
- enableSorting: !1,
799
- cell(e) {
800
- const t = e.row.original;
801
- return d("div", {
802
- class: "flex items-center gap-8"
803
- }, [d(Be.FmAvatar, {
804
- name: t.name,
805
- size: "sm",
806
- class: "shrink-0"
807
- }, null), d("span", {
808
- class: "truncate"
809
- }, [t.name])]);
810
- }
811
- }, {
812
- accessorKey: "phoneNumber",
813
- header: () => a("team.table.columns.phoneNumber"),
814
- enableSorting: !1
815
- }, {
816
- accessorKey: "restaurant",
817
- header: () => a("team.table.columns.restaurant"),
818
- enableSorting: !1,
819
- cell(e) {
820
- if (me.value)
821
- return cs(Ss);
822
- const t = e.row.original;
823
- return l(t);
824
- }
825
- }, {
826
- accessorKey: "assignedRoles",
827
- header: () => a("team.table.columns.assignedRoles"),
828
- enableSorting: !1,
829
- cell(e) {
830
- const t = e.row.original, x = S.getPermissionAssignmentByUserId(t.id), P = (x == null ? void 0 : x.permissionSetIds) || t.doc.permissionSetIds || [];
831
- return g.permissionSets.value.filter((ie) => P.includes(ie.id)).map((ie) => ie.name).join(", ");
832
- }
833
- }, {
834
- accessorKey: "permission",
835
- header: () => a("team.table.columns.permission"),
836
- enableSorting: !1,
837
- cell(e) {
838
- const t = e.row.original;
839
- return U(t);
840
- },
841
- meta: {
842
- width: "200px"
843
- }
844
- }, {
845
- id: "action",
846
- meta: {
847
- cellClass: "pl-16",
848
- headerContentClass: "-mx-16"
849
- },
850
- cell(e) {
851
- const t = e.row.original;
852
- return o({
853
- member: t,
854
- className: "flex justify-end w-full"
855
- });
856
- },
857
- enableSorting: !1
858
- }];
859
- function U(e) {
860
- if (e.doc.isOwner)
861
- return a("team.labels.businessOwner");
862
- const t = d(Be.FmTooltip, {
863
- variant: "plain",
864
- placement: "top"
865
- }, {
866
- default: () => d(Be.FmIcon, {
867
- name: "info",
868
- class: "cursor-pointer text-fm-color-neutral-gray-300"
869
- }, null),
870
- content: () => d("div", null, [a("team.labels.permission"), e.permissionLabels.map((x) => d("div", null, [ps("- "), x]))])
871
- });
872
- return d("div", {
873
- class: "flex flex-row items-center gap-8"
874
- }, [d("span", null, [a("team.labels.allowed", {
875
- count: e.permissionLabels.length
876
- })]), e.permissionLabels.length > 0 && t]);
877
- }
878
- function J(e) {
879
- var ne, ie, Ce, xe;
880
- const t = S.getPermissionAssignmentByUserId(e.id), x = (t == null ? void 0 : t.customPermissions) ?? e.permissions ?? [], P = (t == null ? void 0 : t.permissionSetIds) ?? e.doc.permissionSetIds ?? [];
881
- return {
882
- id: e.id,
883
- isOwner: e.doc.isOwner,
884
- name: e.name,
885
- phoneNumber: e.phoneNumber,
886
- email: e.email,
887
- permissions: x,
888
- permissionSetIds: P,
889
- posUser: e.doc.posUser ? {
890
- code: ((ne = e.doc.posUser) == null ? void 0 : ne.code) ?? "",
891
- name: ((ie = e.doc.posUser) == null ? void 0 : ie.name) ?? e.name,
892
- passcode: ((Ce = e.doc.posUser) == null ? void 0 : Ce.passcode) ?? "",
893
- roles: ((xe = e.doc.posUser) == null ? void 0 : xe.roles) ?? []
894
- } : void 0
895
- };
896
- }
897
- function X(e) {
898
- const t = S.getPermissionAssignmentByUserId(e.id), x = (t == null ? void 0 : t.customPermissions) ?? e.permissions ?? [], P = (t == null ? void 0 : t.permissionSetIds) ?? e.doc.permissionSetIds ?? [];
899
- return {
900
- id: e.id,
901
- isOwner: e.doc.isOwner,
902
- name: e.name,
903
- phoneNumber: e.phoneNumber,
904
- email: e.email,
905
- permissions: x,
906
- permissionSetIds: P,
907
- posUser: void 0
908
- };
909
- }
910
- const O = b(!1);
911
- let E = 0;
912
- const B = async (e, t) => {
913
- if (e == ge.Update) {
914
- const x = ++E;
915
- ae.value = X(t), _.value = ee.UPDATE, O.value = t.doc.hasPosUser === !0;
916
- try {
917
- const P = await Fe.readTeamMember(t.id);
918
- if (x !== E) return;
919
- ae.value = J(P);
920
- } catch {
921
- if (x !== E) return;
922
- R.open({
923
- message: a("common.error"),
924
- type: "error"
925
- }), de();
926
- } finally {
927
- x === E && (O.value = !1);
928
- }
929
- }
930
- e == ge.Remove && De(t);
931
- }, m = es(), _ = b(ee.CLOSED), I = w(() => _.value !== ee.CLOSED), Ae = w(() => _.value === ee.ADD ? a("common.add") : a("common.update")), ke = w(() => _.value === ee.ADD ? a("team.actions.addMember") : a("team.actions.updateMember")), ae = b();
932
- function ve() {
933
- E++, O.value = !1, _.value = ee.CLOSED;
934
- }
935
- const be = gs(() => {
936
- var e;
937
- return ((e = Y.value) == null ? void 0 : e.isModified()) ?? !1;
938
- }, ve);
939
- function de() {
940
- be();
941
- }
942
- function Ee(e) {
943
- e || de();
944
- }
945
- const {
946
- breakpoints: Ue
947
- } = ss(), De = (e) => {
948
- m.open({
949
- title: a("team.actions.removeMember"),
950
- message: a("team.removeMember.confirmationMessage", {
951
- memberName: e.name
952
- }),
953
- minWidth: Ue.value.lg ? 588 : 0,
954
- primaryActions: {
955
- text: "Remove",
956
- close: !1,
957
- variant: "destructive",
958
- isLoading: oe
959
- },
960
- secondaryActions: {
961
- text: "Cancel",
962
- close: !0
963
- }
964
- }).onPrimary(async () => {
965
- oe.value || (await se.minor(async () => {
966
- await Fe.deleteTeamMember(e.id), await ce();
967
- }, {
968
- isLoading: oe,
969
- successMessage: a("team.removeMember.successMessage", {
970
- memberName: e.name
971
- })
972
- }), m.close());
973
- });
974
- }, Re = () => {
975
- ae.value = null, _.value = ee.ADD;
976
- }, le = b(), Z = b(), s = b(), c = w(() => {
977
- var e;
978
- return JSON.stringify({
979
- businessId: ((e = f.currentBusiness.value) == null ? void 0 : e._id) ?? "",
980
- search: W.value.trim(),
981
- restaurantIds: [...le.value ?? []].sort(),
982
- permissionSubjects: [...Z.value ?? []].sort(),
983
- permissionSetIds: [...s.value ?? []].sort()
984
- });
985
- }), T = w(() => Object.values(hs).map((e) => ({
986
- label: e.label,
987
- value: e.subject
988
- }))), G = w(() => [{
989
- label: a("team.filter.unassigned_label"),
990
- value: Ie
991
- }, ...g.permissionSets.value.map((e) => ({
992
- label: e.name,
993
- value: e.id
994
- }))]);
995
- async function Q() {
996
- await V.readRoles();
997
- }
998
- async function q(e = $.value) {
999
- var t;
1000
- p.value = !0;
1001
- try {
1002
- const x = await Fe.readTeamMembersPage({
1003
- limit: _e,
1004
- offset: (e - 1) * _e,
1005
- search: W.value.trim() || void 0,
1006
- restaurantIds: Ze(le.value),
1007
- permissionSubjects: (t = Z.value) != null && t.length ? Z.value : void 0,
1008
- permissionSetIds: Ze(s.value)
1009
- });
1010
- j.value = x.items, L.value = x.total;
1011
- } finally {
1012
- p.value = !1;
1013
- }
1014
- }
1015
- async function ce() {
1016
- var t;
1017
- if (!((t = f.currentBusiness.value) != null && t._id)) return;
1018
- await q($.value);
1019
- const e = Math.max(1, Math.ceil(L.value / _e));
1020
- $.value > e && ($.value = e, await q($.value));
1021
- }
1022
- const Y = b(), H = b(!1), oe = b(!1);
1023
- async function pe() {
1024
- if (!Y.value) return;
1025
- const e = await Y.value.validate();
1026
- if (!e) return;
1027
- const t = _.value === ee.ADD;
1028
- await se.minor(async () => {
1029
- await (t ? Fe.createTeamMember(e) : Fe.updateTeamMember(ae.value.id, e)), ve(), await re(), await ce();
1030
- }, {
1031
- successMessage: t ? a("team.addMember.successMessage", {
1032
- memberName: e.name
1033
- }) : a("team.updateMember.successMessage", {
1034
- memberName: e.name
1035
- }),
1036
- isLoading: H
1037
- }), _.value = ee.CLOSED;
1038
- }
1039
- async function $e() {
1040
- await g.readPermissionSets();
1041
- }
1042
- async function re() {
1043
- await S.readPermissionAssignments();
1044
- }
1045
- let Oe = !1;
1046
- async function ns({
1047
- pageIndex: e
1048
- }) {
1049
- var t;
1050
- if ((t = f.currentBusiness.value) != null && t._id && !Oe && !(e === 0 && $.value === 1 && j.value.length > 0)) {
1051
- Oe = !0, $.value = e + 1;
1052
- try {
1053
- await q($.value);
1054
- } finally {
1055
- Oe = !1;
1056
- }
1057
- }
1058
- }
1059
- const is = fs(A, () => {
1060
- W.value = A.value;
1061
- });
1062
- return ds(is), fe(c, async () => {
1063
- var e;
1064
- $.value = 1, h.value = !1, (e = f.currentBusiness.value) != null && e._id && (await q(1), h.value = !0);
1065
- }, {
1066
- immediate: !0
1067
- }), fe(f.currentBusiness, async () => {
1068
- var e;
1069
- if ((e = f.currentBusiness.value) != null && e._id)
1070
- try {
1071
- await Promise.all([N.readRestaurants(), $e(), re(), u(), Q()]);
1072
- } catch (t) {
1073
- console.error("Failed to load team member dependencies:", t), R.open({
1074
- message: t instanceof Error ? t.message : String(t),
1075
- type: "error"
1076
- });
1077
- }
1078
- }, {
1079
- immediate: !0
1080
- }), D({
1081
- create: Re
1082
- }), (e, t) => {
1083
- var xe;
1084
- const x = F("FmSearch"), P = F("FmTable"), ne = F("FmIcon"), ie = F("FmButton"), Ce = F("FmSideSheet");
1085
- return y(), M(Ne, null, [i("div", Pt, [i("div", kt, [r(Ue).xs ? (y(), M("div", Ct, [d(x, {
1086
- modelValue: A.value,
1087
- "onUpdate:modelValue": t[4] || (t[4] = (C) => A.value = C),
1088
- class: "w-[320px] xs:w-full xs:mt-8",
1089
- placeholder: r(a)("team.search.placeholder")
1090
- }, null, 8, ["modelValue", "placeholder"]), i("div", Mt, [d(ye, {
1091
- modelValue: le.value,
1092
- "onUpdate:modelValue": t[5] || (t[5] = (C) => le.value = C),
1093
- multiple: "",
1094
- items: te.value,
1095
- variant: "dark",
1096
- "selected-prefix": r(a)("team.table.columns.restaurant"),
1097
- placeholder: r(a)("team.table.columns.restaurant"),
1098
- class: "!w-auto"
1099
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"]), d(ye, {
1100
- modelValue: Z.value,
1101
- "onUpdate:modelValue": t[6] || (t[6] = (C) => Z.value = C),
1102
- multiple: "",
1103
- variant: "dark",
1104
- items: T.value,
1105
- "selected-prefix": r(a)("team.filter.selected_permission_prefix"),
1106
- placeholder: r(a)("team.filter.permission_placeholder")
1107
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"]), d(ye, {
1108
- modelValue: s.value,
1109
- "onUpdate:modelValue": t[7] || (t[7] = (C) => s.value = C),
1110
- multiple: "",
1111
- variant: "dark",
1112
- items: G.value,
1113
- "selected-prefix": r(a)("team.filter.selected_assigned_role_prefix"),
1114
- placeholder: r(a)("team.filter.assigned_role_placeholder")
1115
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"])])])) : (y(), M("div", Rt, [i("div", $t, [d(ye, {
1116
- modelValue: le.value,
1117
- "onUpdate:modelValue": t[0] || (t[0] = (C) => le.value = C),
1118
- multiple: "",
1119
- items: te.value,
1120
- variant: "dark",
1121
- "selected-prefix": r(a)("team.table.columns.restaurant"),
1122
- placeholder: r(a)("team.table.columns.restaurant"),
1123
- class: "!w-auto"
1124
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"]), d(ye, {
1125
- modelValue: Z.value,
1126
- "onUpdate:modelValue": t[1] || (t[1] = (C) => Z.value = C),
1127
- multiple: "",
1128
- variant: "dark",
1129
- items: T.value,
1130
- "selected-prefix": r(a)("team.filter.selected_permission_prefix"),
1131
- placeholder: r(a)("team.filter.permission_placeholder")
1132
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"]), d(ye, {
1133
- modelValue: s.value,
1134
- "onUpdate:modelValue": t[2] || (t[2] = (C) => s.value = C),
1135
- multiple: "",
1136
- variant: "dark",
1137
- items: G.value,
1138
- "selected-prefix": r(a)("team.filter.selected_assigned_role_prefix"),
1139
- placeholder: r(a)("team.filter.assigned_role_placeholder")
1140
- }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"])]), d(x, {
1141
- modelValue: A.value,
1142
- "onUpdate:modelValue": t[3] || (t[3] = (C) => A.value = C),
1143
- class: "w-[320px] xs:w-full xs:mt-8",
1144
- autofocus: "",
1145
- placeholder: r(a)("team.search.placeholder")
1146
- }, null, 8, ["modelValue", "placeholder"])])), (xe = r(f).currentBusiness.value) != null && xe._id ? (y(), z(ys, {
1147
- key: 2
1148
- }, {
1149
- default: ue(() => [i("div", Nt, [h.value ? K("", !0) : (y(), z(_s, {
1150
- key: 0
1151
- })), h.value ? (y(), z(xs, {
1152
- key: 1,
1153
- "is-loading": p.value,
1154
- "is-empty": L.value === 0,
1155
- title: r(a)("team.emptyState.title"),
1156
- subtitle: r(a)("team.emptyState.description")
1157
- }, {
1158
- default: ue(() => [(y(), z(P, {
1159
- key: c.value,
1160
- "column-defs": v,
1161
- "row-data": j.value,
1162
- "page-size": _e,
1163
- "page-count": Math.ceil(L.value / _e),
1164
- "row-count": L.value,
1165
- "fetch-fn": ns,
1166
- "hide-footer": L.value <= _e,
1167
- loading: p.value,
1168
- "pin-header-row": "",
1169
- onRowClick: t[8] || (t[8] = (C) => B(r(ge).Update, C.original))
1170
- }, null, 8, ["row-data", "page-count", "row-count", "hide-footer", "loading"]))]),
1171
- _: 1
1172
- }, 8, ["is-loading", "is-empty", "title", "subtitle"])) : K("", !0)])]),
1173
- _: 1
1174
- })) : K("", !0)])]), d(Ce, {
1175
- "model-value": I.value,
1176
- "max-width": 960,
1177
- "close-button": !1,
1178
- "onUpdate:modelValue": Ee,
1179
- "onOn:clickedAway": r(be)
1180
- }, {
1181
- "side-sheet-header": ue(() => [i("div", At, [i("p", Et, k(ke.value), 1), d(ne, {
1182
- name: "close",
1183
- size: "md",
1184
- class: "cursor-pointer",
1185
- onClick: r(be)
1186
- }, null, 8, ["onClick"])])]),
1187
- "side-sheet-footer": ue(() => [i("div", Dt, [d(ie, {
1188
- label: Ae.value,
1189
- size: "md",
1190
- variant: "primary",
1191
- "is-loading": H.value,
1192
- disabled: H.value,
1193
- onClick: Ve(pe, ["prevent"])
1194
- }, null, 8, ["label", "is-loading", "disabled"]), d(ie, {
1195
- label: r(a)("common.cancel"),
1196
- size: "md",
1197
- variant: "secondary",
1198
- disabled: H.value,
1199
- onClick: de
1200
- }, null, 8, ["label", "disabled"])])]),
1201
- default: ue(() => [I.value ? (y(), z(wt, {
1202
- key: 0,
1203
- ref_key: "memberForm",
1204
- ref: Y,
1205
- initialValue: ae.value,
1206
- loading: O.value,
1207
- class: "gap-8"
1208
- }, null, 8, ["initialValue", "loading"])) : K("", !0)]),
1209
- _: 1
1210
- }, 8, ["model-value", "onOn:clickedAway"])], 64);
1211
- };
1212
- }
1213
- });
1214
- export {
1215
- sa as default
1216
- };