From a53ffd4fde68665f0c18e667359fa0142f6846b2 Mon Sep 17 00:00:00 2001 From: sunface Date: Mon, 1 Mar 2021 14:51:01 +0800 Subject: [PATCH] update --- package.json | 2 +- pages/test.tsx | 63 +++++++++++++++ src/components/comments/comment.tsx | 6 +- src/components/comments/comments.tsx | 14 +++- src/components/comments/editor.tsx | 3 +- src/components/comments/reply.tsx | 22 +++-- src/components/markdown-editor/editor.tsx | 80 ++++++++++++++++-- src/components/markdown-editor/position.js | 94 ++++++++++++++++++++++ src/components/markdown-editor/render.tsx | 34 +++++++- src/utils/user.ts | 8 ++ theme/caret.styles.tsx | 51 ++++++++++++ theme/markdown-render.ts | 3 + tsconfig.json | 69 ++++++++++------ use-caret-position | 1 + yarn.lock | 8 +- 15 files changed, 405 insertions(+), 53 deletions(-) create mode 100644 pages/test.tsx create mode 100644 src/components/markdown-editor/position.js create mode 100644 theme/caret.styles.tsx create mode 160000 use-caret-position diff --git a/package.json b/package.json index 59a90e7f..e7da03b6 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "react": "^17.0.1", "react-dom": "^17.0.1", "react-icons": "^4.1.0", - "react-markdown-editor-lite": "^1.2.4", + "react-markdown-editor-lite-sunface": "^1.2.5", "validator": "^13.5.2" }, "devDependencies": { diff --git a/pages/test.tsx b/pages/test.tsx new file mode 100644 index 00000000..16de7a32 --- /dev/null +++ b/pages/test.tsx @@ -0,0 +1,63 @@ +import useCaretPosition from 'components/markdown-editor/position' +import TestStyles from 'theme/caret.styles' +import React, { useRef, useState, useEffect, Fragment } from 'react' +import { render } from 'react-dom' + + +const App = () => { + const triggerRef = useRef(null) + const [showTrigger, setShowTrigger] = useState(false) + const { + x: triggerX, + y: triggerY, + getPosition: getPositionTrigger, + } = useCaretPosition(triggerRef) + + const handleCustomUI = (e) => { + const previousCharacter = e.target.value + .charAt(triggerRef.current.selectionStart - 2) + .trim() + const character = e.target.value + .charAt(triggerRef.current.selectionStart - 1) + .trim() + if (character === '@' && previousCharacter === '') { + setShowTrigger(true) + } + if (character === '' && showTrigger) { + setShowTrigger(false) + } + } + + useEffect(() => { + if (triggerRef.current) { + getPositionTrigger(triggerRef) + } + }, []) + + return ( + <> + +
+