+ {/* Filter Dropdown */}
+
+
+
+ {/* Notes List */}
+
{currentItems.map((noteItem) => (
(n.id === updatedNote.id ? updatedNote : n))
);
}}
- onNoteDelete={() => {
- fetchNotes();
- }}
+ onNoteDelete={() => fetchNotes()}
/>
))}
+ {/* Pagination */}
{totalPages > 1 && (
@@ -128,7 +145,8 @@ const NotesCardViewDirectory = ({ notes, setNotes, searchText, selectedNoteNames
return (
@@ -421,9 +425,10 @@ const Directory = ({ IsPage = true, prefernceContacts }) => {
)}
diff --git a/src/pages/Directory/DirectoryPageHeader.jsx b/src/pages/Directory/DirectoryPageHeader.jsx
index 40c19f36..e0152532 100644
--- a/src/pages/Directory/DirectoryPageHeader.jsx
+++ b/src/pages/Directory/DirectoryPageHeader.jsx
@@ -19,12 +19,19 @@ const DirectoryPageHeader = ({
IsActive,
contactsToExport,
notesToExport,
- selectedNoteNames, // ✅ Changed to array
- setSelectedNoteNames, // ✅ Changed to array
+ selectedNoteNames,
+ setSelectedNoteNames,
+ notesForFilter,
+ setFilterAppliedNotes
}) => {
const [filtered, setFiltered] = useState(0);
-
+ const [filteredNotes, setFilteredNotes] = useState([]);
const [noteCreators, setNoteCreators] = useState([]);
+ const [allCreators, setAllCreators] = useState([]);
+ const [allOrganizations, setAllOrganizations] = useState([]);
+ const [filteredOrganizations, setFilteredOrganizations] = useState([]);
+ const [selectedCreators, setSelectedCreators] = useState([]); // Corrected to setSelectedCreators
+ const [selectedOrgs, setSelectedOrgs] = useState([]);
useEffect(() => {
setFiltered(tempSelectedBucketIds?.length + tempSelectedCategoryIds?.length);
@@ -55,6 +62,23 @@ const DirectoryPageHeader = ({
}
}, [viewType]);
+ useEffect(() => {
+ const creatorsSet = new Set();
+ const orgsSet = new Set();
+
+ notesForFilter.forEach((note) => {
+ const creator = `${note.createdBy?.firstName || ""} ${note.createdBy?.lastName || ""}`.trim();
+ if (creator) creatorsSet.add(creator);
+
+ const org = note.organizationName;
+ if (org) orgsSet.add(org);
+ });
+
+ setAllCreators([...creatorsSet].sort());
+ setAllOrganizations([...orgsSet].sort());
+ setFilteredOrganizations([...orgsSet].sort());
+ }, [notesForFilter])
+
const handleToggleNoteName = (name) => {
setSelectedNoteNames(prevSelectedNames => {
@@ -66,6 +90,45 @@ const DirectoryPageHeader = ({
});
};
+ const updateFilteredOrganizations = () => {
+ if (selectedCreators.length === 0) {
+ setFilteredOrganizations(allOrganizations);
+ return;
+ }
+
+ const filteredOrgsSet = new Set();
+ notesForFilter.forEach((note) => {
+ const creator = `${note.createdBy?.firstName || ""} ${note.createdBy?.lastName || ""}`.trim();
+ if (selectedCreators.includes(creator)) {
+ if (note.organizationName) {
+ filteredOrgsSet.add(note.organizationName);
+ }
+ }
+ });
+
+ setFilteredOrganizations([...filteredOrgsSet].sort());
+ };
+
+ const handleToggleCreator = (name) => {
+ const updated = selectedCreators.includes(name)
+ ? selectedCreators.filter((n) => n !== name)
+ : [...selectedCreators, name];
+
+ setSelectedCreators(updated);
+ };
+
+ const handleToggleOrg = (name) => {
+ const updated = selectedOrgs.includes(name)
+ ? selectedOrgs.filter((n) => n !== name)
+ : [...selectedOrgs, name];
+
+ setSelectedOrgs(updated);
+ };
+
+ useEffect(() => {
+ updateFilteredOrganizations();
+ }, [selectedCreators]);
+
const handleExport = (type) => {
let dataToExport = [];
@@ -149,6 +212,41 @@ const DirectoryPageHeader = ({
}
};
+ const applyCombinedFilter = () => {
+ const lowerSearch = searchText?.toLowerCase() || "";
+
+ const filtered = notesForFilter.filter((noteItem) => {
+ const creator = `${noteItem.createdBy?.firstName || ""} ${noteItem.createdBy?.lastName || ""}`.trim();
+ const org = noteItem.organizationName;
+
+ const matchesCreator = selectedCreators.length === 0 || selectedCreators.includes(creator);
+ const matchesOrg = selectedOrgs.length === 0 || selectedOrgs.includes(org);
+
+ const plainNote = noteItem?.note?.replace(/<[^>]+>/g, "").toLowerCase();
+
+ const stringValues = [];
+ const extractStrings = (obj) => {
+ for (const key in obj) {
+ const value = obj[key];
+ if (typeof value === "string") {
+ stringValues.push(value.toLowerCase());
+ } else if (typeof value === "object" && value !== null) {
+ extractStrings(value);
+ }
+ }
+ };
+ extractStrings(noteItem);
+ stringValues.push(plainNote, creator.toLowerCase());
+
+ const matchesSearch = stringValues.some((val) => val.includes(lowerSearch));
+
+ return matchesCreator && matchesOrg && matchesSearch;
+ });
+
+ setFilteredNotes(filtered);
+ setFilterAppliedNotes(filtered);
+ };
+
return (
<>
@@ -189,52 +287,72 @@ const DirectoryPageHeader = ({
style={{ width: "200px" }}
/>
- {/* Name Filter Dropdown - now with checkboxes */}
- {viewType === "notes" && noteCreators.length > 0 && (
-
)}