Browse Source

🗂️ refactor(table): isolate column preferences per role

Summary
• Added role-specific localStorage keys for column visibility in three hooks:
  - `useUsageLogsData.js` → `logs-table-columns-admin` / `logs-table-columns-user`
  - `useMjLogsData.js`   → `mj-logs-table-columns-admin` / `mj-logs-table-columns-user`
  - `useTaskLogsData.js` → `task-logs-table-columns-admin` / `task-logs-table-columns-user`

Details
1. Each hook now derives a `STORAGE_KEY` based on `isAdminUser`, preventing admin and non-admin sessions from overwriting one another’s column settings.
2. Removed the previous “save but strip admin columns” workaround—settings are persisted unmodified to each role’s key.
3. Kept runtime behaviour: non-admin users still see admin-only columns forcibly hidden.
4. Replaced newly added Chinese comments with clear English equivalents for consistency.

Result
Switching between admin and non-admin accounts no longer corrupts column visibility preferences, and codebase comments are fully English-localized.
t0ng7u 5 months ago
parent
commit
0cb2bb2ea7

+ 8 - 5
web/src/hooks/mj-logs/useMjLogsData.js

@@ -60,6 +60,8 @@ export const useMjLogsData = () => {
 
   // User and admin
   const isAdminUser = isAdmin();
+  // Role-specific storage key to prevent different roles from overwriting each other
+  const STORAGE_KEY = isAdminUser ? 'mj-logs-table-columns-admin' : 'mj-logs-table-columns-user';
 
   // Modal states
   const [isModalOpen, setIsModalOpen] = useState(false);
@@ -88,13 +90,14 @@ export const useMjLogsData = () => {
 
   // Load saved column preferences from localStorage
   useEffect(() => {
-    const savedColumns = localStorage.getItem('mj-logs-table-columns');
+    const savedColumns = localStorage.getItem(STORAGE_KEY);
     if (savedColumns) {
       try {
         const parsed = JSON.parse(savedColumns);
         const defaults = getDefaultColumnVisibility();
         const merged = { ...defaults, ...parsed };
-        // If not admin, force hide columns only visible to admins
+
+        // For non-admin users, force-hide admin-only columns (does not touch admin settings)
         if (!isAdminUser) {
           merged[COLUMN_KEYS.CHANNEL] = false;
           merged[COLUMN_KEYS.SUBMIT_RESULT] = false;
@@ -139,7 +142,7 @@ export const useMjLogsData = () => {
   const initDefaultColumns = () => {
     const defaults = getDefaultColumnVisibility();
     setVisibleColumns(defaults);
-    localStorage.setItem('mj-logs-table-columns', JSON.stringify(defaults));
+    localStorage.setItem(STORAGE_KEY, JSON.stringify(defaults));
   };
 
   // Handle column visibility change
@@ -167,10 +170,10 @@ export const useMjLogsData = () => {
     setVisibleColumns(updatedColumns);
   };
 
-  // Update table when column visibility changes
+  // Persist column settings to the role-specific STORAGE_KEY
   useEffect(() => {
     if (Object.keys(visibleColumns).length > 0) {
-      localStorage.setItem('mj-logs-table-columns', JSON.stringify(visibleColumns));
+      localStorage.setItem(STORAGE_KEY, JSON.stringify(visibleColumns));
     }
   }, [visibleColumns]);
 

+ 8 - 5
web/src/hooks/task-logs/useTaskLogsData.js

@@ -58,6 +58,8 @@ export const useTaskLogsData = () => {
 
   // User and admin
   const isAdminUser = isAdmin();
+  // Role-specific storage key to prevent different roles from overwriting each other
+  const STORAGE_KEY = isAdminUser ? 'task-logs-table-columns-admin' : 'task-logs-table-columns-user';
 
   // Modal state
   const [isModalOpen, setIsModalOpen] = useState(false);
@@ -86,13 +88,14 @@ export const useTaskLogsData = () => {
 
   // Load saved column preferences from localStorage
   useEffect(() => {
-    const savedColumns = localStorage.getItem('task-logs-table-columns');
+    const savedColumns = localStorage.getItem(STORAGE_KEY);
     if (savedColumns) {
       try {
         const parsed = JSON.parse(savedColumns);
         const defaults = getDefaultColumnVisibility();
         const merged = { ...defaults, ...parsed };
-        // If not admin, force hide columns only visible to admins
+
+        // For non-admin users, force-hide admin-only columns (does not touch admin settings)
         if (!isAdminUser) {
           merged[COLUMN_KEYS.CHANNEL] = false;
         }
@@ -127,7 +130,7 @@ export const useTaskLogsData = () => {
   const initDefaultColumns = () => {
     const defaults = getDefaultColumnVisibility();
     setVisibleColumns(defaults);
-    localStorage.setItem('task-logs-table-columns', JSON.stringify(defaults));
+    localStorage.setItem(STORAGE_KEY, JSON.stringify(defaults));
   };
 
   // Handle column visibility change
@@ -152,10 +155,10 @@ export const useTaskLogsData = () => {
     setVisibleColumns(updatedColumns);
   };
 
-  // Update table when column visibility changes
+  // Persist column settings to the role-specific STORAGE_KEY
   useEffect(() => {
     if (Object.keys(visibleColumns).length > 0) {
-      localStorage.setItem('task-logs-table-columns', JSON.stringify(visibleColumns));
+      localStorage.setItem(STORAGE_KEY, JSON.stringify(visibleColumns));
     }
   }, [visibleColumns]);
 

+ 8 - 8
web/src/hooks/usage-logs/useUsageLogsData.js

@@ -74,6 +74,8 @@ export const useLogsData = () => {
 
   // User and admin
   const isAdminUser = isAdmin();
+  // Role-specific storage key to prevent different roles from overwriting each other
+  const STORAGE_KEY = isAdminUser ? 'logs-table-columns-admin' : 'logs-table-columns-user';
 
   // Statistics state
   const [stat, setStat] = useState({
@@ -110,13 +112,14 @@ export const useLogsData = () => {
 
   // Load saved column preferences from localStorage
   useEffect(() => {
-    const savedColumns = localStorage.getItem('logs-table-columns');
+    const savedColumns = localStorage.getItem(STORAGE_KEY);
     if (savedColumns) {
       try {
         const parsed = JSON.parse(savedColumns);
         const defaults = getDefaultColumnVisibility();
         const merged = { ...defaults, ...parsed };
-        // If not admin, force hide columns only visible to admins
+
+        // For non-admin users, force-hide admin-only columns (does not touch admin settings)
         if (!isAdminUser) {
           merged[COLUMN_KEYS.CHANNEL] = false;
           merged[COLUMN_KEYS.USERNAME] = false;
@@ -156,7 +159,7 @@ export const useLogsData = () => {
   const initDefaultColumns = () => {
     const defaults = getDefaultColumnVisibility();
     setVisibleColumns(defaults);
-    localStorage.setItem('logs-table-columns', JSON.stringify(defaults));
+    localStorage.setItem(STORAGE_KEY, JSON.stringify(defaults));
   };
 
   // Handle column visibility change
@@ -186,13 +189,10 @@ export const useLogsData = () => {
     setVisibleColumns(updatedColumns);
   };
 
-  // Update table when column visibility changes
+  // Persist column settings to the role-specific STORAGE_KEY
   useEffect(() => {
     if (Object.keys(visibleColumns).length > 0) {
-      localStorage.setItem(
-        'logs-table-columns',
-        JSON.stringify(visibleColumns),
-      );
+      localStorage.setItem(STORAGE_KEY, JSON.stringify(visibleColumns));
     }
   }, [visibleColumns]);