feat(SW-718) refactor: optimize rate selection and room scrolling
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
@@ -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)
|
||||||
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user