diff --git a/build/bin/textualize.app/Contents/MacOS/Textualize b/build/bin/textualize.app/Contents/MacOS/Textualize new file mode 100755 index 0000000..fda2dde Binary files /dev/null and b/build/bin/textualize.app/Contents/MacOS/Textualize differ diff --git a/core/Document/UserMarkdown.go b/core/Document/UserMarkdown.go new file mode 100644 index 0000000..74f9531 --- /dev/null +++ b/core/Document/UserMarkdown.go @@ -0,0 +1,51 @@ +package document + +type UserMarkdown struct { + Id string + DocumentId string + Value string +} + +type UserMarkdownCollection struct { + Values []UserMarkdown +} + +var userMarkdownCollection *UserMarkdownCollection + +func GetUserMarkdownCollection() *UserMarkdownCollection { + if userMarkdownCollection == nil { + userMarkdownCollection = &UserMarkdownCollection{} + } + + return userMarkdownCollection +} + +func (collection *UserMarkdownCollection) GetUserMarkdownByDocumentId(documentId string) *UserMarkdown { + var foundUserMarkdown *UserMarkdown + + for index, m := range collection.Values { + if m.DocumentId == documentId { + foundUserMarkdown = &collection.Values[index] + break + } + } + + return foundUserMarkdown +} + +func (collection *UserMarkdownCollection) AddUserMarkdown(userMarkdown UserMarkdown) UserMarkdown { + collection.Values = append(collection.Values, userMarkdown) + return userMarkdown +} + +func (collection *UserMarkdownCollection) UpdateUserMarkdown(userMarkdown UserMarkdown) UserMarkdown { + currentUserMarkdown := collection.GetUserMarkdownByDocumentId(userMarkdown.DocumentId) + + if currentUserMarkdown != nil { + currentUserMarkdown.Value = userMarkdown.Value + } else { + collection.AddUserMarkdown(userMarkdown) + } + + return userMarkdown +} diff --git a/frontend/components/workspace/TextEditor.tsx b/frontend/components/workspace/TextEditor.tsx index 054b5a6..4df3c24 100644 --- a/frontend/components/workspace/TextEditor.tsx +++ b/frontend/components/workspace/TextEditor.tsx @@ -5,24 +5,42 @@ import type { DiffOnMount } from '@monaco-editor/react/' import TextEditorButtons from './TextEditorButtons' import createDiffEditorInteractions from '../../useCases/createDiffEditorInteractions' import TextPreview from './TextPreview' +import createDebounce from '../../utils/createDebounce' let editorInteractions: ReturnType const TextEditor = () => { - const { selectedDocumentId, getProcessedAreasByDocumentId } = useProject() + const { selectedDocumentId, getProcessedAreasByDocumentId, requestUpdateDocumentUserMarkdown, getUserMarkdownByDocumentId } = useProject() const [editorHeight, setEditorHeight] = useState(window.innerHeight - 200) const [editorValue, setEditorValue] = useState('') const [isEditorReady, setIsEditorReady] = useState(false) const [isPreviewOpen, setIsPreviewOpen] = useState(false) - const [modifiedEditorValue, setIsModifiedEditorValue] = useState('') + const [modifiedEditorValue, setModifiedEditorValue] = useState('') - const handleEditorDidMount: DiffOnMount = (editor, _) => { + const handleEditorDidMount: DiffOnMount = async (editor, _) => { + const currentDocumentId = selectedDocumentId + editorInteractions = createDiffEditorInteractions(editor) const modifiedEditor = editor.getModifiedEditor() - setIsModifiedEditorValue(modifiedEditor.getValue()) - modifiedEditor.onDidChangeModelContent(() => { - setIsModifiedEditorValue(modifiedEditor.getValue()) - }) + const originalEditor = editor.getOriginalEditor() + + setModifiedEditorValue(originalEditor.getValue()) + + try { + const initialStoredUserMarkdownResponse = await getUserMarkdownByDocumentId(selectedDocumentId) + if (initialStoredUserMarkdownResponse.value) { + setModifiedEditorValue(initialStoredUserMarkdownResponse.value) + modifiedEditor.getModel()?.setValue(initialStoredUserMarkdownResponse.value) + } + } catch (err) { + console.log(err) + } + + modifiedEditor.onDidChangeModelContent(createDebounce(async () => { + const modifiedMarkdown = modifiedEditor.getValue() + requestUpdateDocumentUserMarkdown(currentDocumentId, modifiedMarkdown) + setModifiedEditorValue(modifiedMarkdown) + })) setIsEditorReady(true) } @@ -62,13 +80,13 @@ const TextEditor = () => { } - { isPreviewOpen ? : '' } + {isPreviewOpen ? : ''} } diff --git a/frontend/components/workspace/TextEditorButtons.tsx b/frontend/components/workspace/TextEditorButtons.tsx index e336b6c..e1fa9c5 100644 --- a/frontend/components/workspace/TextEditorButtons.tsx +++ b/frontend/components/workspace/TextEditorButtons.tsx @@ -75,6 +75,30 @@ const TextEditorButtons = (props: Props) => { Header 4 H4 + +