import { Box, Button, Column, Icon, Row, Tooltip, TooltipTrigger } from '@umami/react-zen'; import { produce } from 'immer'; import { Fragment, useState } from 'react'; import { Group, type GroupImperativeHandle, Panel as ResizablePanel, Separator, } from 'react-resizable-panels'; import { v4 as uuid } from 'uuid'; import { useBoard } from '@/components/hooks'; import { ChevronDown, GripVertical, Minus, Plus } from '@/components/icons'; import type { BoardColumn as BoardColumnType, BoardComponentConfig } from '@/lib/types'; import { BoardEditColumn } from './BoardEditColumn'; import { MAX_COLUMNS, MIN_COLUMN_WIDTH } from './boardConstants'; export function BoardEditRow({ rowId, rowIndex, rowCount, columns, canEdit, onRemove, onMoveUp, onMoveDown, onRegisterRef, }: { rowId: string; rowIndex: number; rowCount: number; columns: BoardColumnType[]; canEdit: boolean; onRemove: (id: string) => void; onMoveUp: (id: string) => void; onMoveDown: (id: string) => void; onRegisterRef: (rowId: string, ref: GroupImperativeHandle | null) => void; }) { const { board, updateBoard } = useBoard(); const [showActions, setShowActions] = useState(false); const moveUpDisabled = rowIndex === 0; const addColumnDisabled = columns.length >= MAX_COLUMNS; const moveDownDisabled = rowIndex === rowCount - 1; const handleGroupRef = (ref: GroupImperativeHandle | null) => { onRegisterRef(rowId, ref); }; const handleAddColumn = () => { updateBoard({ parameters: produce(board.parameters, draft => { const rowIndex = draft.rows.findIndex(row => row.id === rowId); const row = draft.rows[rowIndex]; if (!row) { draft.rows[rowIndex] = { id: uuid(), columns: [] }; } row.columns.push({ id: uuid(), component: null }); }), }); }; const handleRemoveColumn = (columnId: string) => { updateBoard({ parameters: produce(board.parameters, draft => { const row = draft.rows.find(row => row.id === rowId); if (row) { row.columns = row.columns.filter(col => col.id !== columnId); } }), }); }; const handleSetComponent = (columnId: string, config: BoardComponentConfig | null) => { updateBoard({ parameters: produce(board.parameters, draft => { const row = draft.rows.find(row => row.id === rowId); if (row) { const col = row.columns.find(col => col.id === columnId); if (col) { col.component = config; } } }), }); }; return ( setShowActions(true)} onMouseLeave={() => setShowActions(false)} > {columns?.map((column, index) => ( 1} /> {index < columns.length - 1 && ( )} ))} {canEdit && showActions && ( Move row up Add column Remove row Move row down )} ); }