+ {searchText
+ ? `No contact found for "${searchText}"`
+ : "No contacts found"}
- {searchText ? `No contact found for "${searchText}"`:"No contacts found" }
-
{
);
};
-export default ContactsPage;
+export default ContactsPage;
\ No newline at end of file
diff --git a/src/pages/Directory/NoteFilterPanel.jsx b/src/pages/Directory/NoteFilterPanel.jsx
index 87abd52d..b3ac36d1 100644
--- a/src/pages/Directory/NoteFilterPanel.jsx
+++ b/src/pages/Directory/NoteFilterPanel.jsx
@@ -1,29 +1,38 @@
import { zodResolver } from "@hookform/resolvers/zod";
-import React from "react";
+import React, { useEffect, useImperativeHandle, forwardRef, useMemo } from "react";
import { FormProvider, useForm } from "react-hook-form";
import {
defaultNotesFilter,
notesFilter,
} from "../../components/Directory/DirectorySchema";
-import { useContactFilter, useNoteFilter } from "../../hooks/useDirectory";
+import { useNoteFilter } from "../../hooks/useDirectory";
import { ExpenseFilterSkeleton } from "../../components/Expenses/ExpenseSkeleton";
import SelectMultiple from "../../components/common/SelectMultiple";
-const NoteFilterPanel = ({ onApply, clearFilter }) => {
- const { data, isError, isLoading, error, isFetched, isFetching } =
- useNoteFilter();
+const NoteFilterPanel = forwardRef(({ onApply, clearFilter, setFilterdata }, ref) => {
+ const { data, isError, isLoading, error, isFetched, isFetching } = useNoteFilter();
+
+
+ //Add this for Filter chip remover
+ const dynamicdefaultNotesFilter = useMemo(() => {
+ return {
+ ...defaultNotesFilter,
+ bucketIds: defaultNotesFilter.bucketIds || [],
+ categoryIds: defaultNotesFilter.categoryIds || [],
+ };
+ }, [status]);
const methods = useForm({
resolver: zodResolver(notesFilter),
- defaultValues: defaultNotesFilter,
+ defaultValues: dynamicdefaultNotesFilter,
});
+ const { handleSubmit, reset, setValue, getValues } = methods;
+
const closePanel = () => {
document.querySelector(".offcanvas.show .btn-close")?.click();
};
- const { register, handleSubmit, reset, watch } = methods;
-
const onSubmit = (formData) => {
onApply(formData);
closePanel();
@@ -31,47 +40,72 @@ const NoteFilterPanel = ({ onApply, clearFilter }) => {
const handleClose = () => {
reset(defaultNotesFilter);
- onApply(defaultNotesFilter);
+ onApply(defaultNotesFilter);
closePanel();
};
+
+//Add this for Filter chip remover
+ useImperativeHandle(ref, () => ({
+ resetFieldValue: (name, value) => {
+ if (value !== undefined) {
+ setValue(name, value);
+ } else {
+ reset({ ...getValues(), [name]: defaultNotesFilter[name] });
+ }
+ },
+ getValues,
+ }));
+
+
+ useEffect(() => {
+ if (data && setFilterdata) {
+ setFilterdata(data);
+ }
+ }, [data, setFilterdata]);
- if (isLoading || isFetching) return
;
- if (isError && isFetched)
- return
Something went wrong Here- {error.message}
;
return (
);
-};
+});
-export default NoteFilterPanel;
+export default NoteFilterPanel;
\ No newline at end of file
diff --git a/src/pages/Directory/NotesPage.jsx b/src/pages/Directory/NotesPage.jsx
index 3f0d4348..45abe8d3 100644
--- a/src/pages/Directory/NotesPage.jsx
+++ b/src/pages/Directory/NotesPage.jsx
@@ -1,5 +1,4 @@
-// NotesPage.jsx
-import React, { useEffect, useState } from "react";
+import React, { useEffect, useRef, useState } from "react";
import { useFab } from "../../Context/FabContext";
import { useNotes } from "../../hooks/useDirectory";
import NoteFilterPanel from "./NoteFilterPanel";
@@ -9,11 +8,14 @@ import { useDebounce } from "../../utils/appUtils";
import NoteCardDirectoryEditable from "../../components/Directory/NoteCardDirectoryEditable";
import Pagination from "../../components/common/Pagination";
import { NoteCardSkeleton } from "../../components/Directory/DirectoryPageSkeleton";
+import NoteFilterChips from "../../components/Directory/NoteFilterChips";
const NotesPage = ({ projectId, searchText, onExport }) => {
const [filters, setFilter] = useState(defaultNotesFilter);
const [currentPage, setCurrentPage] = useState(1);
const debouncedSearch = useDebounce(searchText, 500);
+ const [filterData, setFilterdata] = useState(null);
+ const updatedRef = useRef();
const { data, isLoading, isError, error } = useNotes(
projectId,
@@ -33,7 +35,12 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
setShowTrigger(true);
setOffcanvasContent(
"Notes Filters",
-
+
);
return () => {
@@ -42,11 +49,27 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
};
}, []);
+ const handleRemoveChip = (key, id) => {
+ setFilter((prev) => {
+ const updated = { ...prev };
+
+ if (Array.isArray(updated[key])) {
+ updated[key] = updated[key].filter((v) => v !== id);
+ updatedRef.current?.resetFieldValue(key, updated[key]); //IMP
+ } else {
+ updated[key] = null;
+ updatedRef.current?.resetFieldValue(key, null);
+ }
+
+ return updated;
+ });
+ };
+
// Format data for export
const formatExportData = (notes) => {
return notes.map((n) => ({
ContactName: n.contactName || "",
- Note: n.note ? n.note.replace(/<[^>]+>/g, "") : "", // strip HTML tags
+ Note: n.note ? n.note.replace(/<[^>]+>/g, "") : "",
Organization: n.organizationName || "",
CreatedBy: n.createdBy
? `${n.createdBy.firstName || ""} ${n.createdBy.lastName || ""}`.trim()
@@ -59,7 +82,6 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
}));
};
- // Pass formatted notes to parent for export
useEffect(() => {
if (data?.data && onExport) {
onExport(formatExportData(data.data));
@@ -77,6 +99,12 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
return (
+
+
{data?.data?.length > 0 ? (
<>
{data.data.map((noteItem) => (
@@ -96,7 +124,6 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
>
) : (
- // Card for "No notes available"
{
{debouncedSearch
? `No notes found matching "${searchText}"`
- : Object.keys(filters).some((k) => filters[k] && filters[k].length)
- ? "No notes found for the applied filters."
- : "No notes available."}
+ : Object.keys(filters).some((k) => filters[k]?.length)
+ ? "No notes found for the applied filters."
+ : "No notes available."}
)}
@@ -114,4 +141,4 @@ const NotesPage = ({ projectId, searchText, onExport }) => {
);
};
-export default NotesPage;
\ No newline at end of file
+export default NotesPage;