Fix duplicates in thread composer (#6068)

This commit is contained in:
dan
2024-11-01 21:55:37 +00:00
committed by GitHub
parent d33ce1dea1
commit 46004fb2d0
3 changed files with 22 additions and 4 deletions
+1
View File
@@ -743,6 +743,7 @@ let ComposerPost = React.memo(function ComposerPost({
placeholder={selectTextInputPlaceholder}
autoFocus
webForceMinHeight={forceMinHeight}
isActive={isActive}
setRichText={rt => {
dispatchPost({type: 'update_richtext', richtext: rt})
}}
@@ -44,6 +44,7 @@ interface TextInputProps extends ComponentProps<typeof RNTextInput> {
richtext: RichText
placeholder: string
webForceMinHeight: boolean
isActive: boolean
setRichText: (v: RichText) => void
onPhotoPasted: (uri: string) => void
onPressPublish: (richtext: RichText) => void
@@ -42,6 +42,7 @@ interface TextInputProps {
placeholder: string
suggestedLinks: Set<string>
webForceMinHeight: boolean
isActive: boolean
setRichText: (v: RichText | ((v: RichText) => RichText)) => void
onPhotoPasted: (uri: string) => void
onPressPublish: (richtext: RichText) => void
@@ -55,6 +56,7 @@ export const TextInput = React.forwardRef(function TextInputImpl(
richtext,
placeholder,
webForceMinHeight,
isActive,
setRichText,
onPhotoPasted,
onPressPublish,
@@ -94,19 +96,30 @@ export const TextInput = React.forwardRef(function TextInputImpl(
)
React.useEffect(() => {
if (!isActive) {
return
}
textInputWebEmitter.addListener('publish', onPressPublish)
return () => {
textInputWebEmitter.removeListener('publish', onPressPublish)
}
}, [onPressPublish])
}, [onPressPublish, isActive])
React.useEffect(() => {
if (!isActive) {
return
}
textInputWebEmitter.addListener('media-pasted', onPhotoPasted)
return () => {
textInputWebEmitter.removeListener('media-pasted', onPhotoPasted)
}
}, [onPhotoPasted])
}, [isActive, onPhotoPasted])
React.useEffect(() => {
if (!isActive) {
return
}
const handleDrop = (event: DragEvent) => {
const transfer = event.dataTransfer
if (transfer) {
@@ -144,7 +157,7 @@ export const TextInput = React.forwardRef(function TextInputImpl(
document.body.removeEventListener('dragover', handleDragEnter)
document.body.removeEventListener('dragleave', handleDragLeave)
}
}, [setIsDropping])
}, [setIsDropping, isActive])
const pastSuggestedUris = useRef(new Set<string>())
const prevDetectedUris = useRef(new Map<string, LinkFacetMatch>())
@@ -242,11 +255,14 @@ export const TextInput = React.forwardRef(function TextInputImpl(
[editor],
)
React.useEffect(() => {
if (!isActive) {
return
}
textInputWebEmitter.addListener('emoji-inserted', onEmojiInserted)
return () => {
textInputWebEmitter.removeListener('emoji-inserted', onEmojiInserted)
}
}, [onEmojiInserted])
}, [onEmojiInserted, isActive])
React.useImperativeHandle(ref, () => ({
focus: () => {