stream-chat-react-native-core 5.27.0-beta.9 → 5.27.0

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.
Files changed (96) hide show
  1. package/lib/commonjs/components/Attachment/Gallery.js +4 -4
  2. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  3. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +1 -1
  4. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  5. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +100 -37
  6. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  7. package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js +3 -1
  8. package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js.map +1 -1
  9. package/lib/commonjs/components/ImageGallery/ImageGallery.js +39 -21
  10. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  11. package/lib/commonjs/i18n/en.json +1 -1
  12. package/lib/commonjs/i18n/es.json +64 -64
  13. package/lib/commonjs/i18n/fr.json +64 -64
  14. package/lib/commonjs/i18n/he.json +64 -64
  15. package/lib/commonjs/i18n/hi.json +64 -64
  16. package/lib/commonjs/i18n/it.json +64 -64
  17. package/lib/commonjs/i18n/ja.json +64 -64
  18. package/lib/commonjs/i18n/ko.json +64 -64
  19. package/lib/commonjs/i18n/nl.json +64 -64
  20. package/lib/commonjs/i18n/pt-BR.json +64 -64
  21. package/lib/commonjs/i18n/ru.json +64 -64
  22. package/lib/commonjs/i18n/tr.json +64 -64
  23. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js +21 -0
  24. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js.map +1 -0
  25. package/lib/commonjs/store/mappers/mapChannelToStorable.js +63 -0
  26. package/lib/commonjs/store/mappers/mapChannelToStorable.js.map +1 -0
  27. package/lib/commonjs/utils/DBSyncManager.js +73 -68
  28. package/lib/commonjs/utils/DBSyncManager.js.map +1 -1
  29. package/lib/commonjs/version.json +1 -1
  30. package/lib/module/components/Attachment/Gallery.js +4 -4
  31. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  32. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +1 -1
  33. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  34. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +100 -37
  35. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  36. package/lib/module/components/Chat/hooks/useSyncDatabase.js +3 -1
  37. package/lib/module/components/Chat/hooks/useSyncDatabase.js.map +1 -1
  38. package/lib/module/components/ImageGallery/ImageGallery.js +39 -21
  39. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  40. package/lib/module/i18n/en.json +1 -1
  41. package/lib/module/i18n/es.json +64 -64
  42. package/lib/module/i18n/fr.json +64 -64
  43. package/lib/module/i18n/he.json +64 -64
  44. package/lib/module/i18n/hi.json +64 -64
  45. package/lib/module/i18n/it.json +64 -64
  46. package/lib/module/i18n/ja.json +64 -64
  47. package/lib/module/i18n/ko.json +64 -64
  48. package/lib/module/i18n/nl.json +64 -64
  49. package/lib/module/i18n/pt-BR.json +64 -64
  50. package/lib/module/i18n/ru.json +64 -64
  51. package/lib/module/i18n/tr.json +64 -64
  52. package/lib/module/store/apis/upsertChannelDataFromChannel.js +21 -0
  53. package/lib/module/store/apis/upsertChannelDataFromChannel.js.map +1 -0
  54. package/lib/module/store/mappers/mapChannelToStorable.js +63 -0
  55. package/lib/module/store/mappers/mapChannelToStorable.js.map +1 -0
  56. package/lib/module/utils/DBSyncManager.js +73 -68
  57. package/lib/module/utils/DBSyncManager.js.map +1 -1
  58. package/lib/module/version.json +1 -1
  59. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts +4 -2
  60. package/lib/typescript/i18n/en.json +1 -1
  61. package/lib/typescript/i18n/es.json +64 -64
  62. package/lib/typescript/i18n/fr.json +64 -64
  63. package/lib/typescript/i18n/he.json +64 -64
  64. package/lib/typescript/i18n/hi.json +64 -64
  65. package/lib/typescript/i18n/it.json +64 -64
  66. package/lib/typescript/i18n/ja.json +64 -64
  67. package/lib/typescript/i18n/ko.json +64 -64
  68. package/lib/typescript/i18n/nl.json +64 -64
  69. package/lib/typescript/i18n/pt-BR.json +64 -64
  70. package/lib/typescript/i18n/ru.json +64 -64
  71. package/lib/typescript/i18n/tr.json +64 -64
  72. package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts +6 -0
  73. package/lib/typescript/store/mappers/mapChannelToStorable.d.ts +4 -0
  74. package/lib/typescript/utils/DBSyncManager.d.ts +1 -1
  75. package/package.json +1 -1
  76. package/src/components/Attachment/Gallery.tsx +5 -5
  77. package/src/components/AttachmentPicker/AttachmentPicker.tsx +1 -1
  78. package/src/components/Chat/hooks/handleEventToSyncDB.ts +132 -46
  79. package/src/components/Chat/hooks/useSyncDatabase.ts +1 -1
  80. package/src/components/ImageGallery/ImageGallery.tsx +25 -2
  81. package/src/i18n/en.json +1 -1
  82. package/src/i18n/es.json +64 -64
  83. package/src/i18n/fr.json +64 -64
  84. package/src/i18n/he.json +64 -64
  85. package/src/i18n/hi.json +64 -64
  86. package/src/i18n/it.json +64 -64
  87. package/src/i18n/ja.json +64 -64
  88. package/src/i18n/ko.json +64 -64
  89. package/src/i18n/nl.json +64 -64
  90. package/src/i18n/pt-BR.json +64 -64
  91. package/src/i18n/ru.json +64 -64
  92. package/src/i18n/tr.json +64 -64
  93. package/src/store/apis/upsertChannelDataFromChannel.ts +25 -0
  94. package/src/store/mappers/mapChannelToStorable.ts +68 -0
  95. package/src/utils/DBSyncManager.ts +7 -3
  96. package/src/version.json +1 -1
@@ -1,74 +1,152 @@
1
- import type { Event } from 'stream-chat';
1
+ import { DefaultStreamChatGenerics } from 'src/types/types';
2
+ import type { Event, StreamChat } from 'stream-chat';
2
3
 
3
4
  import { deleteChannel } from '../../../store/apis/deleteChannel';
4
5
  import { deleteMember } from '../../../store/apis/deleteMember';
5
6
  import { deleteMessagesForChannel } from '../../../store/apis/deleteMessagesForChannel';
6
7
  import { updateMessage } from '../../../store/apis/updateMessage';
7
8
  import { upsertChannelData } from '../../../store/apis/upsertChannelData';
9
+ import { upsertChannelDataFromChannel } from '../../../store/apis/upsertChannelDataFromChannel';
8
10
  import { upsertChannels } from '../../../store/apis/upsertChannels';
9
11
  import { upsertMembers } from '../../../store/apis/upsertMembers';
10
12
  import { upsertMessages } from '../../../store/apis/upsertMessages';
11
13
  import { upsertReads } from '../../../store/apis/upsertReads';
14
+ import { QuickSqliteClient } from '../../../store/QuickSqliteClient';
15
+ import { createSelectQuery } from '../../../store/sqlite-utils/createSelectQuery';
16
+ import { PreparedQueries } from '../../../store/types';
12
17
 
13
- export const handleEventToSyncDB = (event: Event, flush?: boolean) => {
18
+ export const handleEventToSyncDB = <
19
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
20
+ >(
21
+ event: Event,
22
+ client: StreamChat<StreamChatGenerics>,
23
+ flush?: boolean,
24
+ ) => {
14
25
  const { type } = event;
15
26
 
27
+ // This function is used to guard the queries that require channel to be present in the db first
28
+ // If channel is not present in the db, we first fetch the channel data from the channel object
29
+ // and then add the queries with a channel create query first
30
+ const queriesWithChannelGuard = (
31
+ createQueries: (flushOverride?: boolean) => PreparedQueries[],
32
+ ) => {
33
+ const cid = event.cid || event.channel?.cid;
34
+
35
+ if (!cid) return createQueries(flush);
36
+ const channels = QuickSqliteClient.executeSql.apply(
37
+ null,
38
+ createSelectQuery('channels', ['cid'], {
39
+ cid,
40
+ }),
41
+ );
42
+ // a channel is not present in the db, we first fetch the channel data from the channel object.
43
+ // this can happen for example when a message.new event is received for a channel that is not in the db due to a channel being hidden.
44
+ if (channels.length === 0) {
45
+ const channel =
46
+ event.channel_type && event.channel_id
47
+ ? client.channel(event.channel_type, event.channel_id)
48
+ : undefined;
49
+ if (channel && channel.initialized && !channel.disconnected) {
50
+ const channelQuery = upsertChannelDataFromChannel({
51
+ channel,
52
+ flush,
53
+ });
54
+ if (channelQuery) {
55
+ const newQueries = [...channelQuery, ...createQueries(false)];
56
+ if (flush !== false) {
57
+ QuickSqliteClient.executeSqlBatch(newQueries);
58
+ }
59
+ return newQueries;
60
+ } else {
61
+ console.warn(
62
+ `Couldnt create channel queries on ${type} event for an initialized channel that is not in DB, skipping event`,
63
+ { event },
64
+ );
65
+ return [];
66
+ }
67
+ } else {
68
+ console.warn(
69
+ `Received ${type} event for a non initialized channel that is not in DB, skipping event`,
70
+ { event },
71
+ );
72
+ return [];
73
+ }
74
+ }
75
+ return createQueries(flush);
76
+ };
77
+
16
78
  if (type === 'message.read') {
17
- if (event.user?.id && event.cid) {
18
- return upsertReads({
19
- cid: event.cid,
20
- flush,
21
- reads: [
22
- {
23
- last_read: event.received_at as string,
24
- unread_messages: 0,
25
- user: event.user,
26
- },
27
- ],
28
- });
79
+ const cid = event.cid;
80
+ const user = event.user;
81
+ if (user?.id && cid) {
82
+ return queriesWithChannelGuard((flushOverride) =>
83
+ upsertReads({
84
+ cid,
85
+ flush: flushOverride,
86
+ reads: [
87
+ {
88
+ last_read: event.received_at as string,
89
+ unread_messages: 0,
90
+ user,
91
+ },
92
+ ],
93
+ }),
94
+ );
29
95
  }
30
96
  }
31
97
 
32
98
  if (type === 'message.new') {
33
- if (event.message && (!event.message.parent_id || event.message.show_in_channel)) {
34
- return upsertMessages({
35
- flush,
36
- messages: [event.message],
37
- });
99
+ const message = event.message;
100
+ if (message && (!message.parent_id || message.show_in_channel)) {
101
+ return queriesWithChannelGuard((flushOverride) =>
102
+ upsertMessages({
103
+ flush: flushOverride,
104
+ messages: [message],
105
+ }),
106
+ );
38
107
  }
39
108
  }
40
109
 
41
110
  if (type === 'message.updated' || type === 'message.deleted') {
42
- if (event.message && !event.message.parent_id) {
111
+ const message = event.message;
112
+ if (message && !message.parent_id) {
43
113
  // Update only if it exists, otherwise event could be related
44
114
  // to a message which is not in database.
45
- return updateMessage({
46
- flush,
47
- message: event.message,
48
- });
115
+ return queriesWithChannelGuard((flushOverride) =>
116
+ updateMessage({
117
+ flush: flushOverride,
118
+ message,
119
+ }),
120
+ );
49
121
  }
50
122
  }
51
123
 
52
124
  if (type === 'reaction.updated') {
53
- if (event.message && event.reaction) {
125
+ const message = event.message;
126
+ if (message && event.reaction) {
54
127
  // We update the entire message to make sure we also update
55
128
  // reaction_counts.
56
- return updateMessage({
57
- flush,
58
- message: event.message,
59
- });
129
+ return queriesWithChannelGuard((flushOverride) =>
130
+ updateMessage({
131
+ flush: flushOverride,
132
+ message,
133
+ }),
134
+ );
60
135
  }
61
136
  }
62
137
 
63
138
  if (type === 'reaction.new' || type === 'reaction.deleted') {
64
- if (event.message && !event.message.parent_id) {
139
+ const message = event.message;
140
+ if (message && !message.parent_id) {
65
141
  // Here we are relying on the fact message.latest_reactions always includes
66
142
  // the new reaction. So we first delete all the existing reactions and populate
67
143
  // the reactions table with message.latest_reactions
68
- return updateMessage({
69
- flush,
70
- message: event.message,
71
- });
144
+ return queriesWithChannelGuard((flushOverride) =>
145
+ updateMessage({
146
+ flush: flushOverride,
147
+ message,
148
+ }),
149
+ );
72
150
  }
73
151
  }
74
152
 
@@ -119,22 +197,30 @@ export const handleEventToSyncDB = (event: Event, flush?: boolean) => {
119
197
  }
120
198
 
121
199
  if (type === 'member.added' || type === 'member.updated') {
122
- if (event.member && event.cid) {
123
- return upsertMembers({
124
- cid: event.cid,
125
- flush,
126
- members: [event.member],
127
- });
200
+ const member = event.member;
201
+ const cid = event.cid;
202
+ if (member && cid) {
203
+ return queriesWithChannelGuard((flushOverride) =>
204
+ upsertMembers({
205
+ cid,
206
+ flush: flushOverride,
207
+ members: [member],
208
+ }),
209
+ );
128
210
  }
129
211
  }
130
212
 
131
213
  if (type === 'member.removed') {
132
- if (event.member && event.cid) {
133
- return deleteMember({
134
- cid: event.cid,
135
- flush,
136
- member: event.member,
137
- });
214
+ const member = event.member;
215
+ const cid = event.cid;
216
+ if (member && cid) {
217
+ return queriesWithChannelGuard((flushOverride) =>
218
+ deleteMember({
219
+ cid,
220
+ flush: flushOverride,
221
+ member,
222
+ }),
223
+ );
138
224
  }
139
225
  }
140
226
 
@@ -22,7 +22,7 @@ export const useSyncDatabase = <
22
22
  let listener: ReturnType<StreamChat['on']> | undefined;
23
23
 
24
24
  if (enableOfflineSupport && initialisedDatabase) {
25
- listener = client?.on(handleEventToSyncDB);
25
+ listener = client?.on((event) => handleEventToSyncDB(event, client));
26
26
  }
27
27
 
28
28
  return () => {
@@ -26,7 +26,7 @@ import Animated, {
26
26
  withTiming,
27
27
  } from 'react-native-reanimated';
28
28
 
29
- import { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';
29
+ import { BottomSheetModal, BottomSheetModalProvider, BottomSheetProps } from '@gorhom/bottom-sheet';
30
30
 
31
31
  import type { UserResponse } from 'stream-chat';
32
32
 
@@ -132,6 +132,29 @@ type Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamC
132
132
  | 'autoPlayVideo'
133
133
  >;
134
134
 
135
+ type SnapPoints = BottomSheetProps['snapPoints'];
136
+
137
+ const normalizeSnapPoints = (input: SnapPoints): SnapPoints => {
138
+ const snapPoints = input ? ('value' in input ? input.value : input) : [];
139
+
140
+ return snapPoints.map((snapPoint) => {
141
+ if (typeof snapPoint === 'number') {
142
+ return Math.max(0, snapPoint);
143
+ } else {
144
+ const numericValue = Number(snapPoint.replace('%', ''));
145
+ const isPercentage = snapPoint.includes('%');
146
+
147
+ if (isNaN(numericValue)) {
148
+ return 0;
149
+ } else if (isPercentage) {
150
+ return `${Math.max(0, numericValue)}%`;
151
+ } else {
152
+ return Math.max(0, numericValue);
153
+ }
154
+ }
155
+ });
156
+ };
157
+
135
158
  export const ImageGallery = <
136
159
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
137
160
  >(
@@ -685,7 +708,7 @@ export const ImageGallery = <
685
708
  index={0}
686
709
  onChange={(index: number) => setCurrentBottomSheetIndex(index)}
687
710
  ref={bottomSheetModalRef}
688
- snapPoints={imageGalleryGridSnapPoints || snapPoints}
711
+ snapPoints={normalizeSnapPoints(imageGalleryGridSnapPoints || snapPoints)}
689
712
  >
690
713
  <ImageGrid
691
714
  closeGridView={closeGridView}
package/src/i18n/en.json CHANGED
@@ -26,7 +26,7 @@
26
26
  "File type not supported": "File type not supported",
27
27
  "Flag": "Flag",
28
28
  "Flag Message": "Flag Message",
29
- "Flag action failed either due to a network issue or the message is already flagged": "Flag action failed either due to a network issue or the message is already flagged",
29
+ "Flag action failed either due to a network issue or the message is already flagged": "Flag action failed either due to a network issue or the message is already flagged.",
30
30
  "How about sending your first message to a friend?": "How about sending your first message to a friend?",
31
31
  "Instant Commands": "Instant Commands",
32
32
  "Let's start chatting!": "Let's start chatting!",
package/src/i18n/es.json CHANGED
@@ -1,79 +1,79 @@
1
1
  {
2
- "1 Reply": "",
3
- "1 Thread Reply": "",
4
- "Allow access to your Gallery": "",
5
- "Allow camera access in device settings": "",
6
- "Also send to channel": "",
7
- "Are you sure you want to permanently delete this message?": "",
8
- "Are you sure?": "",
9
- "Block User": "",
10
- "Cancel": "",
11
- "Cannot Flag Message": "",
12
- "Consider how your comment might make others feel and be sure to follow our Community Guidelines": "",
13
- "Copy Message": "",
14
- "Delete": "",
15
- "Delete Message": "",
16
- "Device camera is used to take photos or videos.": "",
17
- "Do you want to send a copy of this message to a moderator for further investigation?": "",
18
- "Edit Message": "",
19
- "Editing Message": "",
2
+ "1 Reply": "1 respuesta",
3
+ "1 Thread Reply": "1 respuesta de hilo",
4
+ "Allow access to your Gallery": "Permitir acceso a tu galería",
5
+ "Allow camera access in device settings": "Permitir el acceso a la cámara en la configuración del dispositivo",
6
+ "Also send to channel": "También enviar al canal",
7
+ "Are you sure you want to permanently delete this message?": "¿Estás seguro de que deseas eliminar permanentemente este mensaje?",
8
+ "Are you sure?": "¿Estás seguro?",
9
+ "Block User": "Bloquear usuario",
10
+ "Cancel": "Cancelar",
11
+ "Cannot Flag Message": "No se puede reportar el mensaje",
12
+ "Consider how your comment might make others feel and be sure to follow our Community Guidelines": "Considera cómo tu comentario podría hacer sentir a los demás y asegúrate de seguir nuestras Normas de la Comunidad",
13
+ "Copy Message": "Copiar mensaje",
14
+ "Delete": "Eliminar",
15
+ "Delete Message": "Eliminar mensaje",
16
+ "Device camera is used to take photos or videos.": "La cámara del dispositivo se utiliza para tomar fotografías o vídeos.",
17
+ "Do you want to send a copy of this message to a moderator for further investigation?": "¿Deseas enviar una copia de este mensaje a un moderador para una investigación adicional?",
18
+ "Edit Message": "Editar mensaje",
19
+ "Editing Message": "Editando mensaje",
20
20
  "Emoji matching": "Coincidencia de emoji",
21
- "Empty message...": "",
21
+ "Empty message...": "Mensaje vacío...",
22
22
  "Error loading": "Error al cargar",
23
- "Error loading channel list...": "",
23
+ "Error loading channel list...": "Error al cargar la lista de canales...",
24
24
  "Error loading messages for this channel...": "Error al cargar los mensajes de este canal...",
25
- "Error while loading, please reload/refresh": "",
25
+ "Error while loading, please reload/refresh": "Error al cargar, por favor recarga/actualiza",
26
26
  "File type not supported": "Tipo de archivo no admitido",
27
- "Flag": "",
28
- "Flag Message": "",
29
- "Flag action failed either due to a network issue or the message is already flagged": "",
30
- "How about sending your first message to a friend?": "",
27
+ "Flag": "Reportar",
28
+ "Flag Message": "Reportar mensaje",
29
+ "Flag action failed either due to a network issue or the message is already flagged": "El reporte falló debido a un problema de red o el mensaje ya fue reportado.",
30
+ "How about sending your first message to a friend?": "¿Qué tal enviar tu primer mensaje a un amigo?",
31
31
  "Instant Commands": "Comandos instantáneos",
32
- "Let's start chatting!": "",
32
+ "Let's start chatting!": "¡Empecemos a charlar!",
33
33
  "Links are disabled": "Los enlaces están desactivados",
34
- "Loading channels...": "",
35
- "Loading messages...": "",
36
- "Loading...": "",
34
+ "Loading channels...": "Cargando canales...",
35
+ "Loading messages...": "Cargando mensajes...",
36
+ "Loading...": "Cargando...",
37
37
  "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "El archivo supera el tamaño máximo permitido. Por favor, selecciona un archivo menor a {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.",
38
- "Message Reactions": "",
38
+ "Message Reactions": "Reacciones al mensaje",
39
39
  "Message deleted": "Mensaje eliminado",
40
- "Message flagged": "",
41
- "Mute User": "",
40
+ "Message flagged": "Mensaje reportado",
41
+ "Mute User": "Silenciar usuario",
42
42
  "Not supported": "No admitido",
43
- "Nothing yet...": "",
44
- "Ok": "",
45
- "Only visible to you": "",
46
- "Open Settings": "",
47
- "Photo": "",
48
- "Photos and Videos": "",
49
- "Pin to Conversation": "",
50
- "Pinned by": "",
51
- "Please enable access to your photos and videos so you can share them.": "",
43
+ "Nothing yet...": "Aún no hay nada...",
44
+ "Ok": "Aceptar",
45
+ "Only visible to you": "Solo visible para ti",
46
+ "Open Settings": "Configuración abierta",
47
+ "Photo": "Foto",
48
+ "Photos and Videos": "Fotos y videos",
49
+ "Pin to Conversation": "Fijar a la conversación",
50
+ "Pinned by": "Fijado por",
51
+ "Please enable access to your photos and videos so you can share them.": "Por favor, habilita el acceso a tus fotos y videos para poder compartirlos.",
52
52
  "Please select a channel first": "Por favor, selecciona primero un canal",
53
53
  "Reconnecting...": "Reconectando...",
54
- "Reply": "",
55
- "Reply to Message": "",
56
- "Resend": "",
57
- "Search GIFs": "",
58
- "Select More Photos": "",
59
- "Send Anyway": "",
60
- "Send a message": "",
54
+ "Reply": "Responder",
55
+ "Reply to Message": "Responder al mensaje",
56
+ "Resend": "Reenviar",
57
+ "Search GIFs": "Buscar GIFs",
58
+ "Select More Photos": "Seleccionar más fotos",
59
+ "Send Anyway": "Enviar de todos modos",
60
+ "Send a message": "Enviar un mensaje",
61
61
  "Sending links is not allowed in this conversation": "No está permitido enviar enlaces en esta conversación",
62
- "Slow mode ON": "",
63
- "The message has been reported to a moderator.": "",
64
- "Thread Reply": "",
65
- "Unblock User": "",
66
- "Unknown User": "",
67
- "Unmute User": "",
68
- "Unpin from Conversation": "",
69
- "Unread Messages": "",
70
- "Video": "",
62
+ "Slow mode ON": "Modo lento ACTIVADO",
63
+ "The message has been reported to a moderator.": "El mensaje ha sido reportado a un moderador.",
64
+ "Thread Reply": "Respuesta de hilo",
65
+ "Unblock User": "Desbloquear usuario",
66
+ "Unknown User": "Usuario desconocido",
67
+ "Unmute User": "Activar sonido del usuario",
68
+ "Unpin from Conversation": "Desmarcar de la conversación",
69
+ "Unread Messages": "Mensajes no leídos",
70
+ "Video": "Video",
71
71
  "You": "Tú",
72
- "You can't send messages in this channel": "",
73
- "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
74
- "{{ index }} of {{ photoLength }}": "",
75
- "{{ replyCount }} Replies": "",
76
- "{{ replyCount }} Thread Replies": "",
77
- "{{ user }} is typing": "",
78
- "🏙 Attachment...": ""
72
+ "You can't send messages in this channel": "No puedes enviar mensajes en este canal",
73
+ "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} y {{ nonSelfUserLength }} más están escribiendo",
74
+ "{{ index }} of {{ photoLength }}": "{{ index }} de {{ photoLength }}",
75
+ "{{ replyCount }} Replies": "{{ replyCount }} Respuestas",
76
+ "{{ replyCount }} Thread Replies": "{{ replyCount }} respuestas de hilo",
77
+ "{{ user }} is typing": "{{ user }} está escribiendo",
78
+ "🏙 Attachment...": "🏙 Adjunto..."
79
79
  }
package/src/i18n/fr.json CHANGED
@@ -1,79 +1,79 @@
1
1
  {
2
- "1 Reply": "",
3
- "1 Thread Reply": "",
4
- "Allow access to your Gallery": "",
5
- "Allow camera access in device settings": "",
6
- "Also send to channel": "",
7
- "Are you sure you want to permanently delete this message?": "",
8
- "Are you sure?": "",
9
- "Block User": "",
10
- "Cancel": "",
11
- "Cannot Flag Message": "",
12
- "Consider how your comment might make others feel and be sure to follow our Community Guidelines": "",
13
- "Copy Message": "",
14
- "Delete": "",
15
- "Delete Message": "",
16
- "Device camera is used to take photos or videos.": "",
17
- "Do you want to send a copy of this message to a moderator for further investigation?": "",
18
- "Edit Message": "",
19
- "Editing Message": "",
2
+ "1 Reply": "1 Réponse",
3
+ "1 Thread Reply": "Réponse à 1 fil",
4
+ "Allow access to your Gallery": "Autoriser l'accès à votre galerie",
5
+ "Allow camera access in device settings": "Autoriser l'accès à la caméra dans les paramètres de l'appareil",
6
+ "Also send to channel": "Envoyer également à la chaîne",
7
+ "Are you sure you want to permanently delete this message?": "Êtes-vous sûr de vouloir supprimer définitivement ce message?",
8
+ "Are you sure?": "Es-tu sûr ?",
9
+ "Block User": "Bloquer un utilisateur",
10
+ "Cancel": "Annuler",
11
+ "Cannot Flag Message": "Impossible de signaler le message",
12
+ "Consider how your comment might make others feel and be sure to follow our Community Guidelines": "Considérez comment votre commentaire pourrait faire sentir les autres et assurez-vous de suivre nos directives communautaires",
13
+ "Copy Message": "Copier le message",
14
+ "Delete": "Supprimer",
15
+ "Delete Message": "Supprimer un message",
16
+ "Device camera is used to take photos or videos.": "L'appareil photo de l'appareil est utilisé pour prendre des photos ou des vidéos.",
17
+ "Do you want to send a copy of this message to a moderator for further investigation?": "Voulez-vous envoyer une copie de ce message à un modérateur pour une enquête plus approfondie?",
18
+ "Edit Message": "Éditer un message",
19
+ "Editing Message": "Édite un message",
20
20
  "Emoji matching": "Correspondance Emoji",
21
- "Empty message...": "",
21
+ "Empty message...": "Message vide...",
22
22
  "Error loading": "Erreur lors du chargement",
23
- "Error loading channel list...": "",
23
+ "Error loading channel list...": "Erreur lors du chargement de la liste de canaux...",
24
24
  "Error loading messages for this channel...": "Erreur lors du chargement des messages de ce canal...",
25
- "Error while loading, please reload/refresh": "",
25
+ "Error while loading, please reload/refresh": "Erreur lors du chargement, veuillez recharger/rafraîchir",
26
26
  "File type not supported": "Le type de fichier n'est pas pris en charge",
27
- "Flag": "",
28
- "Flag Message": "",
29
- "Flag action failed either due to a network issue or the message is already flagged": "",
30
- "How about sending your first message to a friend?": "",
27
+ "Flag": "Signaler",
28
+ "Flag Message": "Signaler le message",
29
+ "Flag action failed either due to a network issue or the message is already flagged": "L'action de signalisation a échoué en raison d'un problème de réseau ou le message est déjà signalé.",
30
+ "How about sending your first message to a friend?": "Et si vous envoyiez votre premier message à un ami ?",
31
31
  "Instant Commands": "Commandes Instantanées",
32
- "Let's start chatting!": "",
32
+ "Let's start chatting!": "Commençons à discuter !",
33
33
  "Links are disabled": "Links are disabled",
34
- "Loading channels...": "",
35
- "Loading messages...": "",
36
- "Loading...": "",
34
+ "Loading channels...": "Chargement des canaux...",
35
+ "Loading messages...": "Chargement des messages...",
36
+ "Loading...": "Chargement...",
37
37
  "Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "Taille maximale de téléchargement de fichier atteinte. Veuillez télécharger un fichier inférieur à {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} Mo.",
38
- "Message Reactions": "",
38
+ "Message Reactions": "Réactions aux messages",
39
39
  "Message deleted": "Message supprimé",
40
- "Message flagged": "",
41
- "Mute User": "",
40
+ "Message flagged": "Message signalé",
41
+ "Mute User": "Utilisateur muet",
42
42
  "Not supported": "Non pris en charge",
43
- "Nothing yet...": "",
44
- "Ok": "",
45
- "Only visible to you": "",
46
- "Open Settings": "",
47
- "Photo": "",
48
- "Photos and Videos": "",
49
- "Pin to Conversation": "",
50
- "Pinned by": "",
51
- "Please enable access to your photos and videos so you can share them.": "",
43
+ "Nothing yet...": "Aucun message...",
44
+ "Ok": "Ok",
45
+ "Only visible to you": "Seulement visible par vous",
46
+ "Open Settings": "Ouvrir les paramètres",
47
+ "Photo": "Photo",
48
+ "Photos and Videos": "Photos et vidéos",
49
+ "Pin to Conversation": "Épingler à la conversation",
50
+ "Pinned by": "Épinglé par",
51
+ "Please enable access to your photos and videos so you can share them.": "Veuillez autoriser l'accès à vos photos et vidéos afin de pouvoir les partager.",
52
52
  "Please select a channel first": "Veuillez d'abord selectionnez un canal",
53
53
  "Reconnecting...": "Se Reconnecter...",
54
- "Reply": "",
55
- "Reply to Message": "",
56
- "Resend": "",
57
- "Search GIFs": "",
58
- "Select More Photos": "",
59
- "Send Anyway": "",
60
- "Send a message": "",
54
+ "Reply": "Répondre",
55
+ "Reply to Message": "Répondre au message",
56
+ "Resend": "Renvoyer",
57
+ "Search GIFs": "Rechercher des GIF",
58
+ "Select More Photos": "Sélectionner plus de photos",
59
+ "Send Anyway": "Envoyer quand même",
60
+ "Send a message": "Envoyer un message",
61
61
  "Sending links is not allowed in this conversation": "Sending links is not allowed in this conversation",
62
- "Slow mode ON": "",
63
- "The message has been reported to a moderator.": "",
64
- "Thread Reply": "",
65
- "Unblock User": "",
66
- "Unknown User": "",
67
- "Unmute User": "",
68
- "Unpin from Conversation": "",
69
- "Unread Messages": "",
70
- "Video": "",
62
+ "Slow mode ON": "Mode lent activé",
63
+ "The message has been reported to a moderator.": "Le message a été signalé à un modérateur.",
64
+ "Thread Reply": "Réponse à la discussion",
65
+ "Unblock User": "Débloquer Utilisateur",
66
+ "Unknown User": "Utilisateur inconnu",
67
+ "Unmute User": "Activer le son de Utilisateur",
68
+ "Unpin from Conversation": "Décrocher de la conversation",
69
+ "Unread Messages": "Messages non lus",
70
+ "Video": "Vidéo",
71
71
  "You": "Toi",
72
- "You can't send messages in this channel": "",
73
- "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "",
74
- "{{ index }} of {{ photoLength }}": "",
75
- "{{ replyCount }} Replies": "",
76
- "{{ replyCount }} Thread Replies": "",
77
- "{{ user }} is typing": "",
78
- "🏙 Attachment...": ""
72
+ "You can't send messages in this channel": "You can't send messages in this channel",
73
+ "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} et {{ nonSelfUserLength }} autres sont en train d'écrire",
74
+ "{{ index }} of {{ photoLength }}": "{{ index }} sur {{ photoLength }}",
75
+ "{{ replyCount }} Replies": "{{ replyCount }} Réponses",
76
+ "{{ replyCount }} Thread Replies": "{{replyCount}} Réponses à la discussion",
77
+ "{{ user }} is typing": "{{ user }} est en train d'écrire",
78
+ "🏙 Attachment...": "🏙 Pièce jointe..."
79
79
  }