/** * ConstructorMenu Component * * Draggable menu panel with actions for adding elements, backgrounds, etc. */ import React, { forwardRef } from 'react'; import BaseIcon from '../BaseIcon'; import BaseButton from '../BaseButton'; import { mdiMenu, mdiImageMultiple, mdiViewCarousel, mdiTooltipText, mdiSwapHorizontal, mdiText, mdiPlus, mdiExitToApp, } from '@mdi/js'; import MenuActionButton from './MenuActionButton'; import dataFormatter from '../../helpers/dataFormatter'; import type { Position, CanvasElementType, NavigationElementType, } from './types'; import type { EditorMenuItem } from '../../types/constructor'; interface ConstructorMenuProps { position: Position; isOpen: boolean; allowedNavigationTypes: NavigationElementType[]; isCreatingPage: boolean; isSaving: boolean; isSavingToStage: boolean; onDragStart: (event: React.MouseEvent) => void; onToggleOpen: () => void; onSelectMenuItem: (item: EditorMenuItem) => void; onAddElement: (type: CanvasElementType) => void; onCreatePage: () => void; onSave: () => void; onSaveToStage: () => void; onExit: () => void; /** Page's last saved timestamp (updatedAt from tour_pages) */ lastSavedAt?: string | null; /** Last save-to-stage timestamp */ lastSavedToStageAt?: string | null; } const ConstructorMenu = forwardRef( ( { position, isOpen, allowedNavigationTypes, isCreatingPage, isSaving, isSavingToStage, onDragStart, onToggleOpen, onSelectMenuItem, onAddElement, onCreatePage, onSave, onSaveToStage, onExit, lastSavedAt, lastSavedToStageAt, }, ref, ) => { return (
Constructor Menu
{isOpen && (
onSelectMenuItem('background_image')} /> onSelectMenuItem('background_video')} /> onSelectMenuItem('background_audio')} /> onAddElement(allowedNavigationTypes[0])} /> onSelectMenuItem('create_transition')} /> onAddElement('gallery')} /> onAddElement('carousel')} /> onAddElement('tooltip')} /> onAddElement('description')} /> onAddElement('video_player')} /> onAddElement('audio_player')} />
)}
); }, ); ConstructorMenu.displayName = 'ConstructorMenu'; export default ConstructorMenu;