diff --git a/client/src/components/trans-routes/RouteView.js b/client/src/components/trans-routes/RouteView.js index 2da34b2..b9ed2f0 100644 --- a/client/src/components/trans-routes/RouteView.js +++ b/client/src/components/trans-routes/RouteView.js @@ -196,17 +196,70 @@ const RouteView = () => { }, [currentRoute?.driver, currentDriver?.id]); useEffect(() => { - const dateArr = moment(currentRoute?.schedule_date)?.format('MM/DD/YYYY')?.split('/') || []; - - CustomerService.getAvatar(`${currentRoute?.id}_${currentRoute?.driver}_${dateArr[0]}_${dateArr[1]}`).then(data => { - setSignature(data.data); - }); - SignatureRequestService.getAllSignatureRequests({driver_id: resolvedDriverId, route_id: currentRoute?.id, route_date: currentRoute?.schedule_date}).then((data) => { - if (data?.data?.length > 0) { - setSignatureRequest(data?.data[0]); + let isMounted = true; + const loadSignatureAndRequest = async () => { + if (!currentRoute?.id || !currentRoute?.schedule_date) { + if (isMounted) { + setSignature(undefined); + setSignatureRequest(undefined); + } + return; } - }) - }, [currentRoute, resolvedDriverId]); + const dateArr = moment(currentRoute.schedule_date)?.format('MM/DD/YYYY')?.split('/') || []; + const month = dateArr[0]; + const day = dateArr[1]; + const routeId = currentRoute.id; + + const tryLoadSignature = async (driverIds = []) => { + const uniqueDriverIds = Array.from(new Set((driverIds || []).filter(Boolean))); + for (const driverId of uniqueDriverIds) { + try { + const data = await CustomerService.getAvatar(`${routeId}_${driverId}_${month}_${day}`); + if (data?.data) { + return data.data; + } + } catch (error) { + // Try next candidate key. + } + } + return undefined; + }; + + const initialSignature = await tryLoadSignature([ + resolvedDriverId, + currentRoute?.driver, + routeSnapshot?.driver + ]); + if (isMounted) { + setSignature(initialSignature); + } + + try { + const requestRes = await SignatureRequestService.getAllSignatureRequests({ + route_id: routeId, + route_date: currentRoute.schedule_date + }); + const firstRequest = requestRes?.data?.[0]; + if (isMounted) { + setSignatureRequest(firstRequest); + } + if (!initialSignature && firstRequest?.driver_id) { + const signatureFromRequestDriver = await tryLoadSignature([firstRequest.driver_id]); + if (isMounted) { + setSignature(signatureFromRequestDriver); + } + } + } catch (error) { + if (isMounted) { + setSignatureRequest(undefined); + } + } + }; + loadSignatureAndRequest(); + return () => { + isMounted = false; + }; + }, [currentRoute?.id, currentRoute?.schedule_date, currentRoute?.driver, resolvedDriverId, routeSnapshot?.driver]); return ( <>