import { Box, Button, Dialog, Icon, Modal, Row, Tooltip, TooltipTrigger } from '@umami/react-zen'; import { useMemo, useState } from 'react'; import { Panel } from '@/components/common/Panel'; import { useBoard, useMessages } from '@/components/hooks'; import { Pencil, Plus, X } from '@/components/icons'; import type { BoardComponentConfig } from '@/lib/types'; import { getComponentDefinition } from '../boardComponentRegistry'; import styles from './BoardColumn.module.css'; import { BoardComponentRenderer } from './BoardComponentRenderer'; import { BoardComponentSelect } from './BoardComponentSelect'; export function BoardEditColumn({ id, component, canEdit, onRemove, onSetComponent, canRemove = true, }: { id: string; component?: BoardComponentConfig; canEdit: boolean; onRemove: (id: string) => void; onSetComponent: (id: string, config: BoardComponentConfig | null) => void; canRemove?: boolean; }) { const [showSelect, setShowSelect] = useState(false); const { board } = useBoard(); const { t, labels } = useMessages(); const websiteId = board?.parameters?.websiteId; const renderedComponent = useMemo(() => { if (!component || !websiteId) { return null; } return ; }, [component, websiteId]); const handleSelect = (config: BoardComponentConfig) => { onSetComponent(id, config); setShowSelect(false); }; const hasComponent = !!component; const canRemoveAction = hasComponent || canRemove; const defaultTitle = component ? getComponentDefinition(component.type)?.name : undefined; const title = component?.title || defaultTitle; const description = component?.description; const handleRemove = () => { if (hasComponent) { onSetComponent(id, null); } else { onRemove(id); } }; return ( {canEdit && canRemoveAction && ( {hasComponent && ( {t(labels.edit)} )} {t(labels.remove)} )} {renderedComponent ? ( {renderedComponent} ) : ( canEdit && ( ) )} {() => ( setShowSelect(false)} /> )} ); }