trithuc-mvc-react 3.3.9 → 3.4.1

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.
@@ -85,8 +85,8 @@ const DataTable = ({ multipleActions = [], page, setPage = () => {}, disableEdit
85
85
  if (dataSearch?.TrangThaiXuLy !== undefined) {
86
86
  PermissionModel.TrangThaiXuLy = dataSearch?.TrangThaiXuLy;
87
87
  }
88
+ setPermission(PermissionModel);
88
89
  if (status) {
89
- setPermission(PermissionModel);
90
90
  // console.log("LOAD LAI PermissionModel");
91
91
  // Cuộn lên đầu trang khi tải dữ liệu thành công
92
92
  window.scrollTo({
@@ -84,8 +84,8 @@ const DataTableSM = ({ multipleActions = [], page, setPage = () => {}, disableEd
84
84
  if (dataSearch?.TrangThaiXuLy !== undefined) {
85
85
  PermissionModel.TrangThaiXuLy = dataSearch?.TrangThaiXuLy;
86
86
  }
87
+ setPermission(PermissionModel);
87
88
  if (status) {
88
- setPermission(PermissionModel);
89
89
  // console.log("LOAD LAI PermissionModel");
90
90
  // Cuộn lên đầu trang khi tải dữ liệu thành công
91
91
  window.scrollTo({
@@ -178,7 +178,7 @@ export const TableRowRenderSM = ({
178
178
  };
179
179
  const modernButtonStyle = {
180
180
  fontWeight: 400,
181
- fontSize: "0.7rem",
181
+ fontSize: "0.65rem",
182
182
  borderRadius: 2,
183
183
  minWidth: 90,
184
184
  textTransform: "none",
@@ -120,8 +120,10 @@ function DataManagement({
120
120
  const [selectedEditItem, setSelectedEditItem] = useState(null);
121
121
  const [openViewDialog, setOpenViewDialog] = useState(false);
122
122
 
123
- const { canCreate, canThongKe, canBieuDo } = usePermission(apiUrl ? apiUrl : tableName);
123
+ const { permission, canCreate, canThongKe, canBieuDo } = usePermission(apiUrl || tableName);
124
124
 
125
+ // console.log(">>> permission from hook:", permission);
126
+ // console.log(">>> canCreate:", canCreate);
125
127
  const [viewMode, setViewMode] = useState("table"); // "table" | "thongke" | "bieudo"
126
128
 
127
129
  const { defaults, filters } = useMemo(() => {
@@ -1,101 +1,117 @@
1
- import { useContext, useMemo } from "react";
1
+ import { useContext } from "react";
2
2
  import { PermissionContext } from "../contexts";
3
+ import { storeGetUser } from "@/utils/storage";
4
+
5
+ const isDev = process.env.NODE_ENV === "development";
3
6
 
4
7
  const usePermission = (tableName) => {
5
8
  if (!tableName) {
6
9
  throw new Error("api is required");
7
10
  }
11
+
8
12
  const context = useContext(PermissionContext);
9
13
  if (!context) {
10
14
  throw new Error("usePermission must be used within a PermissionProvider");
11
15
  }
16
+
12
17
  const { permissionMap, setPermission } = context;
13
- const permission = permissionMap[tableName];
14
- const {
15
- canEdit,
16
- canDelete,
17
- canDeleteMulti,
18
- canSave,
19
- canCreate,
20
- canAction,
21
- canView,
22
- canImport,
23
- canExportWord,
24
- canPayment,
25
- canThongKe,
26
- canBieuDo
27
- } = useMemo(() => {
28
- if (permission) {
29
- if (permission.TrangThaiXuLy !== undefined && permission.ObjTrangThai) {
30
- const status = permission.ObjTrangThai.find((t) => t.StatusId === permission.TrangThaiXuLy) || {};
31
- return {
32
- canEdit: status.Edit ?? false,
33
- canDelete: status.Delete ?? false,
34
- canDeleteMulti: status.DeleteMulti ?? false,
35
- canSave: status.Save ?? false,
36
- canCreate: status.Create ?? false,
37
- canAction: status.Action ?? false,
38
- canView: status.View ?? false,
39
- canImport: status.ImportFile ?? false,
40
- canExportWord: status.ExportWord ?? false,
41
- canPayment: status.Payment ?? false,
42
- canThongKe: status.ThongKe ?? false,
43
- canBieuDo: status.BieuDo ?? false
44
- };
45
- } else {
46
- return {
47
- canEdit: permission.Edit ?? false,
48
- canDelete: permission.Delete ?? false,
49
- canDeleteMulti: permission.DeleteMulti ?? false,
50
- canSave: permission.Save ?? false,
51
- canCreate: permission.Create ?? false,
52
- canAction: permission.Action ?? false,
53
- canView: permission.View ?? false,
54
- canImport: permission.ImportFile ?? false,
55
- canExportWord: permission.ExportWord ?? false,
56
- canPayment: permission.Payment ?? false,
57
- canThongKe: permission.ThongKe ?? false,
58
- canBieuDo: permission.BieuDo ?? false
59
- };
18
+
19
+ // --- lấy từ context trước ---
20
+ let permission = permissionMap[tableName];
21
+ // if (isDev) {
22
+ // console.log(`[usePermission] Context permission for ${tableName}:`, permission);
23
+ // }
24
+
25
+ // --- nếu chưa có thì thử lấy từ localStorage ---
26
+ if (!permission) {
27
+ const user = storeGetUser();
28
+ const userId = user?.UserId ?? "guest";
29
+ const localKey = `${tableName}_${userId}_PermissionModel`;
30
+
31
+ try {
32
+ const stored = localStorage.getItem(localKey);
33
+ if (stored) {
34
+ permission = JSON.parse(stored);
35
+ // if (isDev) {
36
+ // console.log(`[usePermission] Loaded from localStorage (${localKey}):`, permission);
37
+ // }
60
38
  }
61
- } else {
62
- // Trường hợp permission không tồn tại
63
- return {
64
- canEdit: false,
65
- canDelete: false,
66
- canDeleteMulti: false,
67
- canSave: false,
68
- canCreate: false,
69
- canAction: false,
70
- canView: false,
71
- canImport: false,
72
- canExportWord: false,
73
- canPayment: false,
74
- canThongKe: false,
75
- canBieuDo: false
76
- };
39
+ } catch (err) {
40
+ console.warn("Lỗi parse local permission:", err);
77
41
  }
78
- }, [permission]);
42
+ }
79
43
 
80
- const set = (permission) => {
81
- setPermission({ ...permissionMap, [tableName]: permission });
44
+ // mặc định tất cả quyền = false
45
+ let perms = {
46
+ canEdit: false,
47
+ canDelete: false,
48
+ canDeleteMulti: false,
49
+ canSave: false,
50
+ canCreate: false,
51
+ canAction: false,
52
+ canView: false,
53
+ canImport: false,
54
+ canExportWord: false,
55
+ canPayment: false,
56
+ canThongKe: false,
57
+ canBieuDo: false
58
+ };
59
+
60
+ if (permission) {
61
+ let source = permission;
62
+
63
+ // Nếu có trạng thái hợp lệ & ObjTrangThai có data thì override
64
+ if (
65
+ permission.TrangThaiXuLy !== undefined &&
66
+ permission.TrangThaiXuLy !== null &&
67
+ Array.isArray(permission.ObjTrangThai) &&
68
+ permission.ObjTrangThai.length > 0
69
+ ) {
70
+ const status = permission.ObjTrangThai.find((t) => t.StatusId === permission.TrangThaiXuLy);
71
+ if (status) {
72
+ source = status;
73
+ // if (isDev) {
74
+ // console.log(`[usePermission] Override by status ${permission.TrangThaiXuLy}:`, source);
75
+ // }
76
+ }
77
+ }
78
+
79
+ // Map field từ source
80
+ perms = {
81
+ canEdit: source.Edit ?? false,
82
+ canDelete: source.Delete ?? false,
83
+ canDeleteMulti: source.DeleteMulti ?? false,
84
+ canSave: source.Save ?? false,
85
+ canCreate: source.Create ?? false,
86
+ canAction: source.Action ?? false,
87
+ canView: source.View ?? false,
88
+ canImport: source.ImportFile ?? false,
89
+ canExportWord: source.ExportWord ?? false,
90
+ canPayment: source.Payment ?? false,
91
+ canThongKe: source.ThongKe ?? false,
92
+ canBieuDo: source.BieuDo ?? false
93
+ };
94
+ }
95
+
96
+ const set = (newPermission) => {
97
+ setPermission({ ...permissionMap, [tableName]: { ...newPermission } });
98
+
99
+ const user = storeGetUser();
100
+ const userId = user?.UserId ?? "guest";
101
+ const localKey = `${tableName}_${userId}_PermissionModel`;
102
+
103
+ localStorage.setItem(localKey, JSON.stringify(newPermission));
104
+
105
+ // if (isDev) {
106
+ // console.log(`[usePermission] Saved to localStorage (${localKey}):`, newPermission);
107
+ // }
82
108
  };
83
109
 
84
110
  return {
85
111
  permission,
86
112
  set,
87
- canEdit,
88
- canDelete,
89
- canDeleteMulti,
90
- canSave,
91
- canCreate,
92
- canAction,
93
- canView,
94
- canImport,
95
- canExportWord,
96
- canPayment,
97
- canThongKe,
98
- canBieuDo
113
+ ...perms
99
114
  };
100
115
  };
116
+
101
117
  export default usePermission;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trithuc-mvc-react",
3
- "version": "3.3.9",
3
+ "version": "3.4.1",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"