diff --git a/packages/web/src/appobj/SavedFileAppObject.js b/packages/web/src/appobj/SavedFileAppObject.js index 39343027d..f45e94bfc 100644 --- a/packages/web/src/appobj/SavedFileAppObject.js +++ b/packages/web/src/appobj/SavedFileAppObject.js @@ -56,8 +56,8 @@ export function SavedSqlFileAppObject({ data, commonProps }) { ..._.omit(connection, ['displayName', '_id']), database, }; - script.put(`const sql = await dbgateApi.loadFile('${folder}/${file}');`) - script.put(`await dbgateApi.executeQuery({ sql, connection: ${JSON.stringify(conn)} });`) + script.put(`const sql = await dbgateApi.loadFile('${folder}/${file}');`); + script.put(`await dbgateApi.executeQuery({ sql, connection: ${JSON.stringify(conn)} });`); // @ts-ignore script.requirePackage(extractPackageName(conn.engine)); @@ -117,7 +117,44 @@ export function SavedShellFileAppObject({ data, commonProps }) { ); } -[SavedSqlFileAppObject, SavedShellFileAppObject].forEach((fn) => { +export function SavedChartFileAppObject({ data, commonProps }) { + const { file, folder } = data; + const setOpenedTabs = useSetOpenedTabs(); + + const currentDatabase = useCurrentDatabase(); + + const connection = _.get(currentDatabase, 'connection') || {}; + const database = _.get(currentDatabase, 'name'); + + const tooltip = `${connection.displayName || connection.server}\n${database}`; + + return ( + { + openNewTab( + setOpenedTabs, + { + title: file, + icon: 'img chart', + tooltip, + props: { + conid: connection._id, + database, + }, + tabComponent: 'ChartTab', + }, + data + ); + }} + /> + ); +} + +[SavedSqlFileAppObject, SavedShellFileAppObject, SavedChartFileAppObject].forEach((fn) => { // @ts-ignore fn.extractKey = (data) => data.file; }); diff --git a/packages/web/src/charts/ChartToolbar.js b/packages/web/src/charts/ChartToolbar.js new file mode 100644 index 000000000..617834c7e --- /dev/null +++ b/packages/web/src/charts/ChartToolbar.js @@ -0,0 +1,12 @@ +import React from 'react'; +import ToolbarButton from '../widgets/ToolbarButton'; + +export default function ChartToolbar({ save }) { + return ( + <> + + Save + + + ); +} diff --git a/packages/web/src/tabs/ChartTab.js b/packages/web/src/tabs/ChartTab.js index 3fa3cba62..ecb8b9a48 100644 --- a/packages/web/src/tabs/ChartTab.js +++ b/packages/web/src/tabs/ChartTab.js @@ -2,18 +2,15 @@ import React from 'react'; import _ from 'lodash'; import { createFreeTableModel } from 'dbgate-datalib'; import useUndoReducer from '../utility/useUndoReducer'; -import { useSetOpenedTabs, useUpdateDatabaseForTab } from '../utility/globalState'; -import useGridConfig from '../utility/useGridConfig'; -import FreeTableGrid from '../freetable/FreeTableGrid'; -import SaveArchiveModal from '../modals/SaveArchiveModal'; +import ReactDOM from 'react-dom'; +import { useUpdateDatabaseForTab } from '../utility/globalState'; import useModalState from '../modals/useModalState'; -import axios from '../utility/axios'; import LoadingInfo from '../widgets/LoadingInfo'; -import { changeTab } from '../utility/common'; import ErrorInfo from '../widgets/ErrorInfo'; import useEditorData from '../utility/useEditorData'; import SaveTabModal from '../modals/SaveTabModal'; import ChartEditor from '../charts/ChartEditor'; +import ChartToolbar from '../charts/ChartToolbar'; export default function ChartTab({ tabVisible, toolbarPortalRef, conid, database, tabid }) { const [modelState, dispatchModel] = useUndoReducer(createFreeTableModel()); @@ -67,6 +64,10 @@ export default function ChartTab({ tabVisible, toolbarPortalRef, conid, database folder="charts" tabid={tabid} /> + {toolbarPortalRef && + toolbarPortalRef.current && + tabVisible && + ReactDOM.createPortal(, toolbarPortalRef.current)} ); } diff --git a/packages/web/src/widgets/FilesWidget.js b/packages/web/src/widgets/FilesWidget.js index 607977c78..1160f5a8c 100644 --- a/packages/web/src/widgets/FilesWidget.js +++ b/packages/web/src/widgets/FilesWidget.js @@ -5,7 +5,7 @@ import { AppObjectList } from '../appobj/AppObjectList'; import { useOpenedTabs } from '../utility/globalState'; import ClosedTabAppObject from '../appobj/ClosedTabAppObject'; import { WidgetsInnerContainer } from './WidgetStyles'; -import { SavedSqlFileAppObject, SavedShellFileAppObject } from '../appobj/SavedFileAppObject'; +import { SavedSqlFileAppObject, SavedShellFileAppObject, SavedChartFileAppObject } from '../appobj/SavedFileAppObject'; import WidgetColumnBar, { WidgetColumnBarItem } from './WidgetColumnBar'; import { useFiles } from '../utility/metadataLoaders'; @@ -51,18 +51,33 @@ function SavedShellFilesList() { ); } +function SavedChartFilesList() { + const files = useFiles({ folder: 'charts' }); + + return ( + <> + + + + + ); +} + export default function FilesWidget() { return ( - + - + - + + + + ); }