mirror of
https://github.com/tiddly-gittly/TidGi-Desktop.git
synced 2026-02-23 08:30:51 -08:00
97 lines
3.8 KiB
TypeScript
97 lines
3.8 KiB
TypeScript
import type { TFunction } from 'i18next';
|
|
import type { MenuItemConstructorOptions } from 'electron';
|
|
import { WindowNames } from '@services/windows/WindowProperties';
|
|
import type { IWindowService } from '@services/windows/interface';
|
|
import type { IWorkspaceViewService } from '@services/workspacesView/interface';
|
|
import type { IWorkspace, IWorkspaceService } from './interface';
|
|
import type { INativeService } from '@services/native/interface';
|
|
import type { IViewService } from '@services/view/interface';
|
|
import type { IWikiService } from '@services/wiki/interface';
|
|
import type { IWikiGitWorkspaceService } from '@services/wikiGitWorkspace/interface';
|
|
|
|
interface IWorkspaceMenuRequiredServices {
|
|
native: Pick<INativeService, 'open' | 'openInEditor' | 'openInGitGuiApp'>;
|
|
view: Pick<IViewService, 'reloadViewsWebContents'>;
|
|
wiki: Pick<IWikiService, 'requestOpenTiddlerInWiki' | 'requestWikiSendActionMessage'>;
|
|
wikiGitWorkspace: Pick<IWikiGitWorkspaceService, 'removeWorkspace'>;
|
|
window: Pick<IWindowService, 'open'>;
|
|
workspace: Pick<IWorkspaceService, 'getActiveWorkspace'>;
|
|
workspaceView: Pick<IWorkspaceViewService, 'wakeUpWorkspaceView' | 'hibernateWorkspaceView' | 'setActiveWorkspaceView' | 'restartWorkspaceViewService'>;
|
|
}
|
|
|
|
export async function openWorkspaceTagTiddler(workspace: IWorkspace, service: IWorkspaceMenuRequiredServices): Promise<void> {
|
|
const { id, isSubWiki, tagName, mainWikiID } = workspace;
|
|
let idToActive = id;
|
|
const activeWorkspace = await service.workspace.getActiveWorkspace();
|
|
if (isSubWiki) {
|
|
if (typeof tagName === 'string') {
|
|
await service.wiki.requestOpenTiddlerInWiki(tagName);
|
|
}
|
|
if (mainWikiID === null) {
|
|
return;
|
|
}
|
|
idToActive = mainWikiID;
|
|
} else {
|
|
await service.wiki.requestWikiSendActionMessage('tm-home');
|
|
}
|
|
if (idToActive !== null && activeWorkspace?.id !== idToActive) {
|
|
await service.workspaceView.setActiveWorkspaceView(idToActive);
|
|
}
|
|
}
|
|
|
|
export function getWorkspaceMenuTemplate(workspace: IWorkspace, t: TFunction, service: IWorkspaceMenuRequiredServices): MenuItemConstructorOptions[] {
|
|
const { active, id, hibernated, tagName, isSubWiki, wikiFolderLocation } = workspace;
|
|
|
|
const template = [
|
|
{
|
|
label: t('WorkspaceSelector.OpenWorkspaceTagTiddler', { tagName }),
|
|
click: async () => {
|
|
await openWorkspaceTagTiddler(workspace, service);
|
|
},
|
|
},
|
|
{
|
|
label: t('WorkspaceSelector.EditWorkspace'),
|
|
click: async () => {
|
|
await service.window.open(WindowNames.editWorkspace, { workspaceID: id });
|
|
},
|
|
},
|
|
{
|
|
label: t('WorkspaceSelector.RemoveWorkspace'),
|
|
click: async () => await service.wikiGitWorkspace.removeWorkspace(id),
|
|
},
|
|
{
|
|
label: t('WorkspaceSelector.OpenWorkspaceFolder'),
|
|
click: async () => await service.native.open(wikiFolderLocation, true),
|
|
},
|
|
{
|
|
label: t('WorkspaceSelector.OpenWorkspaceFolderInEditor'),
|
|
click: async () => await service.native.openInEditor(wikiFolderLocation),
|
|
},
|
|
{
|
|
label: t('WorkspaceSelector.OpenWorkspaceFolderInGitGUI'),
|
|
click: async () => await service.native.openInGitGuiApp(wikiFolderLocation),
|
|
},
|
|
{
|
|
label: t('ContextMenu.Reload'),
|
|
click: async () => await service.view.reloadViewsWebContents(id),
|
|
},
|
|
{
|
|
label: t('ContextMenu.RestartService'),
|
|
click: async () => await service.workspaceView.restartWorkspaceViewService(id),
|
|
},
|
|
];
|
|
|
|
if (!active && !isSubWiki) {
|
|
template.splice(1, 0, {
|
|
label: hibernated ? t('WorkspaceSelector.WakeUpWorkspace') : t('WorkspaceSelector.HibernateWorkspace'),
|
|
click: async () => {
|
|
if (hibernated) {
|
|
return await service.workspaceView.wakeUpWorkspaceView(id);
|
|
}
|
|
return await service.workspaceView.hibernateWorkspaceView(id);
|
|
},
|
|
});
|
|
}
|
|
|
|
return template;
|
|
}
|