import React, {useEffect, useState} from "react"; import { useSelector,useDispatch } from "react-redux"; import { useParams, useNavigate } from "react-router-dom"; import { selectAllRoutes, transRoutesSlice, vehicleSlice, selectTomorrowAllRoutes, selectAllActiveDrivers, selectAllActiveVehicles, selectHistoryRoutes } from "./../../store"; import { Modal, Button } from "react-bootstrap"; import RouteCustomerEditor from "./RouteCustomerEditor"; import { AuthService, TransRoutesService } from "../../services"; import TimePicker from 'react-time-picker'; import 'react-time-picker/dist/TimePicker.css'; import moment from 'moment'; const RouteEdit = () => { const params = useParams(); const allRoutes = useSelector(selectAllRoutes); const tomorrowRoutes = useSelector(selectTomorrowAllRoutes); const historyRoutes = useSelector(selectHistoryRoutes); const drivers = useSelector(selectAllActiveDrivers); const vehicles = useSelector(selectAllActiveVehicles); // const currentRoute = (allRoutes.find(item => item.id === params.id)) || (tomorrowRoutes.find(item => item.id === params.id)) || (historyRoutes.find(item => item.id === params.id)) || {}; const currentVehicle = vehicles.find(item => item.id === currentRoute?.vehicle ) || []; const navigate = useNavigate(); const dispatch = useDispatch(); const { updateRoute} = transRoutesSlice.actions; const { updateVehicle} = vehicleSlice.actions; const [routeName, setRouteName] = useState(''); const [newDriver, setNewDriver] = useState(''); const [newVehicle, setNewVehicle] = useState(''); const [newRouteType, setNewRouteType] = useState(''); const [showAddCheckItem, setShowAddCheckItem] = useState(false); const [showCopyCheckItem, setShowCopyCheckItem] = useState(false); const [newChecklistItems, setNewChecklistItems] = useState([]); const [selectedRouteChecklistToCopy, setSelectedRouteChecklistToCopy] = useState({}); const [newCustomerList, setNewCustomerList] = useState([]); const [errorMessage, setErrorMessage] = useState(undefined); const [estimatedStartTime, setEstimatedStartTime] = useState(undefined); const [currentRoute, setCurrentRoute] = useState(undefined); const paramsQuery = new URLSearchParams(window.location.search); const scheduleDate = paramsQuery.get('dateSchedule'); const redirectToView = () => { if (scheduleDate) { navigate(`/trans-routes/${params.id}?dateSchedule=${scheduleDate}`); } else { navigate(`/trans-routes/${params.id}`); } } const redirectToDashboard = () => { navigate(`/trans-routes/dashboard`); } const softDeleteCurrentRoute = () => { const data = Object.assign({}, currentRoute, {status: ['disabled']}) dispatch(updateRoute({ id: currentRoute?.id, data, callback: redirectToDashboard })); // redirectToDashboard(); } const updateCurrentRoute = () => { try { if (!routeName || routeName === '') { setErrorMessage('Route Name is Required'); return;} if (!newRouteType || newRouteType === '') {setErrorMessage('Route Type is Required'); return;} if (!newDriver || newDriver === '') {setErrorMessage('Driver is Required'); return;} if (!newVehicle || newVehicle === '') {setErrorMessage('Vehicle is Required'); return;} let data = Object.assign({}, currentRoute, {name: routeName, driver: newDriver, vehicle: newVehicle, type: newRouteType, route_customer_list: newCustomerList}); if (estimatedStartTime && estimatedStartTime !== '') { data = Object.assign({}, data, {estimated_start_time: combineDateAndTime(currentRoute.schedule_date, estimatedStartTime)}) } let payload = { id: currentRoute?.id, data }; if ((historyRoutes.find(item => item.id === params.id)) || (scheduleDate && new Date(data.schedule_date) > new Date())) { payload = Object.assign({}, payload, {dateText: data.schedule_date}); if (scheduleDate && new Date(data.schedule_date) > new Date()) { payload = Object.assign({}, payload, {fromSchedule: true}); } } payload.callback = redirectToView; dispatch(updateRoute(payload)); // TransRoutesService.updateInProgress(data); // setTimeout(() => { // redirectToView(); // }, 5000); } catch(ex) { } } const addItemToArray = () => { const arr = [...newChecklistItems, '']; setNewChecklistItems(arr); } const saveChecklistItems = () => { const data = Object.assign({}, currentVehicle, {checklist: newChecklistItems}); dispatch(updateVehicle({ id: currentVehicle.id, data })); setShowAddCheckItem(false); } const copyChecklistItems = () => { const data = Object.assign({}, currentVehicle, {checklist: vehicles.find(vehicle => vehicle.id === selectedRouteChecklistToCopy.vehicle)?.checklist}); dispatch(updateVehicle({ id: currentVehicle.id, data })); setShowCopyCheckItem(false); } const closeAddCheckItemModal = () => { setNewChecklistItems([]) setShowAddCheckItem(false); } const showAddCheckItemModal = () => { setNewChecklistItems(currentVehicle.checklist) setShowAddCheckItem(true); } const closeCopyCheckItemModal = () => { setSelectedRouteChecklistToCopy({}); setShowCopyCheckItem(false); } const showCopyCheckItemModal = () => { setShowCopyCheckItem(true); } const combineDateAndTime = (date, time) => { const dateObj = moment(date); const timeObj = moment(time, 'HH:mm'); dateObj.set({ hour: timeObj.get('hour'), minute: timeObj.get('minute'), second: timeObj.get('second') }) return dateObj; } 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`); } TransRoutesService.getRoute(params.id).then(data => { setCurrentRoute(data?.data); setRouteName(data?.data?.name); setNewDriver(data?.data?.driver); setNewVehicle(data?.data?.vehicle); setNewRouteType(data?.data?.type); setEstimatedStartTime(data?.data?.estimated_start_time && new Date(data?.data?.estimated_start_time)); setNewCustomerList(data?.data?.route_customer_list); setErrorMessage(undefined); }) }, []); // useEffect(() => { // if (currentRoute) { // setRouteName(currentRoute.name); // setNewDriver(currentRoute.driver); // setNewVehicle(currentRoute.vehicle); // setNewRouteType(currentRoute.type); // setEstimatedStartTime(currentRoute.estimated_start_time && new Date(currentRoute.estimated_start_time)); // setNewCustomerList(currentRoute.route_customer_list); // } // setErrorMessage(undefined); // }, [currentRoute]) return ( <>
| {item} |