import { For, Show, createSignal, onMount } from 'solid-js'; import { BTN_GHOST, CARD } from '~/components/DashboardShell'; import { readJobSeekerProfile, updateJobSeekerCustomData } from '~/lib/job-seeker-custom-data'; type SavedJob = { id: string; title: string; company?: string; location?: string; salary?: string; saved_at: string; }; function toSavedJobs(value: unknown): SavedJob[] { if (!Array.isArray(value)) return []; return value .map((item) => { const row = item as Record; const id = String(row?.id || '').trim(); if (!id) return null; return { id, title: String(row?.title || 'Untitled Job'), company: String(row?.company || row?.company_name || ''), location: String(row?.location || ''), salary: String(row?.salary || ''), saved_at: String(row?.saved_at || new Date().toISOString()), }; }) .filter(Boolean) as SavedJob[]; } function renderSavedAt(value: string): string { const dt = new Date(value); if (Number.isNaN(dt.getTime())) return '—'; return dt.toLocaleString('en-IN'); } export default function JobSeekerSavedJobsPage() { const [rows, setRows] = createSignal([]); const [loading, setLoading] = createSignal(true); const [err, setErr] = createSignal(''); const loadRows = async () => { setLoading(true); setErr(''); try { const profile = await readJobSeekerProfile(); setRows(toSavedJobs(profile?.custom_data?.saved_jobs)); } catch { setErr('Failed to load saved jobs.'); setRows([]); } finally { setLoading(false); } }; onMount(() => void loadRows()); const removeRow = async (id: string) => { const next = rows().filter((row) => row.id !== id); setLoading(true); setErr(''); try { await updateJobSeekerCustomData((current) => ({ ...current, saved_jobs: next })); setRows(next); } catch (e: any) { setErr(e?.message || 'Failed to remove saved job.'); } finally { setLoading(false); } }; return (

Saved Jobs

Jobs bookmarked for later.

{err()}

Bookmarked Jobs

Loading saved jobs...

No saved jobs yet.

0}>
{(row) => (

{row.title}

{row.company || '—'} {row.location ? `• ${row.location}` : ''} {row.salary ? `• ${row.salary}` : ''}

Saved on {renderSavedAt(row.saved_at)}

)}
); }