import type { Dispatch, SetStateAction } from 'react'; import { SidebarMediaItem } from './ImageCanvasEditorPrimitives'; import type { CanvasContextMenuState, CanvasLayer, ImageContextMenuState, } from './ImageCanvasEditorTypes'; const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png'; export type ImageCanvasLayerPanelViewProps = { layers: CanvasLayer[]; selectedLayerId: string | null; selectedLayerIds: string[]; setImageContextMenu: Dispatch>; setContextMenu: Dispatch>; selectSingleLayer: (layerId: string | null) => void; resolveContextMenuPosition: ( clientX: number, clientY: number, menuKind: 'blank' | 'layer', ) => Omit; getCanvasPointFromClient: ( clientX: number, clientY: number, ) => { x: number; y: number }; }; export function ImageCanvasLayerPanelView({ layers, selectedLayerId, selectedLayerIds, setImageContextMenu, setContextMenu, selectSingleLayer, resolveContextMenuPosition, getCanvasPointFromClient, }: ImageCanvasLayerPanelViewProps) { return (
{layers .slice() .sort((left, right) => right.zIndex - left.zIndex) .map((layer) => ( selectSingleLayer(layer.id)} rowClassName="image-canvas-editor__layer-row" primaryClassName="image-canvas-editor__layer-row-button" thumbnailClassName="image-canvas-editor__layer-row-thumb" metaClassName="image-canvas-editor__layer-row-meta" onContextMenu={(event) => { event.preventDefault(); event.stopPropagation(); if (!selectedLayerIds.includes(layer.id)) { selectSingleLayer(layer.id); } const position = resolveContextMenuPosition( event.clientX, event.clientY, 'layer', ); setImageContextMenu(null); setContextMenu({ kind: 'layer', layerId: layer.id, ...position, canvasPoint: getCanvasPointFromClient( event.clientX, event.clientY, ), }); }} /> ))}
); }