diff --git a/frontend/src/pages/constructor.tsx b/frontend/src/pages/constructor.tsx index 7c8f253..ef25a0e 100644 --- a/frontend/src/pages/constructor.tsx +++ b/frontend/src/pages/constructor.tsx @@ -61,8 +61,11 @@ type CanvasElement = { label: string; xPercent: number; yPercent: number; + iconUrl?: string; galleryCards?: GalleryCard[]; carouselSlides?: CarouselSlide[]; + carouselPrevIconUrl?: string; + carouselNextIconUrl?: string; tooltipTitle?: string; tooltipText?: string; descriptionTitle?: string; @@ -258,12 +261,15 @@ const createDefaultElement = (type: CanvasElementType, index: number): CanvasEle return { ...base, carouselSlides: [{ id: createLocalId(), imageUrl: '', caption: 'Slide 1' }], + carouselPrevIconUrl: '', + carouselNextIconUrl: '', }; } if (type === 'tooltip') { return { ...base, + iconUrl: '', tooltipTitle: 'Tooltip title', tooltipText: 'Tooltip text', }; @@ -272,6 +278,7 @@ const createDefaultElement = (type: CanvasElementType, index: number): CanvasEle if (type === 'description') { return { ...base, + iconUrl: '', descriptionTitle: 'Description title', descriptionText: 'Description text', }; @@ -281,6 +288,7 @@ const createDefaultElement = (type: CanvasElementType, index: number): CanvasEle return { ...base, navLabel: type === 'navigation_next' ? 'Forward' : 'Back', + iconUrl: '', transitionReverseMode: 'auto_reverse', transitionDurationSec: 0.7, }; @@ -429,6 +437,13 @@ const ConstructorPage = () => { return videoAssetOptions; }, [assets, videoAssetOptions]); + const iconAssetOptions = useMemo( + () => + assets + .filter((asset) => asset.type === 'icon' && asset.asset_type === 'image' && getAssetSourceValue(asset)) + .map((asset) => ({ value: getAssetSourceValue(asset), label: getAssetLabel(asset) })), + [assets], + ); useEffect(() => { if (newTransitionVideoUrl) return; @@ -570,6 +585,9 @@ const ConstructorPage = () => { caption: String(slide?.caption || `Slide ${index + 1}`), })) : undefined, + iconUrl: typeof item.iconUrl === 'string' ? item.iconUrl : '', + carouselPrevIconUrl: typeof item.carouselPrevIconUrl === 'string' ? item.carouselPrevIconUrl : '', + carouselNextIconUrl: typeof item.carouselNextIconUrl === 'string' ? item.carouselNextIconUrl : '', tooltipTitle: typeof item.tooltipTitle === 'string' ? item.tooltipTitle : '', tooltipText: typeof item.tooltipText === 'string' ? item.tooltipText : '', descriptionTitle: typeof item.descriptionTitle === 'string' ? item.descriptionTitle : '', @@ -951,7 +969,13 @@ const ConstructorPage = () => { const targetPageName = element.targetPageId ? pageNameById[element.targetPageId] : ''; return (
{element.tooltipTitle || 'Tooltip title'}
{element.tooltipText || 'Tooltip text'}
{element.descriptionTitle || 'Description title'}
{element.descriptionText || 'Description text'}
{firstSlide?.caption || 'No caption'}
+ {(element.carouselPrevIconUrl || element.carouselNextIconUrl) && ( +