From 977fbf54ee5fe31029abbe8b2fd865f6710b0a71 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 20 Jul 2025 19:06:33 +0300 Subject: [PATCH] refactor(views/board): delegate storage to API --- .../widgets/view_widgets/board_view/api.ts | 27 +++++++++++++++++-- .../widgets/view_widgets/board_view/data.ts | 2 +- .../widgets/view_widgets/board_view/index.ts | 19 +++---------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/apps/client/src/widgets/view_widgets/board_view/api.ts b/apps/client/src/widgets/view_widgets/board_view/api.ts index bccf0201b..b2e2009b3 100644 --- a/apps/client/src/widgets/view_widgets/board_view/api.ts +++ b/apps/client/src/widgets/view_widgets/board_view/api.ts @@ -1,17 +1,27 @@ import appContext from "../../../components/app_context"; +import FNote from "../../../entities/fnote"; import attributes from "../../../services/attributes"; import note_create from "../../../services/note_create"; +import ViewModeStorage from "../view_mode_storage"; +import { BoardData } from "./config"; +import { ColumnMap, getBoardData } from "./data"; export default class BoardApi { - constructor( + private constructor( private _columns: string[], - private _parentNoteId: string) {} + private _parentNoteId: string, + private viewStorage: ViewModeStorage, + private byColumn: ColumnMap) {} get columns() { return this._columns; } + getColumn(column: string) { + return this.byColumn.get(column); + } + async changeColumn(noteId: string, newColumn: string) { await attributes.setLabel(noteId, "status", newColumn); } @@ -49,4 +59,17 @@ export default class BoardApi { } } + static async build(parentNote: FNote, viewStorage: ViewModeStorage) { + let persistedData = await viewStorage.restore() ?? {}; + const { byColumn, newPersistedData } = await getBoardData(parentNote, "status", persistedData); + const columns = Array.from(byColumn.keys()) || []; + + if (newPersistedData) { + persistedData = newPersistedData; + viewStorage.store(persistedData); + } + + return new BoardApi(columns, parentNote.noteId, viewStorage, byColumn); + } + } diff --git a/apps/client/src/widgets/view_widgets/board_view/data.ts b/apps/client/src/widgets/view_widgets/board_view/data.ts index bb3095e89..828181896 100644 --- a/apps/client/src/widgets/view_widgets/board_view/data.ts +++ b/apps/client/src/widgets/view_widgets/board_view/data.ts @@ -2,7 +2,7 @@ import FBranch from "../../../entities/fbranch"; import FNote from "../../../entities/fnote"; import { BoardData } from "./config"; -type ColumnMap = Map; diff --git a/apps/client/src/widgets/view_widgets/board_view/index.ts b/apps/client/src/widgets/view_widgets/board_view/index.ts index b772e2082..28ef1dc28 100644 --- a/apps/client/src/widgets/view_widgets/board_view/index.ts +++ b/apps/client/src/widgets/view_widgets/board_view/index.ts @@ -200,27 +200,14 @@ export default class BoardView extends ViewMode { } private async renderBoard(el: HTMLElement) { - const persistedData = await this.viewStorage.restore() ?? this.persistentData; - this.persistentData = persistedData; - - const data = await getBoardData(this.parentNote, "status", persistedData); - const columns = Array.from(data.byColumn.keys()) || []; - this.api = new BoardApi( - columns, - this.parentNote.noteId - ); + this.api = await BoardApi.build(this.parentNote, this.viewStorage); showNoteContextMenu({ $container: this.$container, api: this.api }); - if (data.newPersistedData) { - this.persistentData = data.newPersistedData; - this.viewStorage.store(this.persistentData); - } - - for (const column of data.byColumn.keys()) { - const columnItems = data.byColumn.get(column); + for (const column of this.api.columns) { + const columnItems = this.api.getColumn(column); if (!columnItems) { continue; }