From 0d275b325996bc8742e43a5843c212c14480f860 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 12 Sep 2025 17:05:17 +0300 Subject: [PATCH] refactor(collections/board): use same title editor for new columns --- .../src/widgets/collections/board/api.ts | 21 ++++++ .../src/widgets/collections/board/index.tsx | 69 +++++-------------- 2 files changed, 39 insertions(+), 51 deletions(-) diff --git a/apps/client/src/widgets/collections/board/api.ts b/apps/client/src/widgets/collections/board/api.ts index cc00b5495..7188ef699 100644 --- a/apps/client/src/widgets/collections/board/api.ts +++ b/apps/client/src/widgets/collections/board/api.ts @@ -43,6 +43,27 @@ export default class BoardApi { await attributes.setLabel(noteId, this.statusAttribute, newColumn); } + async addNewColumn(columnName: string) { + if (!columnName.trim()) { + return; + } + + if (!this.viewConfig) { + this.viewConfig = {}; + } + + if (!this.viewConfig.columns) { + this.viewConfig.columns = []; + } + + // Add the new column to persisted data if it doesn't exist + const existingColumn = this.viewConfig.columns.find(col => col.value === columnName); + if (!existingColumn) { + this.viewConfig.columns.push({ value: columnName }); + this.saveConfig(this.viewConfig); + } + } + async removeColumn(column: string) { // Remove the value from the notes. const noteIds = this.byColumn?.get(column)?.map(item => item.note.noteId) || []; diff --git a/apps/client/src/widgets/collections/board/index.tsx b/apps/client/src/widgets/collections/board/index.tsx index df3fcf6cd..483703552 100644 --- a/apps/client/src/widgets/collections/board/index.tsx +++ b/apps/client/src/widgets/collections/board/index.tsx @@ -189,46 +189,20 @@ export default function BoardView({ note: parentNote, noteIds, viewConfig, saveC
)} - +
) } -function AddNewColumn({ viewConfig, saveConfig }: { viewConfig?: BoardViewData, saveConfig: (data: BoardViewData) => void }) { +function AddNewColumn({ api }: { api: BoardApi }) { const [ isCreatingNewColumn, setIsCreatingNewColumn ] = useState(false); - const columnNameRef = useRef(null); const addColumnCallback = useCallback(() => { setIsCreatingNewColumn(true); }, []); - const finishEdit = useCallback((save: boolean) => { - const columnName = columnNameRef.current?.value; - if (!columnName || !save) { - setIsCreatingNewColumn(false); - return; - } - - // Add the new column to persisted data if it doesn't exist - if (!viewConfig) { - viewConfig = {}; - } - - if (!viewConfig.columns) { - viewConfig.columns = []; - } - - const existingColumn = viewConfig.columns.find(col => col.value === columnName); - if (!existingColumn) { - viewConfig.columns.push({ value: columnName }); - saveConfig(viewConfig); - } - - setIsCreatingNewColumn(false); - }, [ viewConfig, saveConfig ]); - return (
{!isCreatingNewColumn @@ -236,33 +210,25 @@ function AddNewColumn({ viewConfig, saveConfig }: { viewConfig?: BoardViewData, {" "} {t("board_view.add-column")} - : <> - finishEdit(true)} - onKeyDown={(e: KeyboardEvent) => { - if (e.key === "Enter") { - e.preventDefault(); - finishEdit(true); - } else if (e.key === "Escape") { - e.preventDefault(); - finishEdit(false); - } - }} + save={(columnName) => api.addNewColumn(columnName)} + dismiss={() => setIsCreatingNewColumn(false)} + isNewItem /> - } + )}
) } -export function TitleEditor({ currentValue, save, dismiss, multiline, isNewItem }: { - currentValue: string, - save: (newValue: string) => void, - dismiss: () => void, - multiline?: boolean, - isNewItem?: boolean +export function TitleEditor({ currentValue, placeholder, save, dismiss, multiline, isNewItem }: { + currentValue?: string; + placeholder?: string; + save: (newValue: string) => void; + dismiss: () => void; + multiline?: boolean; + isNewItem?: boolean; }) { const inputRef = useRef(null); @@ -276,7 +242,8 @@ export function TitleEditor({ currentValue, save, dismiss, multiline, isNewItem return ( { if (e.key === "Enter") { @@ -298,5 +265,5 @@ export function TitleEditor({ currentValue, save, dismiss, multiline, isNewItem dismiss(); }} /> - ) + ); }