stream-chat-react 9.1.4 → 9.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -2866,12 +2866,26 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
2866
2866
  var _a, _b, _c;
2867
2867
  var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e, channelConfig = _d.channelConfig;
2868
2868
  var client = useChatContext('useUserRole').client;
2869
+ /**
2870
+ * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
2871
+ * `isAdmin` will be removed in future release. See `channelCapabilities`.
2872
+ */
2869
2873
  var isAdmin = ((_a = client.user) === null || _a === void 0 ? void 0 : _a.role) === 'admin' || channel.state.membership.role === 'admin';
2870
- var isMyMessage = client.userID === ((_b = message.user) === null || _b === void 0 ? void 0 : _b.id);
2874
+ /**
2875
+ * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
2876
+ * `isOwner` will be removed in future release. See `channelCapabilities`.
2877
+ */
2871
2878
  var isOwner = channel.state.membership.role === 'owner';
2872
- var isModerator = ((_c = client.user) === null || _c === void 0 ? void 0 : _c.role) === 'channel_moderator' ||
2879
+ /**
2880
+ * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
2881
+ * `isModerator` will be removed in future release. See `channelCapabilities`.
2882
+ */
2883
+ var isModerator = ((_b = client.user) === null || _b === void 0 ? void 0 : _b.role) === 'channel_moderator' ||
2873
2884
  channel.state.membership.role === 'channel_moderator' ||
2874
- channel.state.membership.role === 'moderator';
2885
+ channel.state.membership.role === 'moderator' ||
2886
+ channel.state.membership.is_moderator === true ||
2887
+ channel.state.membership.channel_role === 'channel_moderator';
2888
+ var isMyMessage = client.userID === ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id);
2875
2889
  var canEdit = (!onlySenderCanEdit && channelCapabilities['update-any-message']) ||
2876
2890
  (isMyMessage && channelCapabilities['update-own-message']);
2877
2891
  var canDelete = channelCapabilities['delete-any-message'] ||
@@ -3310,7 +3324,7 @@ var UnMemoizedMessageActionsBox = function (props) {
3310
3324
  return (React__default['default'].createElement("div", { className: "str-chat__message-actions-box\n " + (open ? 'str-chat__message-actions-box--open' : '') + "\n " + (mine ? 'str-chat__message-actions-box--mine' : '') + "\n " + (reverse ? 'str-chat__message-actions-box--reverse' : '') + "\n ", "data-testid": 'message-actions-box', ref: checkIfReverse },
3311
3325
  React__default['default'].createElement("div", { "aria-label": 'Message Options', className: 'str-chat__message-actions-list', role: 'listbox' },
3312
3326
  customMessageActions && (React__default['default'].createElement(CustomMessageActionsList, { customMessageActions: customMessageActions, message: message })),
3313
- messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && !message.quoted_message && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleQuote, role: 'option' }, t('Reply'))),
3327
+ messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleQuote, role: 'option' }, t('Reply'))),
3314
3328
  messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handlePin, role: 'option' }, !message.pinned ? t('Pin') : t('Unpin'))),
3315
3329
  messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleFlag, role: 'option' }, t('Flag'))),
3316
3330
  messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (React__default['default'].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', onClick: handleMute, role: 'option' }, isUserMuted() ? t('Unmute') : t('Mute'))),
@@ -6525,19 +6539,16 @@ var ChannelInner = function (props) {
6525
6539
  }
6526
6540
  });
6527
6541
  }); };
6528
- var createMessagePreview = function (text, attachments, parent, mentioned_users) {
6529
- var clientSideID = client.userID + "-" + nanoid.nanoid();
6530
- return __assign({ __html: text, attachments: attachments, created_at: new Date(), html: text, id: clientSideID, mentioned_users: mentioned_users, reactions: [], status: 'sending', text: text, type: 'regular', user: client.user }, ((parent === null || parent === void 0 ? void 0 : parent.id) ? { parent_id: parent.id } : null));
6531
- };
6532
6542
  var sendMessage = function (_a, customMessageData) {
6533
- var _b = _a.attachments, attachments = _b === void 0 ? [] : _b, _c = _a.mentioned_users, mentioned_users = _c === void 0 ? [] : _c, _d = _a.parent, parent = _d === void 0 ? undefined : _d, _e = _a.text, text = _e === void 0 ? '' : _e;
6543
+ var _b = _a.attachments, attachments = _b === void 0 ? [] : _b, _c = _a.mentioned_users, mentioned_users = _c === void 0 ? [] : _c, parent = _a.parent, _d = _a.text, text = _d === void 0 ? '' : _d;
6534
6544
  return __awaiter(void 0, void 0, void 0, function () {
6535
6545
  var messagePreview;
6546
+ var _e;
6536
6547
  return __generator(this, function (_f) {
6537
6548
  switch (_f.label) {
6538
6549
  case 0:
6539
6550
  channel.state.filterErrorMessages();
6540
- messagePreview = createMessagePreview(text, attachments, parent, mentioned_users);
6551
+ messagePreview = __assign({ __html: text, attachments: attachments, created_at: new Date(), html: text, id: (_e = customMessageData === null || customMessageData === void 0 ? void 0 : customMessageData.id) !== null && _e !== void 0 ? _e : client.userID + "-" + nanoid.nanoid(), mentioned_users: mentioned_users, reactions: [], status: 'sending', text: text, type: 'regular', user: client.user }, ((parent === null || parent === void 0 ? void 0 : parent.id) ? { parent_id: parent.id } : null));
6541
6552
  updateMessage(messagePreview);
6542
6553
  return [4 /*yield*/, doSendMessage(messagePreview, customMessageData)];
6543
6554
  case 1:
@@ -7671,7 +7682,7 @@ var UnMemoizedChannelList = function (props) {
7671
7682
  */
7672
7683
  var ChannelList = React__default['default'].memo(UnMemoizedChannelList);
7673
7684
 
7674
- var version = '9.1.4';
7685
+ var version = '9.1.5';
7675
7686
 
7676
7687
  var useChat = function (_a) {
7677
7688
  var _b, _c;
@@ -9321,15 +9332,18 @@ var VirtualizedMessageListWithContext = function (props) {
9321
9332
  var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
9322
9333
  return (React__default['default'].createElement(Message, { closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: props.customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, message: message, Message: MessageUIComponent, messageActions: props.messageActions }));
9323
9334
  }, [customMessageRenderer, shouldGroupByUser, numItemsPrepended]);
9335
+ var Item = React.useMemo(function () {
9336
+ // using 'display: inline-block'
9337
+ // traps CSS margins of the item elements, preventing incorrect item measurements
9338
+ var Item = function (props) { return (React__default['default'].createElement("div", __assign({}, props, { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage) || 'str-chat__virtual-list-message-wrapper' }))); };
9339
+ return Item;
9340
+ }, [customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage]);
9324
9341
  var virtuosoComponents = React.useMemo(function () {
9325
9342
  var EmptyPlaceholder = function () { return (React__default['default'].createElement(React__default['default'].Fragment, null, EmptyStateIndicator$1 && React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'message' }))); };
9326
9343
  var Header = function () {
9327
9344
  return loadingMore ? (React__default['default'].createElement("div", { className: 'str-chat__virtual-list__loading' },
9328
9345
  React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))) : (React__default['default'].createElement(React__default['default'].Fragment, null));
9329
9346
  };
9330
- var virtualMessageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage) || 'str-chat__virtual-list-message-wrapper';
9331
- // using 'display: inline-block' traps CSS margins of the item elements, preventing incorrect item measurements
9332
- var Item = function (props) { return React__default['default'].createElement("div", __assign({}, props, { className: virtualMessageClass })); };
9333
9347
  var Footer = function () {
9334
9348
  return TypingIndicator ? React__default['default'].createElement(TypingIndicator, { avatarSize: 24 }) : React__default['default'].createElement(React__default['default'].Fragment, null);
9335
9349
  };
@@ -9369,15 +9383,15 @@ var VirtualizedMessageListWithContext = function (props) {
9369
9383
  return null;
9370
9384
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
9371
9385
  React__default['default'].createElement("div", { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list' },
9372
- React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, endReached: endReached, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: function (i) { return messageRenderer(processedMessages, i); }, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
9386
+ React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, computeItemKey: function (index) {
9387
+ return processedMessages[numItemsPrepended + index - PREPEND_OFFSET].id;
9388
+ }, endReached: endReached, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: function (i) { return messageRenderer(processedMessages, i); }, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
9373
9389
  React__default['default'].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom }),
9374
9390
  giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
9375
9391
  };
9376
9392
  /**
9377
9393
  * The VirtualizedMessageList component renders a list of messages in a virtualized list.
9378
9394
  * It is a consumer of the React contexts set in [Channel](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Channel/Channel.tsx).
9379
- *
9380
- * **Note**: It works well when there are thousands of messages in a channel, it has a shortcoming though - the message UI should have a fixed height.
9381
9395
  */
9382
9396
  function VirtualizedMessageList(props) {
9383
9397
  var _a = useChannelActionContext('VirtualizedMessageList'), jumpToLatestMessage = _a.jumpToLatestMessage, loadMore = _a.loadMore, loadMoreNewer = _a.loadMoreNewer;