chore(views/table): bring back persistence

This commit is contained in:
Elian Doran 2025-06-29 16:08:27 +03:00
parent a114fba062
commit 727eeb6c74
No known key found for this signature in database

View File

@ -8,7 +8,7 @@ import branches from "../../../services/branches.js";
import type { CommandListenerData, EventData } from "../../../components/app_context.js"; import type { CommandListenerData, EventData } from "../../../components/app_context.js";
import type { Attribute } from "../../../services/attribute_parser.js"; import type { Attribute } from "../../../services/attribute_parser.js";
import note_create from "../../../services/note_create.js"; import note_create from "../../../services/note_create.js";
import {Tabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule} from 'tabulator-tables'; import {Tabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule} from 'tabulator-tables';
import "tabulator-tables/dist/css/tabulator_bootstrap5.min.css"; import "tabulator-tables/dist/css/tabulator_bootstrap5.min.css";
const TPL = /*html*/` const TPL = /*html*/`
@ -45,7 +45,7 @@ const TPL = /*html*/`
`; `;
export interface StateInfo { export interface StateInfo {
gridState: GridState; tableData: Record<string, object>;
} }
export default class TableView extends ViewMode<StateInfo> { export default class TableView extends ViewMode<StateInfo> {
@ -56,6 +56,7 @@ export default class TableView extends ViewMode<StateInfo> {
private spacedUpdate: SpacedUpdate; private spacedUpdate: SpacedUpdate;
private api?: Tabulator; private api?: Tabulator;
private newAttribute?: Attribute; private newAttribute?: Attribute;
private persistentData: Record<string, object>;
constructor(args: ViewModeArgs) { constructor(args: ViewModeArgs) {
super(args, "table"); super(args, "table");
@ -64,6 +65,7 @@ export default class TableView extends ViewMode<StateInfo> {
this.$container = this.$root.find(".table-view-container"); this.$container = this.$root.find(".table-view-container");
this.args = args; this.args = args;
this.spacedUpdate = new SpacedUpdate(() => this.onSave(), 5_000); this.spacedUpdate = new SpacedUpdate(() => this.onSave(), 5_000);
this.persistentData = {};
args.$parent.append(this.$root); args.$parent.append(this.$root);
} }
@ -81,7 +83,7 @@ export default class TableView extends ViewMode<StateInfo> {
const viewStorage = await this.viewStorage.restore(); const viewStorage = await this.viewStorage.restore();
const initialState = viewStorage?.gridState; const initialState = viewStorage?.gridState;
const modules = [SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule]; const modules = [SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule];
for (const module of modules) { for (const module of modules) {
Tabulator.registerModule(module); Tabulator.registerModule(module);
} }
@ -96,18 +98,19 @@ export default class TableView extends ViewMode<StateInfo> {
this.api = new Tabulator(el, { this.api = new Tabulator(el, {
index: "noteId", index: "noteId",
columns: buildColumnDefinitions(info), columns: buildColumnDefinitions(info),
data: await buildRowDefinitions(this.parentNote, notes, info) data: await buildRowDefinitions(this.parentNote, notes, info),
persistence: true,
persistenceWriterFunc: (_id, type: string, data: object) => {
this.persistentData[type] = data;
this.spacedUpdate.scheduleUpdate();
}
}); });
this.setupEditing(); this.setupEditing();
} }
private onSave() { private onSave() {
if (!this.api) {
return;
}
this.viewStorage.store({ this.viewStorage.store({
gridState: this.api.getState() tableData: this.persistentData,
}); });
} }