mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-24 00:16:00 +00:00
removed markdown manifest, used favorites instead
This commit is contained in:
@@ -5,10 +5,6 @@ const hasPermission = require('../utility/hasPermission');
|
|||||||
const socket = require('../utility/socket');
|
const socket = require('../utility/socket');
|
||||||
const scheduler = require('./scheduler');
|
const scheduler = require('./scheduler');
|
||||||
|
|
||||||
const markdownAutorunRegex = /<\!--.*@autorun\s*(\n.*-->|-->)/s;
|
|
||||||
const markdownButtonRegex = /<\!--.*@button\s+([^\n]+)(\n.*-->|-->)/s;
|
|
||||||
const markdownIconRegex = /<\!--.*@icon\s+([^\n]+)(\n.*-->|-->)/s;
|
|
||||||
|
|
||||||
function serialize(format, data) {
|
function serialize(format, data) {
|
||||||
if (format == 'text') return data;
|
if (format == 'text') return data;
|
||||||
if (format == 'json') return JSON.stringify(data);
|
if (format == 'json') return JSON.stringify(data);
|
||||||
@@ -84,29 +80,4 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
markdownManifest_meta: 'get',
|
|
||||||
async markdownManifest() {
|
|
||||||
if (!hasPermission(`files/markdown/read`)) return [];
|
|
||||||
const dir = path.join(filesdir(), 'markdown');
|
|
||||||
if (!(await fs.exists(dir))) return [];
|
|
||||||
const files = await fs.readdir(dir);
|
|
||||||
const res = [];
|
|
||||||
for (const file of files) {
|
|
||||||
const filePath = path.join(dir, file);
|
|
||||||
const text = await fs.readFile(filePath, { encoding: 'utf-8' });
|
|
||||||
const autorun = text.match(markdownAutorunRegex);
|
|
||||||
const button = text.match(markdownButtonRegex);
|
|
||||||
const icon = text.match(markdownIconRegex);
|
|
||||||
if (autorun || button) {
|
|
||||||
res.push({
|
|
||||||
file,
|
|
||||||
autorun: !!autorun,
|
|
||||||
button: button ? button[1].trim() : undefined,
|
|
||||||
icon: icon ? icon[1].trim() : undefined,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,10 +6,45 @@ import axios from '../utility/axios';
|
|||||||
import useOpenNewTab from '../utility/useOpenNewTab';
|
import useOpenNewTab from '../utility/useOpenNewTab';
|
||||||
import { SavedFileAppObjectBase } from './SavedFileAppObject';
|
import { SavedFileAppObjectBase } from './SavedFileAppObject';
|
||||||
|
|
||||||
|
export function useOpenFavorite() {
|
||||||
|
const openNewTab = useOpenNewTab();
|
||||||
|
|
||||||
|
const openFavorite = React.useCallback(
|
||||||
|
async (favorite) => {
|
||||||
|
const { icon, tabComponent, title, props, tabdata } = favorite;
|
||||||
|
let tabdataNew = tabdata;
|
||||||
|
if (props.savedFile) {
|
||||||
|
const resp = await axios.post('files/load', {
|
||||||
|
folder: props.savedFolder,
|
||||||
|
file: props.savedFile,
|
||||||
|
format: props.savedFormat,
|
||||||
|
});
|
||||||
|
tabdataNew = {
|
||||||
|
...tabdata,
|
||||||
|
editor: resp.data,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
openNewTab(
|
||||||
|
{
|
||||||
|
title,
|
||||||
|
icon: icon || 'img favorite',
|
||||||
|
props,
|
||||||
|
tabComponent,
|
||||||
|
},
|
||||||
|
tabdataNew
|
||||||
|
);
|
||||||
|
},
|
||||||
|
[openNewTab]
|
||||||
|
);
|
||||||
|
|
||||||
|
return openFavorite;
|
||||||
|
}
|
||||||
|
|
||||||
export function FavoriteFileAppObject({ data, commonProps }) {
|
export function FavoriteFileAppObject({ data, commonProps }) {
|
||||||
const { icon, tabComponent, title, props, tabdata } = data;
|
const { icon, tabComponent, title, props, tabdata } = data;
|
||||||
const openNewTab = useOpenNewTab();
|
const openNewTab = useOpenNewTab();
|
||||||
const showModal = useShowModal();
|
const showModal = useShowModal();
|
||||||
|
const openFavorite = useOpenFavorite();
|
||||||
|
|
||||||
const editFavorite = () => {
|
const editFavorite = () => {
|
||||||
showModal((modalState) => <FavoriteModal modalState={modalState} editingData={data} />);
|
showModal((modalState) => <FavoriteModal modalState={modalState} editingData={data} />);
|
||||||
@@ -24,27 +59,7 @@ export function FavoriteFileAppObject({ data, commonProps }) {
|
|||||||
title={title}
|
title={title}
|
||||||
disableRename
|
disableRename
|
||||||
onLoad={async (data) => {
|
onLoad={async (data) => {
|
||||||
let tabdataNew = tabdata;
|
openFavorite(data);
|
||||||
if (props.savedFile) {
|
|
||||||
const resp = await axios.post('files/load', {
|
|
||||||
folder: props.savedFolder,
|
|
||||||
file: props.savedFile,
|
|
||||||
format: props.savedFormat,
|
|
||||||
});
|
|
||||||
tabdataNew = {
|
|
||||||
...tabdata,
|
|
||||||
editor: resp.data,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
openNewTab(
|
|
||||||
{
|
|
||||||
title,
|
|
||||||
icon: icon || 'img favorite',
|
|
||||||
props,
|
|
||||||
tabComponent,
|
|
||||||
},
|
|
||||||
tabdataNew
|
|
||||||
);
|
|
||||||
}}
|
}}
|
||||||
menuExt={<DropDownMenuItem onClick={editFavorite}>Edit</DropDownMenuItem>}
|
menuExt={<DropDownMenuItem onClick={editFavorite}>Edit</DropDownMenuItem>}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ export default function FavoriteModal({ modalState, editingData = undefined, sav
|
|||||||
return {
|
return {
|
||||||
title: editingData.title,
|
title: editingData.title,
|
||||||
icon: editingData.icon,
|
icon: editingData.icon,
|
||||||
|
showInToolbar: editingData.showInToolbar,
|
||||||
|
openOnStartup: editingData.openOnStartup,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
@@ -52,12 +52,6 @@ const favoritesLoader = () => ({
|
|||||||
reloadTrigger: 'files-changed-favorites',
|
reloadTrigger: 'files-changed-favorites',
|
||||||
});
|
});
|
||||||
|
|
||||||
const markdownManifestLoader = () => ({
|
|
||||||
url: 'files/markdown-manifest',
|
|
||||||
params: {},
|
|
||||||
reloadTrigger: 'files-changed-markdown',
|
|
||||||
});
|
|
||||||
|
|
||||||
// const sqlObjectListLoader = ({ conid, database }) => ({
|
// const sqlObjectListLoader = ({ conid, database }) => ({
|
||||||
// url: 'metadata/list-objects',
|
// url: 'metadata/list-objects',
|
||||||
// params: { conid, database },
|
// params: { conid, database },
|
||||||
@@ -282,13 +276,6 @@ export function useFiles(args) {
|
|||||||
return useCore(filesLoader, args);
|
return useCore(filesLoader, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMarkdownManifest(args) {
|
|
||||||
return getCore(markdownManifestLoader, args);
|
|
||||||
}
|
|
||||||
export function useMarkdownManifest(args) {
|
|
||||||
return useCore(markdownManifestLoader, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getFavorites(args) {
|
export function getFavorites(args) {
|
||||||
return getCore(favoritesLoader, args);
|
return getCore(favoritesLoader, args);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import ConnectionModal from '../modals/ConnectionModal';
|
|||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import ToolbarButton, { ToolbarButtonExternalImage } from './ToolbarButton';
|
import ToolbarButton, { ToolbarButtonExternalImage } from './ToolbarButton';
|
||||||
import useNewQuery from '../query/useNewQuery';
|
import useNewQuery from '../query/useNewQuery';
|
||||||
import { useConfig, useMarkdownManifest } from '../utility/metadataLoaders';
|
import { useConfig, useFavorites } from '../utility/metadataLoaders';
|
||||||
import { useSetOpenedTabs, useOpenedTabs, useCurrentTheme, useSetCurrentTheme } from '../utility/globalState';
|
import { useSetOpenedTabs, useOpenedTabs, useCurrentTheme, useSetCurrentTheme } from '../utility/globalState';
|
||||||
import useNewFreeTable from '../freetable/useNewFreeTable';
|
import useNewFreeTable from '../freetable/useNewFreeTable';
|
||||||
import ImportExportModal from '../modals/ImportExportModal';
|
import ImportExportModal from '../modals/ImportExportModal';
|
||||||
@@ -16,6 +16,7 @@ import AboutModal from '../modals/AboutModal';
|
|||||||
import useOpenNewTab from '../utility/useOpenNewTab';
|
import useOpenNewTab from '../utility/useOpenNewTab';
|
||||||
import tabs from '../tabs';
|
import tabs from '../tabs';
|
||||||
import FavoriteModal from '../modals/FavoriteModal';
|
import FavoriteModal from '../modals/FavoriteModal';
|
||||||
|
import { useOpenFavorite } from '../appobj/FavoriteFileAppObject';
|
||||||
|
|
||||||
const ToolbarContainer = styled.div`
|
const ToolbarContainer = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -36,7 +37,8 @@ export default function ToolBar({ toolbarPortalRef }) {
|
|||||||
const setCurrentTheme = useSetCurrentTheme();
|
const setCurrentTheme = useSetCurrentTheme();
|
||||||
const extensions = useExtensions();
|
const extensions = useExtensions();
|
||||||
const electron = getElectron();
|
const electron = getElectron();
|
||||||
const markdownManifest = useMarkdownManifest();
|
const favorites = useFavorites();
|
||||||
|
const openFavorite = useOpenFavorite();
|
||||||
|
|
||||||
const currentTab = openedTabs.find((x) => x.selected);
|
const currentTab = openedTabs.find((x) => x.selected);
|
||||||
|
|
||||||
@@ -84,45 +86,46 @@ export default function ToolBar({ toolbarPortalRef }) {
|
|||||||
showModal((modalState) => <FavoriteModal modalState={modalState} savingTab={currentTab} />);
|
showModal((modalState) => <FavoriteModal modalState={modalState} savingTab={currentTab} />);
|
||||||
};
|
};
|
||||||
|
|
||||||
function openTabFromButton(page) {
|
function openTabFromButton(favorite) {
|
||||||
if (
|
openFavorite(favorite);
|
||||||
openedTabs.find(
|
// if (
|
||||||
(x) => x.tabComponent == 'MarkdownViewTab' && x.props && x.props.file == page.file && x.closedTime == null
|
// openedTabs.find(
|
||||||
)
|
// (x) => x.tabComponent == 'MarkdownViewTab' && x.props && x.props.file == page.file && x.closedTime == null
|
||||||
) {
|
// )
|
||||||
setOpenedTabs((tabs) =>
|
// ) {
|
||||||
tabs.map((tab) => ({
|
// setOpenedTabs((tabs) =>
|
||||||
...tab,
|
// tabs.map((tab) => ({
|
||||||
selected: tab.tabComponent == 'MarkdownViewTab' && tab.props && tab.props.file == page.file,
|
// ...tab,
|
||||||
}))
|
// selected: tab.tabComponent == 'MarkdownViewTab' && tab.props && tab.props.file == page.file,
|
||||||
);
|
// }))
|
||||||
} else {
|
// );
|
||||||
openNewTab({
|
// } else {
|
||||||
title: page.button || page.file,
|
// openNewTab({
|
||||||
tabComponent: 'MarkdownViewTab',
|
// title: page.button || page.file,
|
||||||
icon: page.icon || 'img markdown',
|
// tabComponent: 'MarkdownViewTab',
|
||||||
props: {
|
// icon: page.icon || 'img markdown',
|
||||||
file: page.file,
|
// props: {
|
||||||
},
|
// file: page.file,
|
||||||
});
|
// },
|
||||||
}
|
// });
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
for (const page of (markdownManifest || []).filter((x) => x.autorun)) {
|
for (const fav of (favorites || []).filter((x) => x.openOnStartup)) {
|
||||||
openTabFromButton(page);
|
openTabFromButton(fav);
|
||||||
}
|
}
|
||||||
}, [markdownManifest]);
|
}, [favorites]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ToolbarContainer>
|
<ToolbarContainer>
|
||||||
<ConnectionModal modalState={modalState} />
|
<ConnectionModal modalState={modalState} />
|
||||||
{!electron && <ToolbarButtonExternalImage image="/logo192.png" onClick={showAbout} />}
|
{!electron && <ToolbarButtonExternalImage image="/logo192.png" onClick={showAbout} />}
|
||||||
{(markdownManifest || [])
|
{(favorites || [])
|
||||||
.filter((x) => x.button)
|
.filter((x) => x.showInToolbar)
|
||||||
.map((x) => (
|
.map((x) => (
|
||||||
<ToolbarButton key={x.button} onClick={() => openTabFromButton(x)} icon={x.icon || 'icon markdown'}>
|
<ToolbarButton key={x.file} onClick={() => openTabFromButton(x)} icon={x.icon || 'icon favorite'}>
|
||||||
{x.button}
|
{x.title}
|
||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
))}
|
))}
|
||||||
{config.runAsPortal == false && (
|
{config.runAsPortal == false && (
|
||||||
|
|||||||
Reference in New Issue
Block a user