fix(sw-453): Correct view of cards and icons when filter
This commit is contained in:
@@ -23,6 +23,7 @@ export default function RoomCard({
|
|||||||
rateDefinitions,
|
rateDefinitions,
|
||||||
roomConfiguration,
|
roomConfiguration,
|
||||||
roomCategories,
|
roomCategories,
|
||||||
|
selectedPackages,
|
||||||
handleSelectRate,
|
handleSelectRate,
|
||||||
}: RoomCardProps) {
|
}: RoomCardProps) {
|
||||||
const intl = useIntl()
|
const intl = useIntl()
|
||||||
@@ -133,15 +134,17 @@ export default function RoomCard({
|
|||||||
>{`${roomConfiguration.roomsLeft} ${intl.formatMessage({ id: "Left" })}`}</Footnote>
|
>{`${roomConfiguration.roomsLeft} ${intl.formatMessage({ id: "Left" })}`}</Footnote>
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{roomConfiguration.features.map((feature) => (
|
{roomConfiguration.features
|
||||||
<span className={styles.chip} key={feature.code}>
|
.filter((feature) => selectedPackages.includes(feature.code))
|
||||||
{createElement(getIconForFeatureCode(feature.code), {
|
.map((feature) => (
|
||||||
width: 16,
|
<span className={styles.chip} key={feature.code}>
|
||||||
height: 16,
|
{createElement(getIconForFeatureCode(feature.code), {
|
||||||
color: "burgundy",
|
width: 16,
|
||||||
})}
|
height: 16,
|
||||||
</span>
|
color: "burgundy",
|
||||||
))}
|
})}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
{/*NOTE: images from the test API are hosted on test3.scandichotels.com,
|
{/*NOTE: images from the test API are hosted on test3.scandichotels.com,
|
||||||
which can't be accessed unless on Scandic's Wifi or using Citrix. */}
|
which can't be accessed unless on Scandic's Wifi or using Citrix. */}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ export default function RoomSelection({
|
|||||||
roomCategories,
|
roomCategories,
|
||||||
user,
|
user,
|
||||||
packages,
|
packages,
|
||||||
|
selectedPackages,
|
||||||
}: RoomSelectionProps) {
|
}: RoomSelectionProps) {
|
||||||
const [rateSummary, setRateSummary] = useState<Rate | null>(null)
|
const [rateSummary, setRateSummary] = useState<Rate | null>(null)
|
||||||
|
|
||||||
@@ -67,6 +68,7 @@ export default function RoomSelection({
|
|||||||
roomConfiguration={roomConfiguration}
|
roomConfiguration={roomConfiguration}
|
||||||
roomCategories={roomCategories}
|
roomCategories={roomCategories}
|
||||||
handleSelectRate={setRateSummary}
|
handleSelectRate={setRateSummary}
|
||||||
|
selectedPackages={selectedPackages}
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ import RoomSelection from "../RoomSelection"
|
|||||||
|
|
||||||
import styles from "./rooms.module.css"
|
import styles from "./rooms.module.css"
|
||||||
|
|
||||||
|
import {
|
||||||
|
RoomPackageCodeEnum,
|
||||||
|
type RoomPackageCodes,
|
||||||
|
} from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||||
import type { RoomSelectionProps } from "@/types/components/hotelReservation/selectRate/roomSelection"
|
import type { RoomSelectionProps } from "@/types/components/hotelReservation/selectRate/roomSelection"
|
||||||
|
|
||||||
export default function Rooms({
|
export default function Rooms({
|
||||||
@@ -16,20 +20,25 @@ export default function Rooms({
|
|||||||
roomCategories = [],
|
roomCategories = [],
|
||||||
user,
|
user,
|
||||||
packages,
|
packages,
|
||||||
}: RoomSelectionProps) {
|
}: Omit<RoomSelectionProps, "selectedPackages">) {
|
||||||
const defaultRooms = roomsAvailability.roomConfigurations.filter(
|
const defaultRooms = roomsAvailability.roomConfigurations
|
||||||
(room) => room.features.length === 0
|
|
||||||
)
|
|
||||||
const [rooms, setRooms] = useState<RoomsAvailability>({
|
const [rooms, setRooms] = useState<RoomsAvailability>({
|
||||||
...roomsAvailability,
|
...roomsAvailability,
|
||||||
roomConfigurations: defaultRooms,
|
roomConfigurations: defaultRooms,
|
||||||
})
|
})
|
||||||
|
const [selectedPackages, setSelectedPackages] = useState<RoomPackageCodes[]>(
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
|
||||||
const handleFilter = useCallback(
|
const handleFilter = useCallback(
|
||||||
(filter: Record<string, boolean | undefined>) => {
|
(filter: Record<RoomPackageCodeEnum, boolean | undefined>) => {
|
||||||
const selectedCodes = Object.keys(filter).filter((key) => filter[key])
|
const filteredPackages = Object.keys(filter).filter(
|
||||||
|
(key) => filter[key as RoomPackageCodeEnum]
|
||||||
|
) as RoomPackageCodeEnum[]
|
||||||
|
|
||||||
if (selectedCodes.length === 0) {
|
setSelectedPackages(filteredPackages)
|
||||||
|
|
||||||
|
if (filteredPackages.length === 0) {
|
||||||
setRooms({
|
setRooms({
|
||||||
...roomsAvailability,
|
...roomsAvailability,
|
||||||
roomConfigurations: defaultRooms,
|
roomConfigurations: defaultRooms,
|
||||||
@@ -39,8 +48,8 @@ export default function Rooms({
|
|||||||
|
|
||||||
const filteredRooms = roomsAvailability.roomConfigurations.filter(
|
const filteredRooms = roomsAvailability.roomConfigurations.filter(
|
||||||
(room) =>
|
(room) =>
|
||||||
selectedCodes.every((selectedCode) =>
|
filteredPackages.every((filteredPackage) =>
|
||||||
room.features.some((feature) => feature.code === selectedCode)
|
room.features.some((feature) => feature.code === filteredPackage)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
setRooms({ ...roomsAvailability, roomConfigurations: filteredRooms })
|
setRooms({ ...roomsAvailability, roomConfigurations: filteredRooms })
|
||||||
@@ -60,6 +69,7 @@ export default function Rooms({
|
|||||||
roomCategories={roomCategories}
|
roomCategories={roomCategories}
|
||||||
user={user}
|
user={user}
|
||||||
packages={packages}
|
packages={packages}
|
||||||
|
selectedPackages={selectedPackages}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import {
|
|||||||
|
|
||||||
import { Rate } from "./selectRate"
|
import { Rate } from "./selectRate"
|
||||||
|
|
||||||
import { RoomData } from "@/types/hotel"
|
import type { RoomData } from "@/types/hotel"
|
||||||
|
import type { RoomPackageCodes } from "./roomFilter"
|
||||||
|
|
||||||
export type RoomCardProps = {
|
export type RoomCardProps = {
|
||||||
roomConfiguration: RoomConfiguration
|
roomConfiguration: RoomConfiguration
|
||||||
rateDefinitions: RateDefinition[]
|
rateDefinitions: RateDefinition[]
|
||||||
roomCategories: RoomData[]
|
roomCategories: RoomData[]
|
||||||
|
selectedPackages: RoomPackageCodes[]
|
||||||
handleSelectRate: (rate: Rate) => void
|
handleSelectRate: (rate: Rate) => void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import type { RoomData } from "@/types/hotel"
|
import type { RoomData } from "@/types/hotel"
|
||||||
import type { SafeUser } from "@/types/user"
|
import type { SafeUser } from "@/types/user"
|
||||||
import type { RoomsAvailability } from "@/server/routers/hotels/output"
|
import type { RoomsAvailability } from "@/server/routers/hotels/output"
|
||||||
import type { RoomPackageData } from "./roomFilter"
|
import type { RoomPackageCodes, RoomPackageData } from "./roomFilter"
|
||||||
|
|
||||||
export interface RoomSelectionProps {
|
export interface RoomSelectionProps {
|
||||||
roomsAvailability: RoomsAvailability
|
roomsAvailability: RoomsAvailability
|
||||||
roomCategories: RoomData[]
|
roomCategories: RoomData[]
|
||||||
user: SafeUser
|
user: SafeUser
|
||||||
packages: RoomPackageData
|
packages: RoomPackageData
|
||||||
|
selectedPackages: RoomPackageCodes[]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user