Update FilterModal

* Fixes spacing of interactive elements in FilterBar so they don't stretch according to content anymore
* Adds new `persistFilters` prop that determines whether the FilterBar should persist any filters to the user's cookies
* Uses defaultFilterset prop to populate the default filter set instead of importing the actual "default filter set" and using it directly
This commit is contained in:
Justin Edmund 2023-07-02 02:24:59 -07:00
parent 48d451d136
commit 01b51f2829
2 changed files with 20 additions and 8 deletions

View file

@ -33,17 +33,21 @@
minmax($unit-20x, 1fr) minmax($unit-20x, 1fr)
minmax($unit-20x, 1fr) minmax($unit-20x, 1fr)
minmax($unit-20x, 1fr) minmax($unit-20x, 1fr)
0.5fr; auto;
box-sizing: border-box; box-sizing: border-box;
flex-direction: row; flex-direction: row;
gap: $unit; gap: $unit;
width: auto; width: 75%;
@include breakpoint(tablet) { @include breakpoint(tablet) {
grid-template-columns: 1fr; grid-template-columns: 1fr;
grid-template-rows: auto; grid-template-rows: auto;
width: 100%; width: 100%;
} }
& > * {
min-width: 0;
}
} }
&.shadow { &.shadow {

View file

@ -11,12 +11,13 @@ import SelectItem from '~components/common/SelectItem'
import Button from '~components/common/Button' import Button from '~components/common/Button'
import { appState } from '~utils/appState' import { appState } from '~utils/appState'
import { defaultFilterset } from '~utils/defaultFilters'
import FilterIcon from '~public/icons/Filter.svg' import FilterIcon from '~public/icons/Filter.svg'
import styles from './index.module.scss' import styles from './index.module.scss'
interface Props { interface Props {
defaultFilterset: FilterSet
persistFilters?: boolean
children: React.ReactNode children: React.ReactNode
scrolled: boolean scrolled: boolean
element?: number element?: number
@ -62,13 +63,14 @@ const FilterBar = (props: Props) => {
useEffect(() => { useEffect(() => {
// Fetch user's advanced filters // Fetch user's advanced filters
const filtersCookie = getCookie('filters') const filtersCookie = getCookie('filters')
if (filtersCookie) setAdvancedFilters(JSON.parse(filtersCookie as string)) if (filtersCookie && props.persistFilters) {
else setAdvancedFilters(defaultFilterset) setAdvancedFilters(JSON.parse(filtersCookie as string))
} else setAdvancedFilters(props.defaultFilterset)
}, []) }, [])
useEffect(() => { useEffect(() => {
setMatchesDefaultFilters(equals(advancedFilters, defaultFilterset)) setMatchesDefaultFilters(equals(advancedFilters, props.defaultFilterset))
}, [advancedFilters, defaultFilterset]) }, [advancedFilters, props.defaultFilterset])
function openElementSelect() { function openElementSelect() {
setElementOpen(!elementOpen) setElementOpen(!elementOpen)
@ -194,9 +196,11 @@ const FilterBar = (props: Props) => {
/> />
</div> </div>
</div> </div>
<FilterModal <FilterModal
defaultFilterSet={defaultFilterset} defaultFilterSet={props.defaultFilterset}
filterSet={advancedFilters} filterSet={advancedFilters}
persistFilters={props.persistFilters}
open={filterModalOpen} open={filterModalOpen}
onOpenChange={setFilterModalOpen} onOpenChange={setFilterModalOpen}
sendAdvancedFilters={handleAdvancedFiltersChanged} sendAdvancedFilters={handleAdvancedFiltersChanged}
@ -205,4 +209,8 @@ const FilterBar = (props: Props) => {
) )
} }
FilterBar.defaultProps = {
persistFilters: true,
}
export default FilterBar export default FilterBar