mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-23 19:36:02 +00:00
save chart files
This commit is contained in:
@@ -56,8 +56,8 @@ export function SavedSqlFileAppObject({ data, commonProps }) {
|
|||||||
..._.omit(connection, ['displayName', '_id']),
|
..._.omit(connection, ['displayName', '_id']),
|
||||||
database,
|
database,
|
||||||
};
|
};
|
||||||
script.put(`const sql = await dbgateApi.loadFile('${folder}/${file}');`)
|
script.put(`const sql = await dbgateApi.loadFile('${folder}/${file}');`);
|
||||||
script.put(`await dbgateApi.executeQuery({ sql, connection: ${JSON.stringify(conn)} });`)
|
script.put(`await dbgateApi.executeQuery({ sql, connection: ${JSON.stringify(conn)} });`);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
script.requirePackage(extractPackageName(conn.engine));
|
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 (
|
||||||
|
<SavedFileAppObjectBase
|
||||||
|
data={data}
|
||||||
|
commonProps={commonProps}
|
||||||
|
format="json"
|
||||||
|
icon="img chart"
|
||||||
|
onLoad={(data) => {
|
||||||
|
openNewTab(
|
||||||
|
setOpenedTabs,
|
||||||
|
{
|
||||||
|
title: file,
|
||||||
|
icon: 'img chart',
|
||||||
|
tooltip,
|
||||||
|
props: {
|
||||||
|
conid: connection._id,
|
||||||
|
database,
|
||||||
|
},
|
||||||
|
tabComponent: 'ChartTab',
|
||||||
|
},
|
||||||
|
data
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
[SavedSqlFileAppObject, SavedShellFileAppObject, SavedChartFileAppObject].forEach((fn) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
fn.extractKey = (data) => data.file;
|
fn.extractKey = (data) => data.file;
|
||||||
});
|
});
|
||||||
|
|||||||
12
packages/web/src/charts/ChartToolbar.js
Normal file
12
packages/web/src/charts/ChartToolbar.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ToolbarButton from '../widgets/ToolbarButton';
|
||||||
|
|
||||||
|
export default function ChartToolbar({ save }) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<ToolbarButton onClick={save} icon="icon save">
|
||||||
|
Save
|
||||||
|
</ToolbarButton>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,18 +2,15 @@ import React from 'react';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { createFreeTableModel } from 'dbgate-datalib';
|
import { createFreeTableModel } from 'dbgate-datalib';
|
||||||
import useUndoReducer from '../utility/useUndoReducer';
|
import useUndoReducer from '../utility/useUndoReducer';
|
||||||
import { useSetOpenedTabs, useUpdateDatabaseForTab } from '../utility/globalState';
|
import ReactDOM from 'react-dom';
|
||||||
import useGridConfig from '../utility/useGridConfig';
|
import { useUpdateDatabaseForTab } from '../utility/globalState';
|
||||||
import FreeTableGrid from '../freetable/FreeTableGrid';
|
|
||||||
import SaveArchiveModal from '../modals/SaveArchiveModal';
|
|
||||||
import useModalState from '../modals/useModalState';
|
import useModalState from '../modals/useModalState';
|
||||||
import axios from '../utility/axios';
|
|
||||||
import LoadingInfo from '../widgets/LoadingInfo';
|
import LoadingInfo from '../widgets/LoadingInfo';
|
||||||
import { changeTab } from '../utility/common';
|
|
||||||
import ErrorInfo from '../widgets/ErrorInfo';
|
import ErrorInfo from '../widgets/ErrorInfo';
|
||||||
import useEditorData from '../utility/useEditorData';
|
import useEditorData from '../utility/useEditorData';
|
||||||
import SaveTabModal from '../modals/SaveTabModal';
|
import SaveTabModal from '../modals/SaveTabModal';
|
||||||
import ChartEditor from '../charts/ChartEditor';
|
import ChartEditor from '../charts/ChartEditor';
|
||||||
|
import ChartToolbar from '../charts/ChartToolbar';
|
||||||
|
|
||||||
export default function ChartTab({ tabVisible, toolbarPortalRef, conid, database, tabid }) {
|
export default function ChartTab({ tabVisible, toolbarPortalRef, conid, database, tabid }) {
|
||||||
const [modelState, dispatchModel] = useUndoReducer(createFreeTableModel());
|
const [modelState, dispatchModel] = useUndoReducer(createFreeTableModel());
|
||||||
@@ -67,6 +64,10 @@ export default function ChartTab({ tabVisible, toolbarPortalRef, conid, database
|
|||||||
folder="charts"
|
folder="charts"
|
||||||
tabid={tabid}
|
tabid={tabid}
|
||||||
/>
|
/>
|
||||||
|
{toolbarPortalRef &&
|
||||||
|
toolbarPortalRef.current &&
|
||||||
|
tabVisible &&
|
||||||
|
ReactDOM.createPortal(<ChartToolbar save={saveFileModalState.open} />, toolbarPortalRef.current)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { AppObjectList } from '../appobj/AppObjectList';
|
|||||||
import { useOpenedTabs } from '../utility/globalState';
|
import { useOpenedTabs } from '../utility/globalState';
|
||||||
import ClosedTabAppObject from '../appobj/ClosedTabAppObject';
|
import ClosedTabAppObject from '../appobj/ClosedTabAppObject';
|
||||||
import { WidgetsInnerContainer } from './WidgetStyles';
|
import { WidgetsInnerContainer } from './WidgetStyles';
|
||||||
import { SavedSqlFileAppObject, SavedShellFileAppObject } from '../appobj/SavedFileAppObject';
|
import { SavedSqlFileAppObject, SavedShellFileAppObject, SavedChartFileAppObject } from '../appobj/SavedFileAppObject';
|
||||||
import WidgetColumnBar, { WidgetColumnBarItem } from './WidgetColumnBar';
|
import WidgetColumnBar, { WidgetColumnBarItem } from './WidgetColumnBar';
|
||||||
import { useFiles } from '../utility/metadataLoaders';
|
import { useFiles } from '../utility/metadataLoaders';
|
||||||
|
|
||||||
@@ -51,18 +51,33 @@ function SavedShellFilesList() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SavedChartFilesList() {
|
||||||
|
const files = useFiles({ folder: 'charts' });
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<WidgetsInnerContainer>
|
||||||
|
<AppObjectList list={files} AppObjectComponent={SavedChartFileAppObject} />
|
||||||
|
</WidgetsInnerContainer>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default function FilesWidget() {
|
export default function FilesWidget() {
|
||||||
return (
|
return (
|
||||||
<WidgetColumnBar>
|
<WidgetColumnBar>
|
||||||
<WidgetColumnBarItem title="Recently closed tabs" name="closedTabs" height="40%">
|
<WidgetColumnBarItem title="Recently closed tabs" name="closedTabs" height="20%">
|
||||||
<ClosedTabsList />
|
<ClosedTabsList />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
<WidgetColumnBarItem title="Saved SQL files" name="sqlFiles" height="30%">
|
<WidgetColumnBarItem title="Saved SQL files" name="sqlFiles" height="20%">
|
||||||
<SavedSqlFilesList />
|
<SavedSqlFilesList />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
<WidgetColumnBarItem title="Saved shell files" name="shellFiles" height="30%">
|
<WidgetColumnBarItem title="Saved shell files" name="shellFiles" height="20%">
|
||||||
<SavedShellFilesList />
|
<SavedShellFilesList />
|
||||||
</WidgetColumnBarItem>
|
</WidgetColumnBarItem>
|
||||||
|
<WidgetColumnBarItem title="Saved charts" name="charts" height="20%">
|
||||||
|
<SavedChartFilesList />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
</WidgetColumnBar>
|
</WidgetColumnBar>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user