removed markdown manifest, used favorites instead

This commit is contained in:
Jan Prochazka
2020-12-12 20:19:39 +01:00
parent ae0606cc84
commit 2978063ac8
5 changed files with 72 additions and 94 deletions

View File

@@ -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;
},
}; };

View File

@@ -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>}
/> />

View File

@@ -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,
}; };
} }
}, []); }, []);

View File

@@ -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);
} }

View File

@@ -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 && (