import { useEffect, useMemo, useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router'; import { Button, Card, Col, Container, Form, Row, Spinner } from 'react-bootstrap'; import { laravelGet, laravelPost, isLaravelSuccess } from '@/api/laravel'; import PageBreadcrumb from '@/components/PageBreadcrumb'; import { SPECIALITIES, STATUSES, displayValue, letterUrl } from './helpers'; function Field({ label, children }) { return ( {label} {children} ); } function ReadRow({ label, value }) { return (

{label}: {displayValue(value)}

); } export default function NebReportDetail() { const [params] = useSearchParams(); const navigate = useNavigate(); const id = params.get('id'); const mode = params.get('requesttype') === 'edit' ? 'edit' : 'view'; const filterQuery = useMemo(() => ({ state: params.get('state') || '', from_date: params.get('from_date') || '', to_date: params.get('to_date') || '', status: params.get('status') || '', }), [params]); const [item, setItem] = useState(null); const [doctors, setDoctors] = useState([]); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); const [message, setMessage] = useState(''); const [form, setForm] = useState({}); const [status, setStatus] = useState(''); useEffect(() => { let cancelled = false; (async () => { setLoading(true); setError(''); const response = await laravelGet('neblogistic/show', { id }); if (cancelled) return; if (!isLaravelSuccess(response)) { setError(response?.message || 'Unable to load record'); setItem(null); setLoading(false); return; } const next = response.data?.item || {}; setItem(next); setDoctors(response.data?.doctors || []); setStatus(next.status || ''); setForm({ emp_id: next.emp_id || '', employee_name: next.emp_name || '', employee_phone: next.emp_phone || '', employee_email: next.emp_email || '', abm_name: next.abm_name || '', abm_email: next.abm_email || '', rbm_name: next.rbm_name || '', dr_name: next.doctor_name || '', doctor_mobile_number: next.doctor_phone || '', speciality: next.doctor_speciality || '', msl_code: next.msl_code || '', type_of_nebulizer: next.type_of_nebulizer || 'Robust', more_than_5_nebulizer: next.more_than_5_nebulizer || 'No', no_of_nebulizer: next.no_of_nebulizer || '', value_of_the_parcel: next.value_of_parcel || '', clinic_hospital_home_name: next.clinic_hospital_name || '', building_name: next.address_building || '', address_type: next.address_type || '', address_line_1: next.address_line_1 || '', address_line_2: next.address_line_2 || '', state: next.address_state || '', city: next.address_city || '', pin_code: next.address_pin_code || '', team: next.team || '', depot_name: next.depot_name || '', rejected_reason: next.rejected_reason || '', order_no: next.order_no || '', invoice_no: next.invoice_no || '', courier_name: next.courier_name || '', lr_no: next.lr_no || '', lr_date: next.lr_date ? String(next.lr_date).slice(0, 10) : '', }); setLoading(false); })(); return () => { cancelled = true; }; }, [id]); const goNeighbor = async (direction) => { const response = await laravelGet('neblogistic/neighbor', { id, direction, ...filterQuery }); if (!isLaravelSuccess(response)) { setError(response?.message || 'No further entries available.'); return; } const next = new URLSearchParams({ ...filterQuery, id: response.data.id, requesttype: mode }); navigate(`/neblogisticreport/viewreportbyid?${next}`); }; const save = async (payload) => { setSaving(true); setError(''); setMessage(''); const response = await laravelPost('neblogistic/update', { record_id: id, ...payload }); setSaving(false); if (!isLaravelSuccess(response)) { setError(response?.message || 'Save failed'); return; } setMessage(response.message || 'Data Saved'); }; if (loading) { return ; } if (!item) { return
{error || 'Record not found'}
; } const image = letterUrl(item.request_letter); const canEdit = mode === 'edit'; return ( {error ?
{error}
: null} {message ?
{message}
: null}
RequestID: {item.id} | Status:{' '} {item.status}
setStatus(e.target.value)}> {STATUSES.map((value) => )}

Employee Details

{canEdit ? ( <> setForm((p) => ({ ...p, emp_id: e.target.value }))} /> setForm((p) => ({ ...p, employee_name: e.target.value }))} /> setForm((p) => ({ ...p, employee_phone: e.target.value }))} /> setForm((p) => ({ ...p, employee_email: e.target.value }))} /> setForm((p) => ({ ...p, abm_name: e.target.value }))} /> setForm((p) => ({ ...p, abm_email: e.target.value }))} /> setForm((p) => ({ ...p, rbm_name: e.target.value }))} /> ) : ( <> )}

Doctor Details

{canEdit ? ( <> setForm((p) => ({ ...p, dr_name: e.target.value }))} /> setForm((p) => ({ ...p, doctor_mobile_number: e.target.value }))} /> setForm((p) => ({ ...p, speciality: e.target.value }))}> {Object.entries(SPECIALITIES).map(([value, label]) => )} setForm((p) => ({ ...p, msl_code: e.target.value }))} /> setForm((p) => ({ ...p, type_of_nebulizer: e.target.value }))}> {['Robust', 'Mini', 'Others'].map((value) => )} setForm((p) => ({ ...p, more_than_5_nebulizer: e.target.value }))}> setForm((p) => ({ ...p, no_of_nebulizer: e.target.value }))} /> setForm((p) => ({ ...p, value_of_the_parcel: e.target.value }))} /> ) : ( <> )}
{image ? (

Request Letter

Request Letter Download existing
) : null}

Drop Details

{canEdit ? ( <> setForm((p) => ({ ...p, clinic_hospital_home_name: e.target.value }))} /> setForm((p) => ({ ...p, building_name: e.target.value }))} /> setForm((p) => ({ ...p, address_type: e.target.value }))} /> setForm((p) => ({ ...p, address_line_1: e.target.value }))} /> setForm((p) => ({ ...p, address_line_2: e.target.value }))} /> setForm((p) => ({ ...p, state: e.target.value }))} /> setForm((p) => ({ ...p, city: e.target.value }))} /> setForm((p) => ({ ...p, pin_code: e.target.value }))} /> setForm((p) => ({ ...p, depot_name: e.target.value }))} /> setForm((p) => ({ ...p, team: e.target.value }))} /> ) : ( <> )}
{['Dispatched', 'Delivered'].includes(item.status) || status === 'Dispatched' ? (

Dispatch / Delivery Details

{canEdit ? ( <> setForm((p) => ({ ...p, order_no: e.target.value }))} /> setForm((p) => ({ ...p, invoice_no: e.target.value }))} /> setForm((p) => ({ ...p, courier_name: e.target.value }))} /> setForm((p) => ({ ...p, lr_no: e.target.value }))} /> setForm((p) => ({ ...p, lr_date: e.target.value }))} /> ) : ( <> )}
) : null} {status === 'Rejected' && canEdit ? ( setForm((p) => ({ ...p, rejected_reason: e.target.value }))} /> ) : null}
{doctors.length ? (

Other requests with same MSL

{doctors.map((row) => (
{row.id} — {row.emp_name} — {row.status}
))}
) : null}
); }