@feedmepos/mf-hrm-portal 1.1.1-dev → 1.1.3-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/AuditLogList-DNQh1rE9.js +316 -0
  2. package/dist/{EmployeeList-CMUbRS7j.js → EmployeeList-zU7fmC4c.js} +9 -8
  3. package/dist/{Main-BbZ-t-pu.js → Main-BqhrqOzx.js} +4 -4
  4. package/dist/{Main-un3v_g6p.js → Main-DGymQNz9.js} +9 -8
  5. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BvjXcknf.js +3050 -0
  6. package/dist/{RoleList-mlTepnhN.js → RoleList-jbZqer7A.js} +5 -5
  7. package/dist/{RolePermissionList-tR-Kmlu7.js → RolePermissionList-Dd8ks5i7.js} +3 -3
  8. package/dist/{useSearch-C6gRA62e.js → SelectFilter-NbXrJ4iH.js} +90 -101
  9. package/dist/{TeamMemberList-BkRQl6x8.js → TeamMemberList-uamoOFIV.js} +40 -39
  10. package/dist/{TimesheetList-i5yaAzhB.js → TimesheetList-hgT9DrHd.js} +21 -20
  11. package/dist/api/team/index.d.ts +4 -1
  12. package/dist/{app-4LaGLcWC.js → app-CcbYGJ22.js} +757 -464
  13. package/dist/app.js +4 -4
  14. package/dist/dayjs.min-CgN1oBQf.js +282 -0
  15. package/dist/employee-khk560IC.js +172 -0
  16. package/dist/{index-BsEM84j5.js → index-D5sdamN5.js} +1154 -1183
  17. package/dist/{lodash-DYaYvsmp.js → lodash-7Am6_Zd3.js} +1 -1
  18. package/dist/{team-eo_yQh1g.js → team-CFyc6tnm.js} +1 -1
  19. package/dist/{timesheet-CfPIK52Q.js → timesheet-DKhEeLe7.js} +12 -12
  20. package/dist/tsconfig.app.tsbuildinfo +1 -1
  21. package/dist/types/audit-log.d.ts +1 -0
  22. package/dist/types/permission.d.ts +1 -5
  23. package/dist/{useAppStore-D0F-tWJO.js → useAppStore-DOSLuH24.js} +1 -1
  24. package/dist/{useLoading-DpbOtToC.js → useLoading-BA-GSZ3R.js} +1 -1
  25. package/dist/useSearch-B6WK1LBB.js +15 -0
  26. package/dist/views/audit-log/locales/index.d.ts +211 -0
  27. package/dist/views/team/components/BasePermission.vue.d.ts +0 -12
  28. package/package.json +2 -2
  29. package/dist/AuditLogList-D62QRWN-.js +0 -232
  30. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CZKBfM_R.js +0 -3119
  31. package/dist/employee-BZTntAR0.js +0 -450
  32. /package/dist/views/{hr/audit-log → audit-log}/AuditLogList.vue.d.ts +0 -0
@@ -4,6 +4,7 @@ export interface AuditLogMetadata {
4
4
  permissionSetId?: string;
5
5
  requestPath?: string;
6
6
  requestMethod?: string;
7
+ requestBody?: Record<string, unknown>;
7
8
  }
8
9
  export interface AuditLogEntry {
9
10
  timestamp: string;
@@ -1,5 +1 @@
1
- export { Permission, FullPortalPermissions, FullPosPermissions, LegacyPermissionMapping, type AbilityConstructOption, type PermissionLevelDetail, type IFdtoPortalPermission, type IPermissionUser, } from '@feedmepos/hrm-permission';
2
- export declare const inventorySubjects: string[];
3
- export declare const hrmSubjects: string[];
4
- export declare const crmSubjects: string[];
5
- export declare const generalSubjects: string[];
1
+ export { Permission, FullPortalPermissions, FullPosPermissions, LegacyPermissionMapping, PermissionCategory, PortalPermissionCategories, type PermissionCategoryValue, type AbilityConstructOption, type PermissionLevelDetail, type IFdtoPortalPermission, type IPermissionUser, } from '@feedmepos/hrm-permission';
@@ -1,7 +1,7 @@
1
1
  import { defineStore as f, storeToRefs as v } from "pinia";
2
2
  import { ref as b } from "vue";
3
3
  import { useCoreStore as I, baseClientInstance as h } from "@feedmepos/mf-common";
4
- import { g as l, b as d, s as w } from "./index-BsEM84j5.js";
4
+ import { g as l, b as d, s as w } from "./index-D5sdamN5.js";
5
5
  const p = {
6
6
  async readRoles() {
7
7
  return l(await d().get("/pos-roles"));
@@ -1,6 +1,6 @@
1
1
  import { computed as I, isRef as L, watch as M } from "vue";
2
2
  import { SnackbarPosition as y } from "@feedmepos/ui-library";
3
- import { a as w, v } from "./useAppStore-D0F-tWJO.js";
3
+ import { a as w, v } from "./useAppStore-DOSLuH24.js";
4
4
  const E = (r) => {
5
5
  async function d(u, e) {
6
6
  var l, a;
@@ -0,0 +1,15 @@
1
+ import { ref as c, computed as s } from "vue";
2
+ const i = (u) => {
3
+ const r = c(u || "");
4
+ function t(e) {
5
+ return `${e}`.trim().toLowerCase();
6
+ }
7
+ const o = s(() => t(r.value));
8
+ function n(e) {
9
+ return o.value ? e.some((a) => t(a).includes(o.value)) : !0;
10
+ }
11
+ return { searchKey: r, filter: n };
12
+ };
13
+ export {
14
+ i as u
15
+ };
@@ -0,0 +1,211 @@
1
+ import * as enUS from './en-US.json';
2
+ export type AppMessagesSchema = typeof enUS;
3
+ export declare const i18nMessages: {
4
+ 'en-US': {
5
+ auditLog: {
6
+ title: string;
7
+ dateRange: {
8
+ placeholder: string;
9
+ };
10
+ filter: {
11
+ outcome_placeholder: string;
12
+ selected_outcome_prefix: string;
13
+ };
14
+ columns: {
15
+ timestamp: string;
16
+ user: string;
17
+ subject: string;
18
+ action: string;
19
+ outcome: string;
20
+ };
21
+ outcome: {
22
+ allowed: string;
23
+ denied: string;
24
+ skipped: string;
25
+ };
26
+ noData: {
27
+ title: string;
28
+ subtitle: string;
29
+ };
30
+ pagination: {
31
+ page: string;
32
+ prevPage: string;
33
+ nextPage: string;
34
+ };
35
+ detail: {
36
+ header: string;
37
+ timestamp: string;
38
+ user: string;
39
+ action: string;
40
+ subject: string;
41
+ field: string;
42
+ outcome: string;
43
+ business: string;
44
+ restaurant: string;
45
+ metadata: string;
46
+ reason: string;
47
+ resolvedFrom: string;
48
+ permissionSet: string;
49
+ requestMethod: string;
50
+ requestPath: string;
51
+ requestBody: string;
52
+ };
53
+ };
54
+ };
55
+ 'zh-CN': {
56
+ auditLog: {
57
+ title: string;
58
+ dateRange: {
59
+ placeholder: string;
60
+ };
61
+ filter: {
62
+ outcome_placeholder: string;
63
+ selected_outcome_prefix: string;
64
+ };
65
+ columns: {
66
+ timestamp: string;
67
+ user: string;
68
+ subject: string;
69
+ action: string;
70
+ outcome: string;
71
+ };
72
+ outcome: {
73
+ allowed: string;
74
+ denied: string;
75
+ skipped: string;
76
+ };
77
+ noData: {
78
+ title: string;
79
+ subtitle: string;
80
+ };
81
+ pagination: {
82
+ page: string;
83
+ prevPage: string;
84
+ nextPage: string;
85
+ };
86
+ detail: {
87
+ header: string;
88
+ timestamp: string;
89
+ user: string;
90
+ action: string;
91
+ subject: string;
92
+ field: string;
93
+ outcome: string;
94
+ business: string;
95
+ restaurant: string;
96
+ metadata: string;
97
+ reason: string;
98
+ resolvedFrom: string;
99
+ permissionSet: string;
100
+ request: string;
101
+ requestMethod: string;
102
+ requestPath: string;
103
+ requestBody: string;
104
+ };
105
+ };
106
+ };
107
+ 'th-TH': {
108
+ auditLog: {
109
+ title: string;
110
+ dateRange: {
111
+ placeholder: string;
112
+ };
113
+ filter: {
114
+ outcome_placeholder: string;
115
+ selected_outcome_prefix: string;
116
+ };
117
+ columns: {
118
+ timestamp: string;
119
+ user: string;
120
+ subject: string;
121
+ action: string;
122
+ outcome: string;
123
+ };
124
+ outcome: {
125
+ allowed: string;
126
+ denied: string;
127
+ skipped: string;
128
+ };
129
+ noData: {
130
+ title: string;
131
+ subtitle: string;
132
+ };
133
+ pagination: {
134
+ page: string;
135
+ prevPage: string;
136
+ nextPage: string;
137
+ };
138
+ detail: {
139
+ header: string;
140
+ timestamp: string;
141
+ user: string;
142
+ action: string;
143
+ subject: string;
144
+ field: string;
145
+ outcome: string;
146
+ business: string;
147
+ restaurant: string;
148
+ metadata: string;
149
+ reason: string;
150
+ resolvedFrom: string;
151
+ permissionSet: string;
152
+ request: string;
153
+ requestMethod: string;
154
+ requestPath: string;
155
+ requestBody: string;
156
+ };
157
+ };
158
+ };
159
+ 'zh-Hant': {
160
+ auditLog: {
161
+ title: string;
162
+ dateRange: {
163
+ placeholder: string;
164
+ };
165
+ filter: {
166
+ outcome_placeholder: string;
167
+ selected_outcome_prefix: string;
168
+ };
169
+ columns: {
170
+ timestamp: string;
171
+ user: string;
172
+ subject: string;
173
+ action: string;
174
+ outcome: string;
175
+ };
176
+ outcome: {
177
+ allowed: string;
178
+ denied: string;
179
+ skipped: string;
180
+ };
181
+ noData: {
182
+ title: string;
183
+ subtitle: string;
184
+ };
185
+ pagination: {
186
+ page: string;
187
+ prevPage: string;
188
+ nextPage: string;
189
+ };
190
+ detail: {
191
+ header: string;
192
+ timestamp: string;
193
+ user: string;
194
+ action: string;
195
+ subject: string;
196
+ field: string;
197
+ outcome: string;
198
+ business: string;
199
+ restaurant: string;
200
+ metadata: string;
201
+ reason: string;
202
+ resolvedFrom: string;
203
+ permissionSet: string;
204
+ request: string;
205
+ requestMethod: string;
206
+ requestPath: string;
207
+ requestBody: string;
208
+ };
209
+ };
210
+ };
211
+ };
@@ -2,21 +2,9 @@ import { type PropType } from 'vue';
2
2
  import type { FdoPermissionRule } from '@feedmepos/core/entity';
3
3
  declare var __VLS_9: `checkbox-${string}-append`, __VLS_10: {
4
4
  option: import("@/components/CheckboxInput.vue").CheckboxOption;
5
- }, __VLS_20: `checkbox-${string}-append`, __VLS_21: {
6
- option: import("@/components/CheckboxInput.vue").CheckboxOption;
7
- }, __VLS_31: `checkbox-${string}-append`, __VLS_32: {
8
- option: import("@/components/CheckboxInput.vue").CheckboxOption;
9
- }, __VLS_42: `checkbox-${string}-append`, __VLS_43: {
10
- option: import("@/components/CheckboxInput.vue").CheckboxOption;
11
5
  };
12
6
  type __VLS_Slots = {} & {
13
7
  [K in NonNullable<typeof __VLS_9>]?: (props: typeof __VLS_10) => any;
14
- } & {
15
- [K in NonNullable<typeof __VLS_20>]?: (props: typeof __VLS_21) => any;
16
- } & {
17
- [K in NonNullable<typeof __VLS_31>]?: (props: typeof __VLS_32) => any;
18
- } & {
19
- [K in NonNullable<typeof __VLS_42>]?: (props: typeof __VLS_43) => any;
20
8
  };
21
9
  declare const __VLS_component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
22
10
  modelValue: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-hrm-portal",
3
- "version": "1.1.1-dev",
3
+ "version": "1.1.3-dev",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -28,7 +28,7 @@
28
28
  "vue-router": "^4.3.2",
29
29
  "vue3-lottie": "^3.3.0",
30
30
  "xlsx": "^0.18.5",
31
- "@feedmepos/hrm-permission": "^0.0.1-dev"
31
+ "@feedmepos/hrm-permission": "^0.0.4-dev"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@casl/ability": "^3.4.0",
@@ -1,232 +0,0 @@
1
- import { defineComponent as P, ref as d, watch as N, resolveComponent as g, createElementBlock as c, openBlock as i, Fragment as R, createVNode as r, withCtx as b, createElementVNode as t, createBlock as I, unref as h, createCommentVNode as x, toDisplayString as a } from "vue";
2
- import { useCoreStore as U } from "@feedmepos/mf-common";
3
- import { _ as B } from "./app-4LaGLcWC.js";
4
- import { _ as O } from "./PageLayout.vue_vue_type_script_setup_true_lang-HKK4cbW8.js";
5
- import { _ as q } from "./index.vue_vue_type_script_setup_true_lang-Vc5ARO29.js";
6
- import { components as K } from "@feedmepos/ui-library";
7
- import { g as M, b as $ } from "./index-BsEM84j5.js";
8
- import { u as j } from "./team-eo_yQh1g.js";
9
- const E = "/audit-logs", z = {
10
- async read(s) {
11
- return M(
12
- await $().get(E, {
13
- params: {
14
- limit: (s == null ? void 0 : s.limit) ?? 100,
15
- offset: (s == null ? void 0 : s.offset) ?? 0,
16
- ...s != null && s.from ? { from: s.from } : {},
17
- ...s != null && s.to ? { to: s.to } : {}
18
- }
19
- })
20
- );
21
- }
22
- }, G = {
23
- class: "flex flex-1 flex-col gap-16 min-h-0"
24
- }, H = {
25
- class: "flex shrink-0 items-center gap-8"
26
- }, J = {
27
- key: 0,
28
- class: "space-y-16 p-4 text-sm"
29
- }, Q = {
30
- class: "space-y-8"
31
- }, W = {
32
- class: "flex gap-8"
33
- }, X = {
34
- class: "flex gap-8"
35
- }, Y = {
36
- class: "flex flex-col gap-2"
37
- }, Z = {
38
- key: 0,
39
- class: "font-medium"
40
- }, ee = {
41
- class: "break-all font-mono text-xs text-fm-color-typo-secondary"
42
- }, te = {
43
- class: "flex gap-8"
44
- }, oe = {
45
- class: "flex gap-8"
46
- }, se = {
47
- class: "flex gap-8"
48
- }, le = {
49
- class: "flex gap-8"
50
- }, ae = {
51
- class: "flex gap-8"
52
- }, ne = {
53
- class: "break-all font-mono text-xs"
54
- }, ie = {
55
- class: "flex gap-8"
56
- }, re = {
57
- class: "break-all font-mono text-xs"
58
- }, de = {
59
- class: "space-y-8"
60
- }, ue = {
61
- class: "space-y-8"
62
- }, ce = {
63
- class: "flex gap-8"
64
- }, me = {
65
- class: "flex gap-8"
66
- }, fe = {
67
- key: 0,
68
- class: "flex gap-8"
69
- }, pe = {
70
- class: "break-all font-mono text-xs"
71
- }, ve = {
72
- key: 1,
73
- class: "flex gap-8"
74
- }, ye = {
75
- class: "font-mono text-xs break-all"
76
- }, Ie = /* @__PURE__ */ P({
77
- __name: "AuditLogList",
78
- setup(s) {
79
- const F = U(), m = j(), f = d(!1), p = d([]), o = d(null), _ = d(!1), v = d(""), y = d(""), k = {
80
- allowed: "success",
81
- denied: "critical"
82
- }, C = [{
83
- accessorKey: "timestamp",
84
- header: "Timestamp",
85
- cell(l) {
86
- const e = l.row.original;
87
- return new Date(e.timestamp).toLocaleString();
88
- }
89
- }, {
90
- accessorKey: "userId",
91
- header: "User",
92
- enableSorting: !1,
93
- cell(l) {
94
- const e = l.row.original, u = m.userIdToName[e.userId];
95
- return u ? `${u} (${e.userId})` : e.userId;
96
- }
97
- }, {
98
- accessorKey: "subject",
99
- header: "Subject"
100
- }, {
101
- accessorKey: "action",
102
- header: "Action",
103
- enableSorting: !1
104
- }, {
105
- accessorKey: "outcome",
106
- header: "Outcome",
107
- enableSorting: !1,
108
- cell(l) {
109
- const e = l.row.original;
110
- return r(K.FmChip, {
111
- variant: k[e.outcome] ?? "neutral",
112
- label: e.outcome,
113
- compact: !0
114
- }, null);
115
- }
116
- }];
117
- async function w() {
118
- f.value = !0;
119
- try {
120
- let l;
121
- if (y.value) {
122
- const e = new Date(y.value);
123
- e.setDate(e.getDate() + 1), l = e.toISOString().slice(0, 10);
124
- }
125
- [p.value] = await Promise.all([z.read({
126
- ...v.value ? {
127
- from: v.value
128
- } : {},
129
- ...l ? {
130
- to: l
131
- } : {}
132
- }), m.readTeamMembers()]);
133
- } finally {
134
- f.value = !1;
135
- }
136
- }
137
- function S() {
138
- w();
139
- }
140
- function D(l) {
141
- o.value = l, _.value = !0;
142
- }
143
- function T() {
144
- _.value = !1, o.value = null;
145
- }
146
- return N(F.currentBusiness, (l) => {
147
- l && w();
148
- }, {
149
- immediate: !0
150
- }), (l, e) => {
151
- const u = g("FmDatePicker"), A = g("FmTable"), L = g("FmChip"), V = g("FmSideSheet");
152
- return i(), c(R, null, [r(O, {
153
- heading: "Audit Log"
154
- }, {
155
- default: b(() => [t("div", G, [t("div", H, [r(u, {
156
- modelValue: v.value,
157
- "onUpdate:modelValue": [e[0] || (e[0] = (n) => v.value = n), S],
158
- label: "From"
159
- }, null, 8, ["modelValue"]), r(u, {
160
- modelValue: y.value,
161
- "onUpdate:modelValue": [e[1] || (e[1] = (n) => y.value = n), S],
162
- label: "To"
163
- }, null, 8, ["modelValue"])]), !f.value && p.value.length === 0 ? (i(), I(h(q), {
164
- key: 0,
165
- title: "No audit logs",
166
- subtitle: "Permission check logs will appear here once activity is recorded."
167
- })) : (i(), I(B, {
168
- key: 1
169
- }, {
170
- default: b(() => [r(A, {
171
- "column-defs": C,
172
- "row-data": p.value,
173
- "page-size": p.value.length,
174
- loading: f.value,
175
- "pin-header-row": "",
176
- "hide-footer": "",
177
- class: "cursor-pointer",
178
- onRowClick: e[2] || (e[2] = (n) => D(n.original))
179
- }, null, 8, ["row-data", "page-size", "loading"])]),
180
- _: 1
181
- }))])]),
182
- _: 1
183
- }), r(V, {
184
- header: "Audit Log Detail",
185
- "model-value": _.value,
186
- "max-width": 480,
187
- "dismiss-away": "",
188
- "onUpdate:modelValue": e[3] || (e[3] = (n) => {
189
- n || T();
190
- })
191
- }, {
192
- default: b(() => [o.value ? (i(), c("div", J, [t("div", Q, [t("div", W, [e[4] || (e[4] = t("span", {
193
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
194
- }, "Timestamp", -1)), t("span", null, a(new Date(o.value.timestamp).toLocaleString()), 1)]), t("div", X, [e[5] || (e[5] = t("span", {
195
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
196
- }, "User", -1)), t("div", Y, [h(m).userIdToName[o.value.userId] ? (i(), c("span", Z, a(h(m).userIdToName[o.value.userId]), 1)) : x("", !0), t("span", ee, a(o.value.userId), 1)])]), t("div", te, [e[6] || (e[6] = t("span", {
197
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
198
- }, "Action", -1)), t("span", null, a(o.value.action), 1)]), t("div", oe, [e[7] || (e[7] = t("span", {
199
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
200
- }, "Subject", -1)), t("span", null, a(o.value.subject), 1)]), t("div", se, [e[8] || (e[8] = t("span", {
201
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
202
- }, "Field", -1)), t("span", null, a(o.value.field || "-"), 1)]), t("div", le, [e[9] || (e[9] = t("span", {
203
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
204
- }, "Outcome", -1)), r(L, {
205
- variant: k[o.value.outcome] ?? "neutral",
206
- label: o.value.outcome,
207
- compact: ""
208
- }, null, 8, ["variant", "label"])]), t("div", ae, [e[10] || (e[10] = t("span", {
209
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
210
- }, "Business", -1)), t("span", ne, a(o.value.businessId || "-"), 1)]), t("div", ie, [e[11] || (e[11] = t("span", {
211
- class: "w-28 shrink-0 font-semibold text-fm-color-typo-secondary"
212
- }, "Restaurant", -1)), t("span", re, a(o.value.restaurantId || "-"), 1)])]), e[17] || (e[17] = t("hr", {
213
- class: "border-fm-color-border-default"
214
- }, null, -1)), t("div", de, [e[16] || (e[16] = t("p", {
215
- class: "font-semibold text-fm-color-typo-primary"
216
- }, "Metadata", -1)), t("div", ue, [t("div", ce, [e[12] || (e[12] = t("span", {
217
- class: "w-28 shrink-0 font-medium text-fm-color-typo-secondary"
218
- }, "Reason", -1)), t("span", null, a(o.value.metadata.reason), 1)]), t("div", me, [e[13] || (e[13] = t("span", {
219
- class: "w-28 shrink-0 font-medium text-fm-color-typo-secondary"
220
- }, "Resolved From", -1)), t("span", null, a(o.value.metadata.resolvedFrom), 1)]), o.value.metadata.permissionSetId ? (i(), c("div", fe, [e[14] || (e[14] = t("span", {
221
- class: "w-28 shrink-0 font-medium text-fm-color-typo-secondary"
222
- }, "Permission Set", -1)), t("span", pe, a(o.value.metadata.permissionSetId), 1)])) : x("", !0), o.value.metadata.requestMethod || o.value.metadata.requestPath ? (i(), c("div", ve, [e[15] || (e[15] = t("span", {
223
- class: "w-28 shrink-0 font-medium text-fm-color-typo-secondary"
224
- }, "Request", -1)), t("span", ye, a(o.value.metadata.requestMethod) + " " + a(o.value.metadata.requestPath), 1)])) : x("", !0)])])])) : x("", !0)]),
225
- _: 1
226
- }, 8, ["model-value"])], 64);
227
- };
228
- }
229
- });
230
- export {
231
- Ie as default
232
- };