mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-27 04:25:59 +00:00
files widget refactor
This commit is contained in:
@@ -205,6 +205,45 @@ export function SavedChartFileAppObject({ data, commonProps }) {
|
||||
);
|
||||
}
|
||||
|
||||
export function SavedQueryFileAppObject({ data, commonProps }) {
|
||||
const { file, folder } = data;
|
||||
const openNewTab = useOpenNewTab();
|
||||
|
||||
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 query-design"
|
||||
onLoad={(data) => {
|
||||
openNewTab(
|
||||
{
|
||||
title: file,
|
||||
icon: 'img query-design',
|
||||
tooltip,
|
||||
props: {
|
||||
conid: connection._id,
|
||||
database,
|
||||
savedFile: file,
|
||||
savedFolder: 'query',
|
||||
savedFormat: 'json',
|
||||
},
|
||||
tabComponent: 'QueryDesignTab',
|
||||
},
|
||||
{ editor: data }
|
||||
);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export function SavedMarkdownFileAppObject({ data, commonProps }) {
|
||||
const { file, folder } = data;
|
||||
const openNewTab = useOpenNewTab();
|
||||
@@ -247,7 +286,29 @@ export function SavedMarkdownFileAppObject({ data, commonProps }) {
|
||||
);
|
||||
}
|
||||
|
||||
[SavedSqlFileAppObject, SavedShellFileAppObject, SavedChartFileAppObject, SavedMarkdownFileAppObject].forEach((fn) => {
|
||||
export function SavedFileAppObject({ data, commonProps }) {
|
||||
const { folder } = data;
|
||||
const folderTypes = {
|
||||
sql: SavedSqlFileAppObject,
|
||||
shell: SavedShellFileAppObject,
|
||||
charts: SavedChartFileAppObject,
|
||||
markdown: SavedMarkdownFileAppObject,
|
||||
query: SavedQueryFileAppObject,
|
||||
};
|
||||
const AppObject = folderTypes[folder];
|
||||
if (AppObject) {
|
||||
return <AppObject data={data} commonProps={commonProps} />;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
[
|
||||
SavedSqlFileAppObject,
|
||||
SavedShellFileAppObject,
|
||||
SavedChartFileAppObject,
|
||||
SavedMarkdownFileAppObject,
|
||||
SavedFileAppObject,
|
||||
].forEach((fn) => {
|
||||
// @ts-ignore
|
||||
fn.extractKey = (data) => data.file;
|
||||
});
|
||||
|
||||
@@ -105,6 +105,11 @@ const filesLoader = ({ folder }) => ({
|
||||
params: { folder },
|
||||
reloadTrigger: `files-changed-${folder}`,
|
||||
});
|
||||
const allFilesLoader = () => ({
|
||||
url: 'files/list-all',
|
||||
params: {},
|
||||
reloadTrigger: `all-files-changed`,
|
||||
});
|
||||
|
||||
async function getCore(loader, args) {
|
||||
const { url, params, reloadTrigger, transform } = loader(args);
|
||||
@@ -276,6 +281,13 @@ export function useFiles(args) {
|
||||
return useCore(filesLoader, args);
|
||||
}
|
||||
|
||||
export function getAllFiles(args) {
|
||||
return getCore(allFilesLoader, args);
|
||||
}
|
||||
export function useAllFiles(args) {
|
||||
return useCore(allFilesLoader, args);
|
||||
}
|
||||
|
||||
export function getFavorites(args) {
|
||||
return getCore(favoritesLoader, args);
|
||||
}
|
||||
|
||||
@@ -2,92 +2,45 @@ import React from 'react';
|
||||
import _ from 'lodash';
|
||||
|
||||
import { AppObjectList } from '../appobj/AppObjectList';
|
||||
import { useOpenedTabs } from '../utility/globalState';
|
||||
import ClosedTabAppObject from '../appobj/ClosedTabAppObject';
|
||||
import { WidgetsInnerContainer } from './WidgetStyles';
|
||||
import {
|
||||
SavedSqlFileAppObject,
|
||||
SavedShellFileAppObject,
|
||||
SavedChartFileAppObject,
|
||||
SavedMarkdownFileAppObject,
|
||||
} from '../appobj/SavedFileAppObject';
|
||||
import { SavedFileAppObject } from '../appobj/SavedFileAppObject';
|
||||
import WidgetColumnBar, { WidgetColumnBarItem } from './WidgetColumnBar';
|
||||
import { useFiles } from '../utility/metadataLoaders';
|
||||
import useHasPermission from '../utility/useHasPermission';
|
||||
|
||||
function SavedFilesList() {
|
||||
const sqlFiles = useFiles({ folder: 'sql' });
|
||||
const shellFiles = useFiles({ folder: 'shell' });
|
||||
const markdownFiles = useFiles({ folder: 'markdown' });
|
||||
const chartFiles = useFiles({ folder: 'charts' });
|
||||
const queryFiles = useFiles({ folder: 'query' });
|
||||
|
||||
function SavedSqlFilesList() {
|
||||
const files = useFiles({ folder: 'sql' });
|
||||
const files = [
|
||||
...(sqlFiles || []),
|
||||
...(shellFiles || []),
|
||||
...(markdownFiles || []),
|
||||
...(chartFiles || []),
|
||||
...(queryFiles || []),
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<WidgetsInnerContainer>
|
||||
<AppObjectList list={files} AppObjectComponent={SavedSqlFileAppObject} />
|
||||
</WidgetsInnerContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function SavedShellFilesList() {
|
||||
const files = useFiles({ folder: 'shell' });
|
||||
|
||||
return (
|
||||
<>
|
||||
<WidgetsInnerContainer>
|
||||
<AppObjectList list={files} AppObjectComponent={SavedShellFileAppObject} />
|
||||
</WidgetsInnerContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function SavedChartFilesList() {
|
||||
const files = useFiles({ folder: 'charts' });
|
||||
|
||||
return (
|
||||
<>
|
||||
<WidgetsInnerContainer>
|
||||
<AppObjectList list={files} AppObjectComponent={SavedChartFileAppObject} />
|
||||
</WidgetsInnerContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function SavedMarkdownFilesList() {
|
||||
const files = useFiles({ folder: 'markdown' });
|
||||
|
||||
return (
|
||||
<>
|
||||
<WidgetsInnerContainer>
|
||||
<AppObjectList list={files} AppObjectComponent={SavedMarkdownFileAppObject} />
|
||||
<AppObjectList
|
||||
list={files}
|
||||
AppObjectComponent={SavedFileAppObject}
|
||||
groupFunc={(data) => _.startCase(data.folder)}
|
||||
/>
|
||||
</WidgetsInnerContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default function FilesWidget() {
|
||||
const hasPermission = useHasPermission();
|
||||
return (
|
||||
<WidgetColumnBar>
|
||||
{hasPermission('files/sql/read') && (
|
||||
<WidgetColumnBarItem title="Saved SQL files" name="sqlFiles" height="15%">
|
||||
<SavedSqlFilesList />
|
||||
</WidgetColumnBarItem>
|
||||
)}
|
||||
{hasPermission('files/shell/read') && (
|
||||
<WidgetColumnBarItem title="Saved shell files" name="shellFiles" height="15%">
|
||||
<SavedShellFilesList />
|
||||
</WidgetColumnBarItem>
|
||||
)}
|
||||
{hasPermission('files/charts/read') && (
|
||||
<WidgetColumnBarItem title="Saved charts" name="charts" height="15%">
|
||||
<SavedChartFilesList />
|
||||
</WidgetColumnBarItem>
|
||||
)}
|
||||
{hasPermission('files/markdown/read') && (
|
||||
<WidgetColumnBarItem title="Saved markdown pages" name="markdown" height="15%">
|
||||
<SavedMarkdownFilesList />
|
||||
</WidgetColumnBarItem>
|
||||
)}
|
||||
<WidgetColumnBarItem title="Saved files" name="files">
|
||||
<SavedFilesList />
|
||||
</WidgetColumnBarItem>
|
||||
</WidgetColumnBar>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,9 @@ export default function WidgetColumnBar({ children }) {
|
||||
childArray.filter((x) => x && x.props.collapsed).map((x) => x.props.name)
|
||||
);
|
||||
const toggleCollapsed = (name) => {
|
||||
// skip collapse last uncollapsed item
|
||||
if (!childArray.find((x) => x.props.name != name && !collapsedWidgets.includes(x.props.name))) return;
|
||||
|
||||
if (collapsedWidgets.includes(name)) setCollapsedWidgets(collapsedWidgets.filter((x) => x != name));
|
||||
else setCollapsedWidgets([...collapsedWidgets, name]);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user