/* Copyright 2026 Marimo. All rights reserved. */ import { PencilIcon, PlusIcon } from "lucide-react"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import type { DataType } from "@/core/kernel/messages"; import { capitalize } from "@/utils/strings"; interface RenameColumnSubProps { currentColumnName: string; onRename: (newName: string) => void; onCancel: () => void; } export const RenameColumnSub: React.FC = ({ currentColumnName, onRename, onCancel, }) => { const [inputValue, setInputValue] = useState(""); const handleRename = () => { if (inputValue.trim()) { onRename(inputValue.trim()); setInputValue(currentColumnName); } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { handleRename(); } else if (e.key === "Escape") { onCancel(); } }; return ( Rename column
setInputValue(e.target.value)} placeholder="Enter new column name" className="mt-1" onKeyDown={handleKeyDown} />
); }; interface AddColumnSubProps { direction: "left" | "right"; onAdd: (columnName: string, dataType: DataType) => void; onCancel: () => void; } export const AddColumnSub: React.FC = ({ direction, onAdd, onCancel, }) => { const [columnName, setColumnName] = useState(""); const [dataType, setDataType] = useState("string"); const supportedDataTypes: DataType[] = [ "string", "number", "boolean", "datetime", ]; const handleAdd = () => { if (columnName.trim()) { onAdd(columnName.trim(), dataType); setColumnName(""); setDataType("string"); // reset } }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { handleAdd(); } else if (e.key === "Escape") { onCancel(); } }; return ( Add column to the {direction}
setColumnName(e.target.value)} placeholder="Enter column name" className="mt-1" onKeyDown={handleKeyDown} />
); };