+ Visit for the Whakapapa Ski field status, lift, food and retail
+ status and status of other activities.
+
The UASC Lodge is located in the Whakapapa Ski field and is just a
3-5 min walk from the bottom of the Sky Waka Gondola, meaning you
diff --git a/client/src/components/composite/LodgeInfo/LodgeInfo.tsx b/client/src/components/composite/LodgeInfo/LodgeInfo.tsx
index 4ac3c57a6..783ac19d6 100644
--- a/client/src/components/composite/LodgeInfo/LodgeInfo.tsx
+++ b/client/src/components/composite/LodgeInfo/LodgeInfo.tsx
@@ -1,3 +1,4 @@
+import Button from "@/components/generic/FigmaButtons/FigmaButton"
import LodgeInfoComponent from "./LodgeInfoComponent/LodgeInfoComponent"
import LodgeInfoGallery from "./LodgeInfoGallery/LodgeInfoGallery"
import { ReactNode } from "react"
@@ -10,25 +11,43 @@ export interface ILodgeInfo {
/**
* List of image srcs
*/
- images?: string[]
+ imageSrcs?: string[]
/**
* Handler to be called once the user clicks the call to action
*/
handleBookLodgeClick?: () => void
}
-const LodgeInfo = ({ children, images, handleBookLodgeClick }: ILodgeInfo) => {
+/**
+ * Component displaying information about the lodge before the user makes a booking
+ *
+ * Use case - if someone new to the club wants to know what the lodge is, or are unsure about
+ * how to prepare/find more information
+ */
+const LodgeInfo = ({
+ children,
+ imageSrcs,
+ handleBookLodgeClick
+}: ILodgeInfo) => {
return (
-
-
-
+
+
+
-
- handleBookLodgeClick?.()}
- >
- {children}
-
+
+
+ handleBookLodgeClick?.()}
+ >
+ {children}
+
+
+
+
+
+
)
diff --git a/client/src/components/composite/LodgeInfo/LodgeInfoComponent/LodgeInfoComponent.tsx b/client/src/components/composite/LodgeInfo/LodgeInfoComponent/LodgeInfoComponent.tsx
index 1fe968830..cb9dbe454 100644
--- a/client/src/components/composite/LodgeInfo/LodgeInfoComponent/LodgeInfoComponent.tsx
+++ b/client/src/components/composite/LodgeInfo/LodgeInfoComponent/LodgeInfoComponent.tsx
@@ -2,25 +2,35 @@ import Button from "@/components/generic/FigmaButtons/FigmaButton"
import { ReactNode } from "react"
interface ILodgeInfoComponent {
+ /**
+ * The **pre-rendered** children that should be displayed in the the container
+ * (This should generally be text content)
+ */
children: ReactNode
+ /**
+ * Handler to be called when call to action button is clicked
+ *
+ * @example
+ * () => navigateToActualBookLodgeScreen()
+ */
handleBookLodgeClick: () => void
}
+/**
+ * @deprecated do not consume directly on page, use `LodgeInfo` instead
+ */
const LodgeInfoComponent = ({
children,
handleBookLodgeClick
}: ILodgeInfoComponent) => {
return (
-
-
+
+
{children}
-
-
-
-
+
)
}
diff --git a/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.story.tsx b/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.story.tsx
index 6eedc050f..fee1711d0 100644
--- a/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.story.tsx
+++ b/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.story.tsx
@@ -11,7 +11,7 @@ type Story = StoryObj
export const Default: Story = {
args: {
- images: [
+ imageSrcs: [
"https://via.placeholder.com/400x400?text=Image+1",
"https://via.placeholder.com/400x400?text=Image+2",
"https://via.placeholder.com/400x400?text=Image+3",
@@ -23,14 +23,14 @@ export const Default: Story = {
export const SingleImage: Story = {
args: {
- images: ["https://via.placeholder.com/400x400?text=Single+Image"]
+ imageSrcs: ["https://via.placeholder.com/400x400?text=Single+Image"]
},
tags: ["autodocs"]
}
export const NoImages: Story = {
args: {
- images: []
+ imageSrcs: []
},
tags: ["autodocs"]
}
diff --git a/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.tsx b/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.tsx
index c5a6e9a32..6d60c34e3 100644
--- a/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.tsx
+++ b/client/src/components/composite/LodgeInfo/LodgeInfoGallery/LodgeInfoGallery.tsx
@@ -1,57 +1,40 @@
-import { useState, FC } from "react"
import Image from "next/image"
-import RightArrow from "@/assets/icons/whitearrowright.svg"
-import LeftArrow from "@/assets/icons/whitearrowleft.svg"
-interface LodgeInfoGalleryProps {
- images: string[]
+interface ILodgeInfoGallery {
+ /**
+ * A list of srcs for all the images in the gallery.
+ *
+ * This should be **pre-sorted** and **unique**
+ *
+ * @example
+ * ['https://image-url-1.com', 'https://image-url-2.com', 'https://image-url-3.com']
+ */
+ imageSrcs: string[]
}
-const LodgeInfoGallery: FC = ({ images }) => {
- const [currentIndex, setCurrentIndex] = useState(0)
-
- const handlePreviousClick = () => {
- setCurrentIndex((prevIndex) =>
- prevIndex === 0 ? images.length - 1 : prevIndex - 1
- )
- }
-
- const handleNextClick = () => {
- setCurrentIndex((prevIndex) =>
- prevIndex === images.length - 1 ? 0 : prevIndex + 1
- )
- }
-
+/**
+ * Simple photo gallery that displays images in a single row (can be scrolled horizontally)
+ */
+const LodgeInfoGallery = ({ imageSrcs = [] }: ILodgeInfoGallery) => {
return (
-
- {images.length > 0 ? (
-
- ) : (
-
No images available
- )}
-
-
-
-
+ <>
+
+ {imageSrcs.map((url, index) => (
+ <>
+ {/* We require a `max-width` style to constrain the image on smaller screens */}
+