@feedmepos/mf-hrm-portal 2.1.0-dev.3 → 2.1.1-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AuditLogList-C8VefmfL.js → AuditLogList-Cvp-5_0y.js} +4 -4
- package/dist/{ConditionFormHost.vue_vue_type_script_setup_true_lang-B25U2YoL.js → ConditionFormHost.vue_vue_type_script_setup_true_lang-Cb8-YaiH.js} +104 -100
- package/dist/{EmployeeList-DDY8DxQr.js → EmployeeList-DgrD3Hjm.js} +6 -6
- package/dist/{Main-D8zj09ZS.js → Main-BLRr_ORG.js} +9 -9
- package/dist/{Main-BQ36wEVl.js → Main-G3am-0Xi.js} +4 -4
- package/dist/{Main-D7xrzW8p.js → Main-mTxcltDY.js} +6 -6
- package/dist/{PermissionSetList-zdFnxyCb.js → PermissionSetList-OzyfE-Yg.js} +6 -6
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Ca2NnAAF.js +4121 -0
- package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_a439fdd8_lang-DqY-OTuj.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_79737e32_lang-Czo3FLbc.js} +2 -1
- package/dist/{RoleList-CRYU_eRb.js → RoleList-DOZ5RJ6A.js} +8 -8
- package/dist/TeamMemberList-CAqLUyQK.js +1186 -0
- package/dist/{TimesheetList-C00-tU7K.js → TimesheetList-D21j4zLV.js} +6 -6
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-dT_CJJDV.js → TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-CRmmIfTk.js} +2 -2
- package/dist/{app-C-wWQrRY.js → app-CX-St7pv.js} +300 -284
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-Bk9YhjTx.js → dayjs.min-MDoe5X-P.js} +1 -1
- package/dist/{employee-DzKKMXNo.js → employee-B2cdx2t4.js} +3 -3
- package/dist/{iteration-BV93u72h.js → iteration-B38iapI_.js} +1 -1
- package/dist/{lodash-psyQLJ6h.js → lodash-DZAGPZLQ.js} +1 -1
- package/dist/{rule-mNiIG4E8.js → rule-DftQBR76.js} +17 -13
- package/dist/src/composables/useBasePermission.d.ts +1 -1
- package/dist/src/helpers/filter.d.ts +15 -0
- package/dist/src/helpers/permission-reconcile.d.ts +15 -0
- package/dist/src/helpers/permission-reconcile.test.d.ts +1 -0
- package/dist/src/helpers/permission-set.d.ts +4 -2
- package/dist/src/views/team/locales/index.d.ts +4 -0
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-CEgLVGO6.js → useAppStore-BBsP5C3E.js} +1 -1
- package/dist/{useLoading-CJtXNU4d.js → useLoading-qgSjOzRD.js} +1 -1
- package/dist/{useReportPermissions-DoQyFUKj.js → useReportPermissions-CIhkjN3B.js} +3 -3
- package/package.json +2 -2
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DOgOa3cu.js +0 -4042
- package/dist/TeamMemberList-CMK7Yfn6.js +0 -1169
package/dist/app.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { d as g } from "./dayjs.min-
|
|
1
|
+
import { d as g } from "./dayjs.min-MDoe5X-P.js";
|
|
2
2
|
import { defineStore as $, storeToRefs as T } from "pinia";
|
|
3
3
|
import { ref as m } from "vue";
|
|
4
|
-
import { b as l, g as f, u as w, s as E } from "./iteration-
|
|
4
|
+
import { b as l, g as f, u as w, s as E } from "./iteration-B38iapI_.js";
|
|
5
5
|
import { i as v } from "./utils-BZkjJbju.js";
|
|
6
|
-
import { u as _ } from "./useAppStore-
|
|
6
|
+
import { u as _ } from "./useAppStore-BBsP5C3E.js";
|
|
7
7
|
const o = {
|
|
8
8
|
async readEmployees() {
|
|
9
9
|
return f(await l().get("/pos-users"));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineStore as Gs, storeToRefs as Hs } from "pinia";
|
|
2
2
|
import { ref as eo } from "vue";
|
|
3
3
|
import { useCoreStore as ui, baseClientInstance as Dr, FeedMeAuth as qs } from "@feedmepos/mf-common";
|
|
4
|
-
import { c as U } from "./app-
|
|
4
|
+
import { c as U } from "./app-CX-St7pv.js";
|
|
5
5
|
function Ur(e, n) {
|
|
6
6
|
return function() {
|
|
7
7
|
return e.apply(n, arguments);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { g as b, b as v, q as F, u as Z, s as W, d as q, e as y } from "./iteration-
|
|
2
|
-
import { h as A, P as V, d as _, v as k, n as j, b as ee } from "./app-
|
|
1
|
+
import { g as b, b as v, q as F, u as Z, s as W, d as q, e as y } from "./iteration-B38iapI_.js";
|
|
2
|
+
import { h as A, P as V, d as _, v as k, n as j, b as ee } from "./app-CX-St7pv.js";
|
|
3
3
|
import { s as ne } from "./utils-BZkjJbju.js";
|
|
4
4
|
import { defineStore as z, storeToRefs as K } from "pinia";
|
|
5
5
|
import { ref as S, computed as U } from "vue";
|
|
@@ -426,13 +426,15 @@ function Q(e) {
|
|
|
426
426
|
}
|
|
427
427
|
d.setNames.push(c.name);
|
|
428
428
|
const m = D(d.conditions);
|
|
429
|
-
if (m
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
/* @__PURE__ */ new Set([...m[f].$in, ...a[f].$in])
|
|
433
|
-
) : m[f] || (m[f] = a[f]);
|
|
434
|
-
d.conditions = JSON.stringify(m);
|
|
429
|
+
if (!m || !a) {
|
|
430
|
+
d.conditions = void 0;
|
|
431
|
+
return;
|
|
435
432
|
}
|
|
433
|
+
for (const f in a)
|
|
434
|
+
(r = m[f]) != null && r.$in && (u = a[f]) != null && u.$in ? m[f].$in = Array.from(
|
|
435
|
+
/* @__PURE__ */ new Set([...m[f].$in, ...a[f].$in])
|
|
436
|
+
) : m[f] || (m[f] = a[f]);
|
|
437
|
+
d.conditions = JSON.stringify(m);
|
|
436
438
|
};
|
|
437
439
|
for (const i of e)
|
|
438
440
|
for (const s of i.permissions)
|
|
@@ -648,11 +650,13 @@ function Ee(e, n) {
|
|
|
648
650
|
if (!l || !d || !ue(d, r))
|
|
649
651
|
return c.push(r), c;
|
|
650
652
|
if (l.has("manage")) return c;
|
|
651
|
-
const m =
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
653
|
+
const m = r.actions;
|
|
654
|
+
if (m.includes("manage"))
|
|
655
|
+
return c.push(r), c;
|
|
656
|
+
const f = new Set(m);
|
|
657
|
+
for (const p of l)
|
|
658
|
+
f.delete(p);
|
|
659
|
+
return f.size === 0 || c.push({ ...r, actions: Array.from(f) }), c;
|
|
656
660
|
}, []);
|
|
657
661
|
}
|
|
658
662
|
function M(e, n) {
|
|
@@ -26,7 +26,7 @@ export declare function useBasePermission(modelValue: Readonly<Ref<FdoPermission
|
|
|
26
26
|
toggleAllManage: (group: CategoryGroup) => void;
|
|
27
27
|
isManageChecked: (group: CategoryGroup, subject: string) => boolean;
|
|
28
28
|
isManageIndeterminate: (group: CategoryGroup, subject: string) => boolean;
|
|
29
|
-
toggleManage: (
|
|
29
|
+
toggleManage: (group: CategoryGroup, subject: string, checked: boolean) => void;
|
|
30
30
|
hasNonManageActions: (group: CategoryGroup, subject: string) => boolean;
|
|
31
31
|
isActionChecked: (group: CategoryGroup, subject: string, action: string) => boolean;
|
|
32
32
|
isRowFullyCoveredByCover: (group: CategoryGroup, subject: string) => boolean;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentinel value used in multi-select list filters (assigned role, restaurant, etc.) to
|
|
3
|
+
* represent "this field is empty/unassigned for the record". Must match the backend's
|
|
4
|
+
* `UNASSIGNED_FILTER_VALUE` in src/common/helpers/filter.ts.
|
|
5
|
+
*
|
|
6
|
+
* When sending a filter that includes this value to the backend, it must be the first element
|
|
7
|
+
* of the array -- the backend only checks index 0 to detect it (cheap even for filters with
|
|
8
|
+
* large option sets), it does not scan the whole list.
|
|
9
|
+
*/
|
|
10
|
+
export declare const UNASSIGNED_FILTER_VALUE = "__unassigned__";
|
|
11
|
+
/**
|
|
12
|
+
* Reorders a multi-select filter's selected values so the "unassigned" sentinel (if present)
|
|
13
|
+
* is always first, matching what the backend's `splitUnassignedFilter` expects.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withUnassignedFirst(values?: string[]): string[] | undefined;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FdoPermissionRule } from '@feedmepos/core/entity';
|
|
2
|
+
import type { IFdtoPortalPermissionsWithVisibilityCondition } from '@feedmepos/hrm-permission';
|
|
3
|
+
/**
|
|
4
|
+
* Reconcile a BasePermission update (which works with the expanded view) back to the raw modelValue.
|
|
5
|
+
*
|
|
6
|
+
* - Subject removed that was directly in raw → remove it
|
|
7
|
+
* - Subject removed that was system-expanded (not in raw) → add inverted rule to block re-expansion
|
|
8
|
+
* - Subject removed that was stored directly AND still reachable via expansion from remaining
|
|
9
|
+
* rules (e.g. previously materialized by an earlier save) → remove direct rule AND add inverted,
|
|
10
|
+
* otherwise materializeSystemPermissionSetOverrides re-injects it during save
|
|
11
|
+
* - Subject added that had an inverted rule → remove the inverted rule (expansion re-enables it)
|
|
12
|
+
* - Subject added that is genuinely new → add it to raw
|
|
13
|
+
* - Subject unchanged but actions changed → update actions in raw (multi-action permissions)
|
|
14
|
+
*/
|
|
15
|
+
export declare function reconcileBasePermissionUpdate(prevExpandedRules: FdoPermissionRule[], newExpandedRules: FdoPermissionRule[], rawRules: FdoPermissionRule[], findPermissionDef: (subject: string) => IFdtoPortalPermissionsWithVisibilityCondition | undefined): FdoPermissionRule[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -75,8 +75,10 @@ export declare function filterStalePermissions(permissions: FdoPermissionRule[],
|
|
|
75
75
|
* individual rule.
|
|
76
76
|
* - Otherwise, only covered non-manage actions are stripped from individual rules when
|
|
77
77
|
* the cover condition also covers the individual rule.
|
|
78
|
-
*
|
|
79
|
-
*
|
|
78
|
+
* `manage` is a real CASL wildcard grant that implies every action, not merely a
|
|
79
|
+
* shorthand for "all non-manage actions selected" — a rule carrying `manage` is
|
|
80
|
+
* pushed through UNCHANGED (a cover lacking `manage` cannot cover it). Stripping its
|
|
81
|
+
* constituent actions and then dropping `manage` would destroy the user's grant.
|
|
80
82
|
* Rules that end up with no remaining actions are dropped.
|
|
81
83
|
*
|
|
82
84
|
* Inverted rules and the cover subjects themselves pass through untouched.
|
|
@@ -49,6 +49,7 @@ export declare const i18nMessages: {
|
|
|
49
49
|
selected_permission_prefix: string;
|
|
50
50
|
assigned_role_placeholder: string;
|
|
51
51
|
selected_assigned_role_prefix: string;
|
|
52
|
+
unassigned_label: string;
|
|
52
53
|
};
|
|
53
54
|
emptyState: {
|
|
54
55
|
title: string;
|
|
@@ -297,6 +298,7 @@ export declare const i18nMessages: {
|
|
|
297
298
|
selected_permission_prefix: string;
|
|
298
299
|
assigned_role_placeholder: string;
|
|
299
300
|
selected_assigned_role_prefix: string;
|
|
301
|
+
unassigned_label: string;
|
|
300
302
|
};
|
|
301
303
|
emptyState: {
|
|
302
304
|
title: string;
|
|
@@ -545,6 +547,7 @@ export declare const i18nMessages: {
|
|
|
545
547
|
selected_permission_prefix: string;
|
|
546
548
|
assigned_role_placeholder: string;
|
|
547
549
|
selected_assigned_role_prefix: string;
|
|
550
|
+
unassigned_label: string;
|
|
548
551
|
};
|
|
549
552
|
emptyState: {
|
|
550
553
|
title: string;
|
|
@@ -793,6 +796,7 @@ export declare const i18nMessages: {
|
|
|
793
796
|
selected_permission_prefix: string;
|
|
794
797
|
assigned_role_placeholder: string;
|
|
795
798
|
selected_assigned_role_prefix: string;
|
|
799
|
+
unassigned_label: string;
|
|
796
800
|
};
|
|
797
801
|
emptyState: {
|
|
798
802
|
title: string;
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.employee-list-table[data-v-9cf34375] [class~=gap-24]>div:first-child{display:none}.timesheet-user-view[data-v-2c7a177a] .basis-72{display:none}.user-info-icon[data-v-
|
|
1
|
+
.employee-list-table[data-v-9cf34375] [class~=gap-24]>div:first-child{display:none}.timesheet-user-view[data-v-2c7a177a] .basis-72{display:none}.user-info-icon[data-v-79737e32]{flex-shrink:0;cursor:pointer;font-size:.75rem;font-weight:600;line-height:1rem;letter-spacing:.02em;text-decoration-line:none;color:var(--fm-color-neutral-white);display:flex;align-items:center;justify-content:center;background:linear-gradient(201deg,#fc9b40 10.3%,#ff6052 98.36%)}.user-info-icon--md[data-v-79737e32]{height:2.25rem;width:2.25rem;border-radius:8px}.user-info-icon--lg[data-v-79737e32]{height:48px;width:48px;border-radius:16px}.profile-menu[data-v-79737e32]{width:280px;padding-top:12px;padding-bottom:12px}.profile-menu--profile[data-v-79737e32]>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.profile-menu--profile[data-v-79737e32]{padding:16px 16px 12px;border-radius:8px;display:flex;align-items:center;border-width:1px;border-color:var(--fm-color-neutral-gray-200)}.profile-menu--profile .profile-displayName[data-v-79737e32]{font-size:1rem;font-weight:400;line-height:1.25rem;letter-spacing:.005em;text-decoration-line:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-menu--profile .profile-email[data-v-79737e32],.profile-menu--profile .profile-phone[data-v-79737e32]{font-size:.875rem;font-weight:400;line-height:1.125rem;letter-spacing:.0125em;text-decoration-line:none;color:var(--fm-color-neutral-gray-300);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-log-list-table[data-v-c4118552] [class~=gap-24]>div:first-child{display:none}.audit-log-list-table[data-v-c4118552] tr:has(.audit-op-marker){background-color:var(--fm-color-neutral-gray-100);border-top:1px solid var(--fm-color-neutral-gray-200)}.audit-log-list-table[data-v-c4118552] tr:has(.audit-op-marker):hover{background-color:#e8e8ed}.audit-log-action-label[data-v-c4118552]{display:block;width:100%;max-width:100%;max-height:6.25rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.25rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-action-label[data-v-c4118552]::-webkit-scrollbar{display:none}.audit-log-operation-label-detail[data-v-c4118552]{max-height:6.875rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.375rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-operation-label-detail[data-v-c4118552]::-webkit-scrollbar{display:none}
|