diff --git a/src/components/Directory/AssignedBucket.jsx b/src/components/Directory/AssignedBucket.jsx
new file mode 100644
index 00000000..e584f77c
--- /dev/null
+++ b/src/components/Directory/AssignedBucket.jsx
@@ -0,0 +1,14 @@
+import React from "react";
+import EmployeeList from "./EmployeeList";
+
+const AssignedBucket = ({ employees, selectedBucket, onChange }) => {
+ if (!selectedBucket) return null;
+
+ return (
+
Loading...
;
+ if (filteredBuckets.length === 0) return No buckets found.
;
+
+ return (
+
diff --git a/src/components/Directory/NotesCardViewDirectory.jsx b/src/components/Directory/NotesCardViewDirectory.jsx
index b8a16a40..95619f61 100644
--- a/src/components/Directory/NotesCardViewDirectory.jsx
+++ b/src/components/Directory/NotesCardViewDirectory.jsx
@@ -9,8 +9,8 @@ const NotesCardViewDirectory = ({
searchText,
filterAppliedNotes,
}) => {
+
const projectId = useSelectedProject();
-
const [allNotes, setAllNotes] = useState([]);
const [filteredNotes, setFilteredNotes] = useState([]);
const [loading, setLoading] = useState(true);
@@ -29,7 +29,7 @@ const NotesCardViewDirectory = ({
const fetchNotes = async (projId) => {
setLoading(true);
try {
- const response = await DirectoryRepository.GetNotes(1000, 1, projId); // ✅ pass projectId
+ const response = await DirectoryRepository.GetNotes(1000, 1, projId);
const fetchedNotes = response.data?.data || [];
setAllNotes(fetchedNotes);
setNotesForFilter(fetchedNotes)
diff --git a/src/hooks/useDirectory.js b/src/hooks/useDirectory.js
index f5ecb35c..e3f3d301 100644
--- a/src/hooks/useDirectory.js
+++ b/src/hooks/useDirectory.js
@@ -1,6 +1,7 @@
import { useEffect, useState } from "react";
import { DirectoryRepository } from "../repositories/DirectoryRepository";
import { cacheData, getCachedData } from "../slices/apiDataManager";
+import { useQuery } from "@tanstack/react-query";
export const useDirectory = (isActive,prefernceContacts) => {
const [contacts, setContacts] = useState([]);
@@ -210,3 +211,22 @@ export const useDesignation = () => {
return { designationList, loading, error };
};
+
+// ------------------------------Query--------------------------------------------
+
+export const useBucketList =()=>{
+ return useQuery({
+ queryKey:["bucketList"],
+ queryFn:async()=>{
+ const resp = await DirectoryRepository.GetBucktes();
+ return resp.data;
+ }
+ })
+}
+
+export const useDirectoryNotes=(pageSize, pageNumber, filter, searchString)=>{
+ return useQuery({
+ queryKey:["directoryNotes",pageSize, pageNumber, filter, searchString],
+ queryFn:async()=> await DirectoryRepository.GetBucktes(pageSize, pageNumber, filter, searchString),
+ })
+}
\ No newline at end of file
diff --git a/src/pages/Directory/ContactsPage.jsx b/src/pages/Directory/ContactsPage.jsx
new file mode 100644
index 00000000..b048da99
--- /dev/null
+++ b/src/pages/Directory/ContactsPage.jsx
@@ -0,0 +1,23 @@
+import React, { useEffect } from 'react'
+import { useFab } from '../../Context/FabContext';
+
+const ContactsPage = () => {
+ const {setOffcanvasContent,setShowTrigger} = useFab()
+ useEffect(() => {
+ setShowTrigger(true);
+ setOffcanvasContent(
+ "Contacts Filters",
+
hlleo
+ );
+
+ return () => {
+ setShowTrigger(false);
+ setOffcanvasContent("", null);
+ };
+ }, []);
+ return (
+
ContactsPage
+ )
+}
+
+export default ContactsPage
\ No newline at end of file
diff --git a/src/pages/Directory/Directory.jsx b/src/pages/Directory/Directory.jsx
index 23b01267..856f2a95 100644
--- a/src/pages/Directory/Directory.jsx
+++ b/src/pages/Directory/Directory.jsx
@@ -489,4 +489,5 @@ const Directory = ({ IsPage = true, prefernceContacts }) => {
);
};
-export default Directory;
\ No newline at end of file
+export default Directory;
+
diff --git a/src/pages/Directory/DirectoryPage.jsx b/src/pages/Directory/DirectoryPage.jsx
new file mode 100644
index 00000000..5905aedb
--- /dev/null
+++ b/src/pages/Directory/DirectoryPage.jsx
@@ -0,0 +1,187 @@
+import {
+ useState,
+ Suspense,
+ lazy,
+ createContext,
+ useContext,
+ useEffect,
+} from "react";
+import Breadcrumb from "../../components/common/Breadcrumb";
+import { useFab } from "../../Context/FabContext";
+import { useBucketList, useBuckets } from "../../hooks/useDirectory";
+import GlobalModel from "../../components/common/GlobalModel";
+import ManageBucket from "../../components/Directory/ManageBucket";
+
+const NotesPage = lazy(() => import("./NotesPage"));
+const ContactsPage = lazy(() => import("./ContactsPage"));
+
+export const DirectoryContext = createContext();
+export const useDirectoryContext = () => {
+ const context = useContext(DirectoryContext);
+
+ if (!context) {
+ return (
+
+
Your Action is out of context
+
+ );
+ }
+ return context;
+};
+export default function DirectoryPage({ IsPage = true }) {
+ const [activeTab, setActiveTab] = useState("notes");
+ const { setActions } = useFab();
+ const [isOpenBucket, setOpenBucket] = useState(false);
+
+ const { data, isLoading, isError, error } = useBucketList();
+
+ const handleTabClick = (tab, e) => {
+ e.preventDefault();
+ setActiveTab(tab);
+ };
+
+ useEffect(() => {
+ const actions = [];
+
+ if (IsPage) {
+ actions.push({
+ label: "Manage Bucket",
+ icon: "fa-solid fa-bucket fs-5",
+ color: "primary",
+ onClick: () => setOpenBucket(true),
+ });
+ }
+ if (data?.length > 0) {
+ actions.push({
+ label: "New Contact",
+ icon: "bx bx-plus-circle",
+ color: "warning",
+ // onClick: ()=>setOpenBucket(true),
+ });
+ }
+
+ setActions(actions);
+
+ return () => setActions([]);
+ }, [IsPage, data]);
+
+ if (isLoading) return
Loading...
;
+ if (isError) return
{error.message}
;
+ return (
+ <>
+
+
+
+
+
+
+ }
+ >
+ {activeTab === "notes" &&
}
+ {activeTab === "contacts" &&
}
+
+
+
+ {isOpenBucket && (
+ setOpenBucket(false)}
+ >
+ setOpenBucket(false)} />
+
+ )}
+
+
+ >
+ );
+}
diff --git a/src/pages/Directory/NotesPage.jsx b/src/pages/Directory/NotesPage.jsx
new file mode 100644
index 00000000..c282bec6
--- /dev/null
+++ b/src/pages/Directory/NotesPage.jsx
@@ -0,0 +1,26 @@
+import React, { useEffect } from 'react'
+import { useFab } from '../../Context/FabContext';
+
+const NotesPage = () => {
+
+ const {setOffcanvasContent,setShowTrigger} = useFab()
+ useEffect(() => {
+ setShowTrigger(true);
+ setOffcanvasContent(
+ "Notes Filters",
+