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.
Files changed (26) hide show
  1. package/lib/commonjs/components/KeyboardCompatibleView/KeyboardCompatibleView.js +22 -2
  2. package/lib/commonjs/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
  3. package/lib/commonjs/components/MessageInput/MessageComposer.js +2 -2
  4. package/lib/commonjs/components/MessageInput/MessageComposer.js.map +1 -1
  5. package/lib/commonjs/contexts/overlayContext/MessageOverlayHostLayer.js +61 -11
  6. package/lib/commonjs/contexts/overlayContext/MessageOverlayHostLayer.js.map +1 -1
  7. package/lib/commonjs/version.json +1 -1
  8. package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js +22 -2
  9. package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
  10. package/lib/module/components/MessageInput/MessageComposer.js +2 -2
  11. package/lib/module/components/MessageInput/MessageComposer.js.map +1 -1
  12. package/lib/module/contexts/overlayContext/MessageOverlayHostLayer.js +61 -11
  13. package/lib/module/contexts/overlayContext/MessageOverlayHostLayer.js.map +1 -1
  14. package/lib/module/version.json +1 -1
  15. package/lib/typescript/components/KeyboardCompatibleView/KeyboardCompatibleView.d.ts.map +1 -1
  16. package/lib/typescript/components/MessageInput/MessageComposer.d.ts.map +1 -1
  17. package/lib/typescript/contexts/overlayContext/MessageOverlayHostLayer.d.ts.map +1 -1
  18. package/package.json +1 -1
  19. package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx +58 -3
  20. package/src/components/MessageInput/MessageComposer.tsx +2 -3
  21. package/src/components/MessageInput/__tests__/__snapshots__/AttachButton.test.tsx.snap +36 -36
  22. package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.tsx.snap +19 -19
  23. package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +6 -6
  24. package/src/contexts/overlayContext/MessageOverlayHostLayer.tsx +92 -12
  25. package/src/contexts/overlayContext/__tests__/MessageOverlayHostLayer.test.tsx +62 -6
  26. 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: [{ translateY: 38 }],
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 host geometry after finalizeCloseOverlay clears the registered rects', () => {
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
- height: 0,
329
+ top: SCROLL_BOTTOM_RECT.y,
330
+ transform: [{ scale: 1 }, { translateY: -33 }],
275
331
  });
276
332
  });
277
333
 
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "9.6.1-beta.4"
2
+ "version": "9.6.1-beta.7"
3
3
  }