diff --git a/src/components/Directory/AssignedBucket.jsx b/src/components/Directory/AssignedBucket.jsx index e584f77c..b0db2ef0 100644 --- a/src/components/Directory/AssignedBucket.jsx +++ b/src/components/Directory/AssignedBucket.jsx @@ -1,13 +1,67 @@ -import React from "react"; +import { useState, useEffect } from "react"; import EmployeeList from "./EmployeeList"; +import { useAllEmployees } from "../../hooks/useEmployees"; +import showToast from "../../services/toastService"; +import { DirectoryRepository } from "../../repositories/DirectoryRepository"; +import { useAssignEmpToBucket } from "../../hooks/useDirectory"; -const AssignedBucket = ({ employees, selectedBucket, onChange }) => { - if (!selectedBucket) return null; +const AssignedBucket = ({ selectedBucket, handleClose }) => { + const { employeesList } = useAllEmployees(false); + const [selectedEmployees, setSelectedEmployees] = useState([]); + + useEffect(() => { + if (selectedBucket) { + const preselected = employeesList + .filter((emp) => selectedBucket?.employeeIds?.includes(emp.employeeId)) + .map((emp) => ({ ...emp, isActive: true })); + + setSelectedEmployees(preselected); + } + }, [selectedBucket, employeesList]); + + const { mutate: AssignEmployee, isPending } = useAssignEmpToBucket(() => + handleClose() + ); + + const handleSubmit = async (e) => { + e.preventDefault(); + + const existingEmployeeIds = selectedBucket?.employeeIds || []; + + const employeesToUpdate = selectedEmployees.filter((emp) => { + const isExisting = existingEmployeeIds.includes(emp.employeeId); + return (!isExisting && emp.isActive) || (isExisting && !emp.isActive); + }); + + if (employeesToUpdate.length === 0) { + showToast("No changes to update", "info"); + return; + } + + AssignEmployee({ + bucketId: selectedBucket.id, + EmployeePayload: employeesToUpdate.map((emp) => ({ + employeeId: emp.employeeId, + isActive: emp.isActive, + })), + }); + }; return ( -
- -
+
+ + +
+ +
+ ); }; diff --git a/src/components/Directory/BucketForm.jsx b/src/components/Directory/BucketForm.jsx index 4c4864e3..418daebd 100644 --- a/src/components/Directory/BucketForm.jsx +++ b/src/components/Directory/BucketForm.jsx @@ -1,9 +1,10 @@ -import React from "react"; +import { useEffect } from "react"; import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; import { bucketScheam } from "./DirectorySchema"; +import { zodResolver } from "@hookform/resolvers/zod"; +import Label from "../common/Label"; -const BucketForm = ({ onSubmit, selectedBucket, onCancel, isSubmitting }) => { +const BucketForm = ({ selectedBucket, mode, onSubmit, onCancel, isPending }) => { const { register, handleSubmit, @@ -11,33 +12,83 @@ const BucketForm = ({ onSubmit, selectedBucket, onCancel, isSubmitting }) => { formState: { errors }, } = useForm({ resolver: zodResolver(bucketScheam), - defaultValues: { - name: selectedBucket?.name || "", - description: selectedBucket?.description || "", - }, + defaultValues: selectedBucket || { name: "", description: "" }, }); + useEffect(() => { + reset(selectedBucket || { name: "", description: "" }); + }, [selectedBucket, reset]); + + const isEditMode = mode === "edit"; + const isCreateMode = mode === "create"; + return ( -
-
- - - {errors.name && {errors.name.message}} +
+
+ + + {/* Show edit toggle only for existing bucket in edit mode */} + {/* {isEditMode && ( + + )} */}
-
- -