diff --git a/package.json b/package.json index 12686abf..660421e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bluestone", - "version": "0.10.2", + "version": "0.11.0", "description": "", "main": "./out/main/index.js", "license": "AGPL-3.0", diff --git a/src/renderer/src/components/Empty.tsx b/src/renderer/src/components/Empty.tsx index ef907f59..49f9c184 100644 --- a/src/renderer/src/components/Empty.tsx +++ b/src/renderer/src/components/Empty.tsx @@ -1,9 +1,8 @@ import {observer} from 'mobx-react-lite' import {CloseOutlined, FileAddOutlined, FolderOpenOutlined, FolderOutlined, HistoryOutlined} from '@ant-design/icons' import {MainApi} from '../api/main' -import {configStore} from '../store/config' import logo from '../../../../resources/icon.png?asset' -import {useEffect, useLayoutEffect} from 'react' +import {useLayoutEffect} from 'react' import {useLocalState} from '../hooks/useLocalState' import {db} from '../store/db' import {basename, dirname} from 'path' diff --git a/src/renderer/src/editor/Editor.tsx b/src/renderer/src/editor/Editor.tsx index a8153cb7..9be1eda5 100644 --- a/src/renderer/src/editor/Editor.tsx +++ b/src/renderer/src/editor/Editor.tsx @@ -49,7 +49,7 @@ export const MEditor = observer(({note}: { const schema = treeStore.schemaMap.get(nodeRef.current) if (schema?.state) { const path = nodeRef.current.filePath - const res = await toMarkdown(schema.state, path) + const res = await toMarkdown(schema.state) saveRecord(path, schema.state) await window.api.fs.writeFile(path, res, {encoding: 'utf-8'}) } @@ -67,7 +67,7 @@ export const MEditor = observer(({note}: { }) const count = useCallback(async (nodes: any[]) => { if (!configStore.config.showCharactersCount || !nodeRef.current) return - const res = await toMarkdown(nodes, nodeRef.current.filePath) + const res = await toMarkdown(nodes) const texts = Editor.nodes(editor, { at: [], match: n => n.text @@ -80,7 +80,12 @@ export const MEditor = observer(({note}: { useSubject(countThrottle$.pipe(debounceTime(300)), count) - + useEffect(() => { + if (treeStore.currentTab.store === store) { + const schema = treeStore.schemaMap.get(note)?.state + if (schema) count(schema) + } + }, [treeStore.currentTab, note]) const change = useCallback((v: any[]) => { if (first.current) { setTimeout(() => { @@ -127,9 +132,6 @@ export const MEditor = observer(({note}: { nodeRef.current = note store.setState(state => state.pauseCodeHighlight = true) let data = treeStore.schemaMap.get(note) - setTimeout(() => { - count(data?.state || []) - }) first.current = true if (!data) { data = await treeStore.getSchema(note) diff --git a/src/renderer/src/editor/output/md.ts b/src/renderer/src/editor/output/md.ts index 6d41422f..5d5f3a68 100644 --- a/src/renderer/src/editor/output/md.ts +++ b/src/renderer/src/editor/output/md.ts @@ -1,17 +1,19 @@ import Worker from './worker?worker' +import {nanoid} from 'nanoid' const worker = new Worker() let callbackMap = new Map() worker.onmessage = e => { - if (callbackMap.get(e.data?.path)) { - callbackMap.get(e.data?.path)!(e.data.data) - callbackMap.delete(e.data?.path) + if (callbackMap.get(e.data?.id)) { + callbackMap.get(e.data?.id)!(e.data.data) + callbackMap.delete(e.data?.id) } } -export const toMarkdown = (state: any[], path: string):Promise => { +export const toMarkdown = (state: any[]):Promise => { return new Promise(resolve => { - callbackMap.set(path, resolve) - worker.postMessage({state, path}) + const id = nanoid() + callbackMap.set(id, resolve) + worker.postMessage({state, id}) }) } diff --git a/src/renderer/src/editor/output/worker.ts b/src/renderer/src/editor/output/worker.ts index cec58038..12fb4c0f 100644 --- a/src/renderer/src/editor/output/worker.ts +++ b/src/renderer/src/editor/output/worker.ts @@ -240,7 +240,7 @@ export const toMarkdown = (tree: any[], preString = '', parent: any[] = [{root: onmessage = (e) => { postMessage({ - path: e.data.path, + id: e.data.id, data: toMarkdown(e.data.state) }) }