From efadaa691845e39f0bb1229eb6990cbc7a98e251 Mon Sep 17 00:00:00 2001 From: Mohammad Hariri Date: Sun, 19 Apr 2026 12:57:03 +0200 Subject: [PATCH] fix: guard optional objectives/technologies fields at type and render layer --- src/data/loaders/portfolio.ts | 6 +++++- src/routes/experience/$slug.tsx | 8 ++++---- src/routes/index.tsx | 8 ++++---- src/types/strapi.ts | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/data/loaders/portfolio.ts b/src/data/loaders/portfolio.ts index 0cf8ef3..7c0f8cc 100644 --- a/src/data/loaders/portfolio.ts +++ b/src/data/loaders/portfolio.ts @@ -17,7 +17,11 @@ export const fetchExperiences = createServerFn({ method: 'GET' }).handler( throw new Error(`Strapi request failed: ${res.status} ${res.url}`) const json = (await res.json()) as { data: TExperience[] } console.log(`[Strapi] ← GET ${url} (${json.data.length} items)`) - return json.data + return json.data.map((item) => ({ + ...item, + objectives: item.objectives ?? [], + technologies: item.technologies ?? [], + })) }, ) diff --git a/src/routes/experience/$slug.tsx b/src/routes/experience/$slug.tsx index 88da3a4..2a92cd3 100644 --- a/src/routes/experience/$slug.tsx +++ b/src/routes/experience/$slug.tsx @@ -88,9 +88,9 @@ function ExperienceDetailPage() { {/* Technologies */} - {exp.technologies.length > 0 && ( + {(exp.technologies ?? []).length > 0 && (
- {exp.technologies.map((tech) => ( + {(exp.technologies ?? []).map((tech) => ( ))}
@@ -98,12 +98,12 @@ function ExperienceDetailPage() { {/* ── Objectives ────────────────────────────────────── */} - {exp.objectives.length > 0 && ( + {(exp.objectives ?? []).length > 0 && (

Responsibilities

    - {exp.objectives.map((obj) => ( + {(exp.objectives ?? []).map((obj) => (
  • {duration}
- {exp.objectives.length > 0 && ( + {(exp.objectives ?? []).length > 0 && (