ov25-ui
Version:
A UI configurator for OV25 product visualization
99 lines (98 loc) • 3.93 kB
TypeScript
import React from 'react';
import type { DiningCatalogPayload, DiningCatalogItem, DiningSceneStatePayload, DiningMenuUIPayload, DiningErrorPayload, CompassSide, DisplaySide, SideSeatAssignmentPayload } from '../types/dining-iframe-types.js';
import type { ConfiguratorState, Selection } from './ov25-ui-context.js';
import type { DiningCallbacksConfig, DiningCommercePayload, DiningDisplayMode, DiningStyleImagesConfig } from '../types/dining-inject-config.js';
import type { UnifiedPricePayload, UnifiedSkuPayload } from '../types/inject-config.js';
export type DiningStep = 'style' | 'table' | 'chairs' | 'review';
export type DiningBuilderMode = 'full-range' | 'mix-and-match';
export interface DiningUIContextType {
shadowDOMs?: {
sidebar?: ShadowRoot;
fullPage?: ShadowRoot;
controls?: ShadowRoot;
};
cssString?: string;
displayMode: DiningDisplayMode;
logoURL?: string;
mobileLogoURL?: string;
styleImages?: DiningStyleImagesConfig;
hideLogo: boolean;
hidePricing: boolean;
disableAddToCart: boolean;
hideAr: boolean;
catalog: DiningCatalogPayload | null;
tables: DiningCatalogItem[];
chairs: DiningCatalogItem[];
benches: DiningCatalogItem[];
sceneState: DiningSceneStatePayload | null;
selectedTableItem: DiningCatalogItem | null;
globalChairCount: number;
sideAssignments: Partial<Record<CompassSide, SideSeatAssignmentPayload>>;
uniqueChairSides: DisplaySide[];
selectedObject: string | null;
selectedAttachmentPoint: {
tableId: number;
side: CompassSide;
index: number;
} | null;
loading: Record<string, boolean>;
isAnyLoading: boolean;
isReady: boolean;
menuUI: DiningMenuUIPayload | null;
lastError: DiningErrorPayload | null;
commerceSkuSnapshot: UnifiedSkuPayload | null;
commercePriceSnapshot: UnifiedPricePayload | null;
diningCommercePayload: DiningCommercePayload;
activeStep: DiningStep;
setActiveStep: (step: DiningStep) => void;
steps: DiningStep[];
builderMode: DiningBuilderMode;
setBuilderMode: (mode: DiningBuilderMode) => void;
canAdvance: boolean;
nextStep: () => void;
prevStep: () => void;
configuratorState: ConfiguratorState | undefined;
setConfiguratorState: React.Dispatch<React.SetStateAction<ConfiguratorState | undefined>>;
selectTable: (item: DiningCatalogItem) => void;
setChairCount: (count: number) => void;
setManualSideCounts: (tableConfigId: number, sides: Partial<Record<CompassSide, number>>) => void;
toggleUniqueSide: (side: DisplaySide) => void;
selectAttachmentPoint: (tableId: number, side: CompassSide, index: number) => void;
clearPicking: () => void;
selectSeatProduct: (item: DiningCatalogItem, side?: CompassSide) => void;
selectObject: (path: string) => void;
closeModuleMenu: () => void;
viewInRoom: () => void;
toggleDimensions: () => void;
enlargeViewer: () => void;
addToBasket: () => void;
handleSelectionSelect: (selection: Selection, optionId?: string) => void;
iframeRef: React.RefObject<HTMLIFrameElement>;
isMobile: boolean;
uniqueId?: string;
}
export declare function useDiningUI(): DiningUIContextType;
interface DiningUIProviderProps {
children: React.ReactNode;
uniqueId?: string;
cssString?: string;
forceMobile?: boolean;
displayMode?: DiningDisplayMode;
includeStyleStep?: boolean;
callbacks?: DiningCallbacksConfig;
logoURL?: string;
mobileLogoURL?: string;
styleImages?: DiningStyleImagesConfig;
hideLogo?: boolean;
hidePricing?: boolean;
disableAddToCart?: boolean;
hideAr?: boolean;
currencySymbol?: string;
shadowDOMs?: {
sidebar?: ShadowRoot;
fullPage?: ShadowRoot;
controls?: ShadowRoot;
};
}
export declare const DiningUIProvider: React.FC<DiningUIProviderProps>;
export {};