@feedmepos/mf-hrm-portal 2.2.5-dev → 2.2.5-dev.4

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