@feedmepos/mf-hrm-portal 2.3.2-dev.3 → 2.3.2-dev.5

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