import { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button, Group, Popover, Text, TextInput, UnstyledButton } from "@mantine/core"; import { IBaseProperty, KanbanColumn, SelectTypeOptions } from "@/ee/base/types/base.types"; import { useUpdatePropertyMutation } from "@/ee/base/queries/base-property-query"; import classes from "@/ee/base/styles/kanban.module.css"; type KanbanColumnTitleProps = { column: KanbanColumn; property: IBaseProperty | undefined; pageId: string; canEdit: boolean; }; export function KanbanColumnTitle({ column, property, pageId, canEdit }: KanbanColumnTitleProps) { const { t } = useTranslation(); const [opened, setOpened] = useState(false); const [draft, setDraft] = useState(""); const updateProperty = useUpdatePropertyMutation(); const commit = useCallback(() => { setOpened(false); const name = draft.trim(); const options = property?.typeOptions as SelectTypeOptions | undefined; if (!property || !options || !name || name === column.name) return; if (!options.choices.some((c) => c.id === column.key)) return; updateProperty.mutate({ propertyId: property.id, pageId, typeOptions: { ...options, choices: options.choices.map((c) => c.id === column.key ? { ...c, name } : c, ), }, }); }, [draft, property, column.name, column.key, pageId, updateProperty]); const toggle = useCallback(() => { if (opened) { commit(); } else { setDraft(column.name); setOpened(true); } }, [opened, commit, column.name]); const cancel = useCallback(() => setOpened(false), []); if (!canEdit || column.isNoValue || !property) { return ( {column.isNoValue ? t("No value") : column.name} ); } return ( { if (!next) commit(); }} position="bottom-start" shadow="md" width={240} withinPortal trapFocus returnFocus closeOnClickOutside closeOnEscape={false} > {column.name} e.stopPropagation()} onKeyDown={(e) => { if (e.key === "Escape") { e.preventDefault(); e.stopPropagation(); cancel(); } }} > e.currentTarget.select()} onChange={(e) => setDraft(e.currentTarget.value)} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); commit(); } }} /> ); }