diff --git a/components/FilterBar/index.tsx b/components/FilterBar/index.tsx
index b784d4a2..acf661f2 100644
--- a/components/FilterBar/index.tsx
+++ b/components/FilterBar/index.tsx
@@ -11,6 +11,7 @@ import Button from '~components/Button'
import FilterIcon from '~public/icons/Filter.svg'
import './index.scss'
+import { getCookie } from 'cookies-next'
interface Props {
children: React.ReactNode
@@ -29,6 +30,32 @@ interface Props {
}) => void
}
+const DEFAULT_FULL_AUTO = false
+const DEFAULT_AUTO_GUARD = false
+const DEFAULT_CHARGE_ATTACK = false
+const DEFAULT_MAX_BUTTONS = 0
+const DEFAULT_MAX_TURNS = 0
+const DEFAULT_MIN_CHARACTERS = 3
+const DEFAULT_MIN_WEAPONS = 5
+const DEFAULT_MIN_SUMMONS = 2
+const DEFAULT_NAME_QUALITY = false
+const DEFAULT_USER_QUALITY = false
+const DEFAULT_ORIGINAL_ONLY = false
+
+const DEFAULT_FILTERSET: FilterSet = {
+ full_auto: DEFAULT_FULL_AUTO,
+ auto_guard: DEFAULT_AUTO_GUARD,
+ charge_attack: DEFAULT_CHARGE_ATTACK,
+ characters_count: DEFAULT_MIN_CHARACTERS,
+ weapons_count: DEFAULT_MIN_WEAPONS,
+ summons_count: DEFAULT_MIN_SUMMONS,
+ button_count: DEFAULT_MAX_BUTTONS,
+ turn_count: DEFAULT_MAX_TURNS,
+ name_quality: DEFAULT_NAME_QUALITY,
+ user_quality: DEFAULT_USER_QUALITY,
+ original: DEFAULT_ORIGINAL_ONLY,
+}
+
const FilterBar = (props: Props) => {
// Set up translation
const { t } = useTranslation('common')
@@ -38,6 +65,12 @@ const FilterBar = (props: Props) => {
const [filterModalOpen, setFilterModalOpen] = useState(false)
+ // Fetch user's advanced filters
+ const filtersCookie = getCookie('filters')
+ const advancedFilters: FilterSet = filtersCookie
+ ? JSON.parse(filtersCookie as string)
+ : DEFAULT_FILTERSET
+
// Set up classes object for showing shadow on scroll
const classes = classNames({
FilterBar: true,
@@ -155,7 +188,12 @@ const FilterBar = (props: Props) => {
/>
-
+
>
)
}
diff --git a/components/FilterModal/index.tsx b/components/FilterModal/index.tsx
index 5600ddab..0c4d88c7 100644
--- a/components/FilterModal/index.tsx
+++ b/components/FilterModal/index.tsx
@@ -21,19 +21,10 @@ import type { DialogProps } from '@radix-ui/react-dialog'
import CrossIcon from '~public/icons/Cross.svg'
import './index.scss'
-interface Props extends DialogProps {}
-
-const DEFAULT_FULL_AUTO = false
-const DEFAULT_AUTO_GUARD = false
-const DEFAULT_CHARGE_ATTACK = false
-const DEFAULT_MAX_BUTTONS = 0
-const DEFAULT_MAX_TURNS = 0
-const DEFAULT_MIN_CHARACTERS = 3
-const DEFAULT_MIN_WEAPONS = 5
-const DEFAULT_MIN_SUMMONS = 2
-const DEFAULT_NAME_QUALITY = false
-const DEFAULT_USER_QUALITY = false
-const DEFAULT_ORIGINAL_ONLY = false
+interface Props extends DialogProps {
+ defaultFilterSet: FilterSet
+ filterSet: FilterSet
+}
const MAX_CHARACTERS = 5
const MAX_WEAPONS = 13
@@ -54,41 +45,68 @@ const FilterModal = (props: Props) => {
// States
const [open, setOpen] = useState(false)
- const [fullAuto, setFullAuto] = useState(DEFAULT_FULL_AUTO)
- const [autoGuard, setAutoGuard] = useState(DEFAULT_AUTO_GUARD)
- const [chargeAttack, setChargeAttack] = useState(DEFAULT_CHARGE_ATTACK)
+ const [fullAuto, setFullAuto] = useState(props.filterSet.full_auto)
+ const [autoGuard, setAutoGuard] = useState(props.filterSet.auto_guard)
+ const [chargeAttack, setChargeAttack] = useState(
+ props.filterSet.charge_attack
+ )
const [minCharacterCount, setMinCharacterCount] = useState(
- DEFAULT_MIN_CHARACTERS
+ props.filterSet.characters_count
)
- const [minWeaponCount, setMinWeaponCount] = useState(DEFAULT_MIN_WEAPONS)
- const [minSummonCount, setMinSummonCount] = useState(DEFAULT_MIN_SUMMONS)
+ const [minWeaponCount, setMinWeaponCount] = useState(
+ props.filterSet.weapons_count
+ )
+ const [minSummonCount, setMinSummonCount] = useState(
+ props.filterSet.summons_count
+ )
+ const [maxButtonsCount, setMaxButtonsCount] = useState(
+ props.filterSet.button_count
+ )
+ const [maxTurnsCount, setMaxTurnsCount] = useState(props.filterSet.turn_count)
- const [maxButtonsCount, setMaxButtonsCount] = useState(DEFAULT_MAX_BUTTONS)
- const [maxTurnsCount, setMaxTurnsCount] = useState(DEFAULT_MAX_TURNS)
-
- const [userQuality, setUserQuality] = useState(DEFAULT_USER_QUALITY)
- const [nameQuality, setNameQuality] = useState(DEFAULT_NAME_QUALITY)
- const [originalOnly, setOriginalOnly] = useState(DEFAULT_ORIGINAL_ONLY)
+ const [userQuality, setUserQuality] = useState(props.filterSet.user_quality)
+ const [nameQuality, setNameQuality] = useState(props.filterSet.name_quality)
+ const [originalOnly, setOriginalOnly] = useState(props.filterSet.original)
// Hooks
useEffect(() => {
if (props.open !== undefined) setOpen(props.open)
})
+ function saveFilters() {
+ const filters = {
+ full_auto: fullAuto,
+ auto_guard: autoGuard,
+ charge_attack: chargeAttack,
+ characters_count: minCharacterCount,
+ weapons_count: minWeaponCount,
+ summons_count: minSummonCount,
+ button_count: maxButtonsCount,
+ turn_count: maxTurnsCount,
+ name_quality: nameQuality,
+ user_quality: userQuality,
+ original: originalOnly,
+ }
+
+ console.log(filters)
+
+ setCookie('filters', filters, { path: '/' })
+ // openChange()
+ }
function resetFilters() {
- setFullAuto(DEFAULT_FULL_AUTO)
- setAutoGuard(DEFAULT_AUTO_GUARD)
- setChargeAttack(DEFAULT_CHARGE_ATTACK)
- setMinCharacterCount(DEFAULT_MIN_CHARACTERS)
- setMinWeaponCount(DEFAULT_MIN_WEAPONS)
- setMinSummonCount(DEFAULT_MIN_SUMMONS)
- setMaxButtonsCount(DEFAULT_MAX_BUTTONS)
- setMaxTurnsCount(DEFAULT_MAX_TURNS)
- setUserQuality(DEFAULT_USER_QUALITY)
- setNameQuality(DEFAULT_NAME_QUALITY)
- setOriginalOnly(DEFAULT_ORIGINAL_ONLY)
+ setFullAuto(props.defaultFilterSet.full_auto)
+ setAutoGuard(props.defaultFilterSet.auto_guard)
+ setChargeAttack(props.defaultFilterSet.charge_attack)
+ setMinCharacterCount(props.defaultFilterSet.characters_count)
+ setMinWeaponCount(props.defaultFilterSet.weapons_count)
+ setMinSummonCount(props.defaultFilterSet.summons_count)
+ setMaxButtonsCount(props.defaultFilterSet.button_count)
+ setMaxTurnsCount(props.defaultFilterSet.turn_count)
+ setUserQuality(props.defaultFilterSet.user_quality)
+ setNameQuality(props.defaultFilterSet.name_quality)
+ setOriginalOnly(props.defaultFilterSet.original)
}
function openChange() {