From 3fda4c48a9385d89dcf4bde995cb28eb0c05e94b Mon Sep 17 00:00:00 2001 From: Ashraf Mohammed Date: Sat, 6 Jan 2024 21:11:59 +0530 Subject: [PATCH] add blacklist --- src/Common/hooks/useFilters.tsx | 29 ++++++++++++++++---- src/Components/Assets/AssetsList.tsx | 1 + src/Components/ExternalResult/ResultList.tsx | 6 +++- src/Components/Facility/HospitalList.tsx | 1 + src/Components/Patient/ManagePatients.tsx | 7 ++++- src/Components/Patient/SampleViewAdmin.tsx | 3 ++ src/Components/Shifting/BoardView.tsx | 1 + src/Components/Shifting/ListView.tsx | 2 +- src/Components/Users/ManageUsers.tsx | 5 +++- 9 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/Common/hooks/useFilters.tsx b/src/Common/hooks/useFilters.tsx index 5781eaca54f..a5dbd1b90ae 100644 --- a/src/Common/hooks/useFilters.tsx +++ b/src/Common/hooks/useFilters.tsx @@ -8,6 +8,7 @@ import { classNames } from "../../Utils/utils"; export type FilterState = Record; export type FilterParamKeys = string | string[]; + interface FilterBadgeProps { name: string; value?: string; @@ -18,15 +19,25 @@ interface FilterBadgeProps { * A custom hook wrapped around raviger's `useQueryParams` hook to ease handling * of pagination and filters. */ -export default function useFilters({ limit = 14 }: { limit?: number }) { +export default function useFilters({ + limit = 14, + cacheBlacklist = [], +}: { + limit?: number; + cacheBlacklist?: string[]; +}) { const { t } = useTranslation(); const { kasp_string } = useConfig(); const hasPagination = limit > 0; const [showFilters, setShowFilters] = useState(false); const [qParams, setQueryParams] = useQueryParams(); + const [primaryCacheBlacklist, setPrimaryCacheBlacklist] = + useState(cacheBlacklist); - const updateQuery = (filter: FilterState) => { + const updateQuery = (filter: FilterState, cacheBlacklist: string[] = []) => { filter = hasPagination ? { page: 1, limit, ...filter } : filter; + if (cacheBlacklist.length) + setPrimaryCacheBlacklist(primaryCacheBlacklist.concat(cacheBlacklist)); setQueryParams(Object.assign({}, qParams, filter), { replace: true }); }; const updatePage = (page: number) => { @@ -38,7 +49,10 @@ export default function useFilters({ limit = 14 }: { limit?: number }) { }; const removeFilter = (param: string) => removeFilters([param]); - useEffect(() => updateFiltersCache(qParams), [qParams]); + useEffect( + () => updateFiltersCache(qParams, primaryCacheBlacklist), + [qParams, primaryCacheBlacklist] + ); useEffect(() => { const cache = getFiltersCache(); @@ -170,7 +184,7 @@ export default function useFilters({ limit = 14 }: { limit?: number }) { id="clear-all-filters" className="rounded-full border border-gray-300 bg-white px-2 py-1 text-xs text-gray-600 hover:text-gray-800" onClick={() => { - updateFiltersCache({}); + updateFiltersCache({}, primaryCacheBlacklist); removeFilters(Object.keys(qParams)); }} > @@ -266,9 +280,12 @@ const getFiltersCacheKey = () => `filters--${window.location.pathname}`; const getFiltersCache = () => { return JSON.parse(localStorage.getItem(getFiltersCacheKey()) || "{}"); }; -const updateFiltersCache = (cache: Record) => { +const updateFiltersCache = ( + cache: Record, + cacheBlacklist: string[] +) => { const result = { ...cache }; - for (const param of FILTERS_CACHE_BLACKLIST) { + for (const param of FILTERS_CACHE_BLACKLIST.concat(cacheBlacklist)) { delete result[param]; } localStorage.setItem(getFiltersCacheKey(), JSON.stringify(result)); diff --git a/src/Components/Assets/AssetsList.tsx b/src/Components/Assets/AssetsList.tsx index 3fc9c9f9f14..bc0abbd4c2a 100644 --- a/src/Components/Assets/AssetsList.tsx +++ b/src/Components/Assets/AssetsList.tsx @@ -38,6 +38,7 @@ const AssetsList = () => { resultsPerPage, } = useFilters({ limit: 18, + cacheBlacklist: ["search"], }); const [assets, setAssets] = useState([{} as AssetData]); const [isLoading, setIsLoading] = useState(false); diff --git a/src/Components/ExternalResult/ResultList.tsx b/src/Components/ExternalResult/ResultList.tsx index 8fddc7cadc9..1bfab48cc4f 100644 --- a/src/Components/ExternalResult/ResultList.tsx +++ b/src/Components/ExternalResult/ResultList.tsx @@ -16,6 +16,7 @@ import Page from "../Common/components/Page"; import routes from "../../Redux/api"; import useQuery from "../../Utils/request/useQuery"; import { parsePhoneNumber } from "../../Utils/utils"; + const Loading = lazy(() => import("../Common/Loading")); export default function ResultList() { @@ -26,7 +27,10 @@ export default function ResultList() { FilterBadges, advancedFilter, resultsPerPage, - } = useFilters({ limit: 14 }); + } = useFilters({ + limit: 14, + cacheBlacklist: ["mobile_number", "name"], + }); const [showDialog, setShowDialog] = useState(false); const [selectedFacility, setSelectedFacility] = useState({ name: "", diff --git a/src/Components/Facility/HospitalList.tsx b/src/Components/Facility/HospitalList.tsx index 075ad8de39e..e173f78e20e 100644 --- a/src/Components/Facility/HospitalList.tsx +++ b/src/Components/Facility/HospitalList.tsx @@ -34,6 +34,7 @@ export const HospitalList = () => { resultsPerPage, } = useFilters({ limit: 14, + cacheBlacklist: ["search"], }); let manageFacilities: any = null; const { user_type } = useAuthUser(); diff --git a/src/Components/Patient/ManagePatients.tsx b/src/Components/Patient/ManagePatients.tsx index e1d982148f1..d597e1e5252 100644 --- a/src/Components/Patient/ManagePatients.tsx +++ b/src/Components/Patient/ManagePatients.tsx @@ -99,6 +99,7 @@ export const PatientManager = () => { resultsPerPage, } = useFilters({ limit: 12, + cacheBlacklist: ["name", "patient_no"], }); const [selectedFacility, setSelectedFacility] = useState({ name: "", @@ -775,7 +776,11 @@ export const PatientManager = () => { return { name, value: qParams[name] || defaultValue, - onChange: (e: FieldChangeEvent) => updateQuery({ [e.name]: e.value }), + onChange: (e: FieldChangeEvent) => + updateQuery({ [e.name]: e.value }, [ + "phone_number", + "emergency_phone_number", + ]), className: "grow w-full mb-2", }; }; diff --git a/src/Components/Patient/SampleViewAdmin.tsx b/src/Components/Patient/SampleViewAdmin.tsx index 085616adfac..5aca767e480 100644 --- a/src/Components/Patient/SampleViewAdmin.tsx +++ b/src/Components/Patient/SampleViewAdmin.tsx @@ -26,6 +26,7 @@ import CountBlock from "../../CAREUI/display/Count"; import CareIcon from "../../CAREUI/icons/CareIcon"; import { AdvancedFilterButton } from "../../CAREUI/interactive/FiltersSlideover"; import Page from "../Common/components/Page"; + const Loading = lazy(() => import("../Common/Loading")); export default function SampleViewAdmin() { @@ -38,6 +39,7 @@ export default function SampleViewAdmin() { resultsPerPage, } = useFilters({ limit: 10, + cacheBlacklist: ["patient_name", "district_name"], }); const dispatch: any = useDispatch(); const initialData: any[] = []; @@ -58,6 +60,7 @@ export default function SampleViewAdmin() { const res = await dispatch(getAnyFacility(qParams.facility)); setFacilityName(res?.data?.name); } + fetchData(); }, [dispatch, qParams.facility]); diff --git a/src/Components/Shifting/BoardView.tsx b/src/Components/Shifting/BoardView.tsx index 9c96daa0e59..ed29a16b8d5 100644 --- a/src/Components/Shifting/BoardView.tsx +++ b/src/Components/Shifting/BoardView.tsx @@ -29,6 +29,7 @@ const ScrollingComponent = withScrolling("div"); export default function BoardView() { const { qParams, updateQuery, FilterBadges, advancedFilter } = useFilters({ limit: -1, + cacheBlacklist: ["patient_name"], }); const { wartime_shifting } = useConfig(); diff --git a/src/Components/Shifting/ListView.tsx b/src/Components/Shifting/ListView.tsx index ec11f4cf91f..45a484af933 100644 --- a/src/Components/Shifting/ListView.tsx +++ b/src/Components/Shifting/ListView.tsx @@ -36,7 +36,7 @@ export default function ListView() { FilterBadges, advancedFilter, resultsPerPage, - } = useFilters({}); + } = useFilters({ cacheBlacklist: ["patient_name"] }); const [modalFor, setModalFor] = useState({ externalId: undefined, diff --git a/src/Components/Users/ManageUsers.tsx b/src/Components/Users/ManageUsers.tsx index 750603ccf6f..f6df186d4be 100644 --- a/src/Components/Users/ManageUsers.tsx +++ b/src/Components/Users/ManageUsers.tsx @@ -44,7 +44,10 @@ export default function ManageUsers() { FilterBadges, advancedFilter, resultsPerPage, - } = useFilters({ limit: 18 }); + } = useFilters({ + limit: 18, + cacheBlacklist: ["username"], + }); let manageUsers: any = null; const [expandSkillList, setExpandSkillList] = useState(false); const [expandFacilityList, setExpandFacilityList] = useState(false);