import { Form, Head, Link } from '@inertiajs/react'; import { Mail, MessageCircle, Phone, Trash2 } from 'lucide-react'; import { useState } from 'react'; import { ConfirmDelete, FormField, NativeSelect, PageHeader, Textarea, } from '@/components/admin/form-controls'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { telHref, whatsappHref } from '@/data/site'; import { formatDate, optionsOf, sourceLabels, statusBadgeClasses, statusLabels, } from '@/lib/admin-labels'; import { cn } from '@/lib/utils'; import { destroy, index, update } from '@/routes/admin/consultations'; import type { Consultation, ConsultationStatus, Paginated } from '@/types'; type Props = { consultations: Paginated; status: ConsultationStatus | null; counts: Partial>; }; const timelineLabels: Record = { immediate: 'Segera (< 1 bulan)', quarter: '1–3 bulan', midterm: '3–6 bulan', feasibility: 'Masih studi kelayakan', }; export default function ConsultationsIndex({ consultations, status, counts, }: Props) { const [selectedId, setSelectedId] = useState( consultations.data[0]?.id ?? null, ); const selected = consultations.data.find((item) => item.id === selectedId) ?? consultations.data[0]; const total = Object.values(counts).reduce((sum, n) => sum + (n ?? 0), 0); const filters: { value: ConsultationStatus | null; label: string; count: number; }[] = [ { value: null, label: 'Semua', count: total }, ...optionsOf(statusLabels).map(({ value, label }) => ({ value, label, count: counts[value] ?? 0, })), ]; return ( <>
{filters.map((filter) => ( {filter.label} {filter.count} ))}
{consultations.data.length === 0 ? (
Belum ada permintaan konsultasi di sini.
) : (
    {consultations.data.map((item) => (
  • ))}
{consultations.last_page > 1 && (
Halaman {consultations.current_page} /{' '} {consultations.last_page}
)}
{selected && ( )}
)}
); } function PageLink({ href, label }: { href: string | null; label: string }) { if (!href) { return {label}; } return ( {label} ); } function ConsultationDetail({ consultation }: { consultation: Consultation }) { const details: [string, string | null][] = [ ['Perusahaan', consultation.company], ['Jabatan', consultation.job_title], ['Industri', consultation.industry], ['Layanan', consultation.service], [ 'Target waktu', consultation.timeline ? (timelineLabels[consultation.timeline] ?? consultation.timeline) : null, ], ['Halaman asal', sourceLabels[consultation.source]], ['Bahasa', consultation.locale === 'en' ? 'English' : 'Indonesia'], ['Setuju NDA', consultation.nda_agreed ? 'Ya' : 'Tidak'], ]; return (
Masuk {formatDate(consultation.created_at, true)} Hapus } />

{consultation.name}

{details .filter(([, value]) => value) .map(([label, value]) => (
{label}
{value}
))}
{consultation.details && (
Kebutuhan

{consultation.details}

)}
{({ processing, errors }) => ( <>