[question][fix] fix search filters

pull/355/head
Jeff Sieu 3 years ago
parent cea566b8e9
commit 38eefa2fd3

@ -63,22 +63,24 @@ export default function FilterSection<
/> />
)} )}
{isSingleSelect ? ( {isSingleSelect ? (
<RadioList <div className="px-1.5">
label="" <RadioList
value={options.find((option) => option.checked)?.value} label=""
onChange={(value) => { value={options.find((option) => option.checked)?.value}
onOptionChange(value); onChange={(value) => {
}}> onOptionChange(value);
{options.map((option) => ( }}>
<RadioList.Item {options.map((option) => (
key={option.value} <RadioList.Item
label={option.label} key={option.value}
value={option.value} label={option.label}
/> value={option.value}
))} />
</RadioList> ))}
</RadioList>
</div>
) : ( ) : (
<div className="mx-1"> <div className="px-1.5">
{options.map((option) => ( {options.map((option) => (
<CheckboxInput <CheckboxInput
key={option.value} key={option.value}

@ -1,5 +1,5 @@
import { subMonths, subYears } from 'date-fns'; import { subMonths, subYears } from 'date-fns';
import { useRouter } from 'next/router'; import Router, { useRouter } from 'next/router';
import { useEffect, useMemo, useState } from 'react'; import { useEffect, useMemo, useState } from 'react';
import { NoSymbolIcon } from '@heroicons/react/24/outline'; import { NoSymbolIcon } from '@heroicons/react/24/outline';
import type { QuestionsQuestionType } from '@prisma/client'; import type { QuestionsQuestionType } from '@prisma/client';
@ -120,8 +120,9 @@ export default function QuestionsHomePage() {
})); }));
}, [selectedLocations]); }, [selectedLocations]);
const handleLandingQuery = (data: LandingQueryData) => { const handleLandingQuery = async (data: LandingQueryData) => {
const { company, location, questionType } = data; const { company, location, questionType } = data;
setSelectedCompanies([company]); setSelectedCompanies([company]);
setSelectedLocations([location]); setSelectedLocations([location]);
setSelectedQuestionTypes([questionType as QuestionsQuestionType]); setSelectedQuestionTypes([questionType as QuestionsQuestionType]);
@ -142,11 +143,15 @@ export default function QuestionsHomePage() {
areLocationsInitialized, areLocationsInitialized,
]); ]);
const { pathname } = router;
useEffect(() => { useEffect(() => {
if (areFiltersInitialized && !loaded) { if (areFiltersInitialized) {
// Update query params // Router.replace used instead of router.replace to avoid
router.replace({ // the page reloading itself since the router.replace
pathname: router.pathname, // callback changes on every page load
Router.replace({
pathname,
query: { query: {
companies: selectedCompanies, companies: selectedCompanies,
locations: selectedLocations, locations: selectedLocations,
@ -169,7 +174,7 @@ export default function QuestionsHomePage() {
areFiltersInitialized, areFiltersInitialized,
hasLanded, hasLanded,
loaded, loaded,
router, pathname,
selectedCompanies, selectedCompanies,
selectedLocations, selectedLocations,
selectedQuestionAge, selectedQuestionAge,
@ -181,7 +186,7 @@ export default function QuestionsHomePage() {
} }
const filterSidebar = ( const filterSidebar = (
<div className="divide-y divide-slate-200 px-4"> <div className="mt-2 divide-y divide-slate-200 px-4">
<FilterSection <FilterSection
label="Company" label="Company"
options={companyFilterOptions} options={companyFilterOptions}

@ -37,15 +37,8 @@ export const useSearchFilter = <Value extends string = string>(
(newFilters: Array<Value>) => { (newFilters: Array<Value>) => {
setFilters(newFilters); setFilters(newFilters);
localStorage.setItem(name, JSON.stringify(newFilters)); localStorage.setItem(name, JSON.stringify(newFilters));
router.replace({
pathname: router.pathname,
query: {
...router.query,
[name]: newFilters,
},
});
}, },
[name, router], [name],
); );
return [filters, setFiltersCallback, isInitialized] as const; return [filters, setFiltersCallback, isInitialized] as const;
@ -66,9 +59,7 @@ export const useSearchFilterSingle = <Value extends string = string>(
return [ return [
filters[0], filters[0],
(value: Value) => { (value: Value) => setFilters([value]),
setFilters([value]);
},
isInitialized, isInitialized,
] as const; ] as const;
}; };

Loading…
Cancel
Save