Merged in fix/sw-1144-prefill-filters (pull request #1049)

fix(SW-1144): preselect room features from URL

* fix(SW-1144): preselect room features from URL


Approved-by: Bianca Widstam
Approved-by: Pontus Dreij
This commit is contained in:
Niclas Edenvin
2024-12-10 12:50:15 +00:00
parent 463354f10b
commit f98b07ab22
2 changed files with 44 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
"use client" "use client"
import { zodResolver } from "@hookform/resolvers/zod" import { zodResolver } from "@hookform/resolvers/zod"
import { useSearchParams } from "next/navigation"
import { useCallback, useEffect, useMemo, useState } from "react" import { useCallback, useEffect, useMemo, useState } from "react"
import { FormProvider, useForm } from "react-hook-form" import { FormProvider, useForm } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
@@ -30,18 +31,23 @@ export default function RoomFilter({
const isTabletAndUp = useMediaQuery("(min-width: 768px)") const isTabletAndUp = useMediaQuery("(min-width: 768px)")
const [isAboveMobile, setIsAboveMobile] = useState(false) const [isAboveMobile, setIsAboveMobile] = useState(false)
const initialFilterValues = useMemo( const searchParams = useSearchParams()
() => const initialFilterValues = useMemo(() => {
filterOptions.reduce( const packagesFromSearchParams =
searchParams.get("room[0].packages")?.split(",") ?? []
const values = filterOptions.reduce(
(acc, option) => { (acc, option) => {
acc[option.code] = false acc[option.code] = packagesFromSearchParams.includes(option.code)
return acc return acc
}, },
{} as Record<string, boolean | undefined> {} as Record<string, boolean | undefined>
),
[filterOptions]
) )
onFilter(values)
return values
}, [filterOptions, onFilter, searchParams])
const intl = useIntl() const intl = useIntl()
const methods = useForm<Record<string, boolean | undefined>>({ const methods = useForm<Record<string, boolean | undefined>>({
defaultValues: initialFilterValues, defaultValues: initialFilterValues,

View File

@@ -35,7 +35,9 @@ export default function Rooms({
const [selectedPackages, setSelectedPackages] = useState<RoomPackageCodes[]>( const [selectedPackages, setSelectedPackages] = useState<RoomPackageCodes[]>(
[] []
) )
const defaultPackages: DefaultFilterOptions[] = [
const defaultPackages: DefaultFilterOptions[] = useMemo(
() => [
{ {
code: RoomPackageCodeEnum.ACCESSIBILITY_ROOM, code: RoomPackageCodeEnum.ACCESSIBILITY_ROOM,
description: "Accessible Room", description: "Accessible Room",
@@ -57,7 +59,9 @@ export default function Rooms({
(pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM (pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM
)?.itemCode, )?.itemCode,
}, },
] ],
[availablePackages]
)
const handleFilter = useCallback( const handleFilter = useCallback(
(filter: Record<RoomPackageCodeEnum, boolean | undefined>) => { (filter: Record<RoomPackageCodeEnum, boolean | undefined>) => {