diff --git a/src/private/categories/AddOrEditCategoryForm.jsx b/src/private/categories/AddOrEditCategoryForm.jsx index 40c2445..7014292 100644 --- a/src/private/categories/AddOrEditCategoryForm.jsx +++ b/src/private/categories/AddOrEditCategoryForm.jsx @@ -43,7 +43,7 @@ function formatDateSafe(value) { }).format(d); } -export default function AddOrEditCategoryForm({ onAdd, initialData, onCancel, materials: materialsProp = [], initialMaterialNames = [] }) { +export default function AddOrEditCategoryForm({ onAdd, initialData, onCancel, materials: materialsProp = [], initialMaterialNames = [], originalMongoId, originalGuid }) { const { user } = useAuth(); const token = user?.thalosToken || localStorage.getItem('thalosToken'); const api = useMemo(() => new CategoriesApi(token), [token]); @@ -55,7 +55,7 @@ export default function AddOrEditCategoryForm({ onAdd, initialData, onCancel, ma const tagLabelById = useMemo(() => { const map = {}; for (const t of allTags) { - const key = t._id || t.id; + const key = t._id; map[key] = t.tagName || t.name || key; } return map; @@ -107,9 +107,9 @@ const tagLabelById = useMemo(() => { // Build a case-insensitive name -> id map const nameToId = new Map( allTags.map(t => { - const id = t._id || t.id; + const _id = t._id; const label = (t.tagName || t.name || '').toLowerCase(); - return [label, id]; + return [label, _id]; }) ); @@ -126,11 +126,9 @@ const tagLabelById = useMemo(() => { // set inicial useEffect(() => { if (initialData) { - const _Id = initialData._id || initialData._Id || ''; - const id = initialData.id || initialData.Id || _Id || ''; setForm({ - _Id, - id, + _Id: initialData._Id, + Id: initialData.Id, tenantId: initialData.tenantId || extractTenantId(token) || '', tagName: initialData.tagName || initialData.name || '', typeId: initialData.typeId || '', @@ -164,7 +162,7 @@ const tagLabelById = useMemo(() => { } }, [initialData]); - const isEdit = Boolean(form._Id || form.id); + const isEdit = Boolean(form._Id); const isAdd = !isEdit; const setVal = (name, value) => setForm(p => ({ ...p, [name]: value })); @@ -199,8 +197,10 @@ const tagLabelById = useMemo(() => { if (form._Id) { // UPDATE + // Prefer Mongo _id (24-hex) if present; fallback to GUID + const idForUpdate = form._Id; const payload = { - id: form.id || form._Id, // backend acepta GUID; si no hay, mandamos _id + id: idForUpdate, ...base, }; await api.update(payload); @@ -221,9 +221,9 @@ const tagLabelById = useMemo(() => { const handleDelete = async () => { try { - // Try to use Mongo _Id (24-hex); if not present, fall back to GUID `id`. - const hex = typeof form._Id === 'string' && /^[0-9a-f]{24}$/i.test(form._Id) ? form._Id : null; - const idToUse = hex || form.id; + // Prefer Mongo _id if it looks like a 24-hex; otherwise fall back to GUID id + const hex = (typeof form._Id === 'string' && /^[0-9a-f]{24}$/i.test(form._Id)) ? form._Id : null; + const idToUse = hex || form._Id; if (!idToUse) throw new Error('Missing id to delete'); await api.changeStatus({ id: idToUse, status: 'Inactive' }); if (onAdd) { @@ -273,7 +273,7 @@ const tagLabelById = useMemo(() => { required > {types.map((t) => { - const value = t._id || t.id; // prefer Mongo _id for 1:1 mapping + const value = t._id; const label = t.typeName || value; return ( @@ -307,7 +307,7 @@ const tagLabelById = useMemo(() => { sx={{ mb: 2 }} > {allTags.map((t) => { - const value = t._id || t.id; + const value = t._id; const label = t.tagName || t.name || value; return ( @@ -359,7 +359,7 @@ const tagLabelById = useMemo(() => { Inactive - {form._Id || form.id ? ( + {form._Id ? ( @@ -369,7 +369,7 @@ const tagLabelById = useMemo(() => { ) : null} - {(form._Id || form.id) ? ( + {form._Id ? ( ) : } diff --git a/src/private/categories/Categories.jsx b/src/private/categories/Categories.jsx index d2260c1..c2cdfa5 100644 --- a/src/private/categories/Categories.jsx +++ b/src/private/categories/Categories.jsx @@ -43,7 +43,7 @@ export default function Categories() { // Build a map of tagId -> tagName to resolve parent names const idToName = {}; for (const item of list) { - const key = item?._id || item?._Id || item?.id || item?.Id; + const key = item?._id || item?.id; if (key) idToName[key] = item?.tagName || item?.name || ''; } @@ -53,6 +53,7 @@ export default function Categories() { const materialNames = parents .map((pid) => idToName[pid]) .filter(Boolean); + return { ...r, materialNames, // array of strings @@ -75,8 +76,8 @@ export default function Categories() { const r = params?.row; if (!r) return; setEditingCategory({ - _Id: r._id || r._Id || '', - id: r.id || r.Id || '', + _id: String(r._id || ''), + id: String(r.id || ''), tagName: r.tagName || r.name || '', typeId: r.typeId || '', parentTagId: Array.isArray(r.parentTagId) ? r.parentTagId : [], @@ -87,8 +88,8 @@ export default function Categories() { materialNames: Array.isArray(r.materialNames) ? r.materialNames : (typeof r.material === 'string' - ? r.material.split(',').map(s => s.trim()).filter(Boolean) - : []), + ? r.material.split(',').map(s => s.trim()).filter(Boolean) + : []), createdAt: r.createdAt ?? null, createdBy: r.createdBy ?? null, updatedAt: r.updatedAt ?? null, @@ -104,7 +105,7 @@ export default function Categories() { }; const pickHexId = (r) => - [r?._id, r?._Id, r?.id, r?.Id] + [r?._id, r?.id] .filter(Boolean) .find((x) => typeof x === 'string' && /^[0-9a-f]{24}$/i.test(x)) || null; @@ -182,6 +183,7 @@ export default function Categories() { { field: 'tagName', headerName: 'Name', flex: 1.2, minWidth: 180 }, { field: 'slug', headerName: 'Slug', flex: 1.0, minWidth: 160 }, { field: 'icon', headerName: 'Icon', flex: 0.7, minWidth: 250 }, + /* { field: 'material', headerName: 'Material', flex: 1.2, minWidth: 200 }, */