import React, { useEffect, useState } from "react"; import { Box, Button, Typography, Modal, FormControl, InputLabel, Select, MenuItem, Checkbox, ListItemText, FormHelperText, } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import { useForm, Controller } from "react-hook-form"; import { useSelector, useDispatch } from "react-redux"; import { RootState } from "../../redux/reducers.ts"; import { fetchVehicleBrands, vehicleList, } from "../../redux/slices/VehicleSlice"; import { CustomIconButton, CustomTextField, } from "../AddUserModal/styled.css"; // Assuming custom styled components interface FormData { name: string; registeredAddress: string; totalSlots: number; allowedCarIds: string[]; status: number; } interface EditStationModalProps { open: boolean; handleClose: () => void; handleUpdate: ( id: string, name: string, registeredAddress: string, totalSlots: number, allowedCarIds: number[] ) => void; editRow?: any; } const EditStationModal: React.FC = ({ open, handleClose, handleUpdate, editRow, }) => { const { control, handleSubmit, setValue, reset, formState: { errors }, } = useForm({ defaultValues: { name: "", registeredAddress: "", totalSlots: 0, status: 1, allowedCarIds: [], }, }); const dispatch = useDispatch(); const vehicles = useSelector( (state: RootState) => state.vehicleReducer.vehicles ); const vehicleBrands = useSelector( (state: RootState) => state.vehicleReducer.vehicleBrands ); const [selectedBrands, setSelectedBrands] = useState([]); const [selectedVehicles, setSelectedVehicles] = useState([]); useEffect(() => { dispatch(fetchVehicleBrands()); dispatch(vehicleList()); // Fetch vehicles when the component mounts }, [dispatch]); useEffect(() => { if (editRow) { setValue("name", editRow.name); setValue("registeredAddress", editRow.registeredAddress); setValue("totalSlots", editRow.totalSlots); setValue("status", editRow.status); setValue("allowedCarIds", editRow.allowedCarIds || []); setSelectedVehicles(editRow.allowedCarIds || []); } else { reset(); } }, [editRow, setValue, reset]); // Filter vehicles based on selected brands const filteredVehicles = vehicles.filter((vehicle) => selectedBrands.includes(vehicle.company) ); // Handle changes in vehicle brand selection const handleBrandChange = ( event: React.ChangeEvent<{ value: unknown }> ) => { setSelectedBrands(event.target.value as string[]); }; // Handle changes in vehicle selection const handleCheckboxChange = ( event: React.ChangeEvent<{ value: unknown }> ) => { const value = event.target.value as string[]; setSelectedVehicles(value); setValue("allowedCarIds", value); // Update allowedCarIds in form state }; const onSubmit = (data: FormData) => { const vehicleIds = vehicles .filter((vehicle) => selectedVehicles.includes(vehicle.name)) .map((vehicle) => Number(vehicle.id)); handleUpdate( editRow.id, data.name, data.registeredAddress, data.totalSlots, vehicleIds ); handleClose(); reset(); //setSelectedBrands([]); // Reset brands after submit setSelectedVehicles([]); // Reset selected vehicles }; console.log("editRow:", editRow); return ( { if (reason === "backdropClick") { return; } handleClose(); }} aria-labelledby="edit-station-modal" > {/* Header */} Edit Charging Station {/* Horizontal Line */} {/* Form */} {/* Station Name and Address */} Station Name ( )} /> Station Location ( )} /> {/* Total Slots */} Total Slots ( )} /> {/* Vehicle Brand Selection with Checkboxes */} Select Vehicle Brands Choose Brand {/* */} Vehicle Name Choose Vehicles {errors.allowedCarIds ? errors.allowedCarIds.message : ""} {/* Submit Button */} ); }; export default EditStationModal;