diff --git a/frontend/components/workspace/TextEditor.tsx b/frontend/components/workspace/TextEditor.tsx index 4e4c176..054b5a6 100644 --- a/frontend/components/workspace/TextEditor.tsx +++ b/frontend/components/workspace/TextEditor.tsx @@ -4,7 +4,7 @@ import { useProject } from '../../context/Project/provider' import type { DiffOnMount } from '@monaco-editor/react/' import TextEditorButtons from './TextEditorButtons' import createDiffEditorInteractions from '../../useCases/createDiffEditorInteractions' -import ReactMarkdown from 'react-markdown' +import TextPreview from './TextPreview' let editorInteractions: ReturnType @@ -34,59 +34,42 @@ const TextEditor = () => { } const requestProcessedArea = async () => { - let response try { - response = await getProcessedAreasByDocumentId(selectedDocumentId) + const response = await getProcessedAreasByDocumentId(selectedDocumentId) if (!response || response.length === 0) return const fullTextOfAreas = response.map(area => area.fullText + '\n').join('\n') setEditorValue(fullTextOfAreas) - } catch (err) { console.error(err) } + } catch (err) { + console.error(err) + setEditorValue('# No Areas on Document were textualized') + } } requestProcessedArea() -}, [selectedDocumentId, getProcessedAreasByDocumentId]) + }, [selectedDocumentId, getProcessedAreasByDocumentId]) window.addEventListener('resize', () => { setEditorHeight(window.innerHeight - 200) }) -return
- { isEditorReady - ? setIsPreviewOpen(!isPreviewOpen)} - editorInteractions={editorInteractions} + return
+ {isEditorReady + ? setIsPreviewOpen(!isPreviewOpen)} + editorInteractions={editorInteractions} /> - : '' - } - + : '' + } + - {isPreviewOpen - ?
-

, - h2: ({node, ...props}) =>

, - h3: ({node, ...props}) =>

, - h4: ({node, ...props}) =>

, - h5: ({node, ...props}) =>

, - h6: ({node, ...props}) =>
, - ul: ({node, ...props}) =>
    , - ol: ({node, ...props}) =>
      , - }} - > - {modifiedEditorValue} - -
- : '' - } -
+ { isPreviewOpen ? : '' } +
} export default TextEditor diff --git a/frontend/components/workspace/TextEditorButtons.tsx b/frontend/components/workspace/TextEditorButtons.tsx index 2359d44..e336b6c 100644 --- a/frontend/components/workspace/TextEditorButtons.tsx +++ b/frontend/components/workspace/TextEditorButtons.tsx @@ -1,5 +1,5 @@ -import { ListBulletIcon } from '@heroicons/react/20/solid' -import { EyeIcon } from '@heroicons/react/24/outline' +import { ListBulletIcon, MinusIcon } from '@heroicons/react/20/solid' +import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline' import createDiffEditorInteractions, { MarkdownOperator } from '../../useCases/createDiffEditorInteractions' function classNames(...classes: any[]) { @@ -8,6 +8,7 @@ function classNames(...classes: any[]) { type Props = { editorInteractions: ReturnType + isPreviewOpen: boolean togglePreview: () => void } @@ -15,18 +16,22 @@ const TextEditorButtons = (props: Props) => { const { editorInteractions, togglePreview } = props return + type="button" + onClick={togglePreview} + className={classNames( + 'relative -ml-px inline-flex items-center rounded-l-md border', + 'border-gray-300 bg-white px-2 py-0 text-sm font-medium text-gray-500', + 'hover:bg-gray-50 focus:z-10 focus:border-indigo-500 focus:outline-none', + 'focus:ring-1 focus:ring-indigo-500' + )}> + Next + {props.isPreviewOpen ? } diff --git a/frontend/components/workspace/TextPreview.tsx b/frontend/components/workspace/TextPreview.tsx new file mode 100644 index 0000000..55d609b --- /dev/null +++ b/frontend/components/workspace/TextPreview.tsx @@ -0,0 +1,28 @@ +import { ReactMarkdown } from 'react-markdown/lib/react-markdown' + +type Props = { markdown: string, height: number } + +const TextPreview = (props: Props) => ( +
+

, + h2: ({ node, ...props }) =>

, + h3: ({ node, ...props }) =>

, + h4: ({ node, ...props }) =>

, + h5: ({ node, ...props }) =>

, + h6: ({ node, ...props }) =>
, + ul: ({ node, ...props }) =>
    , + ol: ({ node, ...props }) =>
      , + em: ({ node, ...props }) => , + p: ({ node, ...props }) =>

      , + }} + > + {props.markdown} + +

+) + +export default TextPreview diff --git a/frontend/useCases/createDiffEditorInteractions.ts b/frontend/useCases/createDiffEditorInteractions.ts index 826767c..a47f4e3 100644 --- a/frontend/useCases/createDiffEditorInteractions.ts +++ b/frontend/useCases/createDiffEditorInteractions.ts @@ -5,9 +5,10 @@ export enum MarkdownOperator { H2 = '## ', H3 = '### ', H4 = '#### ', - ITALLICS = '__', + ITALLICS = '_', BOLD = '**', BULLET = '* ', + DIVIDER = '\n\n---\n\n' } const wrapperOperators = [ @@ -15,7 +16,7 @@ const wrapperOperators = [ MarkdownOperator.BOLD ] -const createDiffEditorInteractions = (editor: monaco.editor.IStandaloneDiffEditor)=> { +const createDiffEditorInteractions = (editor: monaco.editor.IStandaloneDiffEditor) => { const modifiedEditor = editor.getModifiedEditor() const originalEditor = editor.getOriginalEditor() @@ -25,41 +26,47 @@ const createDiffEditorInteractions = (editor: monaco.editor.IStandaloneDiffEdito insertMarkdownOperator: (operator: MarkdownOperator) => { const selection = modifiedEditor.getSelection() if (!selection) return - + const { startColumn, startLineNumber, endColumn, endLineNumber } = selection const doesSelectionHaveRange = (endLineNumber > startLineNumber) || (endColumn > startColumn) - - const lineOfCursor = startLineNumber - const lengthOfLine = (modifiedEditor.getModel()?.getLineLength(lineOfCursor) || 1) + 1 let range: monaco.IRange = { startColumn, startLineNumber, endColumn, endLineNumber, } let newText = modifiedEditor.getModel()?.getValueInRange(range) || '' - if (wrapperOperators.includes(operator)) { - if (!doesSelectionHaveRange) { - range = { - startLineNumber: lineOfCursor, - endLineNumber: lineOfCursor, - startColumn: 0, - endColumn: lengthOfLine - } + const lineOfCursor = startLineNumber + const lengthOfLine = (modifiedEditor.getModel()?.getLineLength(lineOfCursor) || 1) + 1 + + const wordAtStartPosition = modifiedEditor.getModel()?.getWordAtPosition({ + column: startColumn, lineNumber: startLineNumber + }) + + if (operator == MarkdownOperator.DIVIDER) { + console.log('lineOfCursor:', lineOfCursor) + console.log('lengthOfLine:', lengthOfLine) + range = { + startLineNumber, + startColumn: lengthOfLine, + endLineNumber, + endColumn: lengthOfLine, } + newText = `${operator}` + } else if (wrapperOperators.includes(operator)) { + if (!doesSelectionHaveRange && wordAtStartPosition) range = { + startLineNumber, + startColumn: wordAtStartPosition.startColumn, + endLineNumber, + endColumn: wordAtStartPosition.endColumn + } newText = `${operator}${modifiedEditor.getModel()?.getValueInRange(range)}${operator}` } else { - const wordAtStartPosition = modifiedEditor.getModel()?.getWordAtPosition({ - column:startColumn, lineNumber: startLineNumber - }) - - if (!doesSelectionHaveRange && wordAtStartPosition) { - range = { - startLineNumber, - startColumn: wordAtStartPosition.startColumn, - endLineNumber, - endColumn: wordAtStartPosition.endColumn - } - } + range = { + startLineNumber, + startColumn: 0, + endLineNumber, + endColumn: 0 + } newText = `${operator}${modifiedEditor.getModel()?.getValueInRange(range)}` } @@ -68,6 +75,8 @@ const createDiffEditorInteractions = (editor: monaco.editor.IStandaloneDiffEdito range, text: newText }]) + + modifiedEditor.pushUndoStop() } } }