1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-03 23:50:33 +02:00
Files
joplin/packages/lib/commands/showEditorPlugin.ts

75 lines
2.7 KiB
TypeScript

import { CommandContext, CommandDeclaration, CommandRuntime } from '../services/CommandService';
import getActivePluginEditorView from '../services/plugins/utils/getActivePluginEditorView';
import Logger from '@joplin/utils/Logger';
import getActivePluginEditorViews from '../services/plugins/utils/getActivePluginEditorViews';
import PluginService from '../services/plugins/PluginService';
import WebviewController from '../services/plugins/WebviewController';
import Setting from '../models/Setting';
const logger = Logger.create('showEditorPlugin');
export const declaration: CommandDeclaration = {
name: 'showEditorPlugin',
label: () => 'Show editor plugin',
iconName: 'fas fa-eye',
};
export const runtime = (): CommandRuntime => {
return {
execute: async (context: CommandContext, editorViewId = '', show = true) => {
logger.info('View:', editorViewId, 'Show:', show);
const pluginStates = context.state.pluginService.plugins;
const windowId = context.state.windowId;
if (!editorViewId) {
const { editorPlugin, editorView } = getActivePluginEditorView(pluginStates, windowId);
if (!editorPlugin) {
logger.warn('No editor plugin to toggle to');
return;
}
editorViewId = editorView.id;
}
const activePlugins = getActivePluginEditorViews(pluginStates, windowId);
const editorPluginData = activePlugins.find(({ editorView }) => editorView.id === editorViewId);
if (!editorPluginData) {
logger.warn(`No editor view with ID ${editorViewId} is active.`);
return;
}
const { editorView } = editorPluginData;
const controller = PluginService.instance().viewControllerByViewId(editorView.id) as WebviewController;
if (!controller) {
throw new Error(`No controller registered for editor view ${editorView.id}`);
}
const previousVisible = editorView.parentWindowId === windowId && controller.isVisible();
if (show && previousVisible) {
logger.info(`Editor is already visible: ${editorViewId}`);
return;
} else if (!show && !previousVisible) {
logger.info(`Editor is already hidden: ${editorViewId}`);
return;
}
const getUpdatedShownViewIds = () => {
let newShownViewTypeIds = [...Setting.value('plugins.shownEditorViewIds')];
// Always filter out the current view, even if show is false. This prevents
// the view ID from being present multiple times.
const viewIdsWithoutCurrent = newShownViewTypeIds.filter(id => id !== editorView.editorTypeId);
newShownViewTypeIds = viewIdsWithoutCurrent;
if (show) {
newShownViewTypeIds.push(editorView.editorTypeId);
}
return newShownViewTypeIds;
};
Setting.setValue('plugins.shownEditorViewIds', getUpdatedShownViewIds());
controller.setOpened(show);
},
};
};