import { createResource, createSignal, createMemo, Show, For } from 'solid-js'; import { A } from '@solidjs/router'; import AdminShell from '~/components/AdminShell'; const API = '/api/gateway'; type Job = { id: string; title: string; description?: string; required_skills?: string[]; experience_level?: string; job_type?: string; status: string; client_name?: string; company_name?: string; location?: string; hourly_rate_min?: number; hourly_rate_max?: number; created_at?: string; }; async function loadJobs(): Promise { try { const res = await fetch(`${API}/api/jobs?limit=100`); if (!res.ok) throw new Error('Failed to load'); const data = await res.json(); return Array.isArray(data) ? data : (data.jobs || []); } catch { return []; } } const STATUS_OPTIONS = ['All', 'DRAFT', 'ACTIVE', 'PENDING_APPROVAL', 'CLOSED', 'EXPIRED']; function statusChipClass(status: string): string { if (status === 'ACTIVE') return 'status-chip active'; if (status === 'PENDING_APPROVAL') return 'status-chip pending'; if (status === 'DRAFT') return 'status-chip draft'; if (status === 'CLOSED' || status === 'EXPIRED') return 'status-chip danger'; return 'status-chip'; } export default function JobsPage() { const [jobs] = createResource(loadJobs); const [search, setSearch] = createSignal(''); const [statusFilter, setStatusFilter] = createSignal('All'); const filtered = createMemo(() => { const all = jobs() ?? []; const q = search().toLowerCase(); const st = statusFilter(); return all.filter((job) => { const matchesSearch = !q || job.title?.toLowerCase().includes(q) || job.client_name?.toLowerCase().includes(q) || job.company_name?.toLowerCase().includes(q); const matchesStatus = st === 'All' || job.status === st; return matchesSearch && matchesStatus; }); }); return (

Jobs Management

Review live company job postings

setSearch(e.currentTarget.value)} style="padding:8px 12px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px;min-width:260px" />
0}> {(job) => ( )}
Title Skills Company / Client Rate Location Status Actions
Loading...
Failed to load. Is the backend running?
No jobs found.
{job.title || '—'}
{job.description}
{job.required_skills?.join(', ') || job.experience_level || '—'} {job.client_name || job.company_name || '—'} {job.hourly_rate_min != null ? `₹${job.hourly_rate_min}–₹${job.hourly_rate_max ?? job.hourly_rate_min}/hr` : '—'} {job.location || '—'} {job.status || '—'}
); }