chore: add Material column and show the Parent array
This commit is contained in:
		| @@ -34,7 +34,24 @@ export default function Categories() { | |||||||
|     try { |     try { | ||||||
|       const data = await api.getAll(); |       const data = await api.getAll(); | ||||||
|       const list = Array.isArray(data) ? data : []; |       const list = Array.isArray(data) ? data : []; | ||||||
|       setRows(list); |  | ||||||
|  |       // Build a map of parentId -> array of child tagNames | ||||||
|  |       const parentToChildren = {}; | ||||||
|  |       for (const item of list) { | ||||||
|  |         const parents = Array.isArray(item?.parentTagId) ? item.parentTagId : []; | ||||||
|  |         for (const pid of parents) { | ||||||
|  |           if (!parentToChildren[pid]) parentToChildren[pid] = []; | ||||||
|  |           if (item?.tagName) parentToChildren[pid].push(item.tagName); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       // Enrich each row with `material` (children whose parentTagId includes this _id) | ||||||
|  |       const enriched = list.map((r) => ({ | ||||||
|  |         ...r, | ||||||
|  |         material: Array.isArray(parentToChildren[r?._id]) ? parentToChildren[r._id].join(', ') : '', | ||||||
|  |       })); | ||||||
|  |  | ||||||
|  |       setRows(enriched); | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|       console.error('Failed to load categories:', e); |       console.error('Failed to load categories:', e); | ||||||
|       setRows([]); |       setRows([]); | ||||||
| @@ -148,28 +165,33 @@ export default function Categories() { | |||||||
|     { field: 'tagName', headerName: 'Name', flex: 1.2, minWidth: 180 }, |     { field: 'tagName', headerName: 'Name', flex: 1.2, minWidth: 180 }, | ||||||
|     { field: 'slug', headerName: 'Slug', flex: 1.0, minWidth: 160 }, |     { field: 'slug', headerName: 'Slug', flex: 1.0, minWidth: 160 }, | ||||||
|     { field: 'icon', headerName: 'Icon', flex: 0.7, minWidth: 120 }, |     { field: 'icon', headerName: 'Icon', flex: 0.7, minWidth: 120 }, | ||||||
|  |     // New computed column | ||||||
|  |     { field: 'material', headerName: 'Material', flex: 1.2, minWidth: 200 }, | ||||||
|  |     // Hidden audit columns | ||||||
|     { |     { | ||||||
|       field: 'createdAt', |       field: 'createdAt', | ||||||
|       headerName: 'Created Date', |       headerName: 'Created Date', | ||||||
|       flex: 1.0, |       flex: 1.0, | ||||||
|       minWidth: 180, |       minWidth: 180, | ||||||
|  |       hide: true, | ||||||
|       valueFormatter: (p) => { |       valueFormatter: (p) => { | ||||||
|         const v = p?.value; |         const v = p?.value; | ||||||
|         return v ? new Date(v).toLocaleString() : '—'; |         return v ? new Date(v).toLocaleString() : '—'; | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|     { field: 'createdBy', headerName: 'Created By', flex: 0.9, minWidth: 160 }, |     { field: 'createdBy', headerName: 'Created By', flex: 0.9, minWidth: 160, hide: true }, | ||||||
|     { |     { | ||||||
|       field: 'updatedAt', |       field: 'updatedAt', | ||||||
|       headerName: 'Updated Date', |       headerName: 'Updated Date', | ||||||
|       flex: 1.0, |       flex: 1.0, | ||||||
|       minWidth: 180, |       minWidth: 180, | ||||||
|  |       hide: true, | ||||||
|       valueFormatter: (p) => { |       valueFormatter: (p) => { | ||||||
|         const v = p?.value; |         const v = p?.value; | ||||||
|         return v ? new Date(v).toLocaleString() : '—'; |         return v ? new Date(v).toLocaleString() : '—'; | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|     { field: 'updatedBy', headerName: 'Updated By', flex: 0.9, minWidth: 160 }, |     { field: 'updatedBy', headerName: 'Updated By', flex: 0.9, minWidth: 160, hide: true }, | ||||||
|     { field: 'status', headerName: 'Status', flex: 0.7, minWidth: 120 }, |     { field: 'status', headerName: 'Status', flex: 0.7, minWidth: 120 }, | ||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rodolfo Ruiz
					Rodolfo Ruiz