aq-fe-framework 0.1.506 → 0.1.508

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.
@@ -306,6 +306,7 @@ interface MyDataTableProps<TData extends MRT_RowData> extends MRT_TableOptions<T
306
306
  setSelectedRow?: (data: TData[]) => void;
307
307
  isError?: boolean;
308
308
  isLoading?: boolean;
309
+ exportAble?: boolean;
309
310
  pagination?: {
310
311
  pageIndex: number;
311
312
  pageSize: number;
@@ -18,13 +18,13 @@ import {
18
18
  MyStatsCard,
19
19
  MyTextInput,
20
20
  MyWeeklySessionSchedulerPicker
21
- } from "../chunk-RVLIJK3A.mjs";
22
- import "../chunk-GFEMKKFH.mjs";
21
+ } from "../chunk-LUN2PGVB.mjs";
23
22
  import "../chunk-KCYPNG4W.mjs";
24
23
  import "../chunk-U62R2QKJ.mjs";
25
24
  import "../chunk-5U2JSHSJ.mjs";
26
- import "../chunk-OMJJAHOC.mjs";
27
25
  import "../chunk-K6S7R6LU.mjs";
26
+ import "../chunk-GFEMKKFH.mjs";
27
+ import "../chunk-OMJJAHOC.mjs";
28
28
  import "../chunk-5IELATPH.mjs";
29
29
  import "../chunk-7ZCOFATU.mjs";
30
30
  import "../chunk-FWCSY2DS.mjs";
@@ -6,6 +6,10 @@ import { I as IEmailConfig } from '../IEmailConfig-CioPObC1.mjs';
6
6
  import { I as IAQModule } from '../IAQModule-4U3n2emx.mjs';
7
7
  import { ReactNode } from 'react';
8
8
 
9
+ declare function Feat_accessControl({ menuData }: {
10
+ menuData: I_BasicAppShell_LinkItem[];
11
+ }): react_jsx_runtime.JSX.Element;
12
+
9
13
  declare function F_accessControl({ menuData }: {
10
14
  menuData: I_BasicAppShell_LinkItem[];
11
15
  }): react_jsx_runtime.JSX.Element;
@@ -43,6 +47,10 @@ declare function useS_accessControl(): {
43
47
  };
44
48
  declare function utils_accessControl_mergePage(arr1: I_accessControl_RolePermission[], arr2: I_accessControl_RolePermission[]): I_accessControl_RolePermission[];
45
49
 
50
+ declare function Feat_accessControlLevel({ menuData }: {
51
+ menuData: I_BasicAppShell_LinkItem[];
52
+ }): react_jsx_runtime.JSX.Element;
53
+
46
54
  declare function F_accessControlLevel({ menuData }: {
47
55
  menuData: I_BasicAppShell_LinkItem[];
48
56
  }): react_jsx_runtime.JSX.Element;
@@ -945,4 +953,4 @@ interface F_authenticate_Login_Props {
945
953
  }
946
954
  declare function F_authenticate_Login({ header, redirectUrlAfterLogin, additionalActions, backgroundImage, onSuccess, showLoginButton, showSaveLogin, showForgotPassword, customSubmit, loginButtonProps }: F_authenticate_Login_Props): react_jsx_runtime.JSX.Element;
947
955
 
948
- export { F_accessControl, F_accessControlLevel, F_accessControlLevel_ReadUser, F_accessControlLevel_Save, F_accessControlLevel_ViewMenuPermissions, F_accessControl_ReadUser, F_accessControl_Save, F_accessControl_ViewMenuPermissions, F_accountManagement, F_accountManagement_ChangePermission, F_accountManagement_Create, F_accountManagement_Delete, F_accountManagement_Read, F_accountManagement_Update, F_authenticate_Login, F_authenticate_Logout, F_authenticate_SplashPage, F_core12196, F_core12196_Create, F_core12196_Delete, F_core12196_Read, F_core12196_Update, F_core16209, F_core16209_Create, F_core16209_Delete, F_core16209_Update, F_core18256, F_core18256_Create, F_core18256_Delete, F_core18256_Read, F_core18256_Select, F_core18256_Update, F_core26965, F_core26965_Create, F_core26965_Delete, F_core26965_Update, F_core27311, F_core27311_Create, F_core27311_Delete, F_core27311_Read, F_core27311_Update, F_core35923, F_core40207, F_core40207_Create, F_core40207_Delete, F_core40207_Read, F_core40207_Update, F_core47643, F_core47643_Delete, F_core47643_Form, F_core47643_Read, F_core64229, F_core64229_Delete, F_core64229_Form, F_core64229_Read, F_core76318, F_core76318_Create, F_core76318_Delete, F_core76318_Update, F_documentCategories, F_documentCategories_Create, F_documentCategories_Delete, F_documentCategories_Read, F_documentCategories_Select, F_documentCategories_Update, F_formTemplateDocs, F_formTemplateDocs_Create, F_formTemplateDocs_Delete, F_formTemplateDocs_Read, F_formTemplateDocs_Update, F_mailConfig, F_mailConfig_CreateUpdate, F_mailConfig_Delete, F_mailConfig_Read, F_moduleConfig, F_organizationPolicyDocs, F_organizationPolicyDocs_Create, F_organizationPolicyDocs_Delete, F_organizationPolicyDocs_Update, F_pageContentConfig, F_roleCatalog, F_roleCatalog_Delete, F_roleCatalog_Form, F_roleCatalog_Read, F_securityPolicyDocs, F_securityPolicyDocs_Create, F_securityPolicyDocs_Delete, F_securityPolicyDocs_Update, F_systemUpdateDocs, F_systemUpdateDocs_Create, F_systemUpdateDocs_Delete, F_systemUpdateDocs_Update, F_userGuideDocs, F_userGuideDocs_Create, F_userGuideDocs_Delete, F_userGuideDocs_Read, F_userGuideDocs_Update, F_workflowProcessDocs, F_workflowProcessDocs_Create, F_workflowProcessDocs_Delete, F_workflowProcessDocs_Read, F_workflowProcessDocs_Update, type I_accessControl_RolePermission, type I_accountManagement_Read, type I_moduleConfig_AQModule, useS_accessControl, useS_authenticate, useS_moduleConfig, utils_accessControl_mergePage };
956
+ export { F_accessControl, F_accessControlLevel, F_accessControlLevel_ReadUser, F_accessControlLevel_Save, F_accessControlLevel_ViewMenuPermissions, F_accessControl_ReadUser, F_accessControl_Save, F_accessControl_ViewMenuPermissions, F_accountManagement, F_accountManagement_ChangePermission, F_accountManagement_Create, F_accountManagement_Delete, F_accountManagement_Read, F_accountManagement_Update, F_authenticate_Login, F_authenticate_Logout, F_authenticate_SplashPage, F_core12196, F_core12196_Create, F_core12196_Delete, F_core12196_Read, F_core12196_Update, F_core16209, F_core16209_Create, F_core16209_Delete, F_core16209_Update, F_core18256, F_core18256_Create, F_core18256_Delete, F_core18256_Read, F_core18256_Select, F_core18256_Update, F_core26965, F_core26965_Create, F_core26965_Delete, F_core26965_Update, F_core27311, F_core27311_Create, F_core27311_Delete, F_core27311_Read, F_core27311_Update, F_core35923, F_core40207, F_core40207_Create, F_core40207_Delete, F_core40207_Read, F_core40207_Update, F_core47643, F_core47643_Delete, F_core47643_Form, F_core47643_Read, F_core64229, F_core64229_Delete, F_core64229_Form, F_core64229_Read, F_core76318, F_core76318_Create, F_core76318_Delete, F_core76318_Update, F_documentCategories, F_documentCategories_Create, F_documentCategories_Delete, F_documentCategories_Read, F_documentCategories_Select, F_documentCategories_Update, F_formTemplateDocs, F_formTemplateDocs_Create, F_formTemplateDocs_Delete, F_formTemplateDocs_Read, F_formTemplateDocs_Update, F_mailConfig, F_mailConfig_CreateUpdate, F_mailConfig_Delete, F_mailConfig_Read, F_moduleConfig, F_organizationPolicyDocs, F_organizationPolicyDocs_Create, F_organizationPolicyDocs_Delete, F_organizationPolicyDocs_Update, F_pageContentConfig, F_roleCatalog, F_roleCatalog_Delete, F_roleCatalog_Form, F_roleCatalog_Read, F_securityPolicyDocs, F_securityPolicyDocs_Create, F_securityPolicyDocs_Delete, F_securityPolicyDocs_Update, F_systemUpdateDocs, F_systemUpdateDocs_Create, F_systemUpdateDocs_Delete, F_systemUpdateDocs_Update, F_userGuideDocs, F_userGuideDocs_Create, F_userGuideDocs_Delete, F_userGuideDocs_Read, F_userGuideDocs_Update, F_workflowProcessDocs, F_workflowProcessDocs_Create, F_workflowProcessDocs_Delete, F_workflowProcessDocs_Read, F_workflowProcessDocs_Update, Feat_accessControl, Feat_accessControlLevel, type I_accessControl_RolePermission, type I_accountManagement_Read, type I_moduleConfig_AQModule, useS_accessControl, useS_authenticate, useS_moduleConfig, utils_accessControl_mergePage };
@@ -3,7 +3,8 @@ import {
3
3
  updateEnableList,
4
4
  utils_config_getBaseUrl,
5
5
  utils_converter_enumToSelectOptions,
6
- utils_file_fileToAQDocumentType
6
+ utils_file_fileToAQDocumentType,
7
+ utils_mantineDataTable_filterColumns
7
8
  } from "../chunk-NIDKTA35.mjs";
8
9
  import {
9
10
  baseColumns
@@ -12,19 +13,16 @@ import {
12
13
  U0DateToDDMMYYYString
13
14
  } from "../chunk-EWDS5IOF.mjs";
14
15
  import {
15
- MyButton,
16
+ MyButton as MyButton2,
16
17
  MyDataTableSelectOne,
17
18
  MyTextInput as MyTextInput2
18
- } from "../chunk-RVLIJK3A.mjs";
19
- import {
20
- const_object_documentTypes
21
- } from "../chunk-GFEMKKFH.mjs";
19
+ } from "../chunk-LUN2PGVB.mjs";
22
20
  import {
23
21
  F_authenticate_Logout,
24
22
  MyActionIconDelete,
25
23
  MyActionIconUpdate,
26
24
  MyBoxesBackground,
27
- MyButton as MyButton2,
25
+ MyButton,
28
26
  MyButtonCreate,
29
27
  MyButtonModal,
30
28
  MyButtonViewPDF,
@@ -49,13 +47,16 @@ import {
49
47
  createGenericStore
50
48
  } from "../chunk-U62R2QKJ.mjs";
51
49
  import "../chunk-5U2JSHSJ.mjs";
52
- import {
53
- const_object_colors
54
- } from "../chunk-OMJJAHOC.mjs";
55
50
  import {
56
51
  enum_emailConfigModule
57
52
  } from "../chunk-VH4ZAD6M.mjs";
58
53
  import "../chunk-K6S7R6LU.mjs";
54
+ import {
55
+ const_object_documentTypes
56
+ } from "../chunk-GFEMKKFH.mjs";
57
+ import {
58
+ const_object_colors
59
+ } from "../chunk-OMJJAHOC.mjs";
59
60
  import {
60
61
  baseAxios_default,
61
62
  createBaseApi,
@@ -91,9 +92,70 @@ import { useEffect } from "react";
91
92
  // src/module/Account/usecase/UseCase_AccountTable.tsx
92
93
  import { useMemo } from "react";
93
94
  import { jsx } from "react/jsx-runtime";
95
+ function UseCase_AccountTable(_a) {
96
+ var _b = _a, {
97
+ data,
98
+ visibleFields
99
+ } = _b, rest = __objRest(_b, [
100
+ "data",
101
+ "visibleFields"
102
+ ]);
103
+ const allColumns = useMemo(() => [
104
+ {
105
+ header: "H\u1ECD v\xE0 t\xEAn",
106
+ accessorKey: "userFullName",
107
+ size: 40
108
+ },
109
+ {
110
+ header: "Email",
111
+ accessorKey: "email"
112
+ },
113
+ ...baseColumns
114
+ ], []);
115
+ const columns = useMemo(() => {
116
+ return utils_mantineDataTable_filterColumns(allColumns, visibleFields);
117
+ }, [allColumns, visibleFields]);
118
+ return /* @__PURE__ */ jsx(
119
+ MyDataTable,
120
+ __spreadValues({
121
+ columns,
122
+ data
123
+ }, rest)
124
+ );
125
+ }
94
126
 
95
127
  // src/module/Account/adapter/Account_Table.tsx
96
128
  import { jsx as jsx2 } from "react/jsx-runtime";
129
+ function Account_Table(_a) {
130
+ var rest = __objRest(_a, []);
131
+ var _a2;
132
+ const query = useMyReactQuery({
133
+ queryKey: ["accounts"],
134
+ axiosFn: () => serivce_account.getAdminAccount()
135
+ });
136
+ useEffect(() => {
137
+ var _a3, _b;
138
+ if (!query.data) return;
139
+ (_b = rest.setIdSelectionOne) == null ? void 0 : _b.call(rest, (_a3 = query.data[0].id) == null ? void 0 : _a3.toString());
140
+ }, [query.data]);
141
+ return /* @__PURE__ */ jsx2(
142
+ UseCase_AccountTable,
143
+ __spreadValues({
144
+ data: ((_a2 = query.data) == null ? void 0 : _a2.map((item) => ({
145
+ id: item.id,
146
+ code: item.code,
147
+ name: item.name,
148
+ userFullName: item.fullName,
149
+ email: item.email,
150
+ concurrencyStamp: item.concurrencyStamp,
151
+ modifiedFullName: item.modifiedFullName,
152
+ modifiedWhen: item.modifiedWhen
153
+ }))) || [],
154
+ isLoading: query.isLoading,
155
+ isError: query.isError
156
+ }, rest)
157
+ );
158
+ }
97
159
 
98
160
  // src/api/services/service_role.ts
99
161
  var CONTROLLER2 = "/role";
@@ -124,6 +186,48 @@ var service_role = __spreadProps(__spreadValues({}, createBaseApi(CONTROLLER2, b
124
186
  // src/module/Permission/adapter/Permission_SaveMenuPermission.tsx
125
187
  import { notifications } from "@mantine/notifications";
126
188
  import { jsx as jsx3 } from "react/jsx-runtime";
189
+ function Permission_SaveMenuPermission({
190
+ roleOrUserId,
191
+ isUserPermission,
192
+ values
193
+ }) {
194
+ const mutation = useMyReactMutation({
195
+ axiosFn: (values2) => {
196
+ if (isUserPermission) return service_role.updateUserPermission({
197
+ pagePermissions: values2,
198
+ userId: roleOrUserId
199
+ });
200
+ return service_role.updatePermission({
201
+ pagePermissions: values2,
202
+ roleId: roleOrUserId
203
+ });
204
+ },
205
+ options: {
206
+ onSuccess: () => {
207
+ notifications.show({
208
+ message: "L\u01B0u th\xE0nh c\xF4ng!"
209
+ });
210
+ }
211
+ }
212
+ });
213
+ return /* @__PURE__ */ jsx3(
214
+ MyButton2,
215
+ {
216
+ onClick: () => {
217
+ mutation.mutate((values == null ? void 0 : values.filter((item) => item.id != "0").map((item) => ({
218
+ pageId: parseInt(item.id),
219
+ isCreate: item.isCreate,
220
+ isUpdate: item.isUpdate,
221
+ isDelete: item.isDelete,
222
+ isPrint: item.isPrint,
223
+ isExport: item.isExport || false,
224
+ isRead: item.isRead
225
+ }))) || []);
226
+ },
227
+ actionType: "save"
228
+ }
229
+ );
230
+ }
127
231
 
128
232
  // src/data/menuData.ts
129
233
  var menuData = [
@@ -165,14 +269,219 @@ import { Center, Checkbox, Flex, Paper, ScrollArea, Skeleton, Stack, Table, Text
165
269
  import { IconEye, IconFileExport, IconPencil, IconPlus, IconPrinter, IconTrash } from "@tabler/icons-react";
166
270
  import React from "react";
167
271
  import { jsx as jsx4, jsxs } from "react/jsx-runtime";
272
+ var actionType = [
273
+ { text: "Xem", icon: /* @__PURE__ */ jsx4(IconEye, {}), iconColor: "gray" },
274
+ { text: "Th\xEAm", icon: /* @__PURE__ */ jsx4(IconPlus, {}), iconColor: "blue" },
275
+ { text: "S\u1EEDa", icon: /* @__PURE__ */ jsx4(IconPencil, {}), iconColor: "yellow" },
276
+ { text: "X\xF3a", icon: /* @__PURE__ */ jsx4(IconTrash, {}), iconColor: "red" },
277
+ { text: "In", icon: /* @__PURE__ */ jsx4(IconPrinter, {}), iconColor: "cyan" },
278
+ { text: "Xu\u1EA5t", icon: /* @__PURE__ */ jsx4(IconFileExport, {}), iconColor: "green" }
279
+ ];
280
+ var permissionKeys = [
281
+ "isRead",
282
+ "isCreate",
283
+ "isUpdate",
284
+ "isDelete",
285
+ "isPrint",
286
+ "isExport"
287
+ ];
288
+ function UseCase_PermissionViewCheckTable({ value = [], onChange, isLoading }) {
289
+ const handleCheckboxChange = (menuIndex, key) => {
290
+ const updated = [...value];
291
+ const current = updated[menuIndex][key];
292
+ updated[menuIndex][key] = !current;
293
+ onChange == null ? void 0 : onChange(updated);
294
+ };
295
+ const handleCheckAllAction = (key, checked) => {
296
+ const updated = structuredClone(value);
297
+ updated.forEach((menu) => {
298
+ menu[key] = checked;
299
+ });
300
+ onChange == null ? void 0 : onChange(updated);
301
+ };
302
+ const getDuplicateMenuIds = (data = []) => {
303
+ const allIds = data.map((menu) => menu.id).filter(Boolean);
304
+ const countMap = /* @__PURE__ */ new Map();
305
+ for (const id of allIds) {
306
+ countMap.set(id, (countMap.get(id) || 0) + 1);
307
+ }
308
+ return new Set([...countMap.entries()].filter(([_, count]) => count > 1).map(([id]) => id));
309
+ };
310
+ const groupMenusByTitle = (menus) => {
311
+ const map = /* @__PURE__ */ new Map();
312
+ menus.forEach((menu) => {
313
+ const key = menu.groupTitle || "Ch\u01B0a ph\xE2n nh\xF3m";
314
+ if (!map.has(key)) map.set(key, []);
315
+ map.get(key).push(menu);
316
+ });
317
+ return Array.from(map.entries());
318
+ };
319
+ const duplicateIds = getDuplicateMenuIds(value);
320
+ const groupedMenus = groupMenusByTitle(value);
321
+ return /* @__PURE__ */ jsx4(Paper, { children: /* @__PURE__ */ jsx4(ScrollArea, { children: isLoading ? /* @__PURE__ */ jsxs(Table, { children: [
322
+ /* @__PURE__ */ jsx4(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
323
+ /* @__PURE__ */ jsx4(Table.Th, { children: /* @__PURE__ */ jsx4(Skeleton, { height: 12, width: "80%" }) }),
324
+ Array.from({ length: permissionKeys.length }).map((_, idx) => /* @__PURE__ */ jsx4(Table.Th, { children: /* @__PURE__ */ jsx4(Skeleton, { height: 12, width: 40 }) }, idx))
325
+ ] }) }),
326
+ /* @__PURE__ */ jsx4(Table.Tbody, { children: Array.from({ length: 5 }).map((_, rowIdx) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
327
+ /* @__PURE__ */ jsx4(Table.Td, { children: /* @__PURE__ */ jsx4(Skeleton, { height: 14, width: "60%" }) }),
328
+ Array.from({ length: permissionKeys.length }).map((_2, colIdx) => /* @__PURE__ */ jsx4(Table.Td, { children: /* @__PURE__ */ jsx4(Skeleton, { height: 16, circle: true }) }, colIdx))
329
+ ] }, rowIdx)) })
330
+ ] }) : /* @__PURE__ */ jsxs(Table, { children: [
331
+ /* @__PURE__ */ jsx4(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
332
+ /* @__PURE__ */ jsx4(Table.Th, { children: "Danh s\xE1ch ch\u1EE9c n\u0103ng" }),
333
+ actionType.map((item, idx) => {
334
+ const key = permissionKeys[idx];
335
+ const allChecked = value.every((menu) => menu[key]);
336
+ return /* @__PURE__ */ jsx4(Table.Th, { children: /* @__PURE__ */ jsxs(Stack, { align: "center", gap: 4, children: [
337
+ /* @__PURE__ */ jsx4(
338
+ Checkbox,
339
+ {
340
+ checked: allChecked,
341
+ onChange: (e) => handleCheckAllAction(key, e.currentTarget.checked)
342
+ }
343
+ ),
344
+ /* @__PURE__ */ jsxs(Flex, { direction: "row", align: "center", gap: "sm", children: [
345
+ /* @__PURE__ */ jsx4(Text, { size: "xs", children: item.text }),
346
+ item.icon
347
+ ] })
348
+ ] }) }, idx);
349
+ })
350
+ ] }) }),
351
+ /* @__PURE__ */ jsx4(Table.Tbody, { children: groupedMenus.map(([groupTitle, menus], gIdx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
352
+ /* @__PURE__ */ jsx4(Table.Tr, { bg: const_object_colors.mantineBackgroundBlueLight, children: /* @__PURE__ */ jsx4(Table.Td, { fw: "bold", fs: "italic", colSpan: 7, children: groupTitle }) }),
353
+ menus.map((menu, mIdx) => {
354
+ const menuIndex = value.indexOf(menu);
355
+ const isDuplicate = menu.id && duplicateIds.has(menu.id);
356
+ return /* @__PURE__ */ jsxs(Table.Tr, { bg: isDuplicate ? "red.1" : void 0, children: [
357
+ /* @__PURE__ */ jsx4(Table.Td, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
358
+ menu.name,
359
+ isDuplicate && /* @__PURE__ */ jsxs(Text, { size: "xs", color: "red", children: [
360
+ "ID tr\xF9ng: ",
361
+ menu.id
362
+ ] })
363
+ ] }) }),
364
+ permissionKeys.map((key, pIdx) => {
365
+ var _a;
366
+ return /* @__PURE__ */ jsx4(Table.Td, { children: /* @__PURE__ */ jsx4(Center, { children: /* @__PURE__ */ jsx4(
367
+ Checkbox,
368
+ {
369
+ checked: (_a = menu[key]) != null ? _a : false,
370
+ onChange: () => handleCheckboxChange(menuIndex, key)
371
+ }
372
+ ) }) }, pIdx);
373
+ })
374
+ ] }, mIdx);
375
+ })
376
+ ] }, gIdx)) })
377
+ ] }) }) });
378
+ }
168
379
 
169
380
  // src/module/Permission/adapter/Permission_ViewCheckMenuPermission.tsx
170
381
  import { jsx as jsx5 } from "react/jsx-runtime";
382
+ function Permission_ViewCheckMenuPermission({
383
+ value,
384
+ onChange,
385
+ roleOrUserId,
386
+ isUserPermission
387
+ }) {
388
+ const rolePermissionQuery = useMyReactQuery({
389
+ queryKey: ["rolePermissions", roleOrUserId],
390
+ axiosFn: () => {
391
+ if (isUserPermission) return service_role.getUserPermission({ userId: roleOrUserId });
392
+ return service_role.getRolePermission({ roleId: roleOrUserId });
393
+ }
394
+ });
395
+ const isLoadingState = useState(true);
396
+ function mergePermissionsType(menus, permissions) {
397
+ return menus.map((menu) => {
398
+ const matchedPermission = permissions.find((p) => {
399
+ var _a;
400
+ return ((_a = p.pageId) == null ? void 0 : _a.toString()) === menu.id;
401
+ });
402
+ return __spreadProps(__spreadValues({}, menu), {
403
+ isRead: (matchedPermission == null ? void 0 : matchedPermission.isRead) || false,
404
+ isUpdate: (matchedPermission == null ? void 0 : matchedPermission.isUpdate) || false,
405
+ isDelete: (matchedPermission == null ? void 0 : matchedPermission.isDelete) || false,
406
+ isCreate: (matchedPermission == null ? void 0 : matchedPermission.isCreate) || false,
407
+ isPrint: (matchedPermission == null ? void 0 : matchedPermission.isPrint) || false,
408
+ isExport: (matchedPermission == null ? void 0 : matchedPermission.isExport) || false
409
+ });
410
+ });
411
+ }
412
+ function extractMenusWithRootGroupTitle(data, rootGroupTitle) {
413
+ const result = [];
414
+ for (const item of data) {
415
+ const currentRoot = rootGroupTitle || item.label;
416
+ if (item.links && item.links.length > 0) {
417
+ const children = extractMenusWithRootGroupTitle(item.links, currentRoot);
418
+ result.push(...children);
419
+ }
420
+ if (item.link && item.pageId !== void 0) {
421
+ result.push({
422
+ id: item.pageId.toString(),
423
+ name: item.label,
424
+ groupTitle: rootGroupTitle
425
+ // group theo menu gốc lớn nhất
426
+ });
427
+ }
428
+ }
429
+ return result;
430
+ }
431
+ useEffect2(() => {
432
+ if (!rolePermissionQuery.data) return;
433
+ const flattenMenu = extractMenusWithRootGroupTitle(menuData);
434
+ const menuMerged = mergePermissionsType(flattenMenu, rolePermissionQuery.data);
435
+ onChange == null ? void 0 : onChange(menuMerged);
436
+ isLoadingState[1](false);
437
+ }, [rolePermissionQuery.data]);
438
+ return /* @__PURE__ */ jsx5(
439
+ UseCase_PermissionViewCheckTable,
440
+ {
441
+ isLoading: isLoadingState[0],
442
+ value,
443
+ onChange
444
+ }
445
+ );
446
+ }
171
447
 
172
448
  // src/modules-features/admin/core/accessControl/Feat_accessControl.tsx
173
449
  import { Grid, Stack as Stack2 } from "@mantine/core";
174
450
  import { useState as useState2 } from "react";
175
451
  import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
452
+ function Feat_accessControl({ menuData: menuData2 }) {
453
+ const accountIdState = useState2();
454
+ const memuPermissionState = useState2();
455
+ return /* @__PURE__ */ jsxs2(Grid, { children: [
456
+ /* @__PURE__ */ jsx6(Grid.Col, { span: { base: 12, md: 5 }, children: /* @__PURE__ */ jsx6(
457
+ Account_Table,
458
+ {
459
+ idSelectionOne: accountIdState[0],
460
+ setIdSelectionOne: accountIdState[1]
461
+ }
462
+ ) }),
463
+ /* @__PURE__ */ jsx6(Grid.Col, { span: { base: 12, md: 7 }, children: /* @__PURE__ */ jsxs2(Stack2, { children: [
464
+ /* @__PURE__ */ jsx6(
465
+ Permission_ViewCheckMenuPermission,
466
+ {
467
+ isUserPermission: true,
468
+ roleOrUserId: parseInt(accountIdState[0]),
469
+ value: memuPermissionState[0],
470
+ onChange: memuPermissionState[1],
471
+ menuDataRoot: menuData2
472
+ }
473
+ ),
474
+ /* @__PURE__ */ jsx6(
475
+ Permission_SaveMenuPermission,
476
+ {
477
+ isUserPermission: true,
478
+ roleOrUserId: parseInt(accountIdState[0]),
479
+ values: memuPermissionState[0]
480
+ }
481
+ )
482
+ ] }) })
483
+ ] });
484
+ }
176
485
 
177
486
  // src/modules-features/admin/core/accessControl/old/F_accessControl.tsx
178
487
  import { Grid as Grid2, Paper as Paper2, ScrollArea as ScrollArea3 } from "@mantine/core";
@@ -554,7 +863,7 @@ function F_accessControl_Save() {
554
863
  }
555
864
  disable[1](false);
556
865
  }, [store.state.rolePermissions]);
557
- return /* @__PURE__ */ jsx9(MyButton2, { disabled: disable[0], crudType: "save", onClick: handleSave });
866
+ return /* @__PURE__ */ jsx9(MyButton, { disabled: disable[0], crudType: "save", onClick: handleSave });
558
867
  }
559
868
 
560
869
  // src/modules-features/admin/core/accessControl/old/F_accessControl.tsx
@@ -575,14 +884,101 @@ import { useEffect as useEffect5 } from "react";
575
884
  // src/module/Role/usecase/UseCase_RoleTable.tsx
576
885
  import { useMemo as useMemo3 } from "react";
577
886
  import { jsx as jsx11 } from "react/jsx-runtime";
887
+ function UseCase_RoleTable(_a) {
888
+ var _b = _a, {
889
+ data,
890
+ visibleFields
891
+ } = _b, rest = __objRest(_b, [
892
+ "data",
893
+ "visibleFields"
894
+ ]);
895
+ const allColumns = useMemo3(() => [
896
+ {
897
+ header: "M\xE3 quy\u1EC1n",
898
+ accessorKey: "code",
899
+ size: 40
900
+ },
901
+ {
902
+ header: "T\xEAn quy\u1EC1n",
903
+ accessorKey: "name"
904
+ },
905
+ ...baseColumns
906
+ ], []);
907
+ const columns = useMemo3(() => {
908
+ return utils_mantineDataTable_filterColumns(allColumns, visibleFields);
909
+ }, [allColumns, visibleFields]);
910
+ return /* @__PURE__ */ jsx11(
911
+ MyDataTable,
912
+ __spreadValues({
913
+ columns,
914
+ data
915
+ }, rest)
916
+ );
917
+ }
578
918
 
579
919
  // src/module/Role/adapter/Role_Table.tsx
580
920
  import { jsx as jsx12 } from "react/jsx-runtime";
921
+ function Role_Table(_a) {
922
+ var rest = __objRest(_a, []);
923
+ var _a2;
924
+ const adminRoleQuery = useMyReactQuery({
925
+ queryKey: ["roles"],
926
+ axiosFn: () => service_role.getAdminRole()
927
+ });
928
+ useEffect5(() => {
929
+ var _a3, _b;
930
+ if (!adminRoleQuery.data) return;
931
+ (_b = rest.setIdSelectionOne) == null ? void 0 : _b.call(rest, (_a3 = adminRoleQuery.data[0].id) == null ? void 0 : _a3.toString());
932
+ }, [adminRoleQuery.data]);
933
+ return /* @__PURE__ */ jsx12(
934
+ UseCase_RoleTable,
935
+ __spreadValues({
936
+ data: ((_a2 = adminRoleQuery.data) == null ? void 0 : _a2.map((item) => ({
937
+ id: item.id,
938
+ code: item.code,
939
+ name: item.name
940
+ }))) || [],
941
+ isError: adminRoleQuery.isError,
942
+ isLoading: adminRoleQuery.isLoading
943
+ }, rest)
944
+ );
945
+ }
581
946
 
582
947
  // src/modules-features/admin/core/accessControlLevel/Feat_accessControlLevel.tsx
583
948
  import { Grid as Grid3, Stack as Stack3 } from "@mantine/core";
584
949
  import { useState as useState5 } from "react";
585
950
  import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
951
+ function Feat_accessControlLevel({ menuData: menuData2 }) {
952
+ const accountIdState = useState5();
953
+ const memuPermissionState = useState5();
954
+ return /* @__PURE__ */ jsxs5(Grid3, { children: [
955
+ /* @__PURE__ */ jsx13(Grid3.Col, { span: { base: 12, md: 5 }, children: /* @__PURE__ */ jsx13(
956
+ Role_Table,
957
+ {
958
+ idSelectionOne: accountIdState[0],
959
+ setIdSelectionOne: accountIdState[1]
960
+ }
961
+ ) }),
962
+ /* @__PURE__ */ jsx13(Grid3.Col, { span: { base: 12, md: 7 }, children: /* @__PURE__ */ jsxs5(Stack3, { children: [
963
+ /* @__PURE__ */ jsx13(
964
+ Permission_ViewCheckMenuPermission,
965
+ {
966
+ roleOrUserId: parseInt(accountIdState[0]),
967
+ value: memuPermissionState[0],
968
+ onChange: memuPermissionState[1],
969
+ menuDataRoot: menuData2
970
+ }
971
+ ),
972
+ /* @__PURE__ */ jsx13(
973
+ Permission_SaveMenuPermission,
974
+ {
975
+ roleOrUserId: parseInt(accountIdState[0]),
976
+ values: memuPermissionState[0]
977
+ }
978
+ )
979
+ ] }) })
980
+ ] });
981
+ }
586
982
 
587
983
  // src/modules-features/admin/core/accessControlLevel/old/F_accessControlLevel.tsx
588
984
  import { Grid as Grid4, Paper as Paper3, ScrollArea as ScrollArea5 } from "@mantine/core";
@@ -889,7 +1285,7 @@ function F_accessControlLevel_Save() {
889
1285
  }
890
1286
  disable[1](false);
891
1287
  }, [store.state.rolePermissions]);
892
- return /* @__PURE__ */ jsx16(MyButton2, { disabled: disable[0], crudType: "save", onClick: handleSave });
1288
+ return /* @__PURE__ */ jsx16(MyButton, { disabled: disable[0], crudType: "save", onClick: handleSave });
893
1289
  }
894
1290
 
895
1291
  // src/modules-features/admin/core/accessControlLevel/old/F_accessControlLevel.tsx
@@ -2660,7 +3056,7 @@ function F_core35923() {
2660
3056
  /* @__PURE__ */ jsx49(Grid5.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx49(MyFileInput, { label: "Favicon (16px x 16px)" }) }),
2661
3057
  /* @__PURE__ */ jsx49(Grid5.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx49(MyFileInput, { label: "Logo (330px x 115px)" }) })
2662
3058
  ] }),
2663
- /* @__PURE__ */ jsx49(MyFlexEnd, { children: /* @__PURE__ */ jsx49(MyButton2, { crudType: "save" }) })
3059
+ /* @__PURE__ */ jsx49(MyFlexEnd, { children: /* @__PURE__ */ jsx49(MyButton, { crudType: "save" }) })
2664
3060
  ] });
2665
3061
  }
2666
3062
 
@@ -4047,7 +4443,7 @@ function F_moduleConfig_Save({
4047
4443
  });
4048
4444
  }
4049
4445
  return /* @__PURE__ */ jsx83(
4050
- MyButton2,
4446
+ MyButton,
4051
4447
  {
4052
4448
  disabled: !form.isDirty(),
4053
4449
  crudType: "save",
@@ -4503,13 +4899,13 @@ import { useMemo as useMemo20 } from "react";
4503
4899
  // src/modules-features/admin/core/pageContentConfig/F_pageContentConfig_DeleteDescription.tsx
4504
4900
  import { jsx as jsx91 } from "react/jsx-runtime";
4505
4901
  function F_pageContentConfig_DeleteDescription() {
4506
- return /* @__PURE__ */ jsx91(MyButton, { actionType: "delete" });
4902
+ return /* @__PURE__ */ jsx91(MyButton2, { actionType: "delete" });
4507
4903
  }
4508
4904
 
4509
4905
  // src/modules-features/admin/core/pageContentConfig/F_pageContentConfig_Export.tsx
4510
4906
  import { jsx as jsx92 } from "react/jsx-runtime";
4511
4907
  function F_pageContentConfig_Export() {
4512
- return /* @__PURE__ */ jsx92(MyButton, { actionType: "export" });
4908
+ return /* @__PURE__ */ jsx92(MyButton2, { actionType: "export" });
4513
4909
  }
4514
4910
 
4515
4911
  // src/modules-features/admin/core/pageContentConfig/F_pageContentConfig_Save.tsx
@@ -4521,7 +4917,7 @@ function F_pageContentConfig_Save({ menuValues }) {
4521
4917
  return service_pageContent.updateList([{ id: 1 }]);
4522
4918
  }
4523
4919
  });
4524
- return /* @__PURE__ */ jsx93(MyButton, { actionType: "save", onClick: () => updatePageConfigMutation.mutate({}) });
4920
+ return /* @__PURE__ */ jsx93(MyButton2, { actionType: "save", onClick: () => updatePageConfigMutation.mutate({}) });
4525
4921
  }
4526
4922
 
4527
4923
  // src/modules-features/admin/core/pageContentConfig/F_pageContentConfig_ReadMenu.tsx
@@ -5911,6 +6307,8 @@ export {
5911
6307
  F_workflowProcessDocs_Delete,
5912
6308
  F_workflowProcessDocs_Read,
5913
6309
  F_workflowProcessDocs_Update,
6310
+ Feat_accessControl,
6311
+ Feat_accessControlLevel,
5914
6312
  useS_accessControl,
5915
6313
  useS_authenticate,
5916
6314
  useS_moduleConfig,
package/package.json CHANGED
@@ -42,7 +42,7 @@
42
42
  "types": "./dist/columns/index.d.mts"
43
43
  }
44
44
  },
45
- "version": "0.1.506",
45
+ "version": "0.1.508",
46
46
  "private": false,
47
47
  "files": [
48
48
  "dist"
@@ -3,12 +3,12 @@ import {
3
3
  MyFlexColumn,
4
4
  MyFlexRow
5
5
  } from "./chunk-KCYPNG4W.mjs";
6
- import {
7
- const_object_colors
8
- } from "./chunk-OMJJAHOC.mjs";
9
6
  import {
10
7
  enum_daysOfWeek
11
8
  } from "./chunk-K6S7R6LU.mjs";
9
+ import {
10
+ const_object_colors
11
+ } from "./chunk-OMJJAHOC.mjs";
12
12
  import {
13
13
  useMyReactMutation,
14
14
  useMyReactQuery