From fc40ff3f00ff44707b5a13e4e0d9d337a2b16c1b Mon Sep 17 00:00:00 2001 From: linonetwo Date: Sat, 15 Jul 2023 12:14:18 +0800 Subject: [PATCH] fix: parse tag name with space --- src/pages/Workflow/WorkflowManage/WorkflowList.tsx | 1 + .../WorkflowManage/useWorkflowDataSource.ts | 8 +++----- src/preload/wikiOperation.ts | 13 +++++++++---- src/services/wiki/wikiOperations.ts | 3 ++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/pages/Workflow/WorkflowManage/WorkflowList.tsx b/src/pages/Workflow/WorkflowManage/WorkflowList.tsx index 2d1b2e6f..5bd82584 100644 --- a/src/pages/Workflow/WorkflowManage/WorkflowList.tsx +++ b/src/pages/Workflow/WorkflowManage/WorkflowList.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable unicorn/no-null, @typescript-eslint/strict-boolean-expressions, unicorn/no-useless-undefined */ import MenuIcon from '@mui/icons-material/Menu'; import MenuOpenIcon from '@mui/icons-material/MenuOpen'; diff --git a/src/pages/Workflow/WorkflowManage/useWorkflowDataSource.ts b/src/pages/Workflow/WorkflowManage/useWorkflowDataSource.ts index 33504408..89376135 100644 --- a/src/pages/Workflow/WorkflowManage/useWorkflowDataSource.ts +++ b/src/pages/Workflow/WorkflowManage/useWorkflowDataSource.ts @@ -65,12 +65,12 @@ export function useWorkflowFromWiki(workspacesList: IWorkspaceWithMetadata[] | u async () => { const tasks = workspacesList?.map(async (workspace) => { try { - const workflowTiddlersJSONString = await window.service.wiki.wikiOperation( + const workflowTiddlers = await window.service.wiki.wikiOperation( WikiChannel.getTiddlersAsJson, workspace.id, `[all[tiddlers+shadows]tag[${workflowTiddlerTagName}]]`, ); - return JSON.parse(workflowTiddlersJSONString ?? '[]') as IWorkflowTiddler[]; + return (workflowTiddlers ?? []) as IWorkflowTiddler[]; } catch { // if workspace is hibernated or is subwiki, it will throw error, just return empty workflows array return []; @@ -80,13 +80,11 @@ export function useWorkflowFromWiki(workspacesList: IWorkspaceWithMetadata[] | u return workspacesList?.map?.((workspace, workspaceIndex) => { const workflowTiddlersInWorkspace = workflowsByWorkspace[workspaceIndex]; return workflowTiddlersInWorkspace.map((tiddler) => { - // DEBUG: console tiddler - console.log(`tiddler`, tiddler); const workflowItem: IWorkflowListItem = { id: `${workspace.id}:${tiddler.title}`, title: tiddler.title, description: tiddler.description, - tags: typeof tiddler.tags === 'string' ? (tiddler.tags as string).split(' ') : tiddler.tags, + tags: tiddler.tags.filter(item => item !== workflowTiddlerTagName), workspaceID: workspace.id, image: tiddler['page-cover'], metadata: { diff --git a/src/preload/wikiOperation.ts b/src/preload/wikiOperation.ts index 5f8b8b71..dd8c2c16 100644 --- a/src/preload/wikiOperation.ts +++ b/src/preload/wikiOperation.ts @@ -9,6 +9,7 @@ */ import { WikiChannel } from '@/constants/channels'; import { ipcRenderer, webFrame } from 'electron'; +import type { ITiddlerFields } from 'tiddlywiki'; export const wikiOperations = { [WikiChannel.setState]: async (stateKey: string, content: string) => { @@ -103,11 +104,15 @@ ipcRenderer.on(WikiChannel.runFilter, async (event, nonceReceived: number, filte }); ipcRenderer.on(WikiChannel.getTiddlersAsJson, async (event, nonceReceived: number, filter: string) => { /** - * Result is a stringified JSON array, which is a string. We just return the string, which is cheaper than ipc passing a large object array. + * Modified from `$tw.wiki.getTiddlersAsJson` (it will turn tags into string, so we are not using it.) + * This modified version will return Object */ - const filterResult: string = await (webFrame.executeJavaScript(` - $tw.wiki.getTiddlersAsJson(\`${filter}\`) - `) as Promise); + const filterResult: ITiddlerFields = await (webFrame.executeJavaScript(` + $tw.wiki.filterTiddlers(\`${filter}\`).map(title => { + const tiddler = $tw.wiki.getTiddler(title); + return tiddler?.fields; + }).filter(item => item !== undefined) + `) as Promise); ipcRenderer.send(WikiChannel.getTiddlersAsJson, nonceReceived, filterResult); }); // set tiddler text, we use workspaceID as callback id diff --git a/src/services/wiki/wikiOperations.ts b/src/services/wiki/wikiOperations.ts index 40db529c..4408c3d2 100644 --- a/src/services/wiki/wikiOperations.ts +++ b/src/services/wiki/wikiOperations.ts @@ -10,6 +10,7 @@ import { sendToMainWindowAndAwait, sendToMainWindowNoWait } from '@services/libs import serviceIdentifier from '@services/serviceIdentifier'; import { IWindowService } from '@services/windows/interface'; import { WindowNames } from '@services/windows/WindowProperties'; +import type { ITiddlerFields } from 'tiddlywiki'; /** * Handle sending message to trigger operations defined in `src/preload/wikiOperation.ts` @@ -35,7 +36,7 @@ export const wikiOperations = { [WikiChannel.setState]: (workspaceID: string, stateKey: WikiStateKey, content: string): void => { sendToMainWindowNoWait(WikiChannel.setState, workspaceID, [stateKey, content]); }, - [WikiChannel.getTiddlersAsJson]: async (workspaceID: string, filterString: string): Promise => { + [WikiChannel.getTiddlersAsJson]: async (workspaceID: string, filterString: string): Promise => { return await sendToMainWindowAndAwait(WikiChannel.getTiddlersAsJson, workspaceID, [filterString]); }, [WikiChannel.runFilter]: async (workspaceID: string, filterString: string): Promise => {