From b02c599130b40b02eb8dd479e5f79952ea65dc8e Mon Sep 17 00:00:00 2001
From: Pramod Mahajan Add Employee Add Employee
+
{`${employee.firstName} ${employee.lastName}`}
Role
- Status
- Bucket
+ Email
{employees.length === 0 ? (
-
) : filteredEmployees.length === 0 ? (
-
+
-
) : (
@@ -103,36 +125,18 @@ const EmployeeList = ({ employees }) => {
handleCheckboxChange(employee.id)}
/>
-
+
- {employee.jobRole}
-
-
-
- {employee.isActive ? "Active" : "Inactive"}
-
-
-
-
- {" "}
- {employee.jobRole}
-
+ {employee.email}
))
diff --git a/src/components/Directory/ManageBucket.jsx b/src/components/Directory/ManageBucket.jsx
index 60f59e5b..f33f467b 100644
--- a/src/components/Directory/ManageBucket.jsx
+++ b/src/components/Directory/ManageBucket.jsx
@@ -16,7 +16,8 @@ import ConfirmModal from "../common/ConfirmModal";
const ManageBucket = () => {
const [bucketList, setBucketList] = useState([]);
const { employeesList } = useAllEmployees(false);
- const { buckets, loading,refetch } = useBuckets();
+ const [selectedEmployee, setSelectEmployee] = useState([]);
+ const { buckets, loading, refetch } = useBuckets();
const [action_bucket, setAction_bucket] = useState(false);
const [isSubmitting, setSubmitting] = useState(false);
const [selected_bucket, select_bucket] = useState(null);
@@ -54,28 +55,89 @@ const ManageBucket = () => {
const onSubmit = async (data) => {
setSubmitting(true);
+
try {
+ const cache_buckets = getCachedData("buckets") || [];
let response;
+ // Utility: Compare arrays regardless of order
+ const arraysAreEqual = (a, b) => {
+ if (a.length !== b.length) return false;
+ const setA = new Set(a);
+ const setB = new Set(b);
+ return [...setA].every((id) => setB.has(id));
+ };
+
+ // UPDATE existing bucket
if (selected_bucket) {
- let payload = { ...data, id: selected_bucket.id };
+ const payload = { ...data, id: selected_bucket.id };
+
+ // 1. Update bucket details
response = await DirectoryRepository.UpdateBuckets(
selected_bucket.id,
payload
);
- const cache_buckets = getCachedData("buckets") || [];
+
const updatedBuckets = cache_buckets.map((bucket) =>
bucket.id === selected_bucket.id ? response?.data : bucket
);
+
cacheData("buckets", updatedBuckets);
setBucketList(updatedBuckets);
+
+ // 2. Update employee assignments if they changed
+ const existingEmployeeIds = selected_bucket?.employeeIds || [];
+ const employeesToUpdate = selectedEmployee.filter((emp) => {
+ const isExisting = existingEmployeeIds.includes(emp.employeeId);
+ return (!isExisting && emp.isActive) || (isExisting && !emp.isActive);
+ });
+
+ // Create a filtered list of active employee IDs to compare
+ const newActiveEmployeeIds = selectedEmployee
+ .filter((emp) => {
+ const isExisting = existingEmployeeIds.includes(emp.employeeId);
+ return (
+ (!isExisting && emp.isActive) || (isExisting && !emp.isActive)
+ );
+ })
+ .map((emp) => emp.employeeId);
+
+ if (
+ !arraysAreEqual(newActiveEmployeeIds, existingEmployeeIds) &&
+ employeesToUpdate.length != 0
+ ) {
+ try {
+ response = await DirectoryRepository.AssignedBuckets(
+ selected_bucket.id,
+ employeesToUpdate
+ );
+ } catch (assignError) {
+ const assignMessage =
+ assignError?.response?.data?.message ||
+ assignError?.message ||
+ "Error assigning employees.";
+ showToast(assignMessage, "error");
+ }
+ }
+ const updatedData = cache_buckets?.map((bucket) =>
+ bucket.id === response?.data?.id ? response.data : bucket
+ );
+
+ cacheData( "buckets", updatedData );
+
+ setBucketList(updatedData)
showToast("Bucket Updated Successfully", "success");
- } else {
+ }
+
+ // CREATE new bucket
+ else {
response = await DirectoryRepository.CreateBuckets(data);
- const cache_buckets = getCachedData("buckets") || [];
+
const updatedBuckets = [...cache_buckets, response?.data];
cacheData("buckets", updatedBuckets);
- setBucketList(updatedBuckets);
+ setBucketList( updatedBuckets );
+
+
showToast("Bucket Created Successfully", "success");
}
@@ -86,18 +148,20 @@ const ManageBucket = () => {
error?.message ||
"Error occurred during API call";
showToast(message, "error");
+ } finally {
+ setSubmitting(false);
}
};
const handleDeleteContact = async () => {
try {
- const resp = await DirectoryRepository.DeleteBucket( deleteBucket );
- const cache_buckets = getCachedData("buckets") || [];
- const updatedBuckets = cache_buckets.filter((bucket) =>
- bucket.id != deleteBucket
- );
- cacheData("buckets", updatedBuckets);
- setBucketList(updatedBuckets);
+ const resp = await DirectoryRepository.DeleteBucket(deleteBucket);
+ const cache_buckets = getCachedData("buckets") || [];
+ const updatedBuckets = cache_buckets.filter(
+ (bucket) => bucket.id != deleteBucket
+ );
+ cacheData("buckets", updatedBuckets);
+ setBucketList(updatedBuckets);
showToast("Bucket deleted successfully", "success");
setDeleteBucket(null);
} catch (error) {
@@ -131,7 +195,6 @@ const ManageBucket = () => {
const name = bucket.name?.toLowerCase();
return name?.includes(term);
});
-
return (
<>
{deleteBucket && (
@@ -173,13 +236,14 @@ const ManageBucket = () => {
placeholder="Search Bucket ..."
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
- />
- rrefetch()}
- />
+ />
+ refetch()}
+ />
)}
@@ -251,36 +315,37 @@ const ManageBucket = () => {
)}
- {sortedBucktesList.map((bucket) => (
-
-
- ))}
+ {!loading &&
+ sortedBucktesList.map((bucket) => (
+
- {" "}
- {bucket.name}
-
-
- {bucket.description}
-
-
-
-
+
+ ))}
+ {" "}
+ {bucket.name}
+
+
+ {bucket.description}
+
+
+
+ {contact.organization}
+ {contact.organization}
--
2.43.0
From 51f7e473f40456322fa67a0d4509e6cae5cfd52a Mon Sep 17 00:00:00 2001
From: Pramod Mahajan
-
+
+
- Organization
-
+ Organization
+
Category
{IsActive && Action }
--
2.43.0
From 416f8e662161bde170933ec971bd0be2a2a95907 Mon Sep 17 00:00:00 2001
From: Pramod Mahajan
-
);
};
--
2.43.0
From ba5b07b6087c166586b099924f3644d23b383734 Mon Sep 17 00:00:00 2001
From: Pramod Mahajan
- {
- if ( IsActive )
- {
- setIsOpenModalNote(true)
- setOpen_contact(contact)
- }
- }}>
-
+
-
- {
+ if (IsActive) {
+ setIsOpenModalNote(true);
+ setOpen_contact(contact);
+ }
+ }}>
+
- {contact?.name || ""}
-
+
+
+
+
-
+
+ {contact.organization}
+
- {/* Emails */}
-
-
+
+
+ {contact?.contactCategory?.name}
+
+
-
-
+ {IsActive && (
+
+ {
+ setSelectedContact(contact);
+ setIsOpenModal(true);
+ }}>
+ IsDeleted(contact.id)}>
+
+ )}
+{contact.organization}
-
-
-
-
-
- {/* Actions */}
- {IsActive &&
-
-
- {
- setSelectedContact( contact )
- setIsOpenModal( true )
- }}>
- IsDeleted( contact.id )}>
-
- }
- Contacts
{bucket.description}
+ {bucket.numberOfContacts}
@@ -386,7 +392,7 @@ const ManageBucket = () => {
+ {!isLoading && contactProfile?.notes.length == 0 && !addNote && ( +
No Notes Found
+ )} + + )} {!IsActive && ( -{!isLoading && contactNotes.length == 0 && !addNote && (
No Notes Found
) } - ++ {!isLoading && contactNotes.length == 0 && !addNote && ( +
No Notes Found
+ )} + )} diff --git a/src/repositories/DirectoryRepository.jsx b/src/repositories/DirectoryRepository.jsx index 7d614aca..c123cf82 100644 --- a/src/repositories/DirectoryRepository.jsx +++ b/src/repositories/DirectoryRepository.jsx @@ -17,7 +17,7 @@ export const DirectoryRepository = { GetContactProfile: ( id ) => api.get( `/api/directory/profile/${ id }` ), CreateNote: ( data ) => api.post( '/api/directory/note', data ), - GetNote: ( id,isActive ) => api.get( `/api/directory/note/${ id }?active=${isActive}` ), + GetNote: ( id,isActive ) => api.get( `/api/directory/notes/${ id }?active=${isActive}` ), UpdateNote: ( id, data ) => api.put( `/api/directory/note/${ id }`, data ), DeleteNote:(id)=> api.delete(`/api/directory/note/${ id }`) } \ No newline at end of file -- 2.43.0