feat(SW-718) refactor: optimize rate selection and room scrolling

This commit is contained in:
Pontus Dreij
2025-01-28 18:33:10 +01:00
parent ab7b826cd2
commit eef7c222aa
4 changed files with 11 additions and 8 deletions

View File

@@ -27,16 +27,14 @@ export default function RateSummary({
const intl = useIntl() const intl = useIntl()
const [isVisible, setIsVisible] = useState(false) const [isVisible, setIsVisible] = useState(false)
const { rateSummary } = useRateSelectionStore() const { getSelectedRateSummary } = useRateSelectionStore()
useEffect(() => { useEffect(() => {
const timer = setTimeout(() => setIsVisible(true), 0) const timer = setTimeout(() => setIsVisible(true), 0)
return () => clearTimeout(timer) return () => clearTimeout(timer)
}, []) }, [])
const selectedRateSummary = rateSummary.filter( const selectedRateSummary = getSelectedRateSummary()
(summary): summary is Rate => summary !== null
)
if (selectedRateSummary.length === 0) return null if (selectedRateSummary.length === 0) return null

View File

@@ -193,7 +193,7 @@ export default function Rooms({
} }
useEffect(() => { useEffect(() => {
setTimeout(() => { requestAnimationFrame(() => {
const SCROLL_OFFSET = 100 const SCROLL_OFFSET = 100
const roomElements = document.querySelectorAll(`.${styles.roomContainer}`) const roomElements = document.querySelectorAll(`.${styles.roomContainer}`)
const index = selectedRates.findIndex((rate) => rate === undefined) const index = selectedRates.findIndex((rate) => rate === undefined)
@@ -208,7 +208,7 @@ export default function Rooms({
behavior: "smooth", behavior: "smooth",
}) })
} }
}, 0) })
}, [selectedRates]) }, [selectedRates])
return ( return (

View File

@@ -30,6 +30,7 @@ interface RateSelectionState {
availablePackages, availablePackages,
roomCategories, roomCategories,
}: RateSummaryParams) => void }: RateSummaryParams) => void
getSelectedRateSummary: () => Rate[]
} }
export const useRateSelectionStore = create<RateSelectionState>((set, get) => ({ export const useRateSelectionStore = create<RateSelectionState>((set, get) => ({
@@ -64,4 +65,8 @@ export const useRateSelectionStore = create<RateSelectionState>((set, get) => ({
set({ rateSummary: summaries }) set({ rateSummary: summaries })
}, },
getSelectedRateSummary: () => {
const { rateSummary } = get()
return rateSummary.filter((summary): summary is Rate => summary !== null)
},
})) }))

View File

@@ -14,8 +14,8 @@ export interface DefaultFilterOptions {
itemCode: string | undefined itemCode: string | undefined
} }
export interface FilterValues { export type FilterValues = {
[key: string]: boolean | undefined [K in RoomPackageCodeEnum]?: boolean
} }
export interface RoomFilterProps { export interface RoomFilterProps {
numberOfRooms: number numberOfRooms: number