import React, {useState, useEffect} from "react"; import { useParams } from "react-router-dom"; import { CustomerService, SignatureRequestService } from "../../services"; import SignatureCanvas from 'react-signature-canvas'; import moment from 'moment'; const DriverSignature = () => { const urlParams = useParams(); const [signatureRequest, setSignatureRequest] = useState(undefined); const clearCanvas = () => { const canvas = document.getElementsByClassName('sigCanvas')[0]; if (canvas) { const context = canvas.getContext('2d'); context.clearRect(0, 0, canvas.width, canvas.height); } } const submitSignature = () => { const fabricCanvas = document.getElementsByClassName('sigCanvas')[0]; if (!fabricCanvas || !signatureRequest?.id) { window.alert('Signature request is not ready. Please refresh and try again.'); return; } const routeId = `${signatureRequest?.route_id || ''}`.trim(); const driverId = `${signatureRequest?.driver_id || ''}`.trim(); const dateArr = moment(signatureRequest?.route_date)?.format('MM/DD/YYYY')?.split('/') || []; const month = `${dateArr[0] || ''}`.trim(); const day = `${dateArr[1] || ''}`.trim(); if (!routeId || !driverId || !month || !day || month.toLowerCase().includes('invalid')) { window.alert('Invalid route signature key. Please ask admin to regenerate signature link.'); return; } const fileName = `${routeId}_${driverId}_${month}_${day}`; const scaledCanvas = document.createElement('canvas'); scaledCanvas.width = 400; scaledCanvas.height = 200; const ctx = scaledCanvas.getContext('2d'); ctx.drawImage(fabricCanvas, 0, 0, scaledCanvas.width, scaledCanvas.height); scaledCanvas.toBlob(function(blob) { if (!blob) { window.alert('Failed to read signature image. Please draw signature again.'); return; } const formData = new FormData(); formData.append('file', blob, `${fileName}.jpg`); CustomerService.uploadDriverSignature(fileName, formData, { year: moment(signatureRequest?.route_date).format('YYYY') }).then(() => { SignatureRequestService.updateSignatureRequest(signatureRequest?.id, { status: 'done'}).then(() => { SignatureRequestService.getSignatureRequestById(urlParams.id).then((data) => { setSignatureRequest(data?.data); }) }) }).catch(() => { window.alert('Failed to upload signature. Please try again.'); }); }) } useEffect(() => { SignatureRequestService.getSignatureRequestById(urlParams.id).then((data) => { setSignatureRequest(data?.data); }) }, []); return ( <>
Driver Signature Collection
{ signatureRequest?.status === 'done' &&
The signature has been submitted.
} { signatureRequest?.status === 'active' &&
Draw your signature below:
} { (!signatureRequest || signatureRequest?.status === 'inactive') &&
Invalid Sigature Request
}
<> ); }; export default DriverSignature;