From 31ce77d77da595bdbeb0424fe9217f8cda9b4785 Mon Sep 17 00:00:00 2001 From: "plebeius.eth" Date: Sat, 24 Jun 2023 16:36:59 +0200 Subject: [PATCH] fix greentext selection --- src/components/modals/ReplyModal.jsx | 13 +++++++++---- src/components/views/All.jsx | 13 +++++++++++++ src/components/views/Board.jsx | 13 +++++++++++++ src/components/views/Subscriptions.jsx | 13 +++++++++++++ src/components/views/Thread.jsx | 13 +++++++++++++ src/hooks/stores/useGeneralStore.js | 3 +++ 6 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/components/modals/ReplyModal.jsx b/src/components/modals/ReplyModal.jsx index 50f17bc4..328a3807 100755 --- a/src/components/modals/ReplyModal.jsx +++ b/src/components/modals/ReplyModal.jsx @@ -20,6 +20,7 @@ const ReplyModal = ({ isOpen, closeModal }) => { selectedParentCid, selectedShortCid, selectedStyle, + selectedText, setSelectedText, triggerInsertion, } = useGeneralStore(state => state); @@ -33,7 +34,6 @@ const ReplyModal = ({ isOpen, closeModal }) => { const linkRef = useRef(); const [triggerPublishComment, setTriggerPublishComment] = useState(false); - const [selectedText, setSelectedText] = useState(''); const [isMobile, setIsMobile] = useState(window.innerWidth <= 480); @@ -50,7 +50,12 @@ const ReplyModal = ({ isOpen, closeModal }) => { const onModalOpen = () => { if (commentRef.current) { + if (selectedText) { + commentRef.current.value += '\n'; + } commentRef.current.focus(); + const len = commentRef.current.value.length; + commentRef.current.setSelectionRange(len, len); } }; @@ -73,16 +78,16 @@ const ReplyModal = ({ isOpen, closeModal }) => { const getSelectedText = useCallback(() => { const text = document.getSelection().toString(); setSelectedText(text ? `>${text}\n` : ''); - }, []); + }, [setSelectedText]); useEffect(() => { if (isOpen) { - getSelectedText(); + setTimeout(getSelectedText, 0); } else { setSelectedText(''); } - }, [isOpen, getSelectedText]); + }, [isOpen, getSelectedText, setSelectedText]); const onChallengeVerification = (challengeVerification) => { diff --git a/src/components/views/All.jsx b/src/components/views/All.jsx index 6f6d00d8..7f647b9d 100755 --- a/src/components/views/All.jsx +++ b/src/components/views/All.jsx @@ -62,6 +62,7 @@ const All = () => { setSelectedShortCid, selectedStyle, setSelectedThread, + setSelectedText, setSelectedTitle, setTriggerInsertion, } = useGeneralStore(state => state); @@ -706,6 +707,9 @@ const All = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -991,6 +995,9 @@ const All = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); @@ -1526,6 +1533,9 @@ const All = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -1704,6 +1714,9 @@ const All = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); diff --git a/src/components/views/Board.jsx b/src/components/views/Board.jsx index cc3287bf..b10a29f3 100755 --- a/src/components/views/Board.jsx +++ b/src/components/views/Board.jsx @@ -64,6 +64,7 @@ const Board = () => { setSelectedShortCid, selectedStyle, setSelectedThread, + setSelectedText, selectedTitle, setSelectedTitle, showPostForm, showPostFormLink, @@ -1150,6 +1151,9 @@ const Board = () => { if (e.button === 2) return; e.preventDefault(); setSelectedThreadCid(thread.cid); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -1433,6 +1437,9 @@ const Board = () => { if (e.button === 2) return; e.preventDefault(); setSelectedThreadCid(thread.cid); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); @@ -1939,6 +1946,9 @@ const Board = () => { if (e.button === 2) return; e.preventDefault(); setSelectedThreadCid(thread.cid); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -2095,6 +2105,9 @@ const Board = () => { if (e.button === 2) return; e.preventDefault(); setSelectedThreadCid(thread.cid); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); diff --git a/src/components/views/Subscriptions.jsx b/src/components/views/Subscriptions.jsx index 939b881f..d47614e6 100755 --- a/src/components/views/Subscriptions.jsx +++ b/src/components/views/Subscriptions.jsx @@ -62,6 +62,7 @@ const Subscriptions = () => { setSelectedShortCid, selectedStyle, setSelectedThread, + setSelectedText, setSelectedTitle, setTriggerInsertion, } = useGeneralStore(state => state); @@ -714,6 +715,9 @@ const Subscriptions = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -999,6 +1003,9 @@ const Subscriptions = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); @@ -1534,6 +1541,9 @@ const Subscriptions = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(thread.shortCid); setTriggerInsertion(Date.now()); @@ -1712,6 +1722,9 @@ const Subscriptions = () => { e.preventDefault(); setSelectedThreadCid(thread.cid); setSelectedAddress(thread.subplebbitAddress); + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); diff --git a/src/components/views/Thread.jsx b/src/components/views/Thread.jsx index 392457ae..a84d3cfb 100755 --- a/src/components/views/Thread.jsx +++ b/src/components/views/Thread.jsx @@ -63,6 +63,7 @@ const Thread = () => { setSelectedShortCid, selectedStyle, selectedThread, setSelectedThread, + setSelectedText, selectedTitle, setSelectedTitle, showPostForm, showPostFormLink, @@ -844,6 +845,9 @@ const Thread = () => { c/ {}} id="reply-button" style={{ cursor: 'pointer' }} onClick={() => { + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(comment.shortCid); setTriggerInsertion(Date.now()); @@ -1085,6 +1089,9 @@ const Thread = () => { {reply.shortCid ? ( { + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); @@ -1463,6 +1470,9 @@ const Thread = () => { c/ {}} id="reply-button" key={`mob-no2-${comment.cid}`} title="Reply to this post" onClick={() => { + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(comment.shortCid); setTriggerInsertion(Date.now()); @@ -1588,6 +1598,9 @@ const Thread = () => { {reply.shortCid ? ( { + let text = document.getSelection().toString(); + text = text ? `>${text}` : text; + setSelectedText(text); if (isReplyOpen) { setReplyQuoteCid(reply.shortCid); setTriggerInsertion(Date.now()); diff --git a/src/hooks/stores/useGeneralStore.js b/src/hooks/stores/useGeneralStore.js index aba2fce3..42796fe6 100644 --- a/src/hooks/stores/useGeneralStore.js +++ b/src/hooks/stores/useGeneralStore.js @@ -73,6 +73,9 @@ const useGeneralStore = create((set) => ({ localStorage.setItem('selectedStyle', style); set({ selectedStyle: style }); }, + + selectedText: '', + setSelectedText: (text) => set({ selectedText: text }), selectedThread: '', setSelectedThread: (thread) => set({ selectedThread: thread }),