stream-chat-react-native-core 9.2.2-beta.1 → 9.2.2-beta.3

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 (35) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +18 -2
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +2 -0
  4. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  5. package/lib/commonjs/components/MessageList/MessageFlashList.js +47 -36
  6. package/lib/commonjs/components/MessageList/MessageFlashList.js.map +1 -1
  7. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  8. package/lib/commonjs/state-store/audio-player.js +9 -16
  9. package/lib/commonjs/state-store/audio-player.js.map +1 -1
  10. package/lib/commonjs/version.json +1 -1
  11. package/lib/module/components/Channel/Channel.js +18 -2
  12. package/lib/module/components/Channel/Channel.js.map +1 -1
  13. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +2 -0
  14. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  15. package/lib/module/components/MessageList/MessageFlashList.js +47 -36
  16. package/lib/module/components/MessageList/MessageFlashList.js.map +1 -1
  17. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  18. package/lib/module/state-store/audio-player.js +9 -16
  19. package/lib/module/state-store/audio-player.js.map +1 -1
  20. package/lib/module/version.json +1 -1
  21. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  22. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  23. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts.map +1 -1
  24. package/lib/typescript/components/MessageList/MessageFlashList.d.ts +1 -1
  25. package/lib/typescript/components/MessageList/MessageFlashList.d.ts.map +1 -1
  26. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +6 -0
  27. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  28. package/lib/typescript/state-store/audio-player.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/components/Channel/Channel.tsx +21 -6
  31. package/src/components/Channel/hooks/useCreateChannelContext.ts +2 -0
  32. package/src/components/MessageList/MessageFlashList.tsx +31 -25
  33. package/src/contexts/channelContext/ChannelContext.tsx +6 -0
  34. package/src/state-store/audio-player.ts +3 -10
  35. package/src/version.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateChannelContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/Channel/hooks/useCreateChannelContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,eAAO,MAAM,uBAAuB,GAAI,4gBA8BrC,mBAAmB,wBA+DrB,CAAC"}
1
+ {"version":3,"file":"useCreateChannelContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/Channel/hooks/useCreateChannelContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,eAAO,MAAM,uBAAuB,GAAI,yiBA+BrC,mBAAmB,wBAgErB,CAAC"}
@@ -10,7 +10,7 @@ import { MessagesContextValue } from '../../contexts/messagesContext/MessagesCon
10
10
  import { OwnCapabilitiesContextValue } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';
11
11
  import { PaginatedMessageListContextValue } from '../../contexts/paginatedMessageListContext/PaginatedMessageListContext';
12
12
  import { ThreadContextValue } from '../../contexts/threadContext/ThreadContext';
13
- type MessageFlashListPropsWithContext = Pick<AttachmentPickerContextValue, 'closePicker' | 'attachmentPickerStore'> & Pick<OwnCapabilitiesContextValue, 'readEvents'> & Pick<ChannelContextValue, 'channel' | 'channelUnreadStateStore' | 'disabled' | 'hideStickyDateHeader' | 'highlightedMessageId' | 'loadChannelAroundMessage' | 'loading' | 'markRead' | 'reloadChannel' | 'scrollToFirstUnreadThreshold' | 'setChannelUnreadState' | 'setTargetedMessage' | 'targetedMessage' | 'threadList' | 'maximumMessageLimit'> & Pick<ChatContextValue, 'client'> & Pick<MessageInputContextValue, 'messageInputFloating' | 'messageInputHeightStore'> & Pick<PaginatedMessageListContextValue, 'loadMore' | 'loadMoreRecent'> & Pick<MessagesContextValue, 'disableTypingIndicator' | 'FlatList' | 'myMessageTheme' | 'shouldShowUnreadUnderlay'> & Pick<ThreadContextValue, 'loadMoreRecentThread' | 'loadMoreThread' | 'thread' | 'threadInstance'> & {
13
+ type MessageFlashListPropsWithContext = Pick<AttachmentPickerContextValue, 'closePicker' | 'attachmentPickerStore'> & Pick<OwnCapabilitiesContextValue, 'readEvents'> & Pick<ChannelContextValue, 'channel' | 'channelUnreadStateStore' | 'disabled' | 'hideStickyDateHeader' | 'highlightedMessageId' | 'loadChannelAroundMessage' | 'loading' | 'markRead' | 'reloadChannel' | 'scrollToFirstUnreadThreshold' | 'setChannelUnreadState' | 'setTargetedMessage' | 'hasPendingInitialTargetLoad' | 'targetedMessage' | 'threadList' | 'maximumMessageLimit'> & Pick<ChatContextValue, 'client'> & Pick<MessageInputContextValue, 'messageInputFloating' | 'messageInputHeightStore'> & Pick<PaginatedMessageListContextValue, 'loadMore' | 'loadMoreRecent'> & Pick<MessagesContextValue, 'disableTypingIndicator' | 'FlatList' | 'myMessageTheme' | 'shouldShowUnreadUnderlay'> & Pick<ThreadContextValue, 'loadMoreRecentThread' | 'loadMoreThread' | 'thread' | 'threadInstance'> & {
14
14
  /**
15
15
  * Besides existing (default) UX behavior of underlying FlatList of MessageList component, if you want
16
16
  * to attach some additional props to underlying FlatList, you can add it to following prop.
@@ -1 +1 @@
1
- {"version":3,"file":"MessageFlashList.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/MessageFlashList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+E,MAAM,OAAO,CAAC;AACpG,OAAO,EAEL,eAAe,EAKhB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAkB,YAAY,EAAmB,MAAM,aAAa,CAAC;AAUjF,OAAO,EACL,4BAA4B,EAE7B,MAAM,gEAAgE,CAAC;AACxE,OAAO,EACL,mBAAmB,EAEpB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wCAAwC,CAAC;AAE1F,OAAO,EACL,wBAAwB,EAEzB,MAAM,wDAAwD,CAAC;AAKhE,OAAO,EACL,oBAAoB,EAErB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,2BAA2B,EAE5B,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,gCAAgC,EAEjC,MAAM,wEAAwE,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAoB,MAAM,4CAA4C,CAAC;AA6DlG,KAAK,gCAAgC,GAAG,IAAI,CAC1C,4BAA4B,EAC5B,aAAa,GAAG,uBAAuB,CACxC,GACC,IAAI,CAAC,2BAA2B,EAAE,YAAY,CAAC,GAC/C,IAAI,CACF,mBAAmB,EACjB,SAAS,GACT,yBAAyB,GACzB,UAAU,GACV,sBAAsB,GACtB,sBAAsB,GACtB,0BAA0B,GAC1B,SAAS,GACT,UAAU,GACV,eAAe,GACf,8BAA8B,GAC9B,uBAAuB,GACvB,oBAAoB,GACpB,iBAAiB,GACjB,YAAY,GACZ,qBAAqB,CACxB,GACD,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAChC,IAAI,CAAC,wBAAwB,EAAE,sBAAsB,GAAG,yBAAyB,CAAC,GAClF,IAAI,CAAC,gCAAgC,EAAE,UAAU,GAAG,gBAAgB,CAAC,GACrE,IAAI,CACF,oBAAoB,EACpB,wBAAwB,GAAG,UAAU,GAAG,gBAAgB,GAAG,0BAA0B,CACtF,GACD,IAAI,CACF,kBAAkB,EAClB,sBAAsB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,CACxE,GAAG;IACF;;;;;;;;;;;;;OAaG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACtC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACtC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACjE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAClE;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAo8BJ,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,sBAwE5D,CAAC"}
1
+ {"version":3,"file":"MessageFlashList.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/MessageFlashList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+E,MAAM,OAAO,CAAC;AACpG,OAAO,EAEL,eAAe,EAKhB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAkB,YAAY,EAAmB,MAAM,aAAa,CAAC;AAUjF,OAAO,EACL,4BAA4B,EAE7B,MAAM,gEAAgE,CAAC;AACxE,OAAO,EACL,mBAAmB,EAEpB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wCAAwC,CAAC;AAE1F,OAAO,EACL,wBAAwB,EAEzB,MAAM,wDAAwD,CAAC;AAKhE,OAAO,EACL,oBAAoB,EAErB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,2BAA2B,EAE5B,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,gCAAgC,EAEjC,MAAM,wEAAwE,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAoB,MAAM,4CAA4C,CAAC;AA6DlG,KAAK,gCAAgC,GAAG,IAAI,CAC1C,4BAA4B,EAC5B,aAAa,GAAG,uBAAuB,CACxC,GACC,IAAI,CAAC,2BAA2B,EAAE,YAAY,CAAC,GAC/C,IAAI,CACF,mBAAmB,EACjB,SAAS,GACT,yBAAyB,GACzB,UAAU,GACV,sBAAsB,GACtB,sBAAsB,GACtB,0BAA0B,GAC1B,SAAS,GACT,UAAU,GACV,eAAe,GACf,8BAA8B,GAC9B,uBAAuB,GACvB,oBAAoB,GACpB,6BAA6B,GAC7B,iBAAiB,GACjB,YAAY,GACZ,qBAAqB,CACxB,GACD,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAChC,IAAI,CAAC,wBAAwB,EAAE,sBAAsB,GAAG,yBAAyB,CAAC,GAClF,IAAI,CAAC,gCAAgC,EAAE,UAAU,GAAG,gBAAgB,CAAC,GACrE,IAAI,CACF,oBAAoB,EACpB,wBAAwB,GAAG,UAAU,GAAG,gBAAgB,GAAG,0BAA0B,CACtF,GACD,IAAI,CACF,kBAAkB,EAClB,sBAAsB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,CACxE,GAAG;IACF;;;;;;;;;;;;;OAaG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACtC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACtC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACjE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAClE;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAu8BJ,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,sBA0E5D,CAAC"}
@@ -93,6 +93,12 @@ export type ChannelContextValue = {
93
93
  setChannelUnreadState: (data: ChannelUnreadStateStoreType['channelUnreadState']) => void;
94
94
  setLastRead: React.Dispatch<React.SetStateAction<Date | undefined>>;
95
95
  setTargetedMessage: (messageId?: string) => void;
96
+ /**
97
+ * Returns true when Channel is about to load an initial targeted message.
98
+ *
99
+ * @internal
100
+ */
101
+ hasPendingInitialTargetLoad?: () => boolean;
96
102
  /**
97
103
  * Abort controller for cancelling async requests made for uploading images/files
98
104
  * Its a map of filename and AbortController
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelContext.d.ts","sourceRoot":"","sources":["../../../../src/contexts/channelContext/ChannelContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChannelContext.d.ts","sourceRoot":"","sources":["../../../../src/contexts/channelContext/ChannelContext.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"audio-player.d.ts","sourceRoot":"","sources":["../../../src/state-store/audio-player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAyD,eAAe,EAAE,MAAM,WAAW,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAE7F,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,KAAK,IAAI,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAmBF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,qBAAa,WAAW;IACtB,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACpC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAQ;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAC,CAA0B;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,kCAAkC,CAAC,CAAS;IAEpD;;;OAGG;IACH,OAAO,CAAC,qBAAqB,CAAC,CAAU;gBAE5B,OAAO,EAAE,kBAAkB;IAgBvC,UAAU,CAAC,OAAO,CAAC,EAAE,uBAAuB;IAI5C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,uBAAuB;IAa/B,UAAU,GAAU,oBAAoB;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,mBA0DnF;IAEF,OAAO,CAAC,2CAA2C,CAOjD;IAGF,OAAO,CAAC,sBAAsB,CAgC5B;IAGF,IAAI,SAAS,IAqDY,OAAO,CAnD/B;IAED,IAAI,QAAQ,IA6BW,MAAM,CA3B5B;IAED,IAAI,QAAQ,IA+BW,MAAM,CA7B5B;IAED,IAAI,QAAQ,IAkCW,MAAM,CAhC5B;IAED,IAAI,aAAa,aAEhB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,EAAE,WAEL;IAGD,IAAI,IAAI,CAAC,IAAI,EAAE,eAAe,EAE7B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAI5B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,EAI/B;IAGK,kBAAkB;IAqBxB,IAAI;IAgDJ,KAAK;IAoCL,MAAM;IAQA,IAAI,CAAC,iBAAiB,EAAE,MAAM;IAsC9B,IAAI;IAMV,QAAQ;CA8BT"}
1
+ {"version":3,"file":"audio-player.d.ts","sourceRoot":"","sources":["../../../src/state-store/audio-player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAyD,eAAe,EAAE,MAAM,WAAW,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAE7F,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,KAAK,IAAI,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAmBF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,qBAAa,WAAW;IACtB,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACpC,SAAS,EAAE,eAAe,GAAG,IAAI,CAAQ;IACzC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAC,CAA0B;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,kCAAkC,CAAC,CAAS;IAEpD;;;OAGG;IACH,OAAO,CAAC,qBAAqB,CAAC,CAAU;gBAE5B,OAAO,EAAE,kBAAkB;IAgBvC,UAAU,CAAC,OAAO,CAAC,EAAE,uBAAuB;IAI5C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,uBAAuB;IAa/B,UAAU,GAAU,oBAAoB;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,mBA0DnF;IAEF,OAAO,CAAC,2CAA2C,CAOjD;IAGF,OAAO,CAAC,sBAAsB,CAgC5B;IAGF,IAAI,SAAS,IAqDY,OAAO,CAnD/B;IAED,IAAI,QAAQ,IA6BW,MAAM,CA3B5B;IAED,IAAI,QAAQ,IA+BW,MAAM,CA7B5B;IAED,IAAI,QAAQ,IAkCW,MAAM,CAhC5B;IAED,IAAI,aAAa,aAEhB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,EAAE,WAEL;IAGD,IAAI,IAAI,CAAC,IAAI,EAAE,eAAe,EAE7B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAI5B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,EAI/B;IAGK,kBAAkB;IAqBxB,IAAI;IAgDJ,KAAK;IAoCL,MAAM;IAQA,IAAI,CAAC,iBAAiB,EAAE,MAAM;IA+B9B,IAAI;IAMV,QAAQ;CA8BT"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "9.2.2-beta.1",
4
+ "version": "9.2.2-beta.3",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -567,6 +567,18 @@ const ChannelWithContext = (props: PropsWithChildren<ChannelPropsWithContext>) =
567
567
  channel,
568
568
  });
569
569
 
570
+ const shouldLoadInitialChannelAtFirstUnreadMessage = useStableCallback((unreadCount?: number) => {
571
+ if (messageId || !initialScrollToFirstUnreadMessage || !client.user) {
572
+ return false;
573
+ }
574
+
575
+ return (unreadCount ?? channel.countUnread()) > scrollToFirstUnreadThreshold;
576
+ });
577
+
578
+ const hasPendingInitialTargetLoad = useStableCallback(() => {
579
+ return !!messageId || shouldLoadInitialChannelAtFirstUnreadMessage();
580
+ });
581
+
570
582
  const { setMessages: copyMessagesStateFromChannel, viewabilityChangedCallback } =
571
583
  usePrunableMessageList({ maximumMessageLimit, setMessages: rawCopyMessagesStateFromChannel });
572
584
 
@@ -693,6 +705,7 @@ const ChannelWithContext = (props: PropsWithChildren<ChannelPropsWithContext>) =
693
705
  const initChannel = async () => {
694
706
  setLastRead(new Date());
695
707
  const unreadCount = channel.countUnread();
708
+ const shouldLoadAtFirstUnread = shouldLoadInitialChannelAtFirstUnreadMessage(unreadCount);
696
709
  if (!channel || !shouldSyncChannel) {
697
710
  return;
698
711
  }
@@ -722,13 +735,14 @@ const ChannelWithContext = (props: PropsWithChildren<ChannelPropsWithContext>) =
722
735
 
723
736
  if (messageId) {
724
737
  await loadChannelAroundMessage({ messageId, setTargetedMessage });
725
- } else if (
726
- initialScrollToFirstUnreadMessage &&
727
- client.user &&
728
- unreadCount > scrollToFirstUnreadThreshold
729
- ) {
738
+ } else if (shouldLoadAtFirstUnread) {
739
+ const clientUserId = client.user?.id;
740
+ if (!clientUserId) {
741
+ return;
742
+ }
743
+
730
744
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
731
- const { user, ...ownReadState } = channel.state.read[client.user.id];
745
+ const { user, ...ownReadState } = channel.state.read[clientUserId];
732
746
 
733
747
  await loadChannelAtFirstUnreadMessage({
734
748
  channelUnreadState: ownReadState,
@@ -1578,6 +1592,7 @@ const ChannelWithContext = (props: PropsWithChildren<ChannelPropsWithContext>) =
1578
1592
  setChannelUnreadState,
1579
1593
  setLastRead,
1580
1594
  setTargetedMessage,
1595
+ hasPendingInitialTargetLoad,
1581
1596
  targetedMessage,
1582
1597
  threadList,
1583
1598
  uploadAbortControllerRef,
@@ -27,6 +27,7 @@ export const useCreateChannelContext = ({
27
27
  setChannelUnreadState,
28
28
  setLastRead,
29
29
  setTargetedMessage,
30
+ hasPendingInitialTargetLoad,
30
31
  targetedMessage,
31
32
  threadList,
32
33
  uploadAbortControllerRef,
@@ -69,6 +70,7 @@ export const useCreateChannelContext = ({
69
70
  setChannelUnreadState,
70
71
  setLastRead,
71
72
  setTargetedMessage,
73
+ hasPendingInitialTargetLoad,
72
74
  targetedMessage,
73
75
  threadList,
74
76
  uploadAbortControllerRef,
@@ -132,6 +132,7 @@ type MessageFlashListPropsWithContext = Pick<
132
132
  | 'scrollToFirstUnreadThreshold'
133
133
  | 'setChannelUnreadState'
134
134
  | 'setTargetedMessage'
135
+ | 'hasPendingInitialTargetLoad'
135
136
  | 'targetedMessage'
136
137
  | 'threadList'
137
138
  | 'maximumMessageLimit'
@@ -289,6 +290,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
289
290
  setChannelUnreadState,
290
291
  setFlatListRef,
291
292
  setTargetedMessage,
293
+ hasPendingInitialTargetLoad,
292
294
  targetedMessage,
293
295
  thread,
294
296
  threadInstance,
@@ -388,11 +390,15 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
388
390
 
389
391
  useEffect(() => {
390
392
  if (autoscrollToRecent && flashListRef.current) {
393
+ if (hasPendingInitialTargetLoad?.()) {
394
+ return;
395
+ }
396
+
391
397
  flashListRef.current.scrollToEnd({
392
398
  animated: true,
393
399
  });
394
400
  }
395
- }, [autoscrollToRecent]);
401
+ }, [autoscrollToRecent, hasPendingInitialTargetLoad]);
396
402
 
397
403
  const maintainVisibleContentPosition = useMemo(() => {
398
404
  return {
@@ -408,18 +414,6 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
408
414
  }
409
415
  }, [disabled]);
410
416
 
411
- const indexToScrollToRef = useRef<number | undefined>(undefined);
412
-
413
- const initialIndexToScrollTo = useMemo(() => {
414
- return targetedMessage
415
- ? processedMessageList.findIndex((message) => message?.id === targetedMessage)
416
- : -1;
417
- }, [processedMessageList, targetedMessage]);
418
-
419
- useEffect(() => {
420
- indexToScrollToRef.current = initialIndexToScrollTo;
421
- }, [initialIndexToScrollTo]);
422
-
423
417
  /**
424
418
  * Check if a messageId needs to be scrolled to after list loads, and scroll to it
425
419
  * Note: This effect fires on every list change with a small debounce so that scrolling isnt abrupted by an immediate rerender
@@ -440,13 +434,29 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
440
434
  scrollToDebounceTimeoutRef.current = setTimeout(() => {
441
435
  clearTimeout(scrollToDebounceTimeoutRef.current);
442
436
 
443
- // now scroll to it
444
- flashListRef.current?.scrollToIndex({
445
- animated: true,
446
- index: indexOfParentInMessageList,
447
- viewPosition: 0.5,
437
+ const scrollToIndex = async () => {
438
+ const list = flashListRef.current;
439
+
440
+ if (!list) {
441
+ return false;
442
+ }
443
+
444
+ await list.scrollToIndex({
445
+ index: indexOfParentInMessageList,
446
+ animated: true,
447
+ viewPosition: 0.5,
448
+ });
449
+
450
+ return true;
451
+ };
452
+
453
+ requestAnimationFrame(async () => {
454
+ await scrollToIndex();
455
+ requestAnimationFrame(async () => {
456
+ await scrollToIndex();
457
+ setTargetedMessage(undefined);
458
+ });
448
459
  });
449
- setTargetedMessage(undefined);
450
460
  }, WAIT_FOR_SCROLL_TIMEOUT);
451
461
  }
452
462
  }, [loadChannelAroundMessage, processedMessageList, setTargetedMessage, targetedMessage]);
@@ -456,8 +466,6 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
456
466
  (message) => message?.id === messageId,
457
467
  );
458
468
 
459
- indexToScrollToRef.current = indexOfParentInMessageList;
460
-
461
469
  try {
462
470
  if (indexOfParentInMessageList === -1) {
463
471
  clearTimeout(scrollToDebounceTimeoutRef.current);
@@ -529,7 +537,6 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
529
537
  setScrollToBottomButtonVisible(true);
530
538
  return;
531
539
  } else {
532
- indexToScrollToRef.current = undefined;
533
540
  setAutoscrollToRecent(true);
534
541
  }
535
542
  const latestNonCurrentMessageBeforeUpdate = latestNonCurrentMessageBeforeUpdateRef.current;
@@ -1064,9 +1071,6 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
1064
1071
  data={processedMessageList}
1065
1072
  drawDistance={800}
1066
1073
  getItemType={getItemTypeInternal}
1067
- initialScrollIndex={
1068
- indexToScrollToRef.current === -1 ? undefined : indexToScrollToRef.current
1069
- }
1070
1074
  keyboardShouldPersistTaps='handled'
1071
1075
  keyExtractor={keyExtractor}
1072
1076
  ListFooterComponent={ListFooterComponent}
@@ -1203,6 +1207,7 @@ export const MessageFlashList = (props: MessageFlashListProps) => {
1203
1207
  scrollToFirstUnreadThreshold,
1204
1208
  setChannelUnreadState,
1205
1209
  setTargetedMessage,
1210
+ hasPendingInitialTargetLoad,
1206
1211
  targetedMessage,
1207
1212
  threadList,
1208
1213
  } = useChannelContext();
@@ -1246,6 +1251,7 @@ export const MessageFlashList = (props: MessageFlashListProps) => {
1246
1251
  scrollToFirstUnreadThreshold,
1247
1252
  setChannelUnreadState,
1248
1253
  setTargetedMessage,
1254
+ hasPendingInitialTargetLoad,
1249
1255
  shouldShowUnreadUnderlay,
1250
1256
  targetedMessage,
1251
1257
  thread,
@@ -112,6 +112,12 @@ export type ChannelContextValue = {
112
112
  setChannelUnreadState: (data: ChannelUnreadStateStoreType['channelUnreadState']) => void;
113
113
  setLastRead: React.Dispatch<React.SetStateAction<Date | undefined>>;
114
114
  setTargetedMessage: (messageId?: string) => void;
115
+ /**
116
+ * Returns true when Channel is about to load an initial targeted message.
117
+ *
118
+ * @internal
119
+ */
120
+ hasPendingInitialTargetLoad?: () => boolean;
115
121
  /**
116
122
  * Abort controller for cancelling async requests made for uploading images/files
117
123
  * Its a map of filename and AbortController
@@ -425,17 +425,10 @@ export class AudioPlayer {
425
425
  }
426
426
  this.position = positionInMillis;
427
427
  if (this.isExpoCLI) {
428
- if (positionInMillis === 0) {
429
- // If currentTime is 0, we should replay the video from 0th position.
430
- if (this.playerRef?.replayAsync) {
431
- await this.playerRef.replayAsync({});
432
- }
428
+ if (this.playerRef?.setPositionAsync) {
429
+ await this.playerRef.setPositionAsync(positionInMillis);
433
430
  } else {
434
- if (this.playerRef?.setPositionAsync) {
435
- await this.playerRef.setPositionAsync(positionInMillis);
436
- } else {
437
- this.notifyError('seek-not-supported');
438
- }
431
+ this.notifyError('seek-not-supported');
439
432
  }
440
433
  } else {
441
434
  if (this.playerRef?.seek) {
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "9.2.2-beta.1"
2
+ "version": "9.2.2-beta.3"
3
3
  }