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}: {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