stream-chat-react-native-core 5.2.0 → 5.3.0-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 (130) hide show
  1. package/lib/commonjs/components/Attachment/Card.js +29 -18
  2. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Gallery.js +16 -20
  4. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/GalleryImage.js +34 -6
  6. package/lib/commonjs/components/Attachment/GalleryImage.js.map +1 -1
  7. package/lib/commonjs/components/Attachment/Giphy.js +37 -29
  8. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  9. package/lib/commonjs/components/Avatar/Avatar.js +10 -8
  10. package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
  11. package/lib/commonjs/components/Avatar/GroupAvatar.js +3 -1
  12. package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
  13. package/lib/commonjs/components/ChannelList/ChannelList.js +4 -4
  14. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  15. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js +4 -4
  16. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js.map +1 -1
  17. package/lib/commonjs/components/ChannelList/hooks/useCreateChannelsContext.js +1 -1
  18. package/lib/commonjs/components/ChannelList/hooks/useCreateChannelsContext.js.map +1 -1
  19. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +6 -7
  20. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  21. package/lib/commonjs/components/ChannelPreview/ChannelAvatar.js +30 -6
  22. package/lib/commonjs/components/ChannelPreview/ChannelAvatar.js.map +1 -1
  23. package/lib/commonjs/components/Chat/Chat.js +8 -5
  24. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  25. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +2 -0
  26. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  27. package/lib/commonjs/components/ImageBackground.js +64 -0
  28. package/lib/commonjs/components/ImageBackground.js.map +1 -0
  29. package/lib/commonjs/components/Message/Message.js +15 -16
  30. package/lib/commonjs/components/Message/Message.js.map +1 -1
  31. package/lib/commonjs/components/Message/MessageSimple/MessageAvatar.js +12 -4
  32. package/lib/commonjs/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  33. package/lib/commonjs/components/Message/MessageSimple/MessageRepliesAvatars.js +26 -5
  34. package/lib/commonjs/components/Message/MessageSimple/MessageRepliesAvatars.js.map +1 -1
  35. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +58 -47
  36. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  37. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  38. package/lib/commonjs/contexts/chatContext/ChatContext.js +2 -2
  39. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  40. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  41. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  42. package/lib/commonjs/native.js.map +1 -1
  43. package/lib/commonjs/version.json +1 -1
  44. package/lib/module/components/Attachment/Card.js +29 -18
  45. package/lib/module/components/Attachment/Card.js.map +1 -1
  46. package/lib/module/components/Attachment/Gallery.js +16 -20
  47. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  48. package/lib/module/components/Attachment/GalleryImage.js +34 -6
  49. package/lib/module/components/Attachment/GalleryImage.js.map +1 -1
  50. package/lib/module/components/Attachment/Giphy.js +37 -29
  51. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  52. package/lib/module/components/Avatar/Avatar.js +10 -8
  53. package/lib/module/components/Avatar/Avatar.js.map +1 -1
  54. package/lib/module/components/Avatar/GroupAvatar.js +3 -1
  55. package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
  56. package/lib/module/components/ChannelList/ChannelList.js +4 -4
  57. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  58. package/lib/module/components/ChannelList/ChannelListMessenger.js +4 -4
  59. package/lib/module/components/ChannelList/ChannelListMessenger.js.map +1 -1
  60. package/lib/module/components/ChannelList/hooks/useCreateChannelsContext.js +1 -1
  61. package/lib/module/components/ChannelList/hooks/useCreateChannelsContext.js.map +1 -1
  62. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +6 -7
  63. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  64. package/lib/module/components/ChannelPreview/ChannelAvatar.js +30 -6
  65. package/lib/module/components/ChannelPreview/ChannelAvatar.js.map +1 -1
  66. package/lib/module/components/Chat/Chat.js +8 -5
  67. package/lib/module/components/Chat/Chat.js.map +1 -1
  68. package/lib/module/components/Chat/hooks/useCreateChatContext.js +2 -0
  69. package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  70. package/lib/module/components/ImageBackground.js +64 -0
  71. package/lib/module/components/ImageBackground.js.map +1 -0
  72. package/lib/module/components/Message/Message.js +15 -16
  73. package/lib/module/components/Message/Message.js.map +1 -1
  74. package/lib/module/components/Message/MessageSimple/MessageAvatar.js +12 -4
  75. package/lib/module/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  76. package/lib/module/components/Message/MessageSimple/MessageRepliesAvatars.js +26 -5
  77. package/lib/module/components/Message/MessageSimple/MessageRepliesAvatars.js.map +1 -1
  78. package/lib/module/components/MessageOverlay/MessageOverlay.js +58 -47
  79. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  80. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  81. package/lib/module/contexts/chatContext/ChatContext.js +2 -2
  82. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  83. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  84. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  85. package/lib/module/native.js.map +1 -1
  86. package/lib/module/version.json +1 -1
  87. package/lib/typescript/components/Attachment/Card.d.ts +3 -2
  88. package/lib/typescript/components/Attachment/GalleryImage.d.ts +8 -2
  89. package/lib/typescript/components/Attachment/Giphy.d.ts +2 -1
  90. package/lib/typescript/components/Avatar/Avatar.d.ts +2 -1
  91. package/lib/typescript/components/Avatar/GroupAvatar.d.ts +2 -1
  92. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +1 -1
  93. package/lib/typescript/components/ChannelPreview/ChannelAvatar.d.ts +2 -0
  94. package/lib/typescript/components/Chat/Chat.d.ts +1 -1
  95. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
  96. package/lib/typescript/components/ImageBackground.d.ts +33 -0
  97. package/lib/typescript/components/Message/Message.d.ts +2 -1
  98. package/lib/typescript/components/Message/MessageSimple/MessageAvatar.d.ts +2 -1
  99. package/lib/typescript/components/Message/MessageSimple/MessageRepliesAvatars.d.ts +2 -0
  100. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -1
  101. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +3 -1
  102. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +4 -0
  103. package/lib/typescript/native.d.ts +2 -2
  104. package/package.json +1 -1
  105. package/src/__tests__/offline-feature.test.js +3 -1
  106. package/src/components/Attachment/Card.tsx +11 -2
  107. package/src/components/Attachment/Gallery.tsx +1 -7
  108. package/src/components/Attachment/GalleryImage.tsx +31 -9
  109. package/src/components/Attachment/Giphy.tsx +8 -2
  110. package/src/components/Avatar/Avatar.tsx +12 -2
  111. package/src/components/Avatar/GroupAvatar.tsx +4 -4
  112. package/src/components/ChannelList/ChannelList.tsx +3 -2
  113. package/src/components/ChannelList/ChannelListMessenger.tsx +3 -3
  114. package/src/components/ChannelList/__tests__/ChannelList.test.js +1 -1
  115. package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +2 -1
  116. package/src/components/ChannelList/hooks/useCreateChannelsContext.ts +1 -1
  117. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +12 -11
  118. package/src/components/ChannelPreview/ChannelAvatar.tsx +23 -4
  119. package/src/components/Chat/Chat.tsx +98 -95
  120. package/src/components/Chat/hooks/useCreateChatContext.ts +2 -0
  121. package/src/components/ImageBackground.tsx +77 -0
  122. package/src/components/Message/Message.tsx +8 -8
  123. package/src/components/Message/MessageSimple/MessageAvatar.tsx +6 -2
  124. package/src/components/Message/MessageSimple/MessageRepliesAvatars.tsx +15 -3
  125. package/src/components/MessageOverlay/MessageOverlay.tsx +210 -205
  126. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -1
  127. package/src/contexts/chatContext/ChatContext.tsx +3 -1
  128. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +8 -1
  129. package/src/native.ts +2 -2
  130. package/src/version.json +1 -1
@@ -36,7 +36,7 @@ var useCreateChannelsContext = function useCreateChannelsContext(_ref) {
36
36
  reloadList = _ref.reloadList,
37
37
  setFlatListRef = _ref.setFlatListRef,
38
38
  Skeleton = _ref.Skeleton;
39
- var channelValueString = channels.map(function (channel) {
39
+ var channelValueString = channels == null ? void 0 : channels.map(function (channel) {
40
40
  var _channel$data$name, _channel$data, _channel$id;
41
41
 
42
42
  return "" + ((_channel$data$name = (_channel$data = channel.data) == null ? void 0 : _channel$data.name) != null ? _channel$data$name : '') + ((_channel$id = channel.id) != null ? _channel$id : '') + Object.values(channel.state.members).map(function (member) {
@@ -1 +1 @@
1
- {"version":3,"sources":["useCreateChannelsContext.ts"],"names":["useCreateChannelsContext","additionalFlatListProps","channels","EmptyStateIndicator","error","FooterLoadingIndicator","forceUpdate","hasNextPage","HeaderErrorIndicator","HeaderNetworkDownIndicator","ListHeaderComponent","loadingChannels","LoadingErrorIndicator","LoadingIndicator","loadingNextPage","loadMoreThreshold","loadNextPage","maxUnreadCount","numberOfSkeletons","onSelect","Preview","PreviewAvatar","PreviewMessage","PreviewStatus","PreviewTitle","PreviewUnreadCount","refreshing","refreshList","reloadList","setFlatListRef","Skeleton","channelValueString","map","channel","data","name","id","Object","values","state","members","member","user","online","join","channelsContext"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport type { ChannelsContextValue } from '../../../contexts/channelsContext/ChannelsContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChannelsContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n Skeleton,\n}: ChannelsContextValue<StreamChatGenerics>) => {\n const channelValueString = channels\n .map(\n (channel) =>\n `${channel.data?.name ?? ''}${channel.id ?? ''}${Object.values(channel.state.members)\n .map((member) => member.user?.online)\n .join()}`,\n )\n .join();\n const channelsContext: ChannelsContextValue<StreamChatGenerics> = useMemo(\n () => ({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n Skeleton,\n }),\n [\n channelValueString,\n error,\n forceUpdate,\n hasNextPage,\n loadingChannels,\n loadingNextPage,\n refreshing,\n ],\n );\n\n return channelsContext;\n};\n"]}
1
+ {"version":3,"sources":["useCreateChannelsContext.ts"],"names":["useCreateChannelsContext","additionalFlatListProps","channels","EmptyStateIndicator","error","FooterLoadingIndicator","forceUpdate","hasNextPage","HeaderErrorIndicator","HeaderNetworkDownIndicator","ListHeaderComponent","loadingChannels","LoadingErrorIndicator","LoadingIndicator","loadingNextPage","loadMoreThreshold","loadNextPage","maxUnreadCount","numberOfSkeletons","onSelect","Preview","PreviewAvatar","PreviewMessage","PreviewStatus","PreviewTitle","PreviewUnreadCount","refreshing","refreshList","reloadList","setFlatListRef","Skeleton","channelValueString","map","channel","data","name","id","Object","values","state","members","member","user","online","join","channelsContext"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport type { ChannelsContextValue } from '../../../contexts/channelsContext/ChannelsContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChannelsContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n Skeleton,\n}: ChannelsContextValue<StreamChatGenerics>) => {\n const channelValueString = channels\n ?.map(\n (channel) =>\n `${channel.data?.name ?? ''}${channel.id ?? ''}${Object.values(channel.state.members)\n .map((member) => member.user?.online)\n .join()}`,\n )\n .join();\n const channelsContext: ChannelsContextValue<StreamChatGenerics> = useMemo(\n () => ({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n Skeleton,\n }),\n [\n channelValueString,\n error,\n forceUpdate,\n hasNextPage,\n loadingChannels,\n loadingNextPage,\n refreshing,\n ],\n );\n\n return channelsContext;\n};\n"]}
@@ -53,14 +53,12 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
53
53
  var _useChatContext = (0, _ChatContext.useChatContext)(),
54
54
  client = _useChatContext.client;
55
55
 
56
- var initialChannelsStateRef = (0, _react.useRef)([]);
57
-
58
- var _useState = (0, _react.useState)(initialChannelsStateRef.current),
56
+ var _useState = (0, _react.useState)(null),
59
57
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
60
58
  channels = _useState2[0],
61
59
  setChannels = _useState2[1];
62
60
 
63
- var _useState3 = (0, _react.useState)(true),
61
+ var _useState3 = (0, _react.useState)(false),
64
62
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
65
63
  staticChannelsActive = _useState4[0],
66
64
  setStaticChannelsActive = _useState4[1];
@@ -146,7 +144,7 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
146
144
  setActiveQueryType(queryType);
147
145
  newOptions = (0, _extends2["default"])({
148
146
  limit: (_options$limit = options == null ? void 0 : options.limit) != null ? _options$limit : _utils.MAX_QUERY_CHANNELS_LIMIT,
149
- offset: queryType === 'loadChannels' && !staticChannelsActive ? channels.length : 0
147
+ offset: queryType === 'loadChannels' && !staticChannelsActive && channels ? channels.length : 0
150
148
  }, options);
151
149
  _context.prev = 17;
152
150
  _context.next = 20;
@@ -165,7 +163,7 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
165
163
  return _context.abrupt("return");
166
164
 
167
165
  case 23:
168
- newChannels = queryType === 'loadChannels' && !staticChannelsActive ? [].concat((0, _toConsumableArray2["default"])(channels), (0, _toConsumableArray2["default"])(channelQueryResponse)) : channelQueryResponse;
166
+ newChannels = queryType === 'loadChannels' && !staticChannelsActive && channels ? [].concat((0, _toConsumableArray2["default"])(channels), (0, _toConsumableArray2["default"])(channelQueryResponse)) : channelQueryResponse;
169
167
  setChannels(newChannels);
170
168
  setStaticChannelsActive(false);
171
169
  setHasNextPage(channelQueryResponse.length >= newOptions.limit);
@@ -260,6 +258,7 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
260
258
  setChannels(client.hydrateActiveChannels(channelsFromDB, {
261
259
  offlineMode: true
262
260
  }));
261
+ setStaticChannelsActive(true);
263
262
  }
264
263
  } catch (e) {
265
264
  console.warn('Failed to get channels from database: ', e);
@@ -275,7 +274,7 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
275
274
  channels: channels,
276
275
  error: error,
277
276
  hasNextPage: hasNextPage,
278
- loadingChannels: activeQueryType === 'queryLocalDB' ? true : activeQueryType === 'reload' && channels === initialChannelsStateRef.current,
277
+ loadingChannels: activeQueryType === 'queryLocalDB' ? true : activeQueryType === 'reload' && channels === null,
279
278
  loadingNextPage: activeQueryType === 'loadChannels',
280
279
  loadNextPage: loadNextPage,
281
280
  refreshing: activeQueryType === 'refresh',
@@ -1 +1 @@
1
- {"version":3,"sources":["usePaginatedChannels.ts"],"names":["waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","enableOfflineSupport","filters","options","sort","client","initialChannelsStateRef","current","channels","setChannels","staticChannelsActive","setStaticChannelsActive","activeChannels","error","setError","hasNextPage","setHasNextPage","lastRefresh","Date","now","isQueryingRef","activeQueryType","setActiveQueryType","isMountedRef","filtersRef","sortRef","activeRequestId","queryChannels","queryType","retryCount","hasUpdatedData","JSON","stringify","some","Boolean","isQueryStale","currentRequestId","undefined","newOptions","limit","MAX_QUERY_CHANNELS_LIMIT","offset","length","skipInitialization","channelQueryResponse","newChannels","console","warn","Error","loadNextPage","refreshList","reloadList","filterStr","sortStr","loadChannels","user","id","channelsFromDB","currentUserId","hydrateActiveChannels","offlineMode","e","loadingChannels","loadingNextPage","refreshing"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AAIA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AAEA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,OAAD;AAAA,SAClB,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvBC,IAAAA,UAAU,CAACD,OAAD,EAAUF,OAAO,GAAGI,sBAApB,CAAV;AACD,GAFD,CADkB;AAAA,CAApB;;AAaA,IAAMC,eAAe,GAAG;AACtBC,EAAAA,aAAa,EAAE;AADO,CAAxB;AAIA,IAAMC,qBAAqB,GAAG,CAA9B;AACA,IAAMC,oBAAoB,GAAG,IAA7B;;AAMO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,OAOE;AAAA,MAJpCC,oBAIoC,QAJpCA,oBAIoC;AAAA,0BAHpCC,OAGoC;AAAA,MAHpCA,OAGoC,6BAH1B,EAG0B;AAAA,0BAFpCC,OAEoC;AAAA,MAFpCA,OAEoC,6BAF1BP,eAE0B;AAAA,uBADpCQ,IACoC;AAAA,MADpCA,IACoC,0BAD7B,EAC6B;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AACA,MAAMC,uBAAuB,GAAG,mBAAO,EAAP,CAAhC;;AACA,kBAAgC,qBAC9BA,uBAAuB,CAACC,OADM,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AAGA,mBAAwD,qBAAkB,IAAlB,CAAxD;AAAA;AAAA,MAAOC,oBAAP;AAAA,MAA6BC,uBAA7B;;AACA,MAAMC,cAAc,GAAG,4DAAvB;;AAEA,mBAA0B,sBAA1B;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,QAAd;;AACA,mBAAsC,qBAAS,IAAT,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AACA,MAAMC,WAAW,GAAG,mBAAOC,IAAI,CAACC,GAAL,EAAP,CAApB;AACA,MAAMC,aAAa,GAAG,mBAAO,KAAP,CAAtB;;AACA,mBAA8C,qBAA2B,cAA3B,CAA9C;AAAA;AAAA,MAAOC,eAAP;AAAA,MAAwBC,kBAAxB;;AACA,MAAMC,YAAY,GAAG,uCAArB;AACA,MAAMC,UAAU,GAAG,mBAA8B,IAA9B,CAAnB;AACA,MAAMC,OAAO,GAAG,mBAA2B,IAA3B,CAAhB;AACA,MAAMC,eAAe,GAAG,mBAAe,CAAf,CAAxB;;AAEA,MAAMC,aAA4B;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACnCC,cAAAA,SADmC,2DACZ,cADY;AAEnCC,cAAAA,UAFmC,2DAEtB,CAFsB;;AAAA,oBAI/B,CAACxB,MAAD,IAAW,CAACkB,YAAY,CAAChB,OAJM;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAM7BuB,cAAAA,cAN6B,GAOjCF,SAAS,KAAK,cAAd,IACAA,SAAS,KAAK,SADd,IAEA,CACEG,IAAI,CAACC,SAAL,CAAeR,UAAU,CAACjB,OAA1B,MAAuCwB,IAAI,CAACC,SAAL,CAAe9B,OAAf,CADzC,EAEE6B,IAAI,CAACC,SAAL,CAAeP,OAAO,CAAClB,OAAvB,MAAoCwB,IAAI,CAACC,SAAL,CAAe5B,IAAf,CAFtC,EAGE6B,IAHF,CAGOC,OAHP,CATiC;;AAc7BC,cAAAA,YAd6B,GAcd,SAAfA,YAAe;AAAA,uBAAM,CAACZ,YAAD,IAAiBG,eAAe,CAACnB,OAAhB,KAA4B6B,gBAAnD;AAAA,eAdc;;AAAA,kBAoB9BN,cApB8B;AAAA;AAAA;AAAA;;AAAA,oBAqB7BT,eAAe,KAAK,IArBS;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAwBnCG,cAAAA,UAAU,CAACjB,OAAX,GAAqBL,OAArB;AACAuB,cAAAA,OAAO,CAAClB,OAAR,GAAkBH,IAAlB;AACAgB,cAAAA,aAAa,CAACb,OAAd,GAAwB,IAAxB;AACAO,cAAAA,QAAQ,CAACuB,SAAD,CAAR;AACAX,cAAAA,eAAe,CAACnB,OAAhB;AACM6B,cAAAA,gBA7B6B,GA6BVV,eAAe,CAACnB,OA7BN;AA8BnCe,cAAAA,kBAAkB,CAACM,SAAD,CAAlB;AAEMU,cAAAA,UAhC6B;AAiCjCC,gBAAAA,KAAK,oBAAEpC,OAAF,oBAAEA,OAAO,CAAEoC,KAAX,6BAAoBC,+BAjCQ;AAkCjCC,gBAAAA,MAAM,EAAEb,SAAS,KAAK,cAAd,IAAgC,CAAClB,oBAAjC,GAAwDF,QAAQ,CAACkC,MAAjE,GAA0E;AAlCjD,iBAmC9BvC,OAnC8B;AAAA;AAAA;AAAA,qBAuCEE,MAAM,CAACsB,aAAP,CAAqBzB,OAArB,EAA8BE,IAA9B,EAAoCkC,UAApC,EAAgD;AACjFK,gBAAAA,kBAAkB,EAAE/B,cAAc,CAACL;AAD8C,eAAhD,CAvCF;;AAAA;AAuC3BqC,cAAAA,oBAvC2B;;AAAA,oBA2C7BT,YAAY,MAAM,CAACZ,YAAY,CAAChB,OA3CH;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA8C3BsC,cAAAA,WA9C2B,GA+C/BjB,SAAS,KAAK,cAAd,IAAgC,CAAClB,oBAAjC,iDACQF,QADR,uCACqBoC,oBADrB,KAEIA,oBAjD2B;AAmDjCnC,cAAAA,WAAW,CAACoC,WAAD,CAAX;AACAlC,cAAAA,uBAAuB,CAAC,KAAD,CAAvB;AACAK,cAAAA,cAAc,CAAC4B,oBAAoB,CAACF,MAArB,IAA+BJ,UAAU,CAACC,KAA3C,CAAd;AACAzB,cAAAA,QAAQ,CAACuB,SAAD,CAAR;AACAjB,cAAAA,aAAa,CAACb,OAAd,GAAwB,KAAxB;AAvDiC;AAAA;;AAAA;AAAA;AAAA;AAyDjCa,cAAAA,aAAa,CAACb,OAAd,GAAwB,KAAxB;AAzDiC;AAAA,qBA0D3BjB,WAAW,CAAC,CAAD,CA1DgB;;AAAA;AAAA,mBA4D7B6C,YAAY,EA5DiB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBAkE7BN,UAAU,KAAK/B,qBAAf,IAAwC,CAACsB,aAAa,CAACb,OAlE1B;AAAA;AAAA;AAAA;;AAmE/Be,cAAAA,kBAAkB,CAAC,IAAD,CAAlB;AACAwB,cAAAA,OAAO,CAACC,IAAR;AAEAjC,cAAAA,QAAQ,CACN,IAAIkC,KAAJ,6FADM,CAAR;AAtE+B;;AAAA;AAAA,+CA8E1BrB,aAAa,CAACC,SAAD,EAAYC,UAAU,GAAG,CAAzB,CA9Ea;;AAAA;AAiFnCP,cAAAA,kBAAkB,CAAC,IAAD,CAAlB;;AAjFmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAA5BK,aAA4B;AAAA;AAAA;AAAA,KAAlC;;AAoFA,MAAMsB,YAAY,GAAGlC,WAAW,GAAGY,aAAH,GAAmBU,SAAnD;;AAEA,MAAMa,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,QAAM/B,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAZ;;AAEA,QAAIA,GAAG,GAAGF,WAAW,CAACV,OAAlB,GAA4BR,oBAA5B,IAAoDc,KAAK,KAAKwB,SAAlE,EAA6E;AAC3E;AACD;;AAEDpB,IAAAA,WAAW,CAACV,OAAZ,GAAsBW,IAAI,CAACC,GAAL,EAAtB;AACA,WAAOQ,aAAa,CAAC,SAAD,CAApB;AACD,GATD;;AAWA,MAAMwB,UAAU,GAAG,SAAbA,UAAa;AAAA,WAAMxB,aAAa,CAAC,QAAD,CAAnB;AAAA,GAAnB;;AAiBA,MAAMyB,SAAS,GAAG,oBAAQ;AAAA,WAAMrB,IAAI,CAACC,SAAL,CAAe9B,OAAf,CAAN;AAAA,GAAR,EAAuC,CAACA,OAAD,CAAvC,CAAlB;AACA,MAAMmD,OAAO,GAAG,oBAAQ;AAAA,WAAMtB,IAAI,CAACC,SAAL,CAAe5B,IAAf,CAAN;AAAA,GAAR,EAAoC,CAACA,IAAD,CAApC,CAAhB;AAEA,wBAAU,YAAM;AACd,QAAMkD,YAAY,GAAG,SAAfA,YAAe,GAAM;AAAA;;AACzB,UAAI,EAACjD,MAAD,4BAACA,MAAM,CAAEkD,IAAT,aAAC,aAAcC,EAAf,CAAJ,EAAuB;;AACvB,UAAIvD,oBAAJ,EAA0B;AACxB,YAAI;AACF,cAAMwD,cAAc,GAAG,wDAAyB;AAC9CC,YAAAA,aAAa,EAAErD,MAAM,CAACkD,IAAP,CAAYC,EADmB;AAE9CtD,YAAAA,OAAO,EAAPA,OAF8C;AAG9CE,YAAAA,IAAI,EAAJA;AAH8C,WAAzB,CAAvB;;AAMA,cAAIqD,cAAJ,EAAoB;AAClBhD,YAAAA,WAAW,CACTJ,MAAM,CAACsD,qBAAP,CAA6BF,cAA7B,EAA6C;AAC3CG,cAAAA,WAAW,EAAE;AAD8B,aAA7C,CADS,CAAX;AAKD;AACF,SAdD,CAcE,OAAOC,CAAP,EAAU;AACVf,UAAAA,OAAO,CAACC,IAAR,CAAa,wCAAb,EAAuDc,CAAvD;AACD;AACF;;AAEDV,MAAAA,UAAU;AACX,KAvBD;;AAyBAG,IAAAA,YAAY;AACb,GA3BD,EA2BG,CAACF,SAAD,EAAYC,OAAZ,CA3BH;AA6BA,SAAO;AACL7C,IAAAA,QAAQ,EAARA,QADK;AAELK,IAAAA,KAAK,EAALA,KAFK;AAGLE,IAAAA,WAAW,EAAXA,WAHK;AAIL+C,IAAAA,eAAe,EACbzC,eAAe,KAAK,cAApB,GACI,IADJ,GAEIA,eAAe,KAAK,QAApB,IAAgCb,QAAQ,KAAKF,uBAAuB,CAACC,OAPtE;AAQLwD,IAAAA,eAAe,EAAE1C,eAAe,KAAK,cARhC;AASL4B,IAAAA,YAAY,EAAZA,YATK;AAULe,IAAAA,UAAU,EAAE3C,eAAe,KAAK,SAV3B;AAWL6B,IAAAA,WAAW,EAAXA,WAXK;AAYLC,IAAAA,UAAU,EAAVA,UAZK;AAaL1C,IAAAA,WAAW,EAAXA,WAbK;AAcLC,IAAAA,oBAAoB,EAApBA;AAdK,GAAP;AAgBD,CA5LM","sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannelsForFilterSort } from '../../../store/apis/getChannelsForFilterSort';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const initialChannelsStateRef = useRef([]);\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[]>(\n initialChannelsStateRef.current,\n );\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(true);\n const activeChannels = useActiveChannelsRefContext();\n\n const [error, setError] = useState<Error>();\n const [hasNextPage, setHasNextPage] = useState(true);\n const lastRefresh = useRef(Date.now());\n const isQueryingRef = useRef(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const isMountedRef = useIsMountedRef();\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset: queryType === 'loadChannels' && !staticChannelsActive ? channels.length : 0,\n ...options,\n };\n\n try {\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: activeChannels.current,\n });\n\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse;\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n setError(undefined);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const loadNextPage = hasNextPage ? queryChannels : undefined;\n\n const refreshList = () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n return queryChannels('refresh');\n };\n\n const reloadList = () => queryChannels('reload');\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n const loadChannels = () => {\n if (!client?.user?.id) return;\n if (enableOfflineSupport) {\n try {\n const channelsFromDB = getChannelsForFilterSort({\n currentUserId: client.user.id,\n filters,\n sort,\n });\n\n if (channelsFromDB) {\n setChannels(\n client.hydrateActiveChannels(channelsFromDB, {\n offlineMode: true,\n }),\n );\n }\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n }\n\n reloadList();\n };\n\n loadChannels();\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB'\n ? true\n : activeQueryType === 'reload' && channels === initialChannelsStateRef.current,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n setChannels,\n staticChannelsActive,\n };\n};\n"]}
1
+ {"version":3,"sources":["usePaginatedChannels.ts"],"names":["waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","enableOfflineSupport","filters","options","sort","client","channels","setChannels","staticChannelsActive","setStaticChannelsActive","activeChannels","error","setError","hasNextPage","setHasNextPage","lastRefresh","Date","now","isQueryingRef","activeQueryType","setActiveQueryType","isMountedRef","filtersRef","sortRef","activeRequestId","queryChannels","queryType","retryCount","current","hasUpdatedData","JSON","stringify","some","Boolean","isQueryStale","currentRequestId","undefined","newOptions","limit","MAX_QUERY_CHANNELS_LIMIT","offset","length","skipInitialization","channelQueryResponse","newChannels","console","warn","Error","loadNextPage","refreshList","reloadList","filterStr","sortStr","loadChannels","user","id","channelsFromDB","currentUserId","hydrateActiveChannels","offlineMode","e","loadingChannels","loadingNextPage","refreshing"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannelsForFilterSort } from '../../../store/apis/getChannelsForFilterSort';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[] | null>(null);\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(false);\n const activeChannels = useActiveChannelsRefContext();\n\n const [error, setError] = useState<Error>();\n const [hasNextPage, setHasNextPage] = useState(true);\n const lastRefresh = useRef(Date.now());\n const isQueryingRef = useRef(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const isMountedRef = useIsMountedRef();\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset:\n queryType === 'loadChannels' && !staticChannelsActive && channels ? channels.length : 0,\n ...options,\n };\n\n try {\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: activeChannels.current,\n });\n\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive && channels\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse;\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n setError(undefined);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const loadNextPage = hasNextPage ? queryChannels : undefined;\n\n const refreshList = () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n return queryChannels('refresh');\n };\n\n const reloadList = () => queryChannels('reload');\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n const loadChannels = () => {\n if (!client?.user?.id) return;\n if (enableOfflineSupport) {\n try {\n const channelsFromDB = getChannelsForFilterSort({\n currentUserId: client.user.id,\n filters,\n sort,\n });\n\n if (channelsFromDB) {\n setChannels(\n client.hydrateActiveChannels(channelsFromDB, {\n offlineMode: true,\n }),\n );\n setStaticChannelsActive(true);\n }\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n }\n\n reloadList();\n };\n\n loadChannels();\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB' ? true : activeQueryType === 'reload' && channels === null,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n // Although channels can be null, there is no practical case where channels will be null\n // when setChannels is used. setChannels is only recommended to be used for overriding\n // event handler. Thus instead of adding if check for channels === null, its better to\n // simply reassign types here.\n setChannels: setChannels as React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n staticChannelsActive,\n };\n};\n"]}
@@ -3,7 +3,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ChannelAvatar = void 0;
6
+ exports.ChannelAvatarWithContext = exports.ChannelAvatar = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
9
 
8
10
  var _react = _interopRequireDefault(require("react"));
9
11
 
@@ -11,6 +13,8 @@ var _useChannelPreviewDisplayAvatar = require("./hooks/useChannelPreviewDisplayA
11
13
 
12
14
  var _useChannelPreviewDisplayPresence = require("./hooks/useChannelPreviewDisplayPresence");
13
15
 
16
+ var _ChatContext = require("../../contexts/chatContext/ChatContext");
17
+
14
18
  var _Avatar = require("../Avatar/Avatar");
15
19
 
16
20
  var _GroupAvatar = require("../Avatar/GroupAvatar");
@@ -18,38 +22,58 @@ var _GroupAvatar = require("../Avatar/GroupAvatar");
18
22
  var _this = this,
19
23
  _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ChannelPreview/ChannelAvatar.tsx";
20
24
 
21
- var ChannelAvatar = function ChannelAvatar(props) {
22
- var channel = props.channel;
25
+ var ChannelAvatarWithContext = function ChannelAvatarWithContext(props) {
26
+ var channel = props.channel,
27
+ ImageComponent = props.ImageComponent;
23
28
  var displayAvatar = (0, _useChannelPreviewDisplayAvatar.useChannelPreviewDisplayAvatar)(channel);
24
29
  var displayPresence = (0, _useChannelPreviewDisplayPresence.useChannelPreviewDisplayPresence)(channel);
25
30
 
26
31
  if (displayAvatar.images) {
27
32
  return _react["default"].createElement(_GroupAvatar.GroupAvatar, {
33
+ ImageComponent: ImageComponent,
28
34
  images: displayAvatar.images,
29
35
  names: displayAvatar.names,
30
36
  size: 40,
31
37
  __self: _this,
32
38
  __source: {
33
39
  fileName: _jsxFileName,
34
- lineNumber: 29,
35
- columnNumber: 12
40
+ lineNumber: 31,
41
+ columnNumber: 7
36
42
  }
37
43
  });
38
44
  }
39
45
 
40
46
  return _react["default"].createElement(_Avatar.Avatar, {
41
47
  image: displayAvatar.image,
48
+ ImageComponent: ImageComponent,
42
49
  name: displayAvatar.name,
43
50
  online: displayPresence,
44
51
  size: 40,
45
52
  __self: _this,
46
53
  __source: {
47
54
  fileName: _jsxFileName,
48
- lineNumber: 33,
55
+ lineNumber: 41,
49
56
  columnNumber: 5
50
57
  }
51
58
  });
52
59
  };
53
60
 
61
+ exports.ChannelAvatarWithContext = ChannelAvatarWithContext;
62
+
63
+ var ChannelAvatar = function ChannelAvatar(props) {
64
+ var _useChatContext = (0, _ChatContext.useChatContext)(),
65
+ ImageComponent = _useChatContext.ImageComponent;
66
+
67
+ return _react["default"].createElement(ChannelAvatarWithContext, (0, _extends2["default"])({}, props, {
68
+ ImageComponent: ImageComponent,
69
+ __self: _this,
70
+ __source: {
71
+ fileName: _jsxFileName,
72
+ lineNumber: 58,
73
+ columnNumber: 10
74
+ }
75
+ }));
76
+ };
77
+
54
78
  exports.ChannelAvatar = ChannelAvatar;
55
79
  //# sourceMappingURL=ChannelAvatar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ChannelAvatar.tsx"],"names":["ChannelAvatar","props","channel","displayAvatar","displayPresence","images","names","image","name"],"mappings":";;;;;;;AAAA;;AAGA;;AACA;;AAGA;;AACA;;;;;AASO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAG3BC,KAH2B,EAIxB;AACH,MAAQC,OAAR,GAAoBD,KAApB,CAAQC,OAAR;AAEA,MAAMC,aAAa,GAAG,oEAA+BD,OAA/B,CAAtB;AACA,MAAME,eAAe,GAAG,wEAAiCF,OAAjC,CAAxB;;AAEA,MAAIC,aAAa,CAACE,MAAlB,EAA0B;AACxB,WAAO,gCAAC,wBAAD;AAAa,MAAA,MAAM,EAAEF,aAAa,CAACE,MAAnC;AAA2C,MAAA,KAAK,EAAEF,aAAa,CAACG,KAAhE;AAAuE,MAAA,IAAI,EAAE,EAA7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAP;AACD;;AAED,SACE,gCAAC,cAAD;AACE,IAAA,KAAK,EAAEH,aAAa,CAACI,KADvB;AAEE,IAAA,IAAI,EAAEJ,aAAa,CAACK,IAFtB;AAGE,IAAA,MAAM,EAAEJ,eAHV;AAIE,IAAA,IAAI,EAAE,EAJR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF;AAQD,CAtBM","sourcesContent":["import React from 'react';\n\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { useChannelPreviewDisplayAvatar } from './hooks/useChannelPreviewDisplayAvatar';\nimport { useChannelPreviewDisplayPresence } from './hooks/useChannelPreviewDisplayPresence';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { Avatar } from '../Avatar/Avatar';\nimport { GroupAvatar } from '../Avatar/GroupAvatar';\n\nexport type ChannelAvatarProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'>;\n\n/**\n * This UI component displays an avatar for a particular channel.\n */\nexport const ChannelAvatar = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelAvatarProps<StreamChatGenerics>,\n) => {\n const { channel } = props;\n\n const displayAvatar = useChannelPreviewDisplayAvatar(channel);\n const displayPresence = useChannelPreviewDisplayPresence(channel);\n\n if (displayAvatar.images) {\n return <GroupAvatar images={displayAvatar.images} names={displayAvatar.names} size={40} />;\n }\n\n return (\n <Avatar\n image={displayAvatar.image}\n name={displayAvatar.name}\n online={displayPresence}\n size={40}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["ChannelAvatar.tsx"],"names":["ChannelAvatarWithContext","props","channel","ImageComponent","displayAvatar","displayPresence","images","names","image","name","ChannelAvatar"],"mappings":";;;;;;;;;AAAA;;AAGA;;AACA;;AAEA;;AAEA;;AACA;;;;;AASO,IAAMA,wBAAwB,GAAG,SAA3BA,wBAA2B,CAGtCC,KAHsC,EAInC;AACH,MAAQC,OAAR,GAAoCD,KAApC,CAAQC,OAAR;AAAA,MAAiBC,cAAjB,GAAoCF,KAApC,CAAiBE,cAAjB;AAEA,MAAMC,aAAa,GAAG,oEAA+BF,OAA/B,CAAtB;AACA,MAAMG,eAAe,GAAG,wEAAiCH,OAAjC,CAAxB;;AAEA,MAAIE,aAAa,CAACE,MAAlB,EAA0B;AACxB,WACE,gCAAC,wBAAD;AACE,MAAA,cAAc,EAAEH,cADlB;AAEE,MAAA,MAAM,EAAEC,aAAa,CAACE,MAFxB;AAGE,MAAA,KAAK,EAAEF,aAAa,CAACG,KAHvB;AAIE,MAAA,IAAI,EAAE,EAJR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MADF;AAQD;;AAED,SACE,gCAAC,cAAD;AACE,IAAA,KAAK,EAAEH,aAAa,CAACI,KADvB;AAEE,IAAA,cAAc,EAAEL,cAFlB;AAGE,IAAA,IAAI,EAAEC,aAAa,CAACK,IAHtB;AAIE,IAAA,MAAM,EAAEJ,eAJV;AAKE,IAAA,IAAI,EAAE,EALR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF;AASD,CA9BM;;;;AAgCA,IAAMK,aAAa,GAAG,SAAhBA,aAAgB,CAG3BT,KAH2B,EAIxB;AACH,wBAA2B,kCAA3B;AAAA,MAAQE,cAAR,mBAAQA,cAAR;;AAEA,SAAO,gCAAC,wBAAD,gCAA8BF,KAA9B;AAAqC,IAAA,cAAc,EAAEE,cAArD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAP;AACD,CARM","sourcesContent":["import React from 'react';\n\nimport type { ChannelPreviewProps } from './ChannelPreview';\nimport { useChannelPreviewDisplayAvatar } from './hooks/useChannelPreviewDisplayAvatar';\nimport { useChannelPreviewDisplayPresence } from './hooks/useChannelPreviewDisplayPresence';\n\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { Avatar } from '../Avatar/Avatar';\nimport { GroupAvatar } from '../Avatar/GroupAvatar';\n\nexport type ChannelAvatarProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelPreviewProps<StreamChatGenerics>, 'channel'>;\n\n/**\n * This UI component displays an avatar for a particular channel.\n */\nexport const ChannelAvatarWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelAvatarProps<StreamChatGenerics> & Pick<ChatContextValue, 'ImageComponent'>,\n) => {\n const { channel, ImageComponent } = props;\n\n const displayAvatar = useChannelPreviewDisplayAvatar(channel);\n const displayPresence = useChannelPreviewDisplayPresence(channel);\n\n if (displayAvatar.images) {\n return (\n <GroupAvatar\n ImageComponent={ImageComponent}\n images={displayAvatar.images}\n names={displayAvatar.names}\n size={40}\n />\n );\n }\n\n return (\n <Avatar\n image={displayAvatar.image}\n ImageComponent={ImageComponent}\n name={displayAvatar.name}\n online={displayPresence}\n size={40}\n />\n );\n};\n\nexport const ChannelAvatar = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelAvatarProps<StreamChatGenerics>,\n) => {\n const { ImageComponent } = useChatContext<StreamChatGenerics>();\n\n return <ChannelAvatarWithContext {...props} ImageComponent={ImageComponent} />;\n};\n"]}
@@ -70,6 +70,8 @@ var ChatWithContext = function ChatWithContext(props) {
70
70
  _props$enableOfflineS = props.enableOfflineSupport,
71
71
  enableOfflineSupport = _props$enableOfflineS === void 0 ? false : _props$enableOfflineS,
72
72
  i18nInstance = props.i18nInstance,
73
+ _props$ImageComponent = props.ImageComponent,
74
+ ImageComponent = _props$ImageComponent === void 0 ? _reactNative.Image : _props$ImageComponent,
73
75
  style = props.style;
74
76
 
75
77
  var _useState = (0, _react.useState)(),
@@ -135,6 +137,7 @@ var ChatWithContext = function ChatWithContext(props) {
135
137
  client: client,
136
138
  connectionRecovering: connectionRecovering,
137
139
  enableOfflineSupport: enableOfflineSupport,
140
+ ImageComponent: ImageComponent,
138
141
  isOnline: isOnline,
139
142
  mutedUsers: mutedUsers,
140
143
  setActiveChannel: setActiveChannel,
@@ -155,7 +158,7 @@ var ChatWithContext = function ChatWithContext(props) {
155
158
  __self: _this,
156
159
  __source: {
157
160
  fileName: _jsxFileName,
158
- lineNumber: 229,
161
+ lineNumber: 232,
159
162
  columnNumber: 5
160
163
  }
161
164
  }, _react["default"].createElement(_TranslationContext.TranslationProvider, {
@@ -165,7 +168,7 @@ var ChatWithContext = function ChatWithContext(props) {
165
168
  __self: _this,
166
169
  __source: {
167
170
  fileName: _jsxFileName,
168
- lineNumber: 230,
171
+ lineNumber: 233,
169
172
  columnNumber: 7
170
173
  }
171
174
  }, _react["default"].createElement(_ThemeContext.ThemeProvider, {
@@ -173,14 +176,14 @@ var ChatWithContext = function ChatWithContext(props) {
173
176
  __self: _this,
174
177
  __source: {
175
178
  fileName: _jsxFileName,
176
- lineNumber: 233,
179
+ lineNumber: 236,
177
180
  columnNumber: 9
178
181
  }
179
182
  }, _react["default"].createElement(_ChannelsStateContext.ChannelsStateProvider, {
180
183
  __self: _this,
181
184
  __source: {
182
185
  fileName: _jsxFileName,
183
- lineNumber: 234,
186
+ lineNumber: 237,
184
187
  columnNumber: 11
185
188
  }
186
189
  }, children))));
@@ -196,7 +199,7 @@ var Chat = function Chat(props) {
196
199
  __self: _this,
197
200
  __source: {
198
201
  fileName: _jsxFileName,
199
- lineNumber: 269,
202
+ lineNumber: 272,
200
203
  columnNumber: 10
201
204
  }
202
205
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","debugRef","isDebugModeEnabled","__DEV__","current","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setEventType","setSendEventParams","action","data","user","setActiveChannel","newChannel","appSettings","subscribeConnectionRecoveredCallback","chatContext","QuickSqliteClient","initializeDatabase","userLanguage","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAKA;;AACA;;AAEA;;AACA;;AAGA;;;;;;;;;AAEA;;AAmGA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAGtBC,KAHsB,EAInB;AAAA;;AACH,MACEC,QADF,GAOID,KAPJ,CACEC,QADF;AAAA,MAEEC,MAFF,GAOIF,KAPJ,CAEEE,MAFF;AAAA,8BAOIF,KAPJ,CAGEG,2BAHF;AAAA,MAGEA,2BAHF,sCAGgC,IAHhC;AAAA,8BAOIH,KAPJ,CAIEI,oBAJF;AAAA,MAIEA,oBAJF,sCAIyB,KAJzB;AAAA,MAKEC,YALF,GAOIL,KAPJ,CAKEK,YALF;AAAA,MAMEC,KANF,GAOIN,KAPJ,CAMEM,KANF;;AASA,kBAA8B,sBAA9B;AAAA;AAAA,MAAOC,OAAP;AAAA,MAAgBC,UAAhB;;AACA,mBAAsC,qBAA8B;AAClEC,IAAAA,CAAC,EAAE,WAACC,GAAD;AAAA,aAAiBA,GAAjB;AAAA,KAD+D;AAElEC,IAAAA,eAAe,EAAE,yBAACC,KAAD;AAAA,aAAoC,uBAAMA,KAAN,CAApC;AAAA;AAFiD,GAA9B,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AAQA,MAAMC,kBAAkB,GAAG,kCAAc;AAAEV,IAAAA,YAAY,EAAZA,YAAF;AAAgBS,IAAAA,cAAc,EAAdA;AAAhB,GAAd,CAA3B;;AAKA,qBAA2C,+BACzCZ,MADyC,EAEzCC,2BAFyC,CAA3C;AAAA,MAAQa,oBAAR,gBAAQA,oBAAR;AAAA,MAA8BC,QAA9B,gBAA8BA,QAA9B;;AASA,MAAMC,UAAU,GAAG,kCAAkChB,MAAlC,CAAnB;AAEA,MAAMiB,QAAQ,GAAG,oCAAjB;AACA,MAAMC,kBAAkB,GAAGC,OAAO,IAAIF,QAAX,IAAuBA,QAAQ,CAACG,OAA3D;AAEA,wBAAU,YAAM;AACd,QAAIpB,MAAJ,EAAY;AACVA,MAAAA,MAAM,CAACqB,YAAP,CAAuBC,WAAvB,SAA8BC,sBAASC,EAAvC,SAA6CC,gBAA7C;AAEAzB,MAAAA,MAAM,CAAC0B,uBAAP,GAAiC,KAAjC;AACA1B,MAAAA,MAAM,CAAC2B,8BAAP,GAAwCzB,oBAAxC;AACD;;AAED,QAAIgB,kBAAJ,EAAwB;AACtB,UAAID,QAAQ,CAACG,OAAT,CAAiBQ,YAArB,EAAmCX,QAAQ,CAACG,OAAT,CAAiBQ,YAAjB,CAA8B,MAA9B;AACnC,UAAIX,QAAQ,CAACG,OAAT,CAAiBS,kBAArB,EACEZ,QAAQ,CAACG,OAAT,CAAiBS,kBAAjB,CAAoC;AAClCC,QAAAA,MAAM,EAAE,QAD0B;AAElCC,QAAAA,IAAI,EAAE/B,MAAM,CAACgC;AAFqB,OAApC;AAIH;AACF,GAhBD,EAgBG,CAAChC,MAAD,CAhBH;;AAkBA,MAAMiC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,UAAD;AAAA,WAA8C5B,UAAU,CAAC4B,UAAD,CAAxD;AAAA,GAAzB;;AAEA,MAAMC,WAAW,GAAG,oCAAenC,MAAf,EAAuBe,QAAvB,CAApB;;AACA,8BAAiD,oDAA2C;AAC1Ff,IAAAA,MAAM,EAANA,MAD0F;AAE1FE,IAAAA,oBAAoB,EAApBA;AAF0F,GAA3C,CAAjD;AAAA,MAAQkC,oCAAR,yBAAQA,oCAAR;;AAKA,MAAMC,WAAW,GAAG,gDAAqB;AACvCF,IAAAA,WAAW,EAAXA,WADuC;AAEvC9B,IAAAA,OAAO,EAAPA,OAFuC;AAGvCL,IAAAA,MAAM,EAANA,MAHuC;AAIvCc,IAAAA,oBAAoB,EAApBA,oBAJuC;AAKvCZ,IAAAA,oBAAoB,EAApBA,oBALuC;AAMvCa,IAAAA,QAAQ,EAARA,QANuC;AAOvCC,IAAAA,UAAU,EAAVA,UAPuC;AAQvCiB,IAAAA,gBAAgB,EAAhBA,gBARuC;AASvCG,IAAAA,oCAAoC,EAApCA;AATuC,GAArB,CAApB;AAYA,wBAAU,YAAM;AACd,QAAIlC,oBAAJ,EAA0B;AACxBoC,2CAAkBC,kBAAlB;AACD;AACF,GAJD,EAIG,EAJH;AAMA,wCAAgB;AACdvC,IAAAA,MAAM,EAANA,MADc;AAEdE,IAAAA,oBAAoB,EAApBA;AAFc,GAAhB;AAKA,MAAIW,kBAAJ,EAAwB,OAAO,IAAP;AAExB,SACE,gCAAC,yBAAD;AAAkC,IAAA,KAAK,EAAEwB,WAAzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,uCAAD;AACE,IAAA,KAAK,gCAAO1B,WAAP;AAAoB6B,MAAAA,YAAY,EAAE,iBAAAxC,MAAM,CAACgC,IAAP,kCAAaS,QAAb,KAAyBC;AAA3D,MADP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGE,gCAAC,2BAAD;AAAe,IAAA,KAAK,EAAEtC,KAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,2CAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAA4CL,QAA5C,CADF,CAHF,CADF,CADF;AAWD,CAxGD;;AA+HO,IAAM4C,IAAI,GAAG,SAAPA,IAAO,CAGlB7C,KAHkB,EAIf;AACH,2BAAkB,wCAAlB;AAAA,MAAQM,KAAR,sBAAQA,KAAR;;AAEA,SAAO,gCAAC,eAAD;AAAuBA,IAAAA,KAAK,EAALA;AAAvB,KAAoCN,KAApC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAP;AACD,CARM","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useConnectionRecovered } from './hooks/useConnectionRecovered';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { useSyncDatabase } from './hooks/useSyncDatabase';\n\nimport { ChannelsStateProvider } from '../../contexts/channelsStateContext/ChannelsStateContext';\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n};\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n const debugRef = useDebugContext();\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Client',\n data: client.user,\n });\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n const { subscribeConnectionRecoveredCallback } = useConnectionRecovered<StreamChatGenerics>({\n client,\n enableOfflineSupport,\n });\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n });\n\n useEffect(() => {\n if (enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n }\n }, []);\n\n useSyncDatabase({\n client,\n enableOfflineSupport,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>\n <ChannelsStateProvider<StreamChatGenerics>>{children}</ChannelsStateProvider>\n </ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","ImageComponent","Image","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","debugRef","isDebugModeEnabled","__DEV__","current","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setEventType","setSendEventParams","action","data","user","setActiveChannel","newChannel","appSettings","subscribeConnectionRecoveredCallback","chatContext","QuickSqliteClient","initializeDatabase","userLanguage","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Image, Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useConnectionRecovered } from './hooks/useConnectionRecovered';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { useSyncDatabase } from './hooks/useSyncDatabase';\n\nimport { ChannelsStateProvider } from '../../contexts/channelsStateContext/ChannelsStateContext';\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Partial<Pick<ChatContextValue<StreamChatGenerics>, 'ImageComponent'>> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n };\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n ImageComponent = Image,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n const debugRef = useDebugContext();\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Client',\n data: client.user,\n });\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n const { subscribeConnectionRecoveredCallback } = useConnectionRecovered<StreamChatGenerics>({\n client,\n enableOfflineSupport,\n });\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n ImageComponent,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n });\n\n useEffect(() => {\n if (enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n }\n }, []);\n\n useSyncDatabase({\n client,\n enableOfflineSupport,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>\n <ChannelsStateProvider<StreamChatGenerics>>{children}</ChannelsStateProvider>\n </ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
@@ -11,6 +11,7 @@ var useCreateChatContext = function useCreateChatContext(_ref) {
11
11
  client = _ref.client,
12
12
  connectionRecovering = _ref.connectionRecovering,
13
13
  enableOfflineSupport = _ref.enableOfflineSupport,
14
+ ImageComponent = _ref.ImageComponent,
14
15
  isOnline = _ref.isOnline,
15
16
  mutedUsers = _ref.mutedUsers,
16
17
  setActiveChannel = _ref.setActiveChannel,
@@ -25,6 +26,7 @@ var useCreateChatContext = function useCreateChatContext(_ref) {
25
26
  client: client,
26
27
  connectionRecovering: connectionRecovering,
27
28
  enableOfflineSupport: enableOfflineSupport,
29
+ ImageComponent: ImageComponent,
28
30
  isOnline: isOnline,
29
31
  mutedUsers: mutedUsers,
30
32
  setActiveChannel: setActiveChannel,
@@ -1 +1 @@
1
- {"version":3,"sources":["useCreateChatContext.ts"],"names":["useCreateChatContext","appSettings","channel","client","connectionRecovering","enableOfflineSupport","isOnline","mutedUsers","setActiveChannel","subscribeConnectionRecoveredCallback","channelId","id","clientValues","clientID","Object","keys","activeChannels","length","listeners","mutedChannels","mutedUsersLength","chatContext"],"mappings":";;;;;AAAA;;AAKO,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,OAYQ;AAAA,MAT1CC,WAS0C,QAT1CA,WAS0C;AAAA,MAR1CC,OAQ0C,QAR1CA,OAQ0C;AAAA,MAP1CC,MAO0C,QAP1CA,MAO0C;AAAA,MAN1CC,oBAM0C,QAN1CA,oBAM0C;AAAA,MAL1CC,oBAK0C,QAL1CA,oBAK0C;AAAA,MAJ1CC,QAI0C,QAJ1CA,QAI0C;AAAA,MAH1CC,UAG0C,QAH1CA,UAG0C;AAAA,MAF1CC,gBAE0C,QAF1CA,gBAE0C;AAAA,MAD1CC,oCAC0C,QAD1CA,oCAC0C;AAC1C,MAAMC,SAAS,GAAGR,OAAH,oBAAGA,OAAO,CAAES,EAA3B;AACA,MAAMC,YAAY,GAAGT,MAAM,QACpBA,MAAM,CAACU,QADa,GACFC,MAAM,CAACC,IAAP,CAAYZ,MAAM,CAACa,cAAnB,EAAmCC,MADjC,GAErBH,MAAM,CAACC,IAAP,CAAYZ,MAAM,CAACe,SAAnB,EAA8BD,MAFT,GAGpBd,MAAM,CAACgB,aAAP,CAAqBF,MAHD,GAIvB,SAJJ;AAKA,MAAMG,gBAAgB,GAAGb,UAAU,CAACU,MAApC;AAEA,MAAMI,WAAiD,GAAG,oBACxD;AAAA,WAAO;AACLpB,MAAAA,WAAW,EAAXA,WADK;AAELC,MAAAA,OAAO,EAAPA,OAFK;AAGLC,MAAAA,MAAM,EAANA,MAHK;AAILC,MAAAA,oBAAoB,EAApBA,oBAJK;AAKLC,MAAAA,oBAAoB,EAApBA,oBALK;AAMLC,MAAAA,QAAQ,EAARA,QANK;AAOLC,MAAAA,UAAU,EAAVA,UAPK;AAQLC,MAAAA,gBAAgB,EAAhBA,gBARK;AASLC,MAAAA,oCAAoC,EAApCA;AATK,KAAP;AAAA,GADwD,EAYxD,CAACC,SAAD,EAAYE,YAAZ,EAA0BR,oBAA1B,EAAgDE,QAAhD,EAA0Dc,gBAA1D,CAZwD,CAA1D;AAeA,SAAOC,WAAP;AACD,CArCM","sourcesContent":["import { useMemo } from 'react';\n\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChatContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n}: ChatContextValue<StreamChatGenerics>) => {\n const channelId = channel?.id;\n const clientValues = client\n ? `${client.clientID}${Object.keys(client.activeChannels).length}${\n Object.keys(client.listeners).length\n }${client.mutedChannels.length}`\n : 'Offline';\n const mutedUsersLength = mutedUsers.length;\n\n const chatContext: ChatContextValue<StreamChatGenerics> = useMemo(\n () => ({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n }),\n [channelId, clientValues, connectionRecovering, isOnline, mutedUsersLength],\n );\n\n return chatContext;\n};\n"]}
1
+ {"version":3,"sources":["useCreateChatContext.ts"],"names":["useCreateChatContext","appSettings","channel","client","connectionRecovering","enableOfflineSupport","ImageComponent","isOnline","mutedUsers","setActiveChannel","subscribeConnectionRecoveredCallback","channelId","id","clientValues","clientID","Object","keys","activeChannels","length","listeners","mutedChannels","mutedUsersLength","chatContext"],"mappings":";;;;;AAAA;;AAKO,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,OAaQ;AAAA,MAV1CC,WAU0C,QAV1CA,WAU0C;AAAA,MAT1CC,OAS0C,QAT1CA,OAS0C;AAAA,MAR1CC,MAQ0C,QAR1CA,MAQ0C;AAAA,MAP1CC,oBAO0C,QAP1CA,oBAO0C;AAAA,MAN1CC,oBAM0C,QAN1CA,oBAM0C;AAAA,MAL1CC,cAK0C,QAL1CA,cAK0C;AAAA,MAJ1CC,QAI0C,QAJ1CA,QAI0C;AAAA,MAH1CC,UAG0C,QAH1CA,UAG0C;AAAA,MAF1CC,gBAE0C,QAF1CA,gBAE0C;AAAA,MAD1CC,oCAC0C,QAD1CA,oCAC0C;AAC1C,MAAMC,SAAS,GAAGT,OAAH,oBAAGA,OAAO,CAAEU,EAA3B;AACA,MAAMC,YAAY,GAAGV,MAAM,QACpBA,MAAM,CAACW,QADa,GACFC,MAAM,CAACC,IAAP,CAAYb,MAAM,CAACc,cAAnB,EAAmCC,MADjC,GAErBH,MAAM,CAACC,IAAP,CAAYb,MAAM,CAACgB,SAAnB,EAA8BD,MAFT,GAGpBf,MAAM,CAACiB,aAAP,CAAqBF,MAHD,GAIvB,SAJJ;AAKA,MAAMG,gBAAgB,GAAGb,UAAU,CAACU,MAApC;AAEA,MAAMI,WAAiD,GAAG,oBACxD;AAAA,WAAO;AACLrB,MAAAA,WAAW,EAAXA,WADK;AAELC,MAAAA,OAAO,EAAPA,OAFK;AAGLC,MAAAA,MAAM,EAANA,MAHK;AAILC,MAAAA,oBAAoB,EAApBA,oBAJK;AAKLC,MAAAA,oBAAoB,EAApBA,oBALK;AAMLC,MAAAA,cAAc,EAAdA,cANK;AAOLC,MAAAA,QAAQ,EAARA,QAPK;AAQLC,MAAAA,UAAU,EAAVA,UARK;AASLC,MAAAA,gBAAgB,EAAhBA,gBATK;AAULC,MAAAA,oCAAoC,EAApCA;AAVK,KAAP;AAAA,GADwD,EAaxD,CAACC,SAAD,EAAYE,YAAZ,EAA0BT,oBAA1B,EAAgDG,QAAhD,EAA0Dc,gBAA1D,CAbwD,CAA1D;AAgBA,SAAOC,WAAP;AACD,CAvCM","sourcesContent":["import { useMemo } from 'react';\n\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChatContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n ImageComponent,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n}: ChatContextValue<StreamChatGenerics>) => {\n const channelId = channel?.id;\n const clientValues = client\n ? `${client.clientID}${Object.keys(client.activeChannels).length}${\n Object.keys(client.listeners).length\n }${client.mutedChannels.length}`\n : 'Offline';\n const mutedUsersLength = mutedUsers.length;\n\n const chatContext: ChatContextValue<StreamChatGenerics> = useMemo(\n () => ({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n ImageComponent,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n }),\n [channelId, clientValues, connectionRecovering, isOnline, mutedUsersLength],\n );\n\n return chatContext;\n};\n"]}
@@ -0,0 +1,64 @@
1
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ImageBackground = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
+
14
+ var React = _interopRequireWildcard(require("react"));
15
+
16
+ var _reactNative = require("react-native");
17
+
18
+ var _excluded = ["children", "ImageComponent", "imageStyle", "importantForAccessibility", "style"];
19
+
20
+ var _this = this,
21
+ _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ImageBackground.tsx";
22
+
23
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
+
25
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
+
27
+ var ImageBackground = function ImageBackground(props) {
28
+ var children = props.children,
29
+ _props$ImageComponent = props.ImageComponent,
30
+ ImageComponent = _props$ImageComponent === void 0 ? _reactNative.Image : _props$ImageComponent,
31
+ imageStyle = props.imageStyle,
32
+ importantForAccessibility = props.importantForAccessibility,
33
+ style = props.style,
34
+ rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
35
+
36
+ var flattenedStyle = _reactNative.StyleSheet.flatten(style);
37
+
38
+ return React.createElement(_reactNative.View, {
39
+ accessibilityIgnoresInvertColors: true,
40
+ importantForAccessibility: importantForAccessibility,
41
+ style: style,
42
+ __self: _this,
43
+ __source: {
44
+ fileName: _jsxFileName,
45
+ lineNumber: 50,
46
+ columnNumber: 5
47
+ }
48
+ }, React.createElement(ImageComponent, (0, _extends2["default"])({}, rest, {
49
+ importantForAccessibility: importantForAccessibility,
50
+ style: [_reactNative.StyleSheet.absoluteFill, {
51
+ height: flattenedStyle == null ? void 0 : flattenedStyle.height,
52
+ width: flattenedStyle == null ? void 0 : flattenedStyle.width
53
+ }, imageStyle],
54
+ __self: _this,
55
+ __source: {
56
+ fileName: _jsxFileName,
57
+ lineNumber: 55,
58
+ columnNumber: 7
59
+ }
60
+ })), children);
61
+ };
62
+
63
+ exports.ImageBackground = ImageBackground;
64
+ //# sourceMappingURL=ImageBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ImageBackground.tsx"],"names":["ImageBackground","props","children","ImageComponent","Image","imageStyle","importantForAccessibility","style","rest","flattenedStyle","StyleSheet","flatten","absoluteFill","height","width"],"mappings":";;;;;;;;;;;;;AAAA;;AAEA;;;;;;;;;;;AA+BO,IAAMA,eAIZ,GAAG,SAJSA,eAIT,CAACC,KAAD,EAAW;AACb,MACEC,QADF,GAOID,KAPJ,CACEC,QADF;AAAA,8BAOID,KAPJ,CAEEE,cAFF;AAAA,MAEEA,cAFF,sCAEmBC,kBAFnB;AAAA,MAGEC,UAHF,GAOIJ,KAPJ,CAGEI,UAHF;AAAA,MAIEC,yBAJF,GAOIL,KAPJ,CAIEK,yBAJF;AAAA,MAKEC,KALF,GAOIN,KAPJ,CAKEM,KALF;AAAA,MAMKC,IANL,6CAOIP,KAPJ;;AASA,MAAMQ,cAAc,GAAGC,wBAAWC,OAAX,CAAmBJ,KAAnB,CAAvB;;AACA,SACE,oBAAC,iBAAD;AACE,IAAA,gCAAgC,EAAE,IADpC;AAEE,IAAA,yBAAyB,EAAED,yBAF7B;AAGE,IAAA,KAAK,EAAEC,KAHT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,oBAAC,cAAD,gCACMC,IADN;AAEE,IAAA,yBAAyB,EAAEF,yBAF7B;AAGE,IAAA,KAAK,EAAE,CACLI,wBAAWE,YADN,EAEL;AAQEC,MAAAA,MAAM,EAAEJ,cAAF,oBAAEA,cAAc,CAAEI,MAR1B;AASEC,MAAAA,KAAK,EAAEL,cAAF,oBAAEA,cAAc,CAAEK;AATzB,KAFK,EAaLT,UAbK,CAHT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KALF,EAwBGH,QAxBH,CADF;AA4BD,CA3CM","sourcesContent":["import * as React from 'react';\n\nimport { Image, ImageBackgroundProps, ImageProps, StyleSheet, View } from 'react-native';\n\n/**\n * DISCLAIMER: This component has been pretty-much copied from react-native's source code\n * https://github.com/facebook/react-native/blob/main/Libraries/Image/ImageBackground.js\n * Few modifications have been done such as converting to functional component, removing ref related logic (since its not required).\n * Also support for prop `ImageComponent` has been introduced to allow rendering custom\n * component instead of `Image`.\n *\n *\n * Very simple drop-in replacement for <Image> which supports nesting views.\n *\n * ```ReactNativeWebPlayer\n * import React, { Component } from 'react';\n * import { AppRegistry, View, ImageBackground, Text } from 'react-native';\n *\n * class DisplayAnImageBackground extends Component {\n * render() {\n * return (\n * <ImageBackground\n * style={{width: 50, height: 50}}\n * source={{uri: 'https://reactnative.dev/img/opengraph.png'}}\n * >\n * <Text>React</Text>\n * </ImageBackground>\n * );\n * }\n * }\n *\n */\n\nexport const ImageBackground: React.ComponentType<\n ImageBackgroundProps & {\n ImageComponent?: React.ComponentType<ImageProps>;\n }\n> = (props) => {\n const {\n children,\n ImageComponent = Image,\n imageStyle,\n importantForAccessibility,\n style,\n ...rest\n } = props;\n\n const flattenedStyle = StyleSheet.flatten(style);\n return (\n <View\n accessibilityIgnoresInvertColors={true}\n importantForAccessibility={importantForAccessibility}\n style={style}\n >\n <ImageComponent\n {...rest}\n importantForAccessibility={importantForAccessibility}\n style={[\n StyleSheet.absoluteFill,\n {\n // Temporary Workaround:\n // Current (imperfect yet) implementation of <Image> overwrites width and height styles\n // (which is not quite correct), and these styles conflict with explicitly set styles\n // of <ImageBackground> and with our internal layout model here.\n // So, we have to proxy/reapply these styles explicitly for actual <Image> component.\n // This workaround should be removed after implementing proper support of\n // intrinsic content size of the <Image>.\n height: flattenedStyle?.height,\n width: flattenedStyle?.width,\n },\n imageStyle,\n ]}\n />\n {children}\n </View>\n );\n};\n"]}