feat(SW-340): Hover actions
This commit is contained in:
@@ -24,6 +24,7 @@ export default function HotelCard({
|
|||||||
hotel,
|
hotel,
|
||||||
type = HotelCardListingTypeEnum.PageListing,
|
type = HotelCardListingTypeEnum.PageListing,
|
||||||
state = "default",
|
state = "default",
|
||||||
|
onHotelCardHover,
|
||||||
}: HotelCardProps) {
|
}: HotelCardProps) {
|
||||||
const intl = useIntl()
|
const intl = useIntl()
|
||||||
|
|
||||||
@@ -37,8 +38,25 @@ export default function HotelCard({
|
|||||||
state,
|
state,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const handleMouseEnter = () => {
|
||||||
|
console.log("handleMouseEnter", hotelData.name)
|
||||||
|
if (onHotelCardHover) {
|
||||||
|
console.log("onHotelCardHover", hotelData.name)
|
||||||
|
onHotelCardHover(hotelData.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const handleMouseLeave = () => {
|
||||||
|
if (onHotelCardHover) {
|
||||||
|
onHotelCardHover(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<article className={classNames}>
|
<article
|
||||||
|
className={classNames}
|
||||||
|
onMouseEnter={handleMouseEnter}
|
||||||
|
onMouseLeave={handleMouseLeave}
|
||||||
|
>
|
||||||
<section className={styles.imageContainer}>
|
<section className={styles.imageContainer}>
|
||||||
{hotelData.gallery && (
|
{hotelData.gallery && (
|
||||||
<ImageGallery
|
<ImageGallery
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ import {
|
|||||||
export default function HotelCardListing({
|
export default function HotelCardListing({
|
||||||
hotelData,
|
hotelData,
|
||||||
type = HotelCardListingTypeEnum.PageListing,
|
type = HotelCardListingTypeEnum.PageListing,
|
||||||
state = "default",
|
activeCard,
|
||||||
|
onHotelCardHover,
|
||||||
}: HotelCardListingProps) {
|
}: HotelCardListingProps) {
|
||||||
const searchParams = useSearchParams()
|
const searchParams = useSearchParams()
|
||||||
|
|
||||||
@@ -41,7 +42,8 @@ export default function HotelCardListing({
|
|||||||
key={hotel.hotelData.name}
|
key={hotel.hotelData.name}
|
||||||
hotel={hotel}
|
hotel={hotel}
|
||||||
type={type}
|
type={type}
|
||||||
state={state}
|
state={hotel.hotelData.name === activeCard ? "active" : "default"}
|
||||||
|
onHotelCardHover={onHotelCardHover}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -9,14 +9,16 @@ import type { HotelListingProps } from "@/types/components/hotelReservation/sele
|
|||||||
|
|
||||||
export default function HotelListing({
|
export default function HotelListing({
|
||||||
hotels,
|
hotels,
|
||||||
cardState = "default",
|
activeHotelPin,
|
||||||
|
onHotelCardHover,
|
||||||
}: HotelListingProps) {
|
}: HotelListingProps) {
|
||||||
return (
|
return (
|
||||||
<div className={styles.hotelListing}>
|
<div className={styles.hotelListing}>
|
||||||
<HotelCardListing
|
<HotelCardListing
|
||||||
hotelData={hotels}
|
hotelData={hotels}
|
||||||
type={HotelCardListingTypeEnum.MapListing}
|
type={HotelCardListingTypeEnum.MapListing}
|
||||||
state={cardState}
|
activeCard={activeHotelPin}
|
||||||
|
onHotelCardHover={onHotelCardHover}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -94,7 +94,8 @@ export default function SelectHotelMap({
|
|||||||
</div>
|
</div>
|
||||||
<HotelListing
|
<HotelListing
|
||||||
hotels={hotels}
|
hotels={hotels}
|
||||||
cardState={activeHotelPin ? "active" : "default"}
|
activeHotelPin={activeHotelPin}
|
||||||
|
onHotelCardHover={setActiveHotelPin}
|
||||||
/>
|
/>
|
||||||
{showBackToTop && (
|
{showBackToTop && (
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ export enum HotelCardListingTypeEnum {
|
|||||||
export type HotelCardListingProps = {
|
export type HotelCardListingProps = {
|
||||||
hotelData: HotelData[]
|
hotelData: HotelData[]
|
||||||
type?: HotelCardListingTypeEnum
|
type?: HotelCardListingTypeEnum
|
||||||
state?: "default" | "active"
|
activeCard?: string | null
|
||||||
|
onHotelCardHover?: (hotelName: string | null) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export type HotelData = {
|
export type HotelData = {
|
||||||
|
|||||||
@@ -7,4 +7,5 @@ export type HotelCardProps = {
|
|||||||
hotel: HotelData
|
hotel: HotelData
|
||||||
type?: HotelCardListingTypeEnum
|
type?: HotelCardListingTypeEnum
|
||||||
state?: "default" | "active"
|
state?: "default" | "active"
|
||||||
|
onHotelCardHover?: (hotelName: string | null) => void
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,8 @@ import type { Coordinates } from "@/types/components/maps/coordinates"
|
|||||||
|
|
||||||
export interface HotelListingProps {
|
export interface HotelListingProps {
|
||||||
hotels: HotelData[]
|
hotels: HotelData[]
|
||||||
cardState?: "default" | "active"
|
activeHotelPin?: string | null
|
||||||
// pointsOfInterest: PointOfInterest[]
|
onHotelCardHover?: (hotelName: string | null) => void
|
||||||
// activePoi: PointOfInterest["name"] | null
|
|
||||||
// onActivePoiChange: (poi: PointOfInterest["name"] | null) => void
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SelectHotelMapProps {
|
export interface SelectHotelMapProps {
|
||||||
|
|||||||
Reference in New Issue
Block a user