diff --git a/src/components/ai/CaseStudyViewer.tsx b/src/components/ai/CaseStudyViewer.tsx index e9d4e90..070879f 100644 --- a/src/components/ai/CaseStudyViewer.tsx +++ b/src/components/ai/CaseStudyViewer.tsx @@ -56,6 +56,11 @@ export default function CaseStudyViewer({ data }: { data: CaseStudyData }) { if (!data.found) return null; + // Defensive: ensure datasheet/gallery/videos are always arrays + const datasheet = Array.isArray(data.datasheet) ? data.datasheet : []; + const gallery = Array.isArray(data.gallery) ? data.gallery : []; + const videos = Array.isArray(data.videos) ? data.videos : []; + const accent = ACCENTS[data.industry] || ACCENTS.textile; const nodeSlug = nodeToSlug(data.title); const coverSrc = data.mediaFileName ? `/cases/${nodeSlug}/${data.mediaFileName}` : null; @@ -99,14 +104,14 @@ export default function CaseStudyViewer({ data }: { data: CaseStudyData }) { {/* Media indicators */}
- {data.gallery.length > 0 && ( + {gallery.length > 0 && (
- {data.gallery.length} + {gallery.length}
)} - {data.videos.length > 0 && ( + {videos.length > 0 && (
- {data.videos.length} + {videos.length}
)}
@@ -133,8 +138,8 @@ export default function CaseStudyViewer({ data }: { data: CaseStudyData }) { )} - {data.datasheet.length > 0 && ( - + {datasheet.length > 0 && ( + )} @@ -166,21 +171,21 @@ export default function CaseStudyViewer({ data }: { data: CaseStudyData }) { )} {/* Equipment Datasheet (from specificDatasheetJson) */} - {data.datasheet.length > 0 && ( + {datasheet.length > 0 && (
Equipment Specifications
- {data.datasheet.slice(0, 6).map((spec, i) => ( + {datasheet.slice(0, 6).map((spec, i) => (
{spec.label} {spec.value}
))} - {data.datasheet.length > 6 && ( + {datasheet.length > 6 && ( - +{data.datasheet.length - 6} more specs in full view + +{datasheet.length - 6} more specs in full view )}
@@ -188,17 +193,17 @@ export default function CaseStudyViewer({ data }: { data: CaseStudyData }) { )} {/* Gallery Preview */} - {data.gallery.length > 0 && ( + {gallery.length > 0 && (
{showGallery && (
- {data.gallery.slice(0, 6).map((img, i) => ( + {gallery.slice(0, 6).map((img, i) => (
{`Gallery
diff --git a/src/components/ai/EquipmentConfigurator.tsx b/src/components/ai/EquipmentConfigurator.tsx index a51d6f4..dcd4d8f 100644 --- a/src/components/ai/EquipmentConfigurator.tsx +++ b/src/components/ai/EquipmentConfigurator.tsx @@ -49,9 +49,12 @@ export default function EquipmentConfigurator({ data }: { data: EquipmentData }) const coverSrc = data.mediaFileName ? `/cases/${nodeSlug}/${data.mediaFileName}` : null; const appLabel = data.application.replace(/-/g, " ").replace(/\b\w/g, c => c.toUpperCase()); + // Defensive: ensure datasheet is always an array (DB may store malformed JSON) + const datasheet = Array.isArray(data.datasheet) ? data.datasheet : []; + // Find key specs for header pills (power, frequency, model — from datasheet) const findSpec = (keywords: string[]) => { - return data.datasheet.find(s => + return datasheet.find(s => keywords.some(kw => s.label.toLowerCase().includes(kw)) )?.value; }; @@ -61,8 +64,8 @@ export default function EquipmentConfigurator({ data }: { data: EquipmentData }) const modelSpec = findSpec(['model', 'modelo', 'type', 'tipo', 'series']); // Split datasheet into primary (first 4) and extended - const primarySpecs = data.datasheet.slice(0, 4); - const extendedSpecs = data.datasheet.slice(4); + const primarySpecs = datasheet.slice(0, 4); + const extendedSpecs = datasheet.slice(4); return ( - All Specifications ({data.datasheet.length}) + All Specifications ({datasheet.length})