import React, { useState, useEffect } from "react"; import { useSelector } from "react-redux"; import { useNavigate, useParams } from "react-router-dom"; import { selectAllActiveDrivers, selectAllActiveVehicles } from "./../../store"; import { Modal, Button, Breadcrumb, Tabs, Tab } from "react-bootstrap"; import RouteCustomerEditor from "./RouteCustomerEditor"; import { AuthService, DailyRoutesTemplateService } from "../../services"; const CreateTemplateRoute = () => { const params = useParams(); const templateId = params.id; const routeType = new URLSearchParams(window.location.search).get('type'); const drivers = useSelector(selectAllActiveDrivers); const vehicles = useSelector(selectAllActiveVehicles); const navigate = useNavigate(); const [routeName, setRouteName] = useState(''); const [newDriver, setNewDriver] = useState(''); const [newVehicle, setNewVehicle] = useState(''); const [newRouteType, setNewRouteType] = useState(routeType || 'inbound'); const [newCustomerList, setNewCustomerList] = useState([]); const [errorMessage, setErrorMessage] = useState(undefined); const [disableSave, setDisableSave] = useState(false); const [template, setTemplate] = useState(null); const currentVehicle = vehicles.find((vehicle) => vehicle.id === newVehicle); useEffect(() => { if (!AuthService.canAddOrEditRoutes()) { window.alert('You haven\'t login yet OR this user does not have access to this page. Please change an admin account to login.') AuthService.logout(); navigate(`/login`); } }, []); useEffect(() => { // Fetch the template to get its name DailyRoutesTemplateService.getDailyRoutesTemplate(templateId).then(data => { setTemplate(data.data); }); }, [templateId]); const redirectToTemplate = () => { navigate(`/trans-routes/daily-templates/view/${templateId}`); } const validateRoute = () => { const errors = []; // Required fields validation if (!routeName || routeName.trim() === '') { errors.push('Route Name'); } if (!newRouteType || newRouteType === '') { errors.push('Route Type'); } if (!newDriver || newDriver === '') { errors.push('Driver'); } if (!newVehicle || newVehicle === '') { errors.push('Vehicle'); } if (errors.length > 0) { window.alert(`Please fill in the following required fields:\n${errors.join('\n')}`); return false; } return true; }; const saveRoute = () => { if (!disableSave) { if (!validateRoute()) { return; } setDisableSave(true); // Fetch the current template DailyRoutesTemplateService.getDailyRoutesTemplate(templateId).then(response => { const currentTemplate = response.data; // Create the new route object const newRoute = { name: routeName, route_customer_list: newCustomerList, driver: newDriver, vehicle: newVehicle, type: newRouteType, start_mileage: currentVehicle.mileage, status: [], start_time: null, end_time: null, estimated_start_time: null, checklist_result: [] }; // Add the new route to the template's routes array const updatedRoutes = [...(currentTemplate.routes || []), newRoute]; // Update the template const updatedTemplate = { ...currentTemplate, routes: updatedRoutes }; DailyRoutesTemplateService.updateDailyRoutesTemplate(templateId, updatedTemplate) .then(() => { setTimeout(() => { setDisableSave(false); redirectToTemplate(); }, 1000); }) .catch(err => { setDisableSave(false); setErrorMessage('Failed to save route to template'); }); }).catch(err => { setDisableSave(false); setErrorMessage('Failed to fetch template'); }); } } return ( <>