import { Lang } from "@/constants/languages" import { membershipLevels } from "@/constants/membershipLevels" import { MembershipLevel } from "@/utils/user" import type { IntlFormatters } from "@formatjs/intl" type BenefitTitle = { title: string } export type OverviewTableClientProps = { activeMembership: MembershipLevel | null } export type Level = { level: membershipLevels name: string requiredPoints: number requiredNights?: number benefits: BenefitTitle[] } export type LevelCardProps = { formatMessage: IntlFormatters["formatMessage"] lang: Lang level: Level } export type ComparisonLevel = { level: membershipLevels name: string description: string requirement: string icon: string benefits: Benefit[] } export type Benefit = { name: string description: string unlocked: boolean value?: string valueDetails?: string } export type LevelSummaryProps = { level: ComparisonLevel showDescription?: boolean } export type BenefitCardProps = { comparedValues: BenefitValueInformation[] title: string description: string } type BenefitValueInformation = { unlocked: boolean value?: string valueDetails?: string } export type BenefitValueProps = { benefit: BenefitValueInformation } export type BenefitListProps = { levels: ComparisonLevel[] } export type MobileColumnHeaderProps = { column: "A" | "B" } export type DesktopSelectColumns = { column: MobileColumnHeaderProps["column"] | "C" } export type LargeTableProps = { levels: ComparisonLevel[] activeLevel: membershipLevels | null Select?: (column: DesktopSelectColumns) => JSX.Element | null } export type BenefitTableHeaderProps = { name: string description: string } export enum overviewTableActionsEnum { SET_SELECTED_LEVEL_A_MOBILE = "SET_SELECTED_LEVEL_A_MOBILE", SET_SELECTED_LEVEL_B_MOBILE = "SET_SELECTED_LEVEL_B_MOBILE", SET_SELECTED_LEVEL_A_DESKTOP = "SET_SELECTED_LEVEL_A_DESKTOP", SET_SELECTED_LEVEL_B_DESKTOP = "SET_SELECTED_LEVEL_B_DESKTOP", SET_SELECTED_LEVEL_C_DESKTOP = "SET_SELECTED_LEVEL_C_DESKTOP", } export type OverviewTableReducerAction = { type: overviewTableActionsEnum payload: ComparisonLevel }