Skip to content

Commit

Permalink
fix(desktop): save not work in windows
Browse files Browse the repository at this point in the history
fix #186
  • Loading branch information
drl990114 committed Sep 9, 2023
1 parent e3954bc commit 0644098
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 23 deletions.
14 changes: 9 additions & 5 deletions apps/desktop/src-tauri/src/menu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ pub fn generate_menu() -> Menu {
let file_submenu = Submenu::new(
"File",
Menu::new().add_item(
CustomMenuItem::new("editor:save".to_string(), "Save").accelerator(
keyboard_infos
.get_accelerator("editor:save".to_string())
.unwrap(),
),
// FIXME this will trigger twice, because in web will trigger too
// this trigger event need disable, wait for tauri support
// https://github.com/tauri-apps/tauri/discussions/7793
CustomMenuItem::new("editor:save".to_string(), "Save"),
// .accelerator(
// keyboard_infos
// .get_accelerator("editor:save".to_string())
// .unwrap(),
// ),
),
);

Expand Down
37 changes: 22 additions & 15 deletions apps/desktop/src/editorHooks/EditorState/index.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// This extension is responsible for managing the state of the editor and handle save event.
import { useHelpers, useKeymap, useRemirrorContext } from '@linebyline/editor'
import { useHelpers, useRemirrorContext } from '@linebyline/editor'
import { invoke } from '@tauri-apps/api'
import { save } from '@tauri-apps/api/dialog'
import { t } from 'i18next'
import type { FC } from 'react'
import { useCallback, useEffect, useMemo, useReducer } from 'react'
import { editorReducer, initializeState } from './editor-state'
import { getFileNameFromPath, type IFile } from '@/helper/filesys'
import { useEditorStateStore, useEditorStore } from '@/stores'
import { useCommandStore, useEditorStateStore, useEditorStore } from '@/stores'
import { useTitleEffect } from '@/hooks/useTitleEffect'
import { useGlobalSettingData } from '@/hooks'
import { debounce } from 'lodash'
Expand All @@ -26,6 +26,7 @@ export const useEditorState: FC<EditorStateProps> = ({ active, file }) => {
const { getEditorDelegate, getEditorContent, insertNodeToFolderData } = useEditorStore()
const { setIdStateMap } = useEditorStateStore()
const curDelegate = getEditorDelegate(file.id)
const { addCommand } = useCommandStore()
const [state, dispatch] = useReducer(
editorReducer,
{ note: { content: '', deleted: false }, file },
Expand Down Expand Up @@ -84,36 +85,42 @@ export const useEditorState: FC<EditorStateProps> = ({ active, file }) => {
)

const debounceSave = useMemo(
() =>
debounce(
(tr, delegate) => saveHandler(delegate?.docToString(tr?.doc)),
settingData.autosave_interval,
),
() => debounce(() => saveHandler(), settingData.autosave_interval),
[settingData.autosave_interval, saveHandler],
)

// eslint-disable-next-line react-hooks/exhaustive-deps
const debounceSaveHandler = useCallback(debounceSave, [settingData, debounceSave])

useKeymap('Mod-s', () => {
saveHandler()
return true
})
useEffect(() => {
if (active) {
addCommand({
id: 'editor:save',
handler: () => {
saveHandler()
},
})
}
}, [active, addCommand, saveHandler])

useEffect(() => {
ctx.manager.addHandler('stateUpdate', (params) => {
const unsubscribe = ctx.manager.addHandler('stateUpdate', (params) => {
const { tr } = params
if (tr?.docChanged && !tr.getMeta('APPLY_MARKS')) {
dispatch({
type: 'EDIT_CONTENT',
payload: { undoDepth: helpers.undoDepth() },
})
if (settingData.autosave) {
debounceSaveHandler(tr, curDelegate)
if (settingData.autosave && active) {
debounceSaveHandler()
}
}
})
}, [ctx, helpers, curDelegate, settingData, saveHandler, debounceSaveHandler])

return () => {
unsubscribe()
}
}, [ctx, helpers, curDelegate, active, settingData, saveHandler, debounceSaveHandler])

useEffect(() => {
const callback = (hooks: SaveHandlerParams) => {
Expand Down
6 changes: 3 additions & 3 deletions packages/editor/src/components/Editor.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/* eslint-disable react-hooks/rules-of-hooks */
import WysiwygEditor from './WysiwygEditor'
import SourceEditor from './SourceEditor'
import { forwardRef, useImperativeHandle, useState } from 'react'
import { forwardRef, memo, useImperativeHandle, useState } from 'react'
import type { EditorDelegate, EditorViewType } from '..'

export type EditorRef = {
toggleType: (targetType: EditorViewType) => void
getType: () => EditorViewType
}

export const Editor = forwardRef<EditorRef, EditorProps>((props, ref) => {
export const Editor = memo(forwardRef<EditorRef, EditorProps>((props, ref) => {
const [type, setType] = useState<EditorViewType>('wysiwyg')

useImperativeHandle(ref, () => ({
Expand All @@ -24,7 +24,7 @@ export const Editor = forwardRef<EditorRef, EditorProps>((props, ref) => {
) : (
<WysiwygEditor {...props} />
)
})
}))

export interface EditorProps {
content: string
Expand Down

0 comments on commit 0644098

Please sign in to comment.