stream-chat-react-native-core 9.4.0-beta.1 → 9.4.0-beta.2
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/Message/Message.js +53 -16
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js +6 -84
- package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js.map +1 -1
- package/lib/commonjs/components/MessageMenu/MessageActionList.js +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Message/Message.js +53 -16
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageItemView.js +6 -84
- package/lib/module/components/Message/MessageItemView/MessageItemView.js.map +1 -1
- package/lib/module/components/MessageMenu/MessageActionList.js +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/MessageItemView.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Message/Message.tsx +68 -22
- package/src/components/Message/MessageItemView/MessageItemView.tsx +5 -116
- package/src/components/Message/MessageItemView/__tests__/MessageItemView.test.tsx +22 -13
- package/src/components/MessageMenu/MessageActionList.tsx +1 -1
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +5 -5
- package/src/version.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
-
import { Dimensions, StyleSheet, View
|
|
2
|
+
import { Dimensions, StyleSheet, View } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import { SwipableMessageWrapper } from './MessageBubble';
|
|
5
5
|
|
|
@@ -22,25 +22,7 @@ import { FileTypes } from '../../../types/types';
|
|
|
22
22
|
import { checkMessageEquality, checkQuotedMessageEquality } from '../../../utils/utils';
|
|
23
23
|
import { useMessageData } from '../hooks/useMessageData';
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const useStyles = ({
|
|
28
|
-
alignment,
|
|
29
|
-
isVeryLastMessage,
|
|
30
|
-
messageGroupedSingle,
|
|
31
|
-
messageGroupedBottom,
|
|
32
|
-
messageGroupedTop,
|
|
33
|
-
messageGroupedMiddle,
|
|
34
|
-
enableMessageGroupingByUser,
|
|
35
|
-
}: {
|
|
36
|
-
alignment: Alignment;
|
|
37
|
-
isVeryLastMessage: boolean;
|
|
38
|
-
messageGroupedSingle: boolean;
|
|
39
|
-
messageGroupedBottom: boolean;
|
|
40
|
-
messageGroupedTop: boolean;
|
|
41
|
-
messageGroupedMiddle: boolean;
|
|
42
|
-
enableMessageGroupingByUser: boolean;
|
|
43
|
-
}) => {
|
|
25
|
+
const useStyles = ({ alignment }: { alignment: Alignment }) => {
|
|
44
26
|
const {
|
|
45
27
|
theme: {
|
|
46
28
|
messageItemView: {
|
|
@@ -53,24 +35,11 @@ const useStyles = ({
|
|
|
53
35
|
repliesContainer,
|
|
54
36
|
leftAlignItems,
|
|
55
37
|
rightAlignItems,
|
|
56
|
-
messageGroupedSingleStyles,
|
|
57
|
-
messageGroupedBottomStyles,
|
|
58
|
-
messageGroupedTopStyles,
|
|
59
|
-
messageGroupedMiddleStyles,
|
|
60
|
-
lastMessageContainer,
|
|
61
38
|
},
|
|
62
39
|
},
|
|
63
40
|
} = useTheme();
|
|
64
41
|
|
|
65
|
-
|
|
66
|
-
if (messageGroupedSingle) return 'single';
|
|
67
|
-
if (messageGroupedTop) return 'top';
|
|
68
|
-
if (messageGroupedMiddle) return 'middle';
|
|
69
|
-
if (messageGroupedBottom) return 'bottom';
|
|
70
|
-
return undefined;
|
|
71
|
-
}, [messageGroupedSingle, messageGroupedTop, messageGroupedMiddle, messageGroupedBottom]);
|
|
72
|
-
|
|
73
|
-
const styles = useMemo(
|
|
42
|
+
return useMemo(
|
|
74
43
|
() =>
|
|
75
44
|
StyleSheet.create({
|
|
76
45
|
baseContainer: {
|
|
@@ -129,73 +98,6 @@ const useStyles = ({
|
|
|
129
98
|
rightAlignItems,
|
|
130
99
|
],
|
|
131
100
|
);
|
|
132
|
-
|
|
133
|
-
const groupStylesMap = useMemo(() => {
|
|
134
|
-
return {
|
|
135
|
-
single: {
|
|
136
|
-
paddingVertical: primitives.spacingXs,
|
|
137
|
-
...messageGroupedSingleStyles,
|
|
138
|
-
},
|
|
139
|
-
top: {
|
|
140
|
-
paddingTop: primitives.spacingXs,
|
|
141
|
-
paddingBottom: primitives.spacingXxs,
|
|
142
|
-
...messageGroupedTopStyles,
|
|
143
|
-
},
|
|
144
|
-
middle: {
|
|
145
|
-
paddingBottom: primitives.spacingXxs,
|
|
146
|
-
...messageGroupedMiddleStyles,
|
|
147
|
-
},
|
|
148
|
-
bottom: {
|
|
149
|
-
paddingBottom: primitives.spacingXs,
|
|
150
|
-
...messageGroupedBottomStyles,
|
|
151
|
-
},
|
|
152
|
-
};
|
|
153
|
-
}, [
|
|
154
|
-
messageGroupedBottomStyles,
|
|
155
|
-
messageGroupedMiddleStyles,
|
|
156
|
-
messageGroupedSingleStyles,
|
|
157
|
-
messageGroupedTopStyles,
|
|
158
|
-
]);
|
|
159
|
-
|
|
160
|
-
const containerStyle = useMemo(() => {
|
|
161
|
-
let results: ViewStyle = styles.baseContainer;
|
|
162
|
-
|
|
163
|
-
if (groupType) {
|
|
164
|
-
results = {
|
|
165
|
-
...results,
|
|
166
|
-
...groupStylesMap[groupType],
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (isVeryLastMessage && enableMessageGroupingByUser) {
|
|
171
|
-
results = {
|
|
172
|
-
...results,
|
|
173
|
-
marginBottom: primitives.spacingSm,
|
|
174
|
-
...lastMessageContainer,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return results;
|
|
179
|
-
}, [
|
|
180
|
-
styles.baseContainer,
|
|
181
|
-
groupStylesMap,
|
|
182
|
-
groupType,
|
|
183
|
-
isVeryLastMessage,
|
|
184
|
-
enableMessageGroupingByUser,
|
|
185
|
-
lastMessageContainer,
|
|
186
|
-
]);
|
|
187
|
-
|
|
188
|
-
return {
|
|
189
|
-
container: containerStyle,
|
|
190
|
-
bubbleContentContainer: styles.bubbleContentContainer,
|
|
191
|
-
bubbleErrorContainer: styles.bubbleErrorContainer,
|
|
192
|
-
bubbleReactionListTopContainer: styles.bubbleReactionListTopContainer,
|
|
193
|
-
bubbleWrapper: styles.bubbleWrapper,
|
|
194
|
-
contentContainer: styles.contentContainer,
|
|
195
|
-
repliesContainer: styles.repliesContainer,
|
|
196
|
-
leftAlignItems: styles.leftAlignItems,
|
|
197
|
-
rightAlignItems: styles.rightAlignItems,
|
|
198
|
-
};
|
|
199
101
|
};
|
|
200
102
|
|
|
201
103
|
export type MessageItemViewPropsWithContext = Pick<
|
|
@@ -232,7 +134,6 @@ const MessageItemViewWithContext = (props: MessageItemViewPropsWithContext) => {
|
|
|
232
134
|
channel,
|
|
233
135
|
contextMenuAnchorRef,
|
|
234
136
|
customMessageSwipeAction,
|
|
235
|
-
enableMessageGroupingByUser,
|
|
236
137
|
enableSwipeToReply,
|
|
237
138
|
groupStyles,
|
|
238
139
|
hasAttachmentActions,
|
|
@@ -273,22 +174,10 @@ const MessageItemViewWithContext = (props: MessageItemViewPropsWithContext) => {
|
|
|
273
174
|
isMessageReceivedOrErrorType,
|
|
274
175
|
isMessageTypeDeleted,
|
|
275
176
|
isVeryLastMessage,
|
|
276
|
-
messageGroupedSingle,
|
|
277
|
-
messageGroupedBottom,
|
|
278
|
-
messageGroupedTop,
|
|
279
177
|
messageGroupedSingleOrBottom,
|
|
280
|
-
messageGroupedMiddle,
|
|
281
178
|
} = useMessageData({});
|
|
282
179
|
|
|
283
|
-
const styles = useStyles({
|
|
284
|
-
alignment,
|
|
285
|
-
isVeryLastMessage,
|
|
286
|
-
messageGroupedSingle,
|
|
287
|
-
messageGroupedBottom,
|
|
288
|
-
messageGroupedTop,
|
|
289
|
-
messageGroupedMiddle,
|
|
290
|
-
enableMessageGroupingByUser,
|
|
291
|
-
});
|
|
180
|
+
const styles = useStyles({ alignment });
|
|
292
181
|
|
|
293
182
|
const groupStyle = `${alignment}_${groupStyles?.[0]?.toLowerCase?.()}`;
|
|
294
183
|
const hasVisibleQuotedReply = !!message.quoted_message && !hasAttachmentActions;
|
|
@@ -324,7 +213,7 @@ const MessageItemViewWithContext = (props: MessageItemViewPropsWithContext) => {
|
|
|
324
213
|
});
|
|
325
214
|
|
|
326
215
|
const itemViewContent = (
|
|
327
|
-
<View pointerEvents='box-none' style={styles.
|
|
216
|
+
<View pointerEvents='box-none' style={styles.baseContainer} testID='message-item-view-wrapper'>
|
|
328
217
|
{alignment === 'left' ? <MessageAuthor /> : null}
|
|
329
218
|
{isMessageTypeDeleted ? (
|
|
330
219
|
<MessageDeleted date={message.created_at} groupStyle={groupStyle} />
|
|
@@ -223,38 +223,47 @@ describe('MessageItemView', () => {
|
|
|
223
223
|
});
|
|
224
224
|
});
|
|
225
225
|
|
|
226
|
-
it('
|
|
226
|
+
it('keeps message-item-view-wrapper free of group-positional padding', async () => {
|
|
227
227
|
const user = generateUser();
|
|
228
228
|
const message = generateMessage({ user });
|
|
229
229
|
|
|
230
230
|
renderMessage({ groupStyles: ['top'], message });
|
|
231
231
|
|
|
232
232
|
await waitFor(() => {
|
|
233
|
-
|
|
233
|
+
const innerStyle = screen.getByTestId('message-item-view-wrapper').props.style;
|
|
234
|
+
expect(innerStyle).toMatchObject({
|
|
234
235
|
alignItems: 'flex-end',
|
|
235
236
|
gap: 8,
|
|
236
237
|
flexDirection: 'row',
|
|
237
|
-
paddingTop: 8,
|
|
238
|
-
paddingBottom: 4,
|
|
239
238
|
});
|
|
239
|
+
expect(innerStyle.paddingTop).toBeUndefined();
|
|
240
|
+
expect(innerStyle.paddingBottom).toBeUndefined();
|
|
240
241
|
});
|
|
241
242
|
});
|
|
242
243
|
|
|
243
|
-
it('
|
|
244
|
+
it('hoists the per-group padding delta onto message-wrapper for top messages', async () => {
|
|
244
245
|
const user = generateUser();
|
|
245
246
|
const message = generateMessage({ user });
|
|
246
247
|
|
|
247
|
-
renderMessage({ message });
|
|
248
|
+
renderMessage({ groupStyles: ['top'], message });
|
|
248
249
|
|
|
249
250
|
await waitFor(() => {
|
|
250
|
-
|
|
251
|
+
expect(screen.getByTestId('message-wrapper').props.style).toEqual(
|
|
252
|
+
expect.arrayContaining([expect.objectContaining({ paddingTop: 8 })]),
|
|
253
|
+
);
|
|
254
|
+
});
|
|
255
|
+
});
|
|
251
256
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
257
|
+
it('hoists the per-group padding delta onto message-wrapper for bottom messages', async () => {
|
|
258
|
+
const user = generateUser();
|
|
259
|
+
const message = generateMessage({ user });
|
|
260
|
+
|
|
261
|
+
renderMessage({ message });
|
|
262
|
+
|
|
263
|
+
await waitFor(() => {
|
|
264
|
+
expect(screen.getByTestId('message-wrapper').props.style).toEqual(
|
|
265
|
+
expect.arrayContaining([expect.objectContaining({ paddingBottom: 8 })]),
|
|
266
|
+
);
|
|
258
267
|
});
|
|
259
268
|
});
|
|
260
269
|
|
|
@@ -337,6 +337,7 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
337
337
|
],
|
|
338
338
|
{
|
|
339
339
|
"paddingHorizontal": 16,
|
|
340
|
+
"paddingVertical": 8,
|
|
340
341
|
},
|
|
341
342
|
]
|
|
342
343
|
}
|
|
@@ -370,7 +371,6 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
370
371
|
"alignItems": "flex-end",
|
|
371
372
|
"flexDirection": "row",
|
|
372
373
|
"gap": 8,
|
|
373
|
-
"paddingVertical": 8,
|
|
374
374
|
"width": "100%",
|
|
375
375
|
}
|
|
376
376
|
}
|
|
@@ -671,6 +671,7 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
671
671
|
],
|
|
672
672
|
{
|
|
673
673
|
"paddingHorizontal": 16,
|
|
674
|
+
"paddingVertical": 8,
|
|
674
675
|
},
|
|
675
676
|
]
|
|
676
677
|
}
|
|
@@ -704,7 +705,6 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
704
705
|
"alignItems": "flex-end",
|
|
705
706
|
"flexDirection": "row",
|
|
706
707
|
"gap": 8,
|
|
707
|
-
"paddingVertical": 8,
|
|
708
708
|
"width": "100%",
|
|
709
709
|
}
|
|
710
710
|
}
|
|
@@ -1039,6 +1039,7 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
1039
1039
|
],
|
|
1040
1040
|
{
|
|
1041
1041
|
"paddingHorizontal": 16,
|
|
1042
|
+
"paddingVertical": 8,
|
|
1042
1043
|
},
|
|
1043
1044
|
]
|
|
1044
1045
|
}
|
|
@@ -1072,7 +1073,6 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
1072
1073
|
"alignItems": "flex-end",
|
|
1073
1074
|
"flexDirection": "row",
|
|
1074
1075
|
"gap": 8,
|
|
1075
|
-
"paddingVertical": 8,
|
|
1076
1076
|
"width": "100%",
|
|
1077
1077
|
}
|
|
1078
1078
|
}
|
|
@@ -1365,7 +1365,9 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
1365
1365
|
[
|
|
1366
1366
|
undefined,
|
|
1367
1367
|
{
|
|
1368
|
+
"marginBottom": 12,
|
|
1368
1369
|
"paddingHorizontal": 16,
|
|
1370
|
+
"paddingVertical": 8,
|
|
1369
1371
|
},
|
|
1370
1372
|
]
|
|
1371
1373
|
}
|
|
@@ -1399,8 +1401,6 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
1399
1401
|
"alignItems": "flex-end",
|
|
1400
1402
|
"flexDirection": "row",
|
|
1401
1403
|
"gap": 8,
|
|
1402
|
-
"marginBottom": 12,
|
|
1403
|
-
"paddingVertical": 8,
|
|
1404
1404
|
"width": "100%",
|
|
1405
1405
|
}
|
|
1406
1406
|
}
|
package/src/version.json
CHANGED