diff --git a/webapp/packages/core-view/src/DataContext/DynamicDataContext.ts b/webapp/packages/core-view/src/DataContext/DynamicDataContext.ts index d96ee60414..9a8c4e19e1 100644 --- a/webapp/packages/core-view/src/DataContext/DynamicDataContext.ts +++ b/webapp/packages/core-view/src/DataContext/DynamicDataContext.ts @@ -31,6 +31,10 @@ export class DynamicDataContext implements IDataContext { } setFallBack(fallback: IDataContext): void { + if (this.fallback === fallback) { + return; + } + this.flush(); this.fallback = fallback; } diff --git a/webapp/packages/core-view/src/DataContext/useDynamicDataContext.ts b/webapp/packages/core-view/src/DataContext/useDynamicDataContext.ts index d03a6f806c..269f299506 100644 --- a/webapp/packages/core-view/src/DataContext/useDynamicDataContext.ts +++ b/webapp/packages/core-view/src/DataContext/useDynamicDataContext.ts @@ -7,9 +7,8 @@ */ import { untracked } from 'mobx'; -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; -import { useObjectRef } from '@cloudbeaver/core-blocks'; import { DataContext } from './DataContext'; import { DynamicDataContext } from './DynamicDataContext'; @@ -19,21 +18,17 @@ export function useDynamicDataContext( context: IDataContext | undefined, capture: (context: IDataContext) => void ): void { - const state = useObjectRef(() => ({ - dynamic: new DynamicDataContext(context || new DataContext()), - })); + const [state] = useState(() => new DynamicDataContext(context || new DataContext())); untracked(() => { if (context) { - state.dynamic.setFallBack(context); + state.setFallBack(context); } - - state.dynamic.flush(); }); useEffect(() => { - capture(state.dynamic); + capture(state); }); - useEffect(() => () => state.dynamic.flush(), []); + useEffect(() => () => state.flush(), []); } diff --git a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx index 58b1a010e9..2ca60cae77 100644 --- a/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx +++ b/webapp/packages/plugin-data-viewer/src/TableViewer/TableViewer.tsx @@ -132,10 +132,10 @@ export const TableViewer = observer(forwardRef(function T presentation.dataFormat !== undefined && presentation.dataFormat !== this.dataModel?.source.dataFormat ) { + localActions.clearConstraints(); this.dataModel?.setDataFormat(presentation.dataFormat).reload(); } - localActions.clearConstraints(); this.onPresentationChange(id); } }, @@ -206,18 +206,19 @@ export const TableViewer = observer(forwardRef(function T } }, [needRefresh]); - useEffect(() => { - if (!presentationId || !dataModel) { - return; - } + // TODO: seems this code is not working because of setting dataFormat in presentation change + // useEffect(() => { + // if (!presentationId || !dataModel) { + // return; + // } - const presentation = dataPresentationService.get(presentationId); + // const presentation = dataPresentationService.get(presentationId); - if (presentation?.dataFormat && !dataModel.supportedDataFormats.includes(presentation.dataFormat)) { - localActions.clearConstraints(); - onPresentationChange(dataFormat); - } - }, [dataFormat]); + // if (presentation?.dataFormat && !dataModel.supportedDataFormats.includes(presentation.dataFormat)) { + // // localActions.clearConstraints(); + // onPresentationChange(dataFormat); + // } + // }, [dataFormat]); if (!dataModel) { return ; @@ -278,15 +279,17 @@ export const TableViewer = observer(forwardRef(function T keepRatio > - - + + + +