-
+
{errors.id && (
{errors.id.message}
diff --git a/src/components/Project/Infrastructure/TaskModel.jsx b/src/components/Project/Infrastructure/TaskModel.jsx
index 791b99ee..ee3c1ff1 100644
--- a/src/components/Project/Infrastructure/TaskModel.jsx
+++ b/src/components/Project/Infrastructure/TaskModel.jsx
@@ -1,12 +1,11 @@
import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
-import { zodResolver } from '@hookform/resolvers/zod';
+import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
-import {useDispatch} from "react-redux";
-import {changeMaster} from "../../../slices/localVariablesSlice";
+import { useDispatch } from "react-redux";
+import { changeMaster } from "../../../slices/localVariablesSlice";
import useMaster from "../../../hooks/masterHook/useMaster";
-// Define Zod validation schema
const taskSchema = z.object({
buildingID: z.string().min(1, "Building is required"),
floorId: z.string().min(1, "Floor is required"),
@@ -18,6 +17,8 @@ const taskSchema = z.object({
const defaultModel = {
id: "0",
+ buildingID: "0",
+ floorId: "0",
workAreaId: 0,
activityID: 0,
plannedWork: 0,
@@ -28,59 +29,39 @@ const TaskModel = ({
project,
onSubmit,
clearTrigger,
- onClearComplete,onClose
-} )=>{
- const dispatch = useDispatch()
- const {data:activities,loading} = useMaster()
+ onClearComplete,
+ onClose,
+}) => {
+ const dispatch = useDispatch();
+ const { data: activities } = useMaster();
const [formData, setFormData] = useState(defaultModel);
const [selectedBuilding, setSelectedBuilding] = useState(null);
const [selectedFloor, setSelectedFloor] = useState(null);
const [selectedWorkArea, setSelectedWorkArea] = useState(null);
const [selectedActivity, setSelectedActivity] = useState(null);
+ const [isSubmitting, setIsSubmitting] = useState(false);
-
- const { register, handleSubmit, formState: { errors },reset } = useForm({
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ reset,
+ } = useForm({
resolver: zodResolver(taskSchema),
- defaultValues: formData,
+ defaultValues: defaultModel,
});
useEffect(() => {
if (clearTrigger) {
- setFormData(defaultModel);
+ resetForm();
onClearComplete();
}
}, [clearTrigger, onClearComplete]);
- // Handle input changes
- const handleChange = (e) => {
- const { name, value } = e.target;
- const activity = activities.find((b) => b.id === Number(value));
- setFormData({ ...formData, [name]: value });
- };
-
- const handleActivityChange = (e) => {
- const { value } = e.target;
- const activity = activities.find((b) => b.id === Number(value));
-
- setFormData({ ...formData, ["activityID"]: value });
- setSelectedActivity(activity);
- };
-
- const handleWorkAreaChange = (e) => {
- const { value } = e.target;
- const workArea = selectedFloor.workAreas.find((b) => b.id === Number(value));
- setSelectedWorkArea(workArea);
- setFormData({ ...formData, ["workAreaId"]: value });
- };
-
- const handleFloorChange = (e) => {
- const { value } = e.target;
- const floor = selectedBuilding.floors.find((b) => b.id === Number(value));
- setSelectedFloor(floor);
- setSelectedWorkArea(null);
- setSelectedActivity(null);
- setFormData(defaultModel);
- };
+ useEffect(() => {
+ dispatch(changeMaster("Activity"));
+ resetForm();
+ }, []);
const handleBuildingChange = (e) => {
const { value } = e.target;
@@ -89,95 +70,138 @@ const TaskModel = ({
setSelectedFloor(null);
setSelectedWorkArea(null);
setSelectedActivity(null);
+ reset({
+ ...defaultModel,
+ buildingID: value,
+ });
+ };
+
+ const handleFloorChange = (e) => {
+ const { value } = e.target;
+ const floor = selectedBuilding.floors.find((b) => b.id === Number(value));
+ setSelectedFloor(floor);
+ setSelectedWorkArea(null);
+ setSelectedActivity(null);
+ reset((prev) => ({
+ ...prev,
+ floorId: value,
+ workAreaId: 0,
+ activityID: 0,
+ }));
+ };
+
+ const handleWorkAreaChange = (e) => {
+ const { value } = e.target;
+ const workArea = selectedFloor.workAreas.find(
+ (b) => b.id === Number(value)
+ );
+ setSelectedWorkArea(workArea);
+ reset((prev) => ({
+ ...prev,
+ workAreaId: Number(value),
+ }));
+ };
+
+ const handleActivityChange = (e) => {
+ const { value } = e.target;
+ const activity = activities.find((b) => b.id === Number(value));
+ setSelectedActivity(activity);
+ reset((prev) => ({
+ ...prev,
+ activityID: Number(value),
+ }));
+ };
+
+ const onSubmitForm = async (data) => {
+ setIsSubmitting(true);
+ await onSubmit(data);
+ reset({
+ buildingID: data.buildingID,
+ floorId: data.floorId,
+ workAreaId: data.workAreaId,
+ activityID: data.activityID,
+ plannedWork: 0,
+ completedWork: 0,
+ });
+ setIsSubmitting(false);
+ };
+
+ const resetForm = () => {
setFormData(defaultModel);
+ setSelectedBuilding(null);
+ setSelectedFloor(null);
+ setSelectedWorkArea(null);
+ setSelectedActivity(null);
+ reset(defaultModel);
};
- const onSubmitForm = ( data ) =>
- {
- onSubmit( data );
- setSelectedActivity(null),
- setSelectedWorkArea(null)
- reset( {
- plannedWork: 0,
- completedWork:0
-
- })
- };
-
- useEffect( () =>
- {
-
- dispatch(changeMaster("Activity")),
- () =>{
- resetVlaue ()
- }
- },[])
- const resetVlaue = () =>
- {
- setSelectedBuilding( null )
- setSelectedFloor( null )
- setSelectedWorkArea( null )
- setSelectedActivity(null)
- reset( {
- plannedWork: 0,
- completedWork:0
- })
- }
return (
)}
@@ -214,20 +241,25 @@ const TaskModel = ({
- {errors.activityID &&
{errors.activityID.message}
}
+ {errors.activityID && (
+
{errors.activityID.message}
+ )}
)}
@@ -240,12 +272,12 @@ const TaskModel = ({
- {errors.plannedWork &&
{errors.plannedWork.message}
}
+ {errors.plannedWork && (
+
{errors.plannedWork.message}
+ )}
)}
@@ -258,12 +290,14 @@ const TaskModel = ({
- {errors.completedWork &&
{errors.completedWork.message}
}
+ {errors.completedWork && (
+
+ {errors.completedWork.message}
+
+ )}
)}
@@ -276,8 +310,6 @@ const TaskModel = ({
@@ -286,7 +318,11 @@ const TaskModel = ({
-
diff --git a/src/components/Project/Infrastructure/WorkAreaModel.jsx b/src/components/Project/Infrastructure/WorkAreaModel.jsx
index 951575b8..f6beaddd 100644
--- a/src/components/Project/Infrastructure/WorkAreaModel.jsx
+++ b/src/components/Project/Infrastructure/WorkAreaModel.jsx
@@ -2,14 +2,18 @@ import React, { useState, useEffect } from "react";
import { set, useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
+import showToast from "../../../services/toastService";
// Zod schema for form validation
-const workAreaSchema = z.object( {
- id:z.string().nonempty("Floor is required"),
-
+const workAreaSchema = z.object({
+ id: z.string().nonempty("Floor is required"),
+
buildingId: z.string().nonempty("Building is required"),
floorId: z.string().nonempty("Floor is required"),
- areaName: z.string().nonempty( "Work Area Name is required" ).min( 3, "Name must be at least 3 characters long" ),
+ areaName: z
+ .string()
+ .nonempty("Work Area Name is required")
+ .min(3, "Name must be at least 3 characters long"),
});
// Default form data
@@ -19,17 +23,30 @@ const defaultModel = {
floorId: "0",
};
-const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClose }) => {
+const WorkAreaModel = ({
+ project,
+ onSubmit,
+ clearTrigger,
+ onClearComplete,
+ onClose,
+}) => {
const [selectedBuilding, setSelectedBuilding] = useState(null);
- const [ selectedFloor, setSelectedFloor ] = useState( null );
- const [selectdWorkArea,setWorkArea] = useState()
+ const [selectedFloor, setSelectedFloor] = useState(null);
+ const [selectdWorkArea, setWorkArea] = useState();
- const { register, handleSubmit, formState: { errors }, setValue, reset, watch } = useForm({
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ setValue,
+ reset,
+ watch,
+ } = useForm({
resolver: zodResolver(workAreaSchema), // Use Zod resolver for validation
defaultValues: defaultModel,
});
- const floorId = watch( "floorId" ); // Watch the floorId for conditional rendering
+ const floorId = watch("floorId"); // Watch the floorId for conditional rendering
useEffect(() => {
if (clearTrigger) {
@@ -40,25 +57,22 @@ const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClo
}
}, [clearTrigger, onClearComplete, reset]);
- const handleWorkAreaChange = ( e ) =>
- {
-
-
+ const handleWorkAreaChange = (e) => {
const { value } = e.target;
if (value === "0") {
- setValue("id", "0"); // Create New Work Area
- setValue( "areaName", "" );
-
- setWorkArea(String(0))
- } else {
- const workArea = selectedFloor?.workAreas.find((b) => b.id === Number(value));
- if ( workArea )
- {
- setValue("id", String(workArea.id)); // Set id as a string
- setValue("areaName", workArea.areaName);
- setWorkArea(String(workArea.id))
+ setValue("id", "0"); // Create New Work Area
+ setValue("areaName", "");
+ setWorkArea(String(0));
+ } else {
+ const workArea = selectedFloor?.workAreas.find(
+ (b) => b.id === Number(value)
+ );
+ if (workArea) {
+ setValue("id", String(workArea.id)); // Set id as a string
+ setValue("areaName", workArea.areaName);
+ setWorkArea(String(workArea.id));
}
}
};
@@ -69,8 +83,8 @@ const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClo
if (floor) {
setSelectedFloor(floor);
- setValue("floorId", floor.id); // Update floorId
- setValue("id", "0"); // Reset Work Area ID for new area creation
+ setValue("floorId", floor.id); // Update floorId
+ setValue("id", "0"); // Reset Work Area ID for new area creation
setValue("areaName", ""); // Reset Work Area Name when changing floor
} else {
setSelectedFloor(null);
@@ -88,23 +102,31 @@ const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClo
reset(defaultModel); // Reset the form when a new building is selected
};
- const onSubmitForm = ( data ) =>
- {
-
+ const onSubmitForm = (data) => {
let WorkArea = {
id: data.id,
areaName: data.areaName,
floorId: data.floorId,
- buildingId:data.buildingId
+ buildingId: data.buildingId,
+ };
+ onSubmit(WorkArea);
+
+ reset({
+ id: "0",
+ areaName: "",
+ });
+ if (data.id !== "0") {
+ showToast("WorkArea updated successfully.", "success");
+ } else {
+ showToast("WorkArea created successfully.", "success");
}
- onSubmit(WorkArea); // Send the final data to the parent
};
const handleCancel = () => {
- reset(defaultModel); // Reset the form to initial state
+ reset(defaultModel);
setSelectedFloor(null);
- setSelectedBuilding( null );
- onClose()
+ setSelectedBuilding(null);
+ onClose();
};
return (
@@ -112,14 +134,21 @@ const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClo