stream-chat-react-native-core 9.6.1-beta.4 → 9.6.1-beta.7
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/KeyboardCompatibleView/KeyboardCompatibleView.js +22 -2
- package/lib/commonjs/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageComposer.js +2 -2
- package/lib/commonjs/components/MessageInput/MessageComposer.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/MessageOverlayHostLayer.js +61 -11
- package/lib/commonjs/contexts/overlayContext/MessageOverlayHostLayer.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js +22 -2
- package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
- package/lib/module/components/MessageInput/MessageComposer.js +2 -2
- package/lib/module/components/MessageInput/MessageComposer.js.map +1 -1
- package/lib/module/contexts/overlayContext/MessageOverlayHostLayer.js +61 -11
- package/lib/module/contexts/overlayContext/MessageOverlayHostLayer.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/KeyboardCompatibleView/KeyboardCompatibleView.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/MessageComposer.d.ts.map +1 -1
- package/lib/typescript/contexts/overlayContext/MessageOverlayHostLayer.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx +58 -3
- package/src/components/MessageInput/MessageComposer.tsx +2 -3
- package/src/components/MessageInput/__tests__/__snapshots__/AttachButton.test.tsx.snap +36 -36
- package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.tsx.snap +19 -19
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +6 -6
- package/src/contexts/overlayContext/MessageOverlayHostLayer.tsx +92 -12
- package/src/contexts/overlayContext/__tests__/MessageOverlayHostLayer.test.tsx +62 -6
- package/src/version.json +1 -1
|
@@ -215,7 +215,8 @@ describe('MessageOverlayHostLayer', () => {
|
|
|
215
215
|
left: MESSAGE_RECT.x,
|
|
216
216
|
position: 'absolute',
|
|
217
217
|
top: MESSAGE_RECT.y,
|
|
218
|
-
transform
|
|
218
|
+
// First transform = springed open/close position; second = scroll offset (0 here).
|
|
219
|
+
transform: [{ translateY: 38 }, { translateY: 0 }],
|
|
219
220
|
width: MESSAGE_RECT.w,
|
|
220
221
|
});
|
|
221
222
|
expect(StyleSheet.flatten(bottomSlot.props.style)).toMatchObject({
|
|
@@ -228,7 +229,7 @@ describe('MessageOverlayHostLayer', () => {
|
|
|
228
229
|
});
|
|
229
230
|
});
|
|
230
231
|
|
|
231
|
-
it('resets
|
|
232
|
+
it('keeps the hosts mounted but resets their geometry after finalizeCloseOverlay', () => {
|
|
232
233
|
const renderTree = () => (
|
|
233
234
|
<WithComponents overrides={{ MessageOverlayBackground: NoopBackground }}>
|
|
234
235
|
<MessageOverlayHostLayer />
|
|
@@ -260,18 +261,73 @@ describe('MessageOverlayHostLayer', () => {
|
|
|
260
261
|
|
|
261
262
|
rerender(renderTree());
|
|
262
263
|
|
|
264
|
+
// The hosts stay mounted (not gated on isActive) so the native teleport target is stable
|
|
265
|
+
// across opens; only their geometry resets to 0. The backdrop press target is gated.
|
|
263
266
|
expect(StyleSheet.flatten(screen.getByTestId('message-overlay-top').props.style)).toMatchObject(
|
|
264
|
-
{
|
|
265
|
-
height: 0,
|
|
266
|
-
},
|
|
267
|
+
{ height: 0 },
|
|
267
268
|
);
|
|
268
269
|
expect(
|
|
269
270
|
StyleSheet.flatten(screen.getByTestId('message-overlay-message').props.style),
|
|
270
271
|
).toMatchObject({ height: 0 });
|
|
272
|
+
expect(
|
|
273
|
+
StyleSheet.flatten(screen.getByTestId('message-overlay-bottom').props.style),
|
|
274
|
+
).toMatchObject({ height: 0 });
|
|
275
|
+
expect(screen.queryByTestId('message-overlay-backdrop')).toBeNull();
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('pins the top item, leaves the message unclipped (behind the items), and sticks the bottom item when the content overflows', () => {
|
|
279
|
+
// window height 200, insets top 10 / bottom 15, padding 8 => minY 18, maxY 177.
|
|
280
|
+
// Available height is 159; the rects below sum to 190 so scrolling kicks in.
|
|
281
|
+
const SCROLL_TOP_RECT = { h: 20, w: 90, x: 5, y: 20 };
|
|
282
|
+
const SCROLL_MESSAGE_RECT = { h: 140, w: 180, x: 10, y: 40 };
|
|
283
|
+
const SCROLL_BOTTOM_RECT = { h: 30, w: 140, x: 20, y: 180 };
|
|
284
|
+
|
|
285
|
+
const renderTree = () => (
|
|
286
|
+
<WithComponents overrides={{ MessageOverlayBackground: NoopBackground }}>
|
|
287
|
+
<MessageOverlayHostLayer />
|
|
288
|
+
</WithComponents>
|
|
289
|
+
);
|
|
290
|
+
const { rerender } = render(renderTree());
|
|
291
|
+
|
|
292
|
+
act(() => {});
|
|
293
|
+
|
|
294
|
+
act(() => {
|
|
295
|
+
setOverlayTopH(SCROLL_TOP_RECT);
|
|
296
|
+
setOverlayMessageH(SCROLL_MESSAGE_RECT);
|
|
297
|
+
setOverlayBottomH(SCROLL_BOTTOM_RECT);
|
|
298
|
+
openOverlay('message-1');
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
rerender(renderTree());
|
|
302
|
+
|
|
303
|
+
// Top item pinned to minY (18): 20 + (-2) = 18.
|
|
304
|
+
expect(StyleSheet.flatten(screen.getByTestId('message-overlay-top').props.style)).toMatchObject(
|
|
305
|
+
{
|
|
306
|
+
top: SCROLL_TOP_RECT.y,
|
|
307
|
+
transform: [{ scale: 1 }, { translateY: -2 }],
|
|
308
|
+
},
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
// Message host keeps its natural height and is NOT clipped (no overflow:hidden). It is
|
|
312
|
+
// pinned under the top item (top 40 + first translateY -2 = contentTop 38); the second
|
|
313
|
+
// translateY is the scroll offset (0 at rest). It renders behind the opaque items.
|
|
314
|
+
const messageStyle = StyleSheet.flatten(
|
|
315
|
+
screen.getByTestId('message-overlay-message').props.style,
|
|
316
|
+
);
|
|
317
|
+
expect(messageStyle).toMatchObject({
|
|
318
|
+
height: SCROLL_MESSAGE_RECT.h,
|
|
319
|
+
left: SCROLL_MESSAGE_RECT.x,
|
|
320
|
+
top: SCROLL_MESSAGE_RECT.y,
|
|
321
|
+
transform: [{ translateY: -2 }, { translateY: 0 }],
|
|
322
|
+
});
|
|
323
|
+
expect(messageStyle.overflow).toBeUndefined();
|
|
324
|
+
|
|
325
|
+
// Bottom item sticks to the bottom of the usable area (maxY - bottomH) = 147: 180 + (-33).
|
|
271
326
|
expect(
|
|
272
327
|
StyleSheet.flatten(screen.getByTestId('message-overlay-bottom').props.style),
|
|
273
328
|
).toMatchObject({
|
|
274
|
-
|
|
329
|
+
top: SCROLL_BOTTOM_RECT.y,
|
|
330
|
+
transform: [{ scale: 1 }, { translateY: -33 }],
|
|
275
331
|
});
|
|
276
332
|
});
|
|
277
333
|
|
package/src/version.json
CHANGED