diff --git a/apps/client/src/widgets/view_widgets/table_view/index.ts b/apps/client/src/widgets/view_widgets/table_view/index.ts index d0a61b2df..720929e73 100644 --- a/apps/client/src/widgets/view_widgets/table_view/index.ts +++ b/apps/client/src/widgets/view_widgets/table_view/index.ts @@ -5,7 +5,8 @@ import { setLabel } from "../../../services/attributes.js"; import getPromotedAttributeInformation, { buildData, TableData } from "./data.js"; import applyHeaderCustomization from "./header-customization.js"; import server from "../../../services/server.js"; -import type { GridState } from "ag-grid-community"; +import type { GridApi, GridState } from "ag-grid-community"; +import SpacedUpdate from "../../../services/spaced_update.js"; const TPL = /*html*/`
@@ -44,6 +45,8 @@ export default class TableView extends ViewMode { private $root: JQuery; private $container: JQuery; private args: ViewModeArgs; + private spacedUpdate: SpacedUpdate; + private api?: GridApi; constructor(args: ViewModeArgs) { super(args, "table"); @@ -51,6 +54,7 @@ export default class TableView extends ViewMode { this.$root = $(TPL); this.$container = this.$root.find(".table-view-container"); this.args = args; + this.spacedUpdate = new SpacedUpdate(() => this.onSave(), 5_000); args.$parent.append(this.$root); ModuleRegistry.registerModules([ AllCommunityModule ]); @@ -74,16 +78,24 @@ export default class TableView extends ViewMode { const viewStorage = await this.viewStorage.restore(); const initialState = viewStorage?.gridState; - createGrid(el, { + this.api = createGrid(el, { ...buildData(info, notes), ...setupEditing(), initialState, async onGridReady(event) { applyHeaderCustomization(el, event.api); }, - onStateUpdated: (event) => this.viewStorage.store({ - gridState: event.api.getState() - }) + onStateUpdated: () => this.spacedUpdate.scheduleUpdate() + }); + } + + private onSave() { + if (!this.api) { + return; + } + + this.viewStorage.store({ + gridState: this.api.getState() }); }