stream-chat-react-native-core 9.0.0-beta.26 → 9.0.0-beta.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Attachment/Giphy/Giphy.js +19 -7
- package/lib/commonjs/components/Attachment/Giphy/Giphy.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerContent.js +3 -3
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerContent.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerGenericContent.js +24 -16
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerGenericContent.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +2 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/ChannelDetailsBottomSheet.js +1 -1
- package/lib/commonjs/components/ChannelPreview/ChannelDetailsBottomSheet.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessage.js +2 -0
- package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessage.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/ImageGrid.js +5 -4
- package/lib/commonjs/components/ImageGallery/components/ImageGrid.js.map +1 -1
- package/lib/commonjs/components/Indicators/LoadingIndicator.js +3 -3
- package/lib/commonjs/components/Indicators/LoadingIndicator.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +0 -9
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageContent.js +39 -5
- package/lib/commonjs/components/Message/MessageItemView/MessageContent.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js +5 -5
- package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageReplies.js +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageReplies.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js +18 -8
- package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js.map +1 -1
- package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js +2 -1
- package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
- package/lib/commonjs/components/Poll/components/MultipleVotesSettings.js +8 -0
- package/lib/commonjs/components/Poll/components/MultipleVotesSettings.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollOption.js +15 -5
- package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -1
- package/lib/commonjs/components/ThreadList/ThreadList.js +3 -1
- package/lib/commonjs/components/ThreadList/ThreadList.js.map +1 -1
- package/lib/commonjs/components/ui/Button/hooks/useButtonStyles.js +1 -1
- package/lib/commonjs/components/ui/Button/hooks/useButtonStyles.js.map +1 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js +1 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/i18n/en.json +3 -2
- package/lib/commonjs/i18n/es.json +3 -2
- package/lib/commonjs/i18n/fr.json +3 -2
- package/lib/commonjs/i18n/he.json +3 -2
- package/lib/commonjs/i18n/hi.json +3 -2
- package/lib/commonjs/i18n/it.json +3 -2
- package/lib/commonjs/i18n/ja.json +3 -2
- package/lib/commonjs/i18n/ko.json +3 -2
- package/lib/commonjs/i18n/nl.json +3 -2
- package/lib/commonjs/i18n/pt-br.json +3 -2
- package/lib/commonjs/i18n/ru.json +3 -2
- package/lib/commonjs/i18n/tr.json +3 -2
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/Giphy/Giphy.js +19 -7
- package/lib/module/components/Attachment/Giphy/Giphy.js.map +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerContent.js +3 -3
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerContent.js.map +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerGenericContent.js +24 -16
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerGenericContent.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +2 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/module/components/ChannelPreview/ChannelDetailsBottomSheet.js +1 -1
- package/lib/module/components/ChannelPreview/ChannelDetailsBottomSheet.js.map +1 -1
- package/lib/module/components/ChannelPreview/ChannelPreviewMessage.js +2 -0
- package/lib/module/components/ChannelPreview/ChannelPreviewMessage.js.map +1 -1
- package/lib/module/components/ImageGallery/components/ImageGrid.js +5 -4
- package/lib/module/components/ImageGallery/components/ImageGrid.js.map +1 -1
- package/lib/module/components/Indicators/LoadingIndicator.js +3 -3
- package/lib/module/components/Indicators/LoadingIndicator.js.map +1 -1
- package/lib/module/components/Message/Message.js +0 -9
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageContent.js +39 -5
- package/lib/module/components/Message/MessageItemView/MessageContent.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageItemView.js +5 -5
- package/lib/module/components/Message/MessageItemView/MessageItemView.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageReplies.js +1 -1
- package/lib/module/components/Message/MessageItemView/MessageReplies.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageStatus.js +18 -8
- package/lib/module/components/Message/MessageItemView/MessageStatus.js.map +1 -1
- package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js +2 -1
- package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
- package/lib/module/components/Poll/components/MultipleVotesSettings.js +8 -0
- package/lib/module/components/Poll/components/MultipleVotesSettings.js.map +1 -1
- package/lib/module/components/Poll/components/PollOption.js +15 -5
- package/lib/module/components/Poll/components/PollOption.js.map +1 -1
- package/lib/module/components/ThreadList/ThreadList.js +3 -1
- package/lib/module/components/ThreadList/ThreadList.js.map +1 -1
- package/lib/module/components/ui/Button/hooks/useButtonStyles.js +1 -1
- package/lib/module/components/ui/Button/hooks/useButtonStyles.js.map +1 -1
- package/lib/module/contexts/themeContext/utils/theme.js +1 -0
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/i18n/en.json +3 -2
- package/lib/module/i18n/es.json +3 -2
- package/lib/module/i18n/fr.json +3 -2
- package/lib/module/i18n/he.json +3 -2
- package/lib/module/i18n/hi.json +3 -2
- package/lib/module/i18n/it.json +3 -2
- package/lib/module/i18n/ja.json +3 -2
- package/lib/module/i18n/ko.json +3 -2
- package/lib/module/i18n/nl.json +3 -2
- package/lib/module/i18n/pt-br.json +3 -2
- package/lib/module/i18n/ru.json +3 -2
- package/lib/module/i18n/tr.json +3 -2
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/Giphy/Giphy.d.ts +1 -1
- package/lib/typescript/components/Attachment/Giphy/Giphy.d.ts.map +1 -1
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerGenericContent.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
- package/lib/typescript/components/ChannelPreview/ChannelPreviewMessage.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/ImageGrid.d.ts.map +1 -1
- package/lib/typescript/components/Indicators/LoadingIndicator.d.ts.map +1 -1
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/MessageContent.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/MessageItemView.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/MessageStatus.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/ShowThreadMessageInChannelButton.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/MultipleVotesSettings.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -1
- package/lib/typescript/components/ThreadList/ThreadList.d.ts.map +1 -1
- package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +1 -0
- package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +1 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
- package/lib/typescript/i18n/en.json +3 -2
- package/lib/typescript/i18n/es.json +3 -2
- package/lib/typescript/i18n/fr.json +3 -2
- package/lib/typescript/i18n/he.json +3 -2
- package/lib/typescript/i18n/hi.json +3 -2
- package/lib/typescript/i18n/it.json +3 -2
- package/lib/typescript/i18n/ja.json +3 -2
- package/lib/typescript/i18n/ko.json +3 -2
- package/lib/typescript/i18n/nl.json +3 -2
- package/lib/typescript/i18n/pt-br.json +3 -2
- package/lib/typescript/i18n/ru.json +3 -2
- package/lib/typescript/i18n/tr.json +3 -2
- package/lib/typescript/utils/i18n/Streami18n.d.ts +3 -2
- package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Attachment/Giphy/Giphy.tsx +19 -7
- package/src/components/Attachment/__tests__/Giphy.test.js +33 -1
- package/src/components/AttachmentPicker/components/AttachmentPickerContent.tsx +3 -3
- package/src/components/AttachmentPicker/components/AttachmentPickerGenericContent.tsx +23 -13
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +3 -1
- package/src/components/ChannelPreview/ChannelDetailsBottomSheet.tsx +1 -1
- package/src/components/ChannelPreview/ChannelPreviewMessage.tsx +3 -1
- package/src/components/ImageGallery/components/ImageGrid.tsx +3 -1
- package/src/components/Indicators/LoadingIndicator.tsx +7 -5
- package/src/components/Message/Message.tsx +0 -11
- package/src/components/Message/MessageItemView/MessageContent.tsx +44 -7
- package/src/components/Message/MessageItemView/MessageItemView.tsx +8 -5
- package/src/components/Message/MessageItemView/MessageReplies.tsx +1 -1
- package/src/components/Message/MessageItemView/MessageStatus.tsx +16 -5
- package/src/components/Message/MessageItemView/__tests__/MessageContent.test.js +44 -1
- package/src/components/Message/MessageItemView/__tests__/MessageItemView.test.js +21 -1
- package/src/components/MessageInput/ShowThreadMessageInChannelButton.tsx +1 -0
- package/src/components/MessageInput/__tests__/__snapshots__/AttachButton.test.js.snap +1 -1
- package/src/components/Poll/components/MultipleVotesSettings.tsx +8 -0
- package/src/components/Poll/components/PollOption.tsx +25 -9
- package/src/components/ThreadList/ThreadList.tsx +1 -1
- package/src/components/ui/Button/hooks/useButtonStyles.ts +1 -1
- package/src/contexts/themeContext/utils/theme.ts +2 -0
- package/src/i18n/en.json +3 -2
- package/src/i18n/es.json +3 -2
- package/src/i18n/fr.json +3 -2
- package/src/i18n/he.json +3 -2
- package/src/i18n/hi.json +3 -2
- package/src/i18n/it.json +3 -2
- package/src/i18n/ja.json +3 -2
- package/src/i18n/ko.json +3 -2
- package/src/i18n/nl.json +3 -2
- package/src/i18n/pt-br.json +3 -2
- package/src/i18n/ru.json +3 -2
- package/src/i18n/tr.json +3 -2
- package/src/version.json +1 -1
|
@@ -6,7 +6,7 @@ import { useTranslationContext } from '../../contexts/translationContext/Transla
|
|
|
6
6
|
import { primitives } from '../../theme';
|
|
7
7
|
import { Spinner } from '../UIComponents/Spinner';
|
|
8
8
|
|
|
9
|
-
type LoadingIndicatorWrapperProps = { text: string };
|
|
9
|
+
type LoadingIndicatorWrapperProps = { text: string | undefined };
|
|
10
10
|
|
|
11
11
|
const LoadingIndicatorWrapper = ({ text }: LoadingIndicatorWrapperProps) => {
|
|
12
12
|
const styles = useStyles();
|
|
@@ -14,9 +14,11 @@ const LoadingIndicatorWrapper = ({ text }: LoadingIndicatorWrapperProps) => {
|
|
|
14
14
|
return (
|
|
15
15
|
<View style={styles.container}>
|
|
16
16
|
<Spinner height={20} width={20} />
|
|
17
|
-
|
|
18
|
-
{
|
|
19
|
-
|
|
17
|
+
{text ? (
|
|
18
|
+
<Text style={styles.loadingText} testID='loading'>
|
|
19
|
+
{text}
|
|
20
|
+
</Text>
|
|
21
|
+
) : null}
|
|
20
22
|
</View>
|
|
21
23
|
);
|
|
22
24
|
};
|
|
@@ -44,7 +46,7 @@ export const LoadingIndicator = (props: LoadingProps) => {
|
|
|
44
46
|
case 'message':
|
|
45
47
|
return <LoadingIndicatorWrapper text={t('Loading messages...')} />;
|
|
46
48
|
case 'threads':
|
|
47
|
-
return <LoadingIndicatorWrapper text={
|
|
49
|
+
return <LoadingIndicatorWrapper text={undefined} />;
|
|
48
50
|
default:
|
|
49
51
|
return <LoadingIndicatorWrapper text={t('Loading...')} />;
|
|
50
52
|
}
|
|
@@ -381,21 +381,12 @@ const MessageWithContext = (props: MessagePropsWithContext) => {
|
|
|
381
381
|
}
|
|
382
382
|
};
|
|
383
383
|
|
|
384
|
-
const onPressQuotedMessage = (quotedMessage: LocalMessage) => {
|
|
385
|
-
if (!goToMessage) {
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
goToMessage(quotedMessage.id);
|
|
390
|
-
};
|
|
391
|
-
|
|
392
384
|
const errorOrFailed = message.type === 'error' || message.status === MessageStatusTypes.FAILED;
|
|
393
385
|
|
|
394
386
|
const onPress = (error = errorOrFailed) => {
|
|
395
387
|
if (dismissKeyboardOnMessageTouch) {
|
|
396
388
|
dismissKeyboard();
|
|
397
389
|
}
|
|
398
|
-
const quotedMessage = message.quoted_message;
|
|
399
390
|
if (error) {
|
|
400
391
|
/**
|
|
401
392
|
* If its a Blocked message, we don't do anything as per specs.
|
|
@@ -411,8 +402,6 @@ const MessageWithContext = (props: MessagePropsWithContext) => {
|
|
|
411
402
|
return;
|
|
412
403
|
}
|
|
413
404
|
showMessageOverlay();
|
|
414
|
-
} else if (quotedMessage) {
|
|
415
|
-
onPressQuotedMessage(quotedMessage);
|
|
416
405
|
}
|
|
417
406
|
};
|
|
418
407
|
|
|
@@ -121,6 +121,7 @@ const MessageContentWithContext = (props: MessageContentPropsWithContext) => {
|
|
|
121
121
|
FileAttachmentGroup,
|
|
122
122
|
Gallery,
|
|
123
123
|
groupStyles,
|
|
124
|
+
goToMessage,
|
|
124
125
|
isMessageAIGenerated,
|
|
125
126
|
isMyMessage,
|
|
126
127
|
isVeryLastMessage,
|
|
@@ -221,7 +222,6 @@ const MessageContentWithContext = (props: MessageContentPropsWithContext) => {
|
|
|
221
222
|
|
|
222
223
|
const { setNativeScrollability } = useMessageListItemContext();
|
|
223
224
|
const hasContentSideViews = !!(MessageContentLeadingView || MessageContentTrailingView);
|
|
224
|
-
|
|
225
225
|
const contentBody = (
|
|
226
226
|
<>
|
|
227
227
|
<View
|
|
@@ -240,12 +240,45 @@ const MessageContentWithContext = (props: MessageContentPropsWithContext) => {
|
|
|
240
240
|
case 'quoted_reply':
|
|
241
241
|
return (
|
|
242
242
|
message.quoted_message && (
|
|
243
|
-
<
|
|
243
|
+
<Pressable
|
|
244
|
+
disabled={!goToMessage}
|
|
244
245
|
key={`quoted_reply_${messageContentOrderIndex}`}
|
|
246
|
+
onLongPress={(event) => {
|
|
247
|
+
if (onLongPress) {
|
|
248
|
+
onLongPress({
|
|
249
|
+
emitter: 'messageContent',
|
|
250
|
+
event,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}}
|
|
254
|
+
onPress={(event) => {
|
|
255
|
+
if (!message.quoted_message || !goToMessage) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (onPress) {
|
|
260
|
+
onPress({
|
|
261
|
+
defaultHandler: () => goToMessage(message.quoted_message!.id),
|
|
262
|
+
emitter: 'messageContent',
|
|
263
|
+
event,
|
|
264
|
+
});
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
goToMessage(message.quoted_message.id);
|
|
269
|
+
}}
|
|
270
|
+
onPressIn={(event) => {
|
|
271
|
+
if (onPressIn) {
|
|
272
|
+
onPressIn({
|
|
273
|
+
emitter: 'messageContent',
|
|
274
|
+
event,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}}
|
|
245
278
|
style={[styles.replyContainer, replyContainer]}
|
|
246
279
|
>
|
|
247
280
|
<Reply mode='reply' styles={replyStyles} />
|
|
248
|
-
</
|
|
281
|
+
</Pressable>
|
|
249
282
|
)
|
|
250
283
|
);
|
|
251
284
|
case 'attachments':
|
|
@@ -584,7 +617,8 @@ export const MessageContent = (props: MessageContentProps) => {
|
|
|
584
617
|
const messageHasSingleFile =
|
|
585
618
|
messageContentOrder.length === 1 && messageContentOrder[0] === 'files' && isSingleFile;
|
|
586
619
|
const messageHasOnlyText = messageContentOrder.length === 1 && messageContentOrder[0] === 'text';
|
|
587
|
-
const
|
|
620
|
+
const messageHasStandaloneGiphyOrImgur =
|
|
621
|
+
!message.quoted_message &&
|
|
588
622
|
otherAttachments.filter(
|
|
589
623
|
(file) => file.type === FileTypes.Giphy || file.type === FileTypes.Imgur,
|
|
590
624
|
).length > 0;
|
|
@@ -594,17 +628,20 @@ export const MessageContent = (props: MessageContentProps) => {
|
|
|
594
628
|
messageHasSingleMedia ||
|
|
595
629
|
messageHasSingleFile ||
|
|
596
630
|
messageHasOnlyText ||
|
|
597
|
-
|
|
631
|
+
messageHasStandaloneGiphyOrImgur;
|
|
598
632
|
|
|
599
633
|
const hidePaddingHorizontal =
|
|
600
|
-
messageHasPoll ||
|
|
634
|
+
messageHasPoll ||
|
|
635
|
+
messageHasSingleMedia ||
|
|
636
|
+
messageHasSingleFile ||
|
|
637
|
+
messageHasStandaloneGiphyOrImgur;
|
|
601
638
|
|
|
602
639
|
const hidePaddingBottom =
|
|
603
640
|
messageHasPoll ||
|
|
604
641
|
messageHasSingleMedia ||
|
|
605
642
|
messageHasSingleFile ||
|
|
606
643
|
messageHasOnlyText ||
|
|
607
|
-
|
|
644
|
+
messageHasStandaloneGiphyOrImgur ||
|
|
608
645
|
(messageContentOrder.length > 1 &&
|
|
609
646
|
messageContentOrder[messageContentOrder.length - 1] === 'text');
|
|
610
647
|
|
|
@@ -17,6 +17,7 @@ import { useTheme } from '../../../contexts/themeContext/ThemeContext';
|
|
|
17
17
|
import { useStableCallback } from '../../../hooks/useStableCallback';
|
|
18
18
|
|
|
19
19
|
import { primitives } from '../../../theme';
|
|
20
|
+
import { FileTypes } from '../../../types/types';
|
|
20
21
|
import { checkMessageEquality, checkQuotedMessageEquality } from '../../../utils/utils';
|
|
21
22
|
import { useMessageData } from '../hooks/useMessageData';
|
|
22
23
|
|
|
@@ -293,10 +294,14 @@ const MessageItemViewWithContext = (props: MessageItemViewPropsWithContext) => {
|
|
|
293
294
|
});
|
|
294
295
|
|
|
295
296
|
const groupStyle = `${alignment}_${groupStyles?.[0]?.toLowerCase?.()}`;
|
|
297
|
+
const hasStandaloneGiphyOrImgur =
|
|
298
|
+
!message.quoted_message &&
|
|
299
|
+
otherAttachments.length > 0 &&
|
|
300
|
+
(otherAttachments[0].type === FileTypes.Giphy || otherAttachments[0].type === FileTypes.Imgur);
|
|
296
301
|
|
|
297
302
|
let noBorder = onlyEmojis && !message.quoted_message;
|
|
298
303
|
if (otherAttachments.length) {
|
|
299
|
-
if (
|
|
304
|
+
if (hasStandaloneGiphyOrImgur && !isMyMessage) {
|
|
300
305
|
noBorder = false;
|
|
301
306
|
} else {
|
|
302
307
|
noBorder = true;
|
|
@@ -306,10 +311,8 @@ const MessageItemViewWithContext = (props: MessageItemViewPropsWithContext) => {
|
|
|
306
311
|
let backgroundColor = semantics.chatBgOutgoing;
|
|
307
312
|
if (onlyEmojis && !message.quoted_message) {
|
|
308
313
|
backgroundColor = 'transparent';
|
|
309
|
-
} else if (
|
|
310
|
-
|
|
311
|
-
backgroundColor = 'transparent';
|
|
312
|
-
}
|
|
314
|
+
} else if (hasStandaloneGiphyOrImgur) {
|
|
315
|
+
backgroundColor = 'transparent';
|
|
313
316
|
} else if (isMessageReceivedOrErrorType) {
|
|
314
317
|
backgroundColor = semantics.chatBgIncoming;
|
|
315
318
|
}
|
|
@@ -235,7 +235,7 @@ const useStyles = () => {
|
|
|
235
235
|
gap: primitives.spacingXs,
|
|
236
236
|
},
|
|
237
237
|
messageRepliesText: {
|
|
238
|
-
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.
|
|
238
|
+
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.textLink,
|
|
239
239
|
fontSize: primitives.typographyFontSizeSm,
|
|
240
240
|
fontWeight: primitives.typographyFontWeightSemiBold,
|
|
241
241
|
lineHeight: primitives.typographyLineHeightTight,
|
|
@@ -29,7 +29,6 @@ const MessageStatusWithContext = (props: MessageStatusPropsWithContext) => {
|
|
|
29
29
|
messageItemView: {
|
|
30
30
|
status: { checkAllIcon, checkIcon, container, timeIcon },
|
|
31
31
|
},
|
|
32
|
-
semantics,
|
|
33
32
|
},
|
|
34
33
|
} = useTheme();
|
|
35
34
|
|
|
@@ -54,14 +53,14 @@ const MessageStatusWithContext = (props: MessageStatusPropsWithContext) => {
|
|
|
54
53
|
{read ? (
|
|
55
54
|
<CheckAll
|
|
56
55
|
height={16}
|
|
57
|
-
stroke={
|
|
56
|
+
stroke={styles.readCheck.color}
|
|
58
57
|
width={16}
|
|
59
58
|
accessibilityLabel='Read'
|
|
60
59
|
{...checkAllIcon}
|
|
61
60
|
/>
|
|
62
61
|
) : delivered ? (
|
|
63
62
|
<CheckAll
|
|
64
|
-
stroke={
|
|
63
|
+
stroke={styles.deliveredCheck.color}
|
|
65
64
|
height={16}
|
|
66
65
|
width={16}
|
|
67
66
|
accessibilityLabel='Delivered'
|
|
@@ -69,7 +68,7 @@ const MessageStatusWithContext = (props: MessageStatusPropsWithContext) => {
|
|
|
69
68
|
/>
|
|
70
69
|
) : sending ? (
|
|
71
70
|
<Time
|
|
72
|
-
stroke={
|
|
71
|
+
stroke={styles.sendingCheck.color}
|
|
73
72
|
height={16}
|
|
74
73
|
width={16}
|
|
75
74
|
accessibilityLabel='Sending'
|
|
@@ -77,7 +76,7 @@ const MessageStatusWithContext = (props: MessageStatusPropsWithContext) => {
|
|
|
77
76
|
/>
|
|
78
77
|
) : sent ? (
|
|
79
78
|
<Check
|
|
80
|
-
stroke={
|
|
79
|
+
stroke={styles.sentCheck.color}
|
|
81
80
|
height={16}
|
|
82
81
|
width={16}
|
|
83
82
|
accessibilityLabel='Sent'
|
|
@@ -162,6 +161,18 @@ const useStyles = () => {
|
|
|
162
161
|
flexDirection: 'row',
|
|
163
162
|
gap: primitives.spacingXxs,
|
|
164
163
|
},
|
|
164
|
+
readCheck: {
|
|
165
|
+
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.accentPrimary,
|
|
166
|
+
},
|
|
167
|
+
deliveredCheck: {
|
|
168
|
+
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.chatTextTimestamp,
|
|
169
|
+
},
|
|
170
|
+
sendingCheck: {
|
|
171
|
+
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.chatTextTimestamp,
|
|
172
|
+
},
|
|
173
|
+
sentCheck: {
|
|
174
|
+
color: shouldUseOverlayStyles ? semantics.textOnAccent : semantics.chatTextTimestamp,
|
|
175
|
+
},
|
|
165
176
|
});
|
|
166
177
|
}, [shouldUseOverlayStyles, semantics]);
|
|
167
178
|
};
|
|
@@ -7,7 +7,10 @@ import { ChannelsStateProvider } from '../../../../contexts/channelsStateContext
|
|
|
7
7
|
|
|
8
8
|
import { getOrCreateChannelApi } from '../../../../mock-builders/api/getOrCreateChannel';
|
|
9
9
|
import { useMockedApis } from '../../../../mock-builders/api/useMockedApis';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
generateGiphyAttachment,
|
|
12
|
+
generateVideoAttachment,
|
|
13
|
+
} from '../../../../mock-builders/generator/attachment';
|
|
11
14
|
import { generateChannelResponse } from '../../../../mock-builders/generator/channel';
|
|
12
15
|
import { generateMember } from '../../../../mock-builders/generator/member';
|
|
13
16
|
import { generateMessage } from '../../../../mock-builders/generator/message';
|
|
@@ -326,6 +329,46 @@ describe('MessageContent', () => {
|
|
|
326
329
|
expect(contentContainerStyle.paddingBottom).toBe(0);
|
|
327
330
|
});
|
|
328
331
|
|
|
332
|
+
it('keeps content padding for a quoted reply with a giphy attachment', async () => {
|
|
333
|
+
const user = generateUser();
|
|
334
|
+
const message = generateMessage({
|
|
335
|
+
attachments: [generateGiphyAttachment()],
|
|
336
|
+
quoted_message: generateMessage({ text: 'quoted message', user }),
|
|
337
|
+
text: '',
|
|
338
|
+
user,
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
renderMessage({ message });
|
|
342
|
+
|
|
343
|
+
await waitFor(() => {
|
|
344
|
+
expect(screen.getByTestId('message-content-wrapper')).toBeTruthy();
|
|
345
|
+
expect(screen.getByTestId('giphy-attachment')).toBeTruthy();
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
const giphyAttachment = screen.getByTestId('giphy-attachment');
|
|
349
|
+
let ancestor = giphyAttachment.parent;
|
|
350
|
+
let contentContainerStyle;
|
|
351
|
+
|
|
352
|
+
while (ancestor && !contentContainerStyle) {
|
|
353
|
+
const flattenedStyle = StyleSheet.flatten(ancestor.props.style);
|
|
354
|
+
if (
|
|
355
|
+
flattenedStyle &&
|
|
356
|
+
'paddingTop' in flattenedStyle &&
|
|
357
|
+
'paddingHorizontal' in flattenedStyle &&
|
|
358
|
+
'paddingBottom' in flattenedStyle
|
|
359
|
+
) {
|
|
360
|
+
contentContainerStyle = flattenedStyle;
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
ancestor = ancestor.parent;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
expect(contentContainerStyle).toBeTruthy();
|
|
367
|
+
expect(contentContainerStyle.paddingTop).toBeGreaterThan(0);
|
|
368
|
+
expect(contentContainerStyle.paddingHorizontal).toBeGreaterThan(0);
|
|
369
|
+
expect(contentContainerStyle.paddingBottom).toBeGreaterThan(0);
|
|
370
|
+
});
|
|
371
|
+
|
|
329
372
|
it('renders the FileAttachment component when a file attachment exists', async () => {
|
|
330
373
|
const user = generateUser();
|
|
331
374
|
const message = generateMessage({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import { Text } from 'react-native';
|
|
3
|
+
import { StyleSheet, Text } from 'react-native';
|
|
4
4
|
import { GestureDetector } from 'react-native-gesture-handler';
|
|
5
5
|
|
|
6
6
|
import { cleanup, render, screen, waitFor } from '@testing-library/react-native';
|
|
@@ -10,6 +10,7 @@ import { useMessageContext } from '../../../../contexts/messageContext/MessageCo
|
|
|
10
10
|
|
|
11
11
|
import { getOrCreateChannelApi } from '../../../../mock-builders/api/getOrCreateChannel';
|
|
12
12
|
import { useMockedApis } from '../../../../mock-builders/api/useMockedApis';
|
|
13
|
+
import { generateGiphyAttachment } from '../../../../mock-builders/generator/attachment';
|
|
13
14
|
import { generateChannelResponse } from '../../../../mock-builders/generator/channel';
|
|
14
15
|
import { generateMember } from '../../../../mock-builders/generator/member';
|
|
15
16
|
import { generateMessage } from '../../../../mock-builders/generator/message';
|
|
@@ -256,4 +257,23 @@ describe('MessageItemView', () => {
|
|
|
256
257
|
});
|
|
257
258
|
});
|
|
258
259
|
});
|
|
260
|
+
|
|
261
|
+
it('keeps the message shell background for a quoted reply with a giphy attachment', async () => {
|
|
262
|
+
const user = generateUser();
|
|
263
|
+
const message = generateMessage({
|
|
264
|
+
attachments: [generateGiphyAttachment()],
|
|
265
|
+
quoted_message: generateMessage({ text: 'quoted message', user }),
|
|
266
|
+
text: '',
|
|
267
|
+
user,
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
renderMessage({ message });
|
|
271
|
+
|
|
272
|
+
await waitFor(() => {
|
|
273
|
+
const wrapperStyle = StyleSheet.flatten(
|
|
274
|
+
screen.getByTestId('message-content-wrapper').props.style,
|
|
275
|
+
);
|
|
276
|
+
expect(wrapperStyle.backgroundColor).not.toBe('transparent');
|
|
277
|
+
});
|
|
278
|
+
});
|
|
259
279
|
});
|
|
@@ -169,6 +169,7 @@ export const MultipleVotesSettings = () => {
|
|
|
169
169
|
LeadingIcon={Minus}
|
|
170
170
|
onPress={decrementMaxVotes}
|
|
171
171
|
disabled={decrementDisabled}
|
|
172
|
+
style={decrementDisabled ? styles.buttonDisabled : styles.buttonEnabled}
|
|
172
173
|
testID='max-votes-decrement'
|
|
173
174
|
/>
|
|
174
175
|
<MaxVotesTextInput />
|
|
@@ -180,6 +181,7 @@ export const MultipleVotesSettings = () => {
|
|
|
180
181
|
LeadingIcon={Plus}
|
|
181
182
|
onPress={incrementMaxVotes}
|
|
182
183
|
disabled={incrementDisabled}
|
|
184
|
+
style={incrementDisabled ? styles.buttonDisabled : styles.buttonEnabled}
|
|
183
185
|
testID='max-votes-increment'
|
|
184
186
|
/>
|
|
185
187
|
</Animated.View>
|
|
@@ -235,6 +237,12 @@ const useStyles = () => {
|
|
|
235
237
|
paddingVertical: primitives.spacingMd,
|
|
236
238
|
textAlign: I18nManager.isRTL ? 'right' : 'left',
|
|
237
239
|
},
|
|
240
|
+
buttonEnabled: {
|
|
241
|
+
borderColor: semantics.borderCoreOnSurface,
|
|
242
|
+
},
|
|
243
|
+
buttonDisabled: {
|
|
244
|
+
borderColor: semantics.borderUtilityDisabledOnSurface,
|
|
245
|
+
},
|
|
238
246
|
});
|
|
239
247
|
}, [semantics]);
|
|
240
248
|
};
|
|
@@ -124,14 +124,18 @@ export const PollOption = ({ option, showProgressBar = true, forceIncoming }: Po
|
|
|
124
124
|
<VoteButton option={option} />
|
|
125
125
|
<View style={[styles.info, info]}>
|
|
126
126
|
<View style={[styles.header, header]}>
|
|
127
|
-
<Text style={[styles.text, text]}>
|
|
127
|
+
<Text ellipsizeMode='tail' numberOfLines={2} style={[styles.text, text]}>
|
|
128
|
+
{option.text}
|
|
129
|
+
</Text>
|
|
128
130
|
<View style={[styles.votesContainer, votesContainer]}>
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
{relevantVotes.length > 0 ? (
|
|
132
|
+
<UserAvatarStack
|
|
133
|
+
users={relevantVotes.map((vote: PollVote) => vote.user as UserResponse)}
|
|
134
|
+
overlap={0.2}
|
|
135
|
+
maxVisible={3}
|
|
136
|
+
avatarSize='xs'
|
|
137
|
+
/>
|
|
138
|
+
) : null}
|
|
135
139
|
|
|
136
140
|
<Text style={[styles.votesText, votesText]}>{voteCountsByOption[option.id] || 0}</Text>
|
|
137
141
|
</View>
|
|
@@ -223,10 +227,14 @@ const useStyles = () => {
|
|
|
223
227
|
},
|
|
224
228
|
header: {
|
|
225
229
|
flexDirection: 'row',
|
|
226
|
-
|
|
230
|
+
alignItems: 'flex-start',
|
|
231
|
+
gap: primitives.spacingXs,
|
|
232
|
+
minWidth: 0,
|
|
227
233
|
},
|
|
228
234
|
text: {
|
|
229
235
|
color: semantics.chatTextIncoming,
|
|
236
|
+
flexGrow: 1,
|
|
237
|
+
flexShrink: 1,
|
|
230
238
|
fontSize: primitives.typographyFontSizeSm,
|
|
231
239
|
fontWeight: primitives.typographyFontWeightRegular,
|
|
232
240
|
lineHeight: primitives.typographyLineHeightTight,
|
|
@@ -234,9 +242,17 @@ const useStyles = () => {
|
|
|
234
242
|
},
|
|
235
243
|
info: {
|
|
236
244
|
flexGrow: 1,
|
|
245
|
+
flexShrink: 1,
|
|
246
|
+
gap: primitives.spacingXs,
|
|
247
|
+
minWidth: 0,
|
|
248
|
+
},
|
|
249
|
+
votesContainer: {
|
|
250
|
+
alignItems: 'center',
|
|
251
|
+
flexDirection: 'row',
|
|
252
|
+
flexShrink: 0,
|
|
237
253
|
gap: primitives.spacingXs,
|
|
254
|
+
minHeight: 20,
|
|
238
255
|
},
|
|
239
|
-
votesContainer: { flexDirection: 'row', gap: primitives.spacingXs, alignItems: 'center' },
|
|
240
256
|
votesText: {
|
|
241
257
|
color: semantics.chatTextIncoming,
|
|
242
258
|
fontSize: primitives.typographyFontSizeXs,
|
|
@@ -45,7 +45,7 @@ export const DefaultThreadListLoadingIndicator = () => (
|
|
|
45
45
|
))}
|
|
46
46
|
</View>
|
|
47
47
|
);
|
|
48
|
-
export const DefaultThreadListLoadingNextIndicator = () => <LoadingIndicator />;
|
|
48
|
+
export const DefaultThreadListLoadingNextIndicator = () => <LoadingIndicator listType='threads' />;
|
|
49
49
|
|
|
50
50
|
const renderItem = (props: { item: Thread }) => <ThreadListItem thread={props.item} />;
|
|
51
51
|
|
|
@@ -79,7 +79,7 @@ export const useButtonStyles = ({ variant, type }: ButtonStylesConfig) => {
|
|
|
79
79
|
borderColor: semantics.buttonSecondaryBorder,
|
|
80
80
|
disabledForegroundColor: semantics.textDisabled,
|
|
81
81
|
disabledBackgroundColor: undefined,
|
|
82
|
-
disabledBorderColor: semantics.
|
|
82
|
+
disabledBorderColor: semantics.borderUtilityDisabled,
|
|
83
83
|
},
|
|
84
84
|
secondaryGhost: {
|
|
85
85
|
foregroundColor: semantics.buttonSecondaryText,
|
|
@@ -107,6 +107,7 @@ export type Theme = {
|
|
|
107
107
|
bottomSheetContentContainer: ViewStyle;
|
|
108
108
|
durationText: TextStyle;
|
|
109
109
|
content: {
|
|
110
|
+
actionContainer: ViewStyle;
|
|
110
111
|
container: ViewStyle;
|
|
111
112
|
infoContainer: ViewStyle;
|
|
112
113
|
text: TextStyle;
|
|
@@ -1030,6 +1031,7 @@ export const defaultTheme: Theme = {
|
|
|
1030
1031
|
bottomSheetContentContainer: {},
|
|
1031
1032
|
durationText: {},
|
|
1032
1033
|
content: {
|
|
1034
|
+
actionContainer: {},
|
|
1033
1035
|
container: {},
|
|
1034
1036
|
infoContainer: {},
|
|
1035
1037
|
text: {},
|
package/src/i18n/en.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Change in Settings",
|
|
165
165
|
"Create a poll and let everyone vote": "Create a poll and let everyone vote",
|
|
166
166
|
"Open Camera": "Open Camera",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Open Files",
|
|
168
|
+
"Select files to share": "Select files to share",
|
|
169
|
+
"Take a photo and share": "Take a photo and share",
|
|
169
170
|
"Take a video and share": "Take a video and share",
|
|
170
171
|
"You have not granted access to your camera": "You have not granted access to your camera",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} Reactions",
|
package/src/i18n/es.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Cambiar en Ajustes",
|
|
165
165
|
"Create a poll and let everyone vote": "Crea una encuesta y deja que todos voten",
|
|
166
166
|
"Open Camera": "Abrir camara",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Abrir archivos",
|
|
168
|
+
"Select files to share": "Selecciona archivos para compartir",
|
|
169
|
+
"Take a photo and share": "Toma una foto y compártela",
|
|
169
170
|
"Take a video and share": "Graba un video y compártelo",
|
|
170
171
|
"You have not granted access to your camera": "No has concedido acceso a tu camara",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} reacciones",
|
package/src/i18n/fr.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Changer dans Réglages",
|
|
165
165
|
"Create a poll and let everyone vote": "Créez un sondage et laissez tout le monde voter",
|
|
166
166
|
"Open Camera": "Ouvrir la caméra",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Ouvrir les fichiers",
|
|
168
|
+
"Select files to share": "Sélectionnez des fichiers à partager",
|
|
169
|
+
"Take a photo and share": "Prenez une photo et partagez-la",
|
|
169
170
|
"Take a video and share": "Prenez une vidéo et partagez-la",
|
|
170
171
|
"You have not granted access to your camera": "Vous n'avez pas accordé l'accès à votre caméra",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} réactions",
|
package/src/i18n/he.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "שנה בהגדרות",
|
|
165
165
|
"Create a poll and let everyone vote": "צור סקר ותן לכולם להצביע",
|
|
166
166
|
"Open Camera": "פתח מצלמה",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "פתח קבצים",
|
|
168
|
+
"Select files to share": "בחר קבצים לשיתוף",
|
|
169
|
+
"Take a photo and share": "צלם תמונה ושתף",
|
|
169
170
|
"Take a video and share": "צלם וידאו ושתף",
|
|
170
171
|
"You have not granted access to your camera": "לא הענקת גישה למצלמה שלך",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} תגובות",
|
package/src/i18n/hi.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "सेटिंग्स में बदलें",
|
|
165
165
|
"Create a poll and let everyone vote": "पोल बनाएँ और सभी को वोट करने दें",
|
|
166
166
|
"Open Camera": "कैमरा खोलें",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "फ़ाइलें खोलें",
|
|
168
|
+
"Select files to share": "साझा करने के लिए फ़ाइलें चुनें",
|
|
169
|
+
"Take a photo and share": "एक फ़ोटो लें और साझा करें",
|
|
169
170
|
"Take a video and share": "वीडियो लें और साझा करें",
|
|
170
171
|
"You have not granted access to your camera": "आपने अपने कैमरे के लिए अनुमति नहीं दी है",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} प्रतिक्रियाएँ",
|
package/src/i18n/it.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Cambia in Impostazioni",
|
|
165
165
|
"Create a poll and let everyone vote": "Crea un sondaggio e lascia che tutti votino",
|
|
166
166
|
"Open Camera": "Apri fotocamera",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Apri file",
|
|
168
|
+
"Select files to share": "Seleziona file da condividere",
|
|
169
|
+
"Take a photo and share": "Scatta una foto e condividila",
|
|
169
170
|
"Take a video and share": "Registra un video e condividilo",
|
|
170
171
|
"You have not granted access to your camera": "Non hai concesso l’accesso alla fotocamera",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} reazioni",
|
package/src/i18n/ja.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "設定で変更",
|
|
165
165
|
"Create a poll and let everyone vote": "投票を作成してみんなに投票してもらう",
|
|
166
166
|
"Open Camera": "カメラを開く",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "ファイルを開く",
|
|
168
|
+
"Select files to share": "共有するファイルを選択",
|
|
169
|
+
"Take a photo and share": "写真を撮って共有",
|
|
169
170
|
"Take a video and share": "動画を撮影して共有",
|
|
170
171
|
"You have not granted access to your camera": "カメラへのアクセスが許可されていません",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}}件のリアクション",
|
package/src/i18n/ko.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "설정에서 변경",
|
|
165
165
|
"Create a poll and let everyone vote": "투표를 만들어 모두가 투표하게 하세요",
|
|
166
166
|
"Open Camera": "카메라 열기",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "파일 열기",
|
|
168
|
+
"Select files to share": "공유할 파일 선택",
|
|
169
|
+
"Take a photo and share": "사진을 찍고 공유",
|
|
169
170
|
"Take a video and share": "동영상을 촬영하고 공유",
|
|
170
171
|
"You have not granted access to your camera": "카메라 접근 권한이 없습니다",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}}개의 반응",
|
package/src/i18n/nl.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Wijzigen in Instellingen",
|
|
165
165
|
"Create a poll and let everyone vote": "Maak een peiling en laat iedereen stemmen",
|
|
166
166
|
"Open Camera": "Camera openen",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Bestanden openen",
|
|
168
|
+
"Select files to share": "Selecteer bestanden om te delen",
|
|
169
|
+
"Take a photo and share": "Maak een foto en deel deze",
|
|
169
170
|
"Take a video and share": "Maak een video en deel deze",
|
|
170
171
|
"You have not granted access to your camera": "Je hebt geen toegang tot je camera verleend",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} reacties",
|
package/src/i18n/pt-br.json
CHANGED
|
@@ -164,8 +164,9 @@
|
|
|
164
164
|
"Change in Settings": "Alterar nos Ajustes",
|
|
165
165
|
"Create a poll and let everyone vote": "Crie uma enquete e deixe todos votarem",
|
|
166
166
|
"Open Camera": "Abrir camera",
|
|
167
|
-
"
|
|
168
|
-
"
|
|
167
|
+
"Open Files": "Abrir arquivos",
|
|
168
|
+
"Select files to share": "Selecione arquivos para compartilhar",
|
|
169
|
+
"Take a photo and share": "Tire uma foto e compartilhe",
|
|
169
170
|
"Take a video and share": "Grave um video e compartilhe",
|
|
170
171
|
"You have not granted access to your camera": "Você não concedeu acesso à sua câmera",
|
|
171
172
|
"{{count}} Reactions_many": "{{count}} reações",
|