Skip to content

Commit dea0d4f

Browse files
authored
Merge pull request #642 from GetStream/fix-nav-issues-found-in-docs
fix nav issues found in docs
2 parents 8dc8327 + 60d5ea1 commit dea0d4f

File tree

3 files changed

+101
-42
lines changed

3 files changed

+101
-42
lines changed

src/components/Channel/Channel.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ const ChannelWithContext = <
737737
client.off('connection.changed', connectionChangedHandler);
738738
channel?.off(handleEvent);
739739
};
740-
}, [channelId]);
740+
}, [channelId, connectionRecoveredHandler, handleEvent]);
741741

742742
const channelQueryCall = async (queryCall: () => void = () => null) => {
743743
setError(false);
@@ -1579,7 +1579,6 @@ const ChannelWithContext = <
15791579
MessageAvatar,
15801580
MessageContent,
15811581
messageContentOrder,
1582-
MessageDeleted,
15831582
MessageFooter,
15841583
MessageHeader,
15851584
MessageList,

src/components/Message/Message.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,18 @@ const MessageWithContext = <
408408
const doubleTapRef = useRef<TapGestureHandler>(null);
409409
const pressActive = useSharedValue(false);
410410
const scale = useSharedValue(1);
411+
412+
/**
413+
* This is a cleanup effect to prevent the onLongPress
414+
* handler from being called if the component has dismounted.
415+
*/
416+
useEffect(
417+
() => () => {
418+
pressActive.value = false;
419+
cancelAnimation(scale);
420+
},
421+
[],
422+
);
411423
const scaleStyle = useAnimatedStyle<ViewStyle>(
412424
() => ({
413425
transform: [

src/components/MessageInput/MessageInput.tsx

Lines changed: 88 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ import {
2323
useSuggestionsContext,
2424
} from '../../contexts/suggestionsContext/SuggestionsContext';
2525
import { useTheme } from '../../contexts/themeContext/ThemeContext';
26+
import {
27+
ThreadContextValue,
28+
useThreadContext,
29+
} from '../../contexts/threadContext/ThreadContext';
2630
import {
2731
TranslationContextValue,
2832
useTranslationContext,
@@ -150,6 +154,7 @@ type MessageInputPropsWithContext<
150154
SuggestionsContextValue<Co, Us>,
151155
'componentType' | 'suggestions' | 'suggestionsTitle'
152156
> &
157+
Pick<ThreadContextValue, 'thread'> &
153158
Pick<TranslationContextValue, 't'> & {
154159
threadList?: boolean;
155160
};
@@ -200,6 +205,7 @@ const MessageInputWithContext = <
200205
suggestions,
201206
suggestionsTitle,
202207
t,
208+
thread,
203209
threadList,
204210
uploadNewImage,
205211
watchers,
@@ -260,54 +266,85 @@ const MessageInputWithContext = <
260266
return closeAttachmentPicker;
261267
}, []);
262268

263-
const selectedImagesLength = selectedImages.length;
264-
const imageUploadsLength = imageUploads.length;
269+
const [hasResetImages, setHasResetImages] = useState(false);
270+
const selectedImagesLength = hasResetImages ? selectedImages.length : 0;
271+
const imageUploadsLength = hasResetImages ? imageUploads.length : 0;
272+
const imagesForInput = (!!thread && !!threadList) || (!thread && !threadList);
273+
274+
useEffect(() => {
275+
setSelectedImages([]);
276+
if (imageUploads.length) {
277+
imageUploads.forEach((image) => removeImage(image.id));
278+
}
279+
return () => setSelectedImages([]);
280+
}, []);
281+
282+
useEffect(() => {
283+
if (
284+
hasResetImages === false &&
285+
imageUploadsLength === 0 &&
286+
selectedImagesLength === 0
287+
) {
288+
setHasResetImages(true);
289+
}
290+
}, [imageUploadsLength, selectedImagesLength]);
291+
265292
useEffect(() => {
266-
if (selectedImagesLength > imageUploadsLength) {
267-
const imagesToUpload = selectedImages.filter((selectedImage) => {
268-
const uploadedImage = imageUploads.find(
293+
if (imagesForInput === false && imageUploads.length) {
294+
imageUploads.forEach((image) => removeImage(image.id));
295+
}
296+
}, [imagesForInput]);
297+
298+
useEffect(() => {
299+
if (imagesForInput) {
300+
if (selectedImagesLength > imageUploadsLength) {
301+
const imagesToUpload = selectedImages.filter((selectedImage) => {
302+
const uploadedImage = imageUploads.find(
303+
(imageUpload) =>
304+
imageUpload.file.uri === selectedImage.uri ||
305+
imageUpload.url === selectedImage.uri,
306+
);
307+
return !uploadedImage;
308+
});
309+
imagesToUpload.forEach((image) => uploadNewImage(image));
310+
} else if (selectedImagesLength < imageUploadsLength) {
311+
const imagesToRemove = imageUploads.filter(
269312
(imageUpload) =>
270-
imageUpload.file.uri === selectedImage.uri ||
271-
imageUpload.url === selectedImage.uri,
313+
!selectedImages.find(
314+
(selectedImage) =>
315+
selectedImage.uri === imageUpload.file.uri ||
316+
selectedImage.uri === imageUpload.url,
317+
),
272318
);
273-
return !uploadedImage;
274-
});
275-
imagesToUpload.forEach((image) => uploadNewImage(image));
276-
} else if (selectedImagesLength < imageUploadsLength) {
277-
const imagesToRemove = imageUploads.filter(
278-
(imageUpload) =>
279-
!selectedImages.find(
280-
(selectedImage) =>
281-
selectedImage.uri === imageUpload.file.uri ||
282-
selectedImage.uri === imageUpload.url,
283-
),
284-
);
285-
imagesToRemove.forEach((image) => removeImage(image.id));
319+
imagesToRemove.forEach((image) => removeImage(image.id));
320+
}
286321
}
287322
}, [selectedImagesLength]);
288323

289324
useEffect(() => {
290-
if (imageUploadsLength < selectedImagesLength) {
291-
const updatedSelectedImages = selectedImages.filter((selectedImage) => {
292-
const uploadedImage = imageUploads.find(
293-
(imageUpload) =>
294-
imageUpload.file.uri === selectedImage.uri ||
295-
imageUpload.url === selectedImage.uri,
325+
if (imagesForInput) {
326+
if (imageUploadsLength < selectedImagesLength) {
327+
const updatedSelectedImages = selectedImages.filter((selectedImage) => {
328+
const uploadedImage = imageUploads.find(
329+
(imageUpload) =>
330+
imageUpload.file.uri === selectedImage.uri ||
331+
imageUpload.url === selectedImage.uri,
332+
);
333+
return uploadedImage;
334+
});
335+
setSelectedImages(updatedSelectedImages);
336+
} else if (imageUploadsLength > selectedImagesLength) {
337+
setSelectedImages(
338+
imageUploads
339+
.map((imageUpload) => ({
340+
height: imageUpload.file.height,
341+
source: imageUpload.file.source,
342+
uri: imageUpload.url,
343+
width: imageUpload.file.width,
344+
}))
345+
.filter(Boolean) as Asset[],
296346
);
297-
return uploadedImage;
298-
});
299-
setSelectedImages(updatedSelectedImages);
300-
} else if (imageUploadsLength > selectedImagesLength) {
301-
setSelectedImages(
302-
imageUploads
303-
.map((imageUpload) => ({
304-
height: imageUpload.file.height,
305-
source: imageUpload.file.source,
306-
uri: imageUpload.url,
307-
width: imageUpload.file.width,
308-
}))
309-
.filter(Boolean) as Asset[],
310-
);
347+
}
311348
}
312349
}, [imageUploadsLength]);
313350

@@ -592,6 +629,7 @@ const areEqual = <
592629
suggestions: prevSuggestions,
593630
suggestionsTitle: prevSuggestionsTitle,
594631
t: prevT,
632+
thread: prevThread,
595633
threadList: prevThreadList,
596634
} = prevProps;
597635
const {
@@ -610,6 +648,7 @@ const areEqual = <
610648
suggestions: nextSuggestions,
611649
suggestionsTitle: nextSuggestionsTitle,
612650
t: nextT,
651+
thread: nextThread,
613652
threadList: nextThreadList,
614653
} = nextProps;
615654

@@ -676,6 +715,12 @@ const areEqual = <
676715
const suggestionsTitleEqual = prevSuggestionsTitle === nextSuggestionsTitle;
677716
if (!suggestionsTitleEqual) return false;
678717

718+
const threadEqual =
719+
prevThread?.id === nextThread?.id &&
720+
prevThread?.text === nextThread?.text &&
721+
prevThread?.reply_count === nextThread?.reply_count;
722+
if (!threadEqual) return false;
723+
679724
const threadListEqual = prevThreadList === nextThreadList;
680725
if (!threadListEqual) return false;
681726

@@ -767,6 +812,8 @@ export const MessageInput = <
767812
suggestionsTitle,
768813
} = useSuggestionsContext<Co, Us>();
769814

815+
const { thread } = useThreadContext<At, Ch, Co, Ev, Me, Re, Us>();
816+
770817
const { t } = useTranslationContext();
771818

772819
return (
@@ -807,6 +854,7 @@ export const MessageInput = <
807854
suggestions,
808855
suggestionsTitle,
809856
t,
857+
thread,
810858
uploadNewImage,
811859
watchers,
812860
}}

0 commit comments

Comments
 (0)