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

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 (167) hide show
  1. package/dist/{ApprovalCodeList-DgcWZ3SZ.js → ApprovalCodeList-BsDMMSIz.js} +4 -4
  2. package/dist/{AuditLogList-vWKMMGvd.js → AuditLogList-CGNZdtmn.js} +18 -17
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DuhXogXK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C6MoToqi.js} +2 -2
  4. package/dist/EmployeeList-B_OuDWWQ.js +787 -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-Bd0lXmFo.js} +5 -5
  7. package/dist/{Main-NzpdRNB3.js → Main-B66lSeOv.js} +5 -5
  8. package/dist/{Main-Wr6cTqfM.js → Main-CzHSNHsH.js} +2 -2
  9. package/dist/{Main-B7Nn8CLQ.js → Main-njRQ1tFk.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-GTI6Cwj5.js} +18 -18
  12. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Bzq2_BMn.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C-QEQ-js.js} +1052 -1052
  13. package/dist/{RoleList-BuqpmXn_.js → RoleList-CmHgtM0m.js} +7 -7
  14. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-SFqxftRx.js +426 -0
  15. package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-CrWfo-zF.js +690 -0
  16. package/dist/ScheduleGeneralPage-DxFxJN5j.js +320 -0
  17. package/dist/SchedulePage-cJDI3-E7.js +14647 -0
  18. package/dist/SchedulePositionPage-n1wUShIM.js +293 -0
  19. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +242 -0
  20. package/dist/SelectFilter-CG13h83-.js +264 -0
  21. package/dist/TeamMemberList-ByZt3VqN.js +1154 -0
  22. package/dist/{TimesheetList-B5FyVyCz.js → TimesheetList-Dv0-W--W.js} +54 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C99Jr6Ax.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DIo6h5-a.js} +2 -2
  24. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  25. package/dist/{app-8samJY5z.js → app-SCXGJ95F.js} +3146 -2553
  26. package/dist/app.js +1 -1
  27. package/dist/{dayjs.min-Ba4X_9nY.js → dayjs.min-DqMLPYv-.js} +1 -1
  28. package/dist/{employee-BcFgm8Rt.js → employee-DT_xYQkz.js} +3 -3
  29. package/dist/{iteration-Dhdew1jW.js → iteration-B5dB9ecy.js} +1 -1
  30. package/dist/{lodash-CJ3mHku0.js → lodash-CRHFapxI.js} +1 -1
  31. package/dist/{role-BViYS7RK.js → role-CJm8pXaw.js} +1 -1
  32. package/dist/{rule-Dxt1ZSQS.js → rule-AJm-eVzJ.js} +276 -272
  33. package/dist/src/api/schedule/index.d.ts +41 -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 +3 -0
  43. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +3 -0
  44. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +3 -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 +10 -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 +10 -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/ScheduleAddPositionModal.vue.d.ts +6 -0
  53. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
  54. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
  55. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +10 -0
  57. package/dist/src/views/scheduling/components/ScheduleButton.vue.d.ts +23 -0
  58. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
  59. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
  60. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
  61. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
  62. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
  63. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
  64. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
  65. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
  66. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
  67. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
  68. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
  69. package/dist/src/views/scheduling/components/ScheduleEmployeeMenu.vue.d.ts +6 -0
  70. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
  71. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
  72. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
  73. package/dist/src/views/scheduling/components/ScheduleGridSkeleton.vue.d.ts +2 -0
  74. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +8 -0
  75. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
  76. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
  77. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +9 -0
  78. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
  79. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
  80. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
  81. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
  82. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +54 -0
  83. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
  84. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
  85. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +35 -0
  86. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +10 -0
  87. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
  88. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
  89. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +16 -0
  90. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
  91. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
  92. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
  93. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
  94. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +18 -0
  95. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +60 -0
  96. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
  97. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
  98. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
  99. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +20 -0
  100. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +72 -0
  101. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
  102. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
  103. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
  104. package/dist/src/views/scheduling/composables/schedule-popover-position.d.ts +16 -0
  105. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
  106. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
  107. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +21 -0
  108. package/dist/src/views/scheduling/composables/useCollapsedList.d.ts +9 -0
  109. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +98 -0
  110. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +73 -0
  111. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
  112. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
  113. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
  114. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +122 -0
  115. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +143 -0
  116. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +426 -0
  117. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
  118. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
  119. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +19 -0
  120. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
  121. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
  122. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +77 -0
  123. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +76 -0
  124. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
  125. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +145 -0
  126. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
  127. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +41 -0
  128. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +35 -0
  129. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
  130. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
  131. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
  132. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +82 -0
  133. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +70 -0
  134. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
  135. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
  136. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1316 -0
  137. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
  138. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +20 -0
  139. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +50 -0
  140. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
  141. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +93 -0
  142. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +27 -0
  143. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +189 -0
  144. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
  145. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
  146. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +163 -0
  147. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +181 -0
  148. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +23 -0
  149. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
  150. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +49 -0
  151. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
  152. package/dist/src/views/scheduling/composables/useScheduleViewportFit.d.ts +9 -0
  153. package/dist/src/views/scheduling/data.d.ts +110 -0
  154. package/dist/src/views/scheduling/locales/index.d.ts +496 -0
  155. package/dist/src/views/scheduling/schedule-store.d.ts +151 -0
  156. package/dist/src/views/scheduling/types.d.ts +324 -0
  157. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  158. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  159. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +12 -3
  160. package/dist/style.css +1 -1
  161. package/dist/tsconfig.app.tsbuildinfo +1 -1
  162. package/dist/{useReportPermissions-BiyAfGvZ.js → useReportPermissions-Cg3lV70m.js} +3 -3
  163. package/package.json +1 -1
  164. package/dist/EmployeeList-Cu4RxVQX.js +0 -889
  165. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-BUI0Xsgc.js +0 -85
  166. package/dist/SelectFilter-ATOm0hdn.js +0 -269
  167. package/dist/TeamMemberList-M6HA9BWu.js +0 -1248
@@ -0,0 +1,1154 @@
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-SCXGJ95F.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-CRHFapxI.js";
13
+ import { c as he } from "./iteration-B5dB9ecy.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-AJm-eVzJ.js";
15
+ import { u as as } from "./role-CJm8pXaw.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-C-QEQ-js.js";
20
+ import { _ as Ns } from "./_plugin-vue_export-helper-CHgC5LLL.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 && $s(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__ */ 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({
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(Is)).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 = ks(f.value, s);
519
+ return Rs(c, w.value);
520
+ }
521
+ function Me() {
522
+ const s = $e(C.value), c = ws(O());
523
+ return Vs(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: vs(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(Ms, {
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 = Cs(), 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 = ys(() => {
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(fs).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(bs, {
1085
+ key: 2
1086
+ }, {
1087
+ default: ie(() => [u("div", kt, [f.value ? q("", !0) : (y(), G(hs, {
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
+ };