From f7e47b5120fcb7a9431095386949b41e411e58c1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 11 Sep 2025 22:22:50 +0300 Subject: [PATCH] feat(react/collections/table): make note title editable --- .../src/widgets/collections/board/card.tsx | 15 ++++++++++-- .../src/widgets/collections/board/column.tsx | 2 +- .../src/widgets/collections/board/index.css | 23 ++++++++++++------- .../src/widgets/collections/board/index.tsx | 10 ++++---- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/collections/board/card.tsx b/apps/client/src/widgets/collections/board/card.tsx index 842af7ebd..04e025dcf 100644 --- a/apps/client/src/widgets/collections/board/card.tsx +++ b/apps/client/src/widgets/collections/board/card.tsx @@ -23,7 +23,7 @@ export default function Card({ setDraggedCard: (card: { noteId: string, branchId: string, fromColumn: string, index: number } | null) => void, isDragging: boolean }) { - const { branchIdToEdit } = useContext(BoardViewContext); + const { branchIdToEdit, setBranchIdToEdit } = useContext(BoardViewContext); const isEditing = branch.branchId === branchIdToEdit; const colorClass = note.getColorClass() || ''; const editorRef = useRef(null); @@ -42,6 +42,10 @@ export default function Card({ openNoteContextMenu(api, e, note.noteId, branch.branchId, column); }, [ api, note, branch, column ]); + const handleEdit = useCallback((e) => { + setBranchIdToEdit?.(branch.branchId); + }, [ setBranchIdToEdit, branch ]); + useEffect(() => { editorRef.current?.focus(); }, [ isEditing ]); @@ -56,7 +60,14 @@ export default function Card({ > {!isEditing ? ( - <>{note.title} + <> + {note.title} + + ) : ( {!isEditing ? ( <> - {column} + {column} .title, +.board-view-container .board-note > .title { + flex-grow: 1; +} + .board-view-container .board-column h3:active { cursor: grabbing; } @@ -87,20 +95,19 @@ font-family: inherit; } -.board-view-container .board-column h3 .edit-icon { +.board-view-container .board-column .edit-icon { opacity: 0; margin-left: 0.5em; transition: opacity 0.2s ease; color: var(--muted-text-color); + cursor: pointer; } -.board-view-container .board-column h3:hover .edit-icon { +.board-view-container .board-column h3:hover .edit-icon, +.board-view-container .board-note:hover .edit-icon { opacity: 1; } -.board-view-container .board-column h3.editing .edit-icon { - display: none; -} .board-view-container .board-note { box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.25); diff --git a/apps/client/src/widgets/collections/board/index.tsx b/apps/client/src/widgets/collections/board/index.tsx index fdb7d2a63..400e5b578 100644 --- a/apps/client/src/widgets/collections/board/index.tsx +++ b/apps/client/src/widgets/collections/board/index.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; +import { Dispatch, StateUpdater, useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; import { ViewModeProps } from "../interface"; import "./index.css"; import { ColumnMap, getBoardData } from "./data"; @@ -22,7 +22,8 @@ export interface BoardColumnData { interface BoardViewContextData { branchIdToEdit?: string; columnNameToEdit?: string; - setColumnNameToEdit?: (column: string | undefined) => void; + setColumnNameToEdit?: Dispatch>; + setBranchIdToEdit?: Dispatch>; } export const BoardViewContext = createContext({}); @@ -44,8 +45,9 @@ export default function BoardView({ note: parentNote, noteIds, viewConfig, saveC const boardViewContext = useMemo(() => ({ branchIdToEdit, columnNameToEdit, - setColumnNameToEdit - }), [ branchIdToEdit, columnNameToEdit, setColumnNameToEdit ]); + setColumnNameToEdit, + setBranchIdToEdit + }), [ branchIdToEdit, columnNameToEdit, setColumnNameToEdit, setBranchIdToEdit ]); function refresh() { getBoardData(parentNote, statusAttribute, viewConfig ?? {}).then(({ byColumn, newPersistedData }) => {