Merged in feat/LOY-400-create-spend-points-modal (pull request #3131)
Feat/LOY-400 create spend points modal * feat(LOY-400): Added custom button to my pages overview and skeleton file to custom modal for my points. * feat(LOY-400): Added custom button to my pages overview and components for custom modal for my points. * feat(LOY-400): Changed some style and infogridcardover * feat(LOY-400):Removed custom card components and changed in infoCard: Added imagePosition top, added optional height prop. In Card: Changed Text-wrap styling, added min-width styling to buttons, added optional Icon prop, added optional height prop * feat(LOY-400):Added linkList, LinkListItem component and messageBanner component. Added granola illustration. * feat(LOY-400): Removed background in several illustrations. Added component for illustration. Fixed LinkedList and styling for UsePointsButton. * feat(LOY-400): Added modal to PointsToSpendCard and fixed UsePointsButton. * fix(LOY-400):added some styling * feat(LOY-400): Linked Modal to contentstack and fetch the data in cards with UsePointsModal for now * feat(LOY-400): changed link to aria-component, cleaned up a bit * feat(LOY-400): Changed height for larger modals in mobile, fixed zod schema for no illustration input, cleaned up * fix(LOY-400): fixed graphql after rebase * fix(LOY-400): mini fix * fix(LOY-400): fixed pr-comments * fix(LOY-400): fixed some PR-comments * fix(LOY-400): fixed a PR-comment * feat(LOY-400): added size prop to ilustration in LinkListItem to be able to use illustrations in IllustrationByIconName * fix(LOY-400): fixed pr-comments * Merged in feat/LOY-402-pre-ticked-book-reward-night-in-booking-flow (pull request #3210) Feat/LOY-402 pre ticked book reward night in booking flow * feat(LOY-402): Changed UsePointsModal structure to handle button actions in card. * feat(LOY-402): added functionality for book now button * feat(LOY-400): pr comment fix * feat(LOY-402): transformed the contentstack data * fix(LOY-402): fixed pr comments Approved-by: Chuma Mcphoy (We Ahead) Approved-by: Anton Gunnarsson Approved-by: Matilda Landström * Merged in feat/LOY-404-add-tracking-for-spend-points-modal (pull request #3229) Feat/LOY-404 add tracking for spend points modal * feat(LOY-402): Changed UsePointsModal structure to handle button actions in card. * feat(LOY-402): added functionality for book now button * feat(LOY-400): pr comment fix * feat(LOY-402): transformed the contentstack data * feat(LOY-404): added tracking * fix(LOY-404): fix for session storage removal of bookNowFromPointsModal * feat(LOY-404): added consts * fix(LOY-404): moved foxusWidget const * fix(LOY-404): moved BOOKING_WIDGET_STATE const * fix(LOY-404):fix Approved-by: Matilda Landström * fix(LOY-400): some fixes * feat(LOY-400): created linkList storybook Approved-by: Chuma Mcphoy (We Ahead) Approved-by: Matilda Landström
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { transformedImageVaultAssetSchema } from "@scandic-hotels/common/utils/imageVault"
|
||||
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
|
||||
|
||||
import { linkConnectionRefs } from "../schemas/linkConnection"
|
||||
import { linkUnionSchema, transformPageLink } from "../schemas/pageLinks"
|
||||
|
||||
export type UsePointsModalData = z.output<typeof usePointsModalSchema>
|
||||
export type UsePointsModalRefsData = z.output<typeof usePointsModalRefsSchema>
|
||||
|
||||
export const linkConnectionSchema = z
|
||||
.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: linkUnionSchema,
|
||||
})
|
||||
),
|
||||
})
|
||||
.transform((data) => {
|
||||
if (data.edges.length) {
|
||||
const linkNode = data.edges[0].node
|
||||
if (linkNode) {
|
||||
const link = transformPageLink(linkNode)
|
||||
if (link && link.url) {
|
||||
return link.url
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
})
|
||||
|
||||
const usePointsModalItemsSchema = z.object({
|
||||
image: transformedImageVaultAssetSchema,
|
||||
link_group: z
|
||||
.array(
|
||||
z.object({
|
||||
link_text: z.string().default(""),
|
||||
is_contentstack_link: z.boolean(),
|
||||
illustration: z.nativeEnum(IconName).nullish(),
|
||||
illustration_size: z
|
||||
.enum(["small", "medium", "large"])
|
||||
.nullish()
|
||||
.default("large"),
|
||||
external_link: z
|
||||
.object({
|
||||
href: z.string().default(""),
|
||||
})
|
||||
.optional(),
|
||||
linkConnection: linkConnectionSchema,
|
||||
})
|
||||
)
|
||||
.transform((links) =>
|
||||
links.map((link) => ({
|
||||
text: link.link_text || "",
|
||||
isExternal: !link.is_contentstack_link,
|
||||
href: link.is_contentstack_link
|
||||
? link.linkConnection || ""
|
||||
: link.external_link?.href || "",
|
||||
illustration: link.illustration
|
||||
? {
|
||||
illustration: link.illustration,
|
||||
size: link.illustration_size || "large",
|
||||
}
|
||||
: undefined,
|
||||
}))
|
||||
),
|
||||
})
|
||||
|
||||
export const usePointsModalSchema = z.object({
|
||||
all_usepointsmodal: z.object({
|
||||
items: z.array(usePointsModalItemsSchema),
|
||||
}),
|
||||
})
|
||||
|
||||
export const usePointsModalRefsSchema = z.object({
|
||||
all_usepointsmodal: z.object({
|
||||
items: z.array(
|
||||
z.object({
|
||||
link_group: z.array(linkConnectionRefs),
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
Reference in New Issue
Block a user