stream-chat-react 6.8.0 → 6.11.0
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/CHANGELOG.md +1633 -0
- package/dist/browser.full-bundle.js +11245 -10648
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +3 -3
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/Card.js +1 -1
- package/dist/components/AutoCompleteTextarea/Header.d.ts +2 -0
- package/dist/components/AutoCompleteTextarea/Header.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Header.js +10 -9
- package/dist/components/AutoCompleteTextarea/List.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/List.js +2 -2
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +3 -1
- package/dist/components/Channel/Channel.d.ts +2 -0
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +82 -102
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +7 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +92 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +4 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts.map +1 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.js +9 -0
- package/dist/components/Channel/hooks/useEditMessageHandler.js +1 -1
- package/dist/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
- package/dist/components/ChannelHeader/ChannelHeader.js +3 -3
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +3 -3
- package/dist/components/ChannelList/hooks/useChannelDeletedListener.js +1 -1
- package/dist/components/ChannelList/hooks/useChannelHiddenListener.js +1 -1
- package/dist/components/ChannelList/hooks/useChannelTruncatedListener.js +1 -1
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +1 -1
- package/dist/components/ChannelList/hooks/useChannelVisibleListener.js +1 -1
- package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.js +1 -1
- package/dist/components/ChannelList/hooks/useMessageNewListener.js +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.js +3 -5
- package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.js +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +0 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.js +7 -15
- package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.js +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +2 -2
- package/dist/components/ChannelPreview/hooks/useIsChannelMuted.js +1 -1
- package/dist/components/ChannelSearch/ChannelSearch.js +1 -1
- package/dist/components/ChannelSearch/SearchInput.js +1 -1
- package/dist/components/ChannelSearch/SearchResults.js +1 -1
- package/dist/components/Chat/Chat.d.ts +1 -1
- package/dist/components/Chat/Chat.d.ts.map +1 -1
- package/dist/components/Chat/Chat.js +14 -12
- package/dist/components/Chat/hooks/useChat.js +1 -1
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts +4 -0
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -0
- package/dist/components/Chat/hooks/useCreateChatContext.js +21 -0
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +1 -0
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts.map +1 -1
- package/dist/components/ChatAutoComplete/ChatAutoComplete.js +3 -3
- package/dist/components/ChatDown/ChatDown.js +1 -1
- package/dist/components/DateSeparator/DateSeparator.js +1 -1
- package/dist/components/EmptyStateIndicator/EmptyStateIndicator.js +1 -1
- package/dist/components/EventComponent/EventComponent.js +1 -1
- package/dist/components/Gallery/Gallery.js +1 -1
- package/dist/components/Loading/LoadingErrorIndicator.js +1 -1
- package/dist/components/MML/MML.js +1 -1
- package/dist/components/Message/FixedHeightMessage.js +4 -4
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +3 -6
- package/dist/components/Message/MessageCommerce.js +2 -2
- package/dist/components/Message/MessageDeleted.js +1 -1
- package/dist/components/Message/MessageLivestream.d.ts.map +1 -1
- package/dist/components/Message/MessageLivestream.js +5 -6
- package/dist/components/Message/MessageOptions.js +1 -1
- package/dist/components/Message/MessageRepliesCountButton.js +1 -1
- package/dist/components/Message/MessageSimple.js +2 -2
- package/dist/components/Message/MessageStatus.d.ts.map +1 -1
- package/dist/components/Message/MessageStatus.js +4 -4
- package/dist/components/Message/MessageTeam.js +3 -3
- package/dist/components/Message/MessageText.d.ts.map +1 -1
- package/dist/components/Message/MessageText.js +3 -3
- package/dist/components/Message/MessageTimestamp.d.ts.map +1 -1
- package/dist/components/Message/MessageTimestamp.js +2 -2
- package/dist/components/Message/QuotedMessage.js +3 -3
- package/dist/components/Message/hooks/useActionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useActionHandler.js +2 -2
- package/dist/components/Message/hooks/useDeleteHandler.js +3 -3
- package/dist/components/Message/hooks/useFlagHandler.js +2 -2
- package/dist/components/Message/hooks/useMentionsHandler.js +1 -1
- package/dist/components/Message/hooks/useMuteHandler.js +3 -3
- package/dist/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useOpenThreadHandler.js +1 -1
- package/dist/components/Message/hooks/usePinHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/usePinHandler.js +10 -17
- package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useReactionHandler.js +5 -6
- package/dist/components/Message/hooks/useRetryHandler.js +1 -1
- package/dist/components/Message/hooks/useUserRole.d.ts +2 -2
- package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserRole.js +8 -6
- package/dist/components/Message/types.d.ts +1 -1
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +1 -0
- package/dist/components/MessageActions/MessageActions.js +2 -2
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActionsBox.js +3 -3
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -1
- package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
- package/dist/components/MessageInput/EditMessageForm.js +4 -4
- package/dist/components/MessageInput/EmojiPicker.js +3 -3
- package/dist/components/MessageInput/MessageInput.d.ts +1 -1
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInput.js +3 -2
- package/dist/components/MessageInput/MessageInputFlat.js +4 -4
- package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputSmall.js +4 -4
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
- package/dist/components/MessageInput/QuotedMessagePreview.js +4 -4
- package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
- package/dist/components/MessageInput/UploadsPreview.js +2 -2
- package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useAttachments.js +1 -1
- package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCommandTrigger.js +2 -3
- package/dist/components/MessageInput/hooks/useCooldownTimer.js +2 -2
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +4 -0
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +91 -0
- package/dist/components/MessageInput/hooks/useEmojiIndex.js +1 -1
- package/dist/components/MessageInput/hooks/useFileUploads.js +3 -3
- package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useImageUploads.js +3 -3
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +2 -3
- package/dist/components/MessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +3 -3
- package/dist/components/MessageInput/hooks/useUserTrigger.js +3 -2
- package/dist/components/MessageInput/hooks/utils.d.ts +1 -0
- package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/utils.js +7 -4
- package/dist/components/MessageInput/icons.js +5 -5
- package/dist/components/MessageList/ConnectionStatus.js +2 -2
- package/dist/components/MessageList/MessageList.d.ts +1 -9
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +10 -18
- package/dist/components/MessageList/MessageListNotifications.d.ts +11 -0
- package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -0
- package/dist/components/MessageList/MessageListNotifications.js +12 -0
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +4 -2
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +13 -14
- package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useEnrichedMessages.js +2 -2
- package/dist/components/MessageList/hooks/useGiphyPreview.js +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.js +2 -2
- package/dist/components/MessageList/hooks/useMessageListScrollManager.js +1 -1
- package/dist/components/Modal/Modal.js +1 -1
- package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionSelector.js +3 -3
- package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.js +2 -2
- package/dist/components/Reactions/SimpleReactionsList.js +2 -2
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/Thread.js +8 -9
- package/dist/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.js +3 -3
- package/dist/components/Window/Window.js +1 -1
- package/dist/context/ChannelActionContext.d.ts +2 -2
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- package/dist/context/ChannelActionContext.js +8 -3
- package/dist/context/ChannelStateContext.d.ts +4 -3
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/context/ChannelStateContext.js +8 -3
- package/dist/context/ChatContext.d.ts +4 -3
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ChatContext.js +9 -2
- package/dist/context/ComponentContext.d.ts +3 -3
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/ComponentContext.js +8 -3
- package/dist/context/EmojiContext.d.ts +2 -2
- package/dist/context/EmojiContext.d.ts.map +1 -1
- package/dist/context/EmojiContext.js +8 -3
- package/dist/context/MessageContext.d.ts +3 -3
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/context/MessageContext.js +9 -2
- package/dist/context/MessageInputContext.d.ts +1 -4
- package/dist/context/MessageInputContext.d.ts.map +1 -1
- package/dist/context/MessageInputContext.js +4 -6
- package/dist/context/TranslationContext.d.ts +1 -1
- package/dist/context/TranslationContext.d.ts.map +1 -1
- package/dist/context/TranslationContext.js +8 -1
- package/dist/context/TypingContext.d.ts +2 -2
- package/dist/context/TypingContext.d.ts.map +1 -1
- package/dist/context/TypingContext.js +9 -2
- package/dist/css/index.css +1 -1
- package/dist/i18n/Streami18n.js +2 -2
- package/dist/i18n/de.json +4 -4
- package/dist/index.cjs.js +661 -426
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/Avatar.scss +19 -2
- package/dist/scss/Message.scss +2 -1
- package/dist/scss/MessageList.scss +10 -2
- package/dist/scss/MessageNotification.scss +36 -0
- package/dist/scss/_base.scss +4 -3
- package/dist/scss/_variables.scss +1 -1
- package/dist/utils.d.ts +9 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +27 -20
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -5
|
@@ -4,7 +4,7 @@ import giphyLogo from '../../assets/Poweredby_100px-White_VertText.png';
|
|
|
4
4
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
5
5
|
var UnMemoizedCard = function (props) {
|
|
6
6
|
var image_url = props.image_url, og_scrape_url = props.og_scrape_url, text = props.text, thumb_url = props.thumb_url, title = props.title, title_link = props.title_link, type = props.type;
|
|
7
|
-
var t = useTranslationContext().t;
|
|
7
|
+
var t = useTranslationContext('Card').t;
|
|
8
8
|
var image = thumb_url || image_url;
|
|
9
9
|
var trimUrl = function (url) {
|
|
10
10
|
if (url !== undefined && url !== null) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
export declare type CurrentTrigger<T extends string = string> = '/' | '@' | ':' | T;
|
|
2
3
|
export declare type SuggestionListHeaderProps = {
|
|
4
|
+
currentTrigger: CurrentTrigger;
|
|
3
5
|
value: string;
|
|
4
6
|
};
|
|
5
7
|
export declare const DefaultSuggestionListHeader: React.FC<SuggestionListHeaderProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,oBAAY,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAE5E,oBAAY,yBAAyB,GAAG;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAgC3E,CAAC"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
3
|
-
export var DefaultSuggestionListHeader = function (
|
|
4
|
-
var value =
|
|
5
|
-
var t = useTranslationContext().t;
|
|
6
|
-
|
|
3
|
+
export var DefaultSuggestionListHeader = function (props) {
|
|
4
|
+
var currentTrigger = props.currentTrigger, value = props.value;
|
|
5
|
+
var t = useTranslationContext('DefaultSuggestionListHeader').t;
|
|
6
|
+
var triggerIndex = value.lastIndexOf(currentTrigger);
|
|
7
|
+
if (currentTrigger === '/') {
|
|
7
8
|
return (React.createElement(React.Fragment, null,
|
|
8
9
|
t('Commands matching'),
|
|
9
10
|
" ",
|
|
10
|
-
React.createElement("strong", null, value.
|
|
11
|
+
React.createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
11
12
|
}
|
|
12
|
-
if (
|
|
13
|
+
if (currentTrigger === ':') {
|
|
13
14
|
return (React.createElement(React.Fragment, null,
|
|
14
15
|
t('Emoji matching'),
|
|
15
16
|
" ",
|
|
16
|
-
React.createElement("strong", null, value.
|
|
17
|
+
React.createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
17
18
|
}
|
|
18
|
-
if (
|
|
19
|
+
if (currentTrigger === '@') {
|
|
19
20
|
return (React.createElement(React.Fragment, null,
|
|
20
21
|
t('People matching'),
|
|
21
22
|
" ",
|
|
22
|
-
React.createElement("strong", null, value.
|
|
23
|
+
React.createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
23
24
|
}
|
|
24
25
|
return null;
|
|
25
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/List.js"],"names":[],"mappings":"AASO,
|
|
1
|
+
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/List.js"],"names":[],"mappings":"AASO,8CA8IN"}
|
|
@@ -99,8 +99,8 @@ export var List = function (props) {
|
|
|
99
99
|
};
|
|
100
100
|
return (React.createElement("ul", { className: "rta__list " + (className || ''), style: style },
|
|
101
101
|
React.createElement("li", { className: 'rta__list-header' },
|
|
102
|
-
React.createElement(SuggestionHeader, { value: propValue })),
|
|
102
|
+
React.createElement(SuggestionHeader, { currentTrigger: currentTrigger, value: propValue })),
|
|
103
103
|
values.map(function (item, i) { return (React.createElement(SuggestionItem, { className: itemClassName, component: component, item: restructureItem(item), key: getId(item), onClickHandler: handleClick, onSelectHandler: selectItem, ref: function (ref) {
|
|
104
104
|
itemsRef[i] = ref;
|
|
105
|
-
}, selected: isSelected(item), style: itemStyle })); })));
|
|
105
|
+
}, selected: isSelected(item), style: itemStyle, value: propValue })); })));
|
|
106
106
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,oBAAY,WAAW,CAAC,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC,GAAG,eAAe,IAAI;IAC1E,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;IACpD,8BAA8B;IAC9B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;IACxD;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,gJA4DlB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { getWholeChar } from '../../utils';
|
|
2
3
|
/**
|
|
3
4
|
* A round avatar image with fallback to username's first letter
|
|
4
5
|
*/
|
|
@@ -10,7 +11,8 @@ export var Avatar = function (props) {
|
|
|
10
11
|
setError(false);
|
|
11
12
|
setLoaded(false);
|
|
12
13
|
}, [image]);
|
|
13
|
-
var
|
|
14
|
+
var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
|
|
15
|
+
var initials = getWholeChar(nameStr, 0);
|
|
14
16
|
return (React.createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
|
|
15
17
|
flexBasis: size + "px",
|
|
16
18
|
fontSize: size / 2 + "px",
|
|
@@ -99,6 +99,8 @@ export declare type ChannelProps<At extends DefaultAttachmentType = DefaultAttac
|
|
|
99
99
|
ReactionsList?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['ReactionsList'];
|
|
100
100
|
/** Custom UI component for send button, defaults to and accepts same props as: [SendButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/icons.tsx) */
|
|
101
101
|
SendButton?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['SendButton'];
|
|
102
|
+
/** If true, skips the message data string comparison used to memoize the current channel messages (helpful for channels with 1000s of messages) */
|
|
103
|
+
skipMessageDataMemoization?: boolean;
|
|
102
104
|
/** Custom UI component to display the header of a `Thread`, defaults to and accepts same props as: [DefaultThreadHeader](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Thread/Thread.tsx) */
|
|
103
105
|
ThreadHeader?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['ThreadHeader'];
|
|
104
106
|
/** Custom UI component to display the start of a threaded `MessageList`, defaults to and accepts same props as: [DefaultThreadStart](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Thread/Thread.tsx) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/Channel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/Channel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -61,13 +61,15 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
|
61
61
|
to[j] = from[i];
|
|
62
62
|
return to;
|
|
63
63
|
};
|
|
64
|
-
import React, {
|
|
64
|
+
import React, { useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, } from 'react';
|
|
65
65
|
import debounce from 'lodash.debounce';
|
|
66
66
|
import throttle from 'lodash.throttle';
|
|
67
67
|
import { logChatPromiseExecution, } from 'stream-chat';
|
|
68
68
|
import { v4 as uuidv4 } from 'uuid';
|
|
69
69
|
import { channelReducer, initialState } from './channelState';
|
|
70
70
|
import { commonEmoji, defaultMinimalEmojis, emojiSetDef } from './emojiData';
|
|
71
|
+
import { useCreateChannelStateContext } from './hooks/useCreateChannelStateContext';
|
|
72
|
+
import { useCreateTypingContext } from './hooks/useCreateTypingContext';
|
|
71
73
|
import { useEditMessageHandler } from './hooks/useEditMessageHandler';
|
|
72
74
|
import { useIsMounted } from './hooks/useIsMounted';
|
|
73
75
|
import { useMentionsHandlers } from './hooks/useMentionsHandlers';
|
|
@@ -84,39 +86,39 @@ import { TypingProvider } from '../../context/TypingContext';
|
|
|
84
86
|
import defaultEmojiData from '../../stream-emoji.json';
|
|
85
87
|
var UnMemoizedChannel = function (props) {
|
|
86
88
|
var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a;
|
|
87
|
-
var contextChannel = useChatContext().channel;
|
|
89
|
+
var contextChannel = useChatContext('Channel').channel;
|
|
88
90
|
var channel = propsChannel || contextChannel;
|
|
89
91
|
if (!(channel === null || channel === void 0 ? void 0 : channel.cid))
|
|
90
92
|
return EmptyPlaceholder;
|
|
91
93
|
return React.createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
|
|
92
94
|
};
|
|
93
95
|
var ChannelInner = function (props) {
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
-
var
|
|
97
|
-
var
|
|
98
|
-
var _g = useState(),
|
|
96
|
+
var _a;
|
|
97
|
+
var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.emojiData, emojiData = _b === void 0 ? defaultEmojiData : _b, _c = props.LoadingErrorIndicator, LoadingErrorIndicator = _c === void 0 ? DefaultLoadingErrorIndicator : _c, _d = props.LoadingIndicator, LoadingIndicator = _d === void 0 ? DefaultLoadingIndicator : _d, maxNumberOfFiles = props.maxNumberOfFiles, _e = props.multipleUploads, multipleUploads = _e === void 0 ? true : _e, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, skipMessageDataMemoization = props.skipMessageDataMemoization;
|
|
98
|
+
var _f = useChatContext('Channel'), client = _f.client, customClasses = _f.customClasses, mutes = _f.mutes, theme = _f.theme, useImageFlagEmojisOnWindows = _f.useImageFlagEmojisOnWindows;
|
|
99
|
+
var t = useTranslationContext('Channel').t;
|
|
100
|
+
var _g = useState(channel.getConfig()), channelConfig = _g[0], setChannelConfig = _g[1];
|
|
101
|
+
var _h = useState([]), notifications = _h[0], setNotifications = _h[1];
|
|
102
|
+
var _j = useState(), quotedMessage = _j[0], setQuotedMessage = _j[1];
|
|
99
103
|
var notificationTimeouts = [];
|
|
100
|
-
var
|
|
104
|
+
var _k = useReducer(channelReducer, initialState), state = _k[0], dispatch = _k[1];
|
|
101
105
|
var isMounted = useIsMounted();
|
|
102
106
|
var originalTitle = useRef('');
|
|
103
107
|
var lastRead = useRef(new Date());
|
|
104
108
|
var online = useRef(true);
|
|
105
|
-
var
|
|
109
|
+
var channelCapabilitiesArray = (_a = channel.data) === null || _a === void 0 ? void 0 : _a.own_capabilities;
|
|
106
110
|
var emojiConfig = {
|
|
107
111
|
commonEmoji: commonEmoji,
|
|
108
112
|
defaultMinimalEmojis: defaultMinimalEmojis,
|
|
109
113
|
emojiData: emojiData,
|
|
110
114
|
emojiSetDef: emojiSetDef,
|
|
111
115
|
};
|
|
112
|
-
var throttledCopyStateFromChannel =
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
var _a;
|
|
119
|
-
if (!channel || channel.disconnected || !((_a = channel.getConfig()) === null || _a === void 0 ? void 0 : _a.read_events)) {
|
|
116
|
+
var throttledCopyStateFromChannel = throttle(function () { return dispatch({ channel: channel, type: 'copyStateFromChannelOnEvent' }); }, 500, {
|
|
117
|
+
leading: true,
|
|
118
|
+
trailing: true,
|
|
119
|
+
});
|
|
120
|
+
var markRead = function () {
|
|
121
|
+
if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
|
|
120
122
|
return;
|
|
121
123
|
}
|
|
122
124
|
lastRead.current = new Date();
|
|
@@ -126,13 +128,16 @@ var ChannelInner = function (props) {
|
|
|
126
128
|
else {
|
|
127
129
|
logChatPromiseExecution(channel.markRead(), 'mark read');
|
|
128
130
|
}
|
|
129
|
-
if (
|
|
131
|
+
if (activeUnreadHandler) {
|
|
132
|
+
activeUnreadHandler(0, originalTitle.current);
|
|
133
|
+
}
|
|
134
|
+
else if (originalTitle.current) {
|
|
130
135
|
document.title = originalTitle.current;
|
|
131
136
|
}
|
|
132
|
-
}
|
|
133
|
-
var markReadThrottled =
|
|
134
|
-
var handleEvent =
|
|
135
|
-
var _a, _b, _c, _d
|
|
137
|
+
};
|
|
138
|
+
var markReadThrottled = throttle(markRead, 500, { leading: true, trailing: true });
|
|
139
|
+
var handleEvent = function (event) {
|
|
140
|
+
var _a, _b, _c, _d;
|
|
136
141
|
if (event.message) {
|
|
137
142
|
dispatch({
|
|
138
143
|
channel: channel,
|
|
@@ -140,12 +145,10 @@ var ChannelInner = function (props) {
|
|
|
140
145
|
type: 'updateThreadOnEvent',
|
|
141
146
|
});
|
|
142
147
|
}
|
|
143
|
-
if (event.type === '
|
|
144
|
-
dispatch({
|
|
145
|
-
channel: channel,
|
|
146
|
-
type: 'setTyping',
|
|
147
|
-
});
|
|
148
|
+
if (event.type === 'user.watching.start' || event.type === 'user.watching.stop')
|
|
148
149
|
return;
|
|
150
|
+
if (event.type === 'typing.start' || event.type === 'typing.stop') {
|
|
151
|
+
return dispatch({ channel: channel, type: 'setTyping' });
|
|
149
152
|
}
|
|
150
153
|
if (event.type === 'connection.changed' && typeof event.online === 'boolean') {
|
|
151
154
|
online.current = event.online;
|
|
@@ -159,7 +162,7 @@ var ChannelInner = function (props) {
|
|
|
159
162
|
if (!document.hidden) {
|
|
160
163
|
markReadThrottled();
|
|
161
164
|
}
|
|
162
|
-
else if ((
|
|
165
|
+
else if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
|
|
163
166
|
var unread = channel.countUnread(lastRead.current);
|
|
164
167
|
if (activeUnreadHandler) {
|
|
165
168
|
activeUnreadHandler(unread, originalTitle.current);
|
|
@@ -171,28 +174,29 @@ var ChannelInner = function (props) {
|
|
|
171
174
|
}
|
|
172
175
|
}
|
|
173
176
|
throttledCopyStateFromChannel();
|
|
174
|
-
}
|
|
177
|
+
};
|
|
175
178
|
// useLayoutEffect here to prevent spinner. Use Suspense when it is available in stable release
|
|
176
179
|
useLayoutEffect(function () {
|
|
177
180
|
var errored = false;
|
|
178
181
|
var done = false;
|
|
179
182
|
var onVisibilityChange = function () {
|
|
180
|
-
if (!document.hidden)
|
|
183
|
+
if (!document.hidden)
|
|
181
184
|
markRead();
|
|
182
|
-
}
|
|
183
185
|
};
|
|
184
186
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
185
|
-
var e_1;
|
|
187
|
+
var config, e_1;
|
|
186
188
|
return __generator(this, function (_a) {
|
|
187
189
|
switch (_a.label) {
|
|
188
190
|
case 0:
|
|
189
|
-
if (
|
|
191
|
+
if (!!channel.initialized) return [3 /*break*/, 4];
|
|
190
192
|
_a.label = 1;
|
|
191
193
|
case 1:
|
|
192
194
|
_a.trys.push([1, 3, , 4]);
|
|
193
195
|
return [4 /*yield*/, channel.watch()];
|
|
194
196
|
case 2:
|
|
195
197
|
_a.sent();
|
|
198
|
+
config = channel.getConfig();
|
|
199
|
+
setChannelConfig(config);
|
|
196
200
|
return [3 /*break*/, 4];
|
|
197
201
|
case 3:
|
|
198
202
|
e_1 = _a.sent();
|
|
@@ -202,7 +206,7 @@ var ChannelInner = function (props) {
|
|
|
202
206
|
case 4:
|
|
203
207
|
done = true;
|
|
204
208
|
originalTitle.current = document.title;
|
|
205
|
-
if (
|
|
209
|
+
if (!errored) {
|
|
206
210
|
dispatch({ channel: channel, type: 'initStateFromChannel' });
|
|
207
211
|
if (channel.countUnread() > 0)
|
|
208
212
|
markRead();
|
|
@@ -222,15 +226,14 @@ var ChannelInner = function (props) {
|
|
|
222
226
|
if (errored || !done)
|
|
223
227
|
return;
|
|
224
228
|
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
225
|
-
|
|
226
|
-
channel.off(handleEvent);
|
|
229
|
+
channel === null || channel === void 0 ? void 0 : channel.off(handleEvent);
|
|
227
230
|
client.off('connection.changed', handleEvent);
|
|
228
231
|
client.off('connection.recovered', handleEvent);
|
|
229
232
|
client.off('user.updated', handleEvent);
|
|
230
233
|
client.off('user.deleted', handleEvent);
|
|
231
234
|
notificationTimeouts.forEach(clearTimeout);
|
|
232
235
|
};
|
|
233
|
-
}, [channel
|
|
236
|
+
}, [channel.cid]);
|
|
234
237
|
useEffect(function () {
|
|
235
238
|
var _a;
|
|
236
239
|
if (state.thread && ((_a = state.messages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -257,17 +260,15 @@ var ChannelInner = function (props) {
|
|
|
257
260
|
}, 5000);
|
|
258
261
|
notificationTimeouts.push(timeout);
|
|
259
262
|
};
|
|
260
|
-
var loadMoreFinished =
|
|
263
|
+
var loadMoreFinished = debounce(function (hasMore, messages) {
|
|
261
264
|
if (!isMounted.current)
|
|
262
265
|
return;
|
|
263
266
|
dispatch({ hasMore: hasMore, messages: messages, type: 'loadMoreFinished' });
|
|
264
267
|
}, 2000, {
|
|
265
268
|
leading: true,
|
|
266
269
|
trailing: true,
|
|
267
|
-
})
|
|
268
|
-
var loadMore =
|
|
269
|
-
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
270
|
-
function (limit) {
|
|
270
|
+
});
|
|
271
|
+
var loadMore = function (limit) {
|
|
271
272
|
if (limit === void 0) { limit = 100; }
|
|
272
273
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
273
274
|
var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
|
|
@@ -275,7 +276,7 @@ var ChannelInner = function (props) {
|
|
|
275
276
|
return __generator(this, function (_b) {
|
|
276
277
|
switch (_b.label) {
|
|
277
278
|
case 0:
|
|
278
|
-
if (!online.current || !window.navigator.onLine
|
|
279
|
+
if (!online.current || !window.navigator.onLine)
|
|
279
280
|
return [2 /*return*/, 0];
|
|
280
281
|
oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
|
|
281
282
|
if (state.loadingMore || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received')
|
|
@@ -310,27 +311,22 @@ var ChannelInner = function (props) {
|
|
|
310
311
|
}
|
|
311
312
|
});
|
|
312
313
|
});
|
|
313
|
-
}
|
|
314
|
-
var updateMessage =
|
|
315
|
-
|
|
316
|
-
return;
|
|
317
|
-
// adds the message to the local channel state..
|
|
318
|
-
// this adds to both the main channel state as well as any reply threads
|
|
314
|
+
};
|
|
315
|
+
var updateMessage = function (updatedMessage) {
|
|
316
|
+
// add the message to the local channel state
|
|
319
317
|
channel.state.addMessageSorted(updatedMessage, true);
|
|
320
318
|
dispatch({
|
|
321
319
|
channel: channel,
|
|
322
320
|
parentId: state.thread && updatedMessage.parent_id,
|
|
323
321
|
type: 'copyMessagesFromChannel',
|
|
324
322
|
});
|
|
325
|
-
}
|
|
323
|
+
};
|
|
326
324
|
var isUserResponseArray = function (output) { var _a; return ((_a = output[0]) === null || _a === void 0 ? void 0 : _a.id) != null; };
|
|
327
|
-
var doSendMessage =
|
|
325
|
+
var doSendMessage = function (message, customMessageData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
328
326
|
var attachments, id, _a, mentioned_users, parent_id, text, mentions, messageData, messageResponse, error_1, stringError, parsedError;
|
|
329
327
|
return __generator(this, function (_b) {
|
|
330
328
|
switch (_b.label) {
|
|
331
329
|
case 0:
|
|
332
|
-
if (!channel)
|
|
333
|
-
return [2 /*return*/];
|
|
334
330
|
attachments = message.attachments, id = message.id, _a = message.mentioned_users, mentioned_users = _a === void 0 ? [] : _a, parent_id = message.parent_id, text = message.text;
|
|
335
331
|
mentions = isUserResponseArray(mentioned_users)
|
|
336
332
|
? mentioned_users.map(function (_a) {
|
|
@@ -354,7 +350,7 @@ var ChannelInner = function (props) {
|
|
|
354
350
|
_b.label = 5;
|
|
355
351
|
case 5:
|
|
356
352
|
// replace it after send is completed
|
|
357
|
-
if (messageResponse
|
|
353
|
+
if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
|
|
358
354
|
updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
|
|
359
355
|
}
|
|
360
356
|
if (quotedMessage)
|
|
@@ -369,25 +365,20 @@ var ChannelInner = function (props) {
|
|
|
369
365
|
case 7: return [2 /*return*/];
|
|
370
366
|
}
|
|
371
367
|
});
|
|
372
|
-
}); }
|
|
373
|
-
var createMessagePreview =
|
|
374
|
-
// create a preview of the message
|
|
368
|
+
}); };
|
|
369
|
+
var createMessagePreview = function (text, attachments, parent, mentioned_users) {
|
|
375
370
|
var clientSideID = client.userID + "-" + uuidv4();
|
|
376
371
|
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));
|
|
377
|
-
}
|
|
378
|
-
var sendMessage =
|
|
372
|
+
};
|
|
373
|
+
var sendMessage = function (_a, customMessageData) {
|
|
379
374
|
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;
|
|
380
375
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
381
376
|
var messagePreview;
|
|
382
377
|
return __generator(this, function (_f) {
|
|
383
378
|
switch (_f.label) {
|
|
384
379
|
case 0:
|
|
385
|
-
if (!channel)
|
|
386
|
-
return [2 /*return*/];
|
|
387
|
-
// remove error messages upon submit
|
|
388
380
|
channel.state.filterErrorMessages();
|
|
389
381
|
messagePreview = createMessagePreview(text, attachments, parent, mentioned_users);
|
|
390
|
-
// first we add the message to the UI
|
|
391
382
|
updateMessage(messagePreview);
|
|
392
383
|
return [4 /*yield*/, doSendMessage(messagePreview, customMessageData)];
|
|
393
384
|
case 1:
|
|
@@ -396,62 +387,55 @@ var ChannelInner = function (props) {
|
|
|
396
387
|
}
|
|
397
388
|
});
|
|
398
389
|
});
|
|
399
|
-
}
|
|
400
|
-
var retrySendMessage =
|
|
390
|
+
};
|
|
391
|
+
var retrySendMessage = function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
401
392
|
return __generator(this, function (_a) {
|
|
402
393
|
switch (_a.label) {
|
|
403
394
|
case 0:
|
|
404
|
-
// set the message status to sending
|
|
405
395
|
updateMessage(__assign(__assign({}, message), { errorStatusCode: undefined, status: 'sending' }));
|
|
406
|
-
// actually try to send the message...
|
|
407
396
|
return [4 /*yield*/, doSendMessage(message)];
|
|
408
397
|
case 1:
|
|
409
|
-
// actually try to send the message...
|
|
410
398
|
_a.sent();
|
|
411
399
|
return [2 /*return*/];
|
|
412
400
|
}
|
|
413
401
|
});
|
|
414
|
-
}); }
|
|
415
|
-
var removeMessage =
|
|
416
|
-
if (!channel)
|
|
417
|
-
return;
|
|
402
|
+
}); };
|
|
403
|
+
var removeMessage = function (message) {
|
|
418
404
|
channel.state.removeMessage(message);
|
|
419
405
|
dispatch({
|
|
420
406
|
channel: channel,
|
|
421
407
|
parentId: state.thread && message.parent_id,
|
|
422
408
|
type: 'copyMessagesFromChannel',
|
|
423
409
|
});
|
|
424
|
-
}
|
|
410
|
+
};
|
|
425
411
|
/** THREAD */
|
|
426
|
-
var openThread =
|
|
427
|
-
|
|
428
|
-
return;
|
|
429
|
-
if (event && event.preventDefault) {
|
|
430
|
-
event.preventDefault();
|
|
431
|
-
}
|
|
412
|
+
var openThread = function (message, event) {
|
|
413
|
+
event.preventDefault();
|
|
432
414
|
dispatch({ channel: channel, message: message, type: 'openThread' });
|
|
433
|
-
}
|
|
434
|
-
var
|
|
415
|
+
};
|
|
416
|
+
var closeThread = function (event) {
|
|
417
|
+
event.preventDefault();
|
|
418
|
+
dispatch({ type: 'closeThread' });
|
|
419
|
+
};
|
|
420
|
+
var loadMoreThreadFinished = debounce(function (threadHasMore, threadMessages) {
|
|
435
421
|
dispatch({
|
|
436
422
|
threadHasMore: threadHasMore,
|
|
437
423
|
threadMessages: threadMessages,
|
|
438
424
|
type: 'loadMoreThreadFinished',
|
|
439
425
|
});
|
|
440
|
-
}, 2000, { leading: true, trailing: true })
|
|
441
|
-
var loadMoreThread =
|
|
426
|
+
}, 2000, { leading: true, trailing: true });
|
|
427
|
+
var loadMoreThread = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
442
428
|
var parentID, oldMessages, oldestMessageID, limit, queryResponse, threadHasMoreMessages, newThreadMessages, e_3;
|
|
443
429
|
var _a;
|
|
444
430
|
return __generator(this, function (_b) {
|
|
445
431
|
switch (_b.label) {
|
|
446
432
|
case 0:
|
|
447
|
-
|
|
448
|
-
if (!channel || state.threadLoadingMore || !state.thread)
|
|
433
|
+
if (state.threadLoadingMore || !state.thread)
|
|
449
434
|
return [2 /*return*/];
|
|
450
435
|
dispatch({ type: 'startLoadingThread' });
|
|
451
436
|
parentID = state.thread.id;
|
|
452
437
|
if (!parentID) {
|
|
453
|
-
dispatch({ type: 'closeThread' });
|
|
454
|
-
return [2 /*return*/];
|
|
438
|
+
return [2 /*return*/, dispatch({ type: 'closeThread' })];
|
|
455
439
|
}
|
|
456
440
|
oldMessages = channel.state.threads[parentID] || [];
|
|
457
441
|
oldestMessageID = (_a = oldMessages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
@@ -467,7 +451,7 @@ var ChannelInner = function (props) {
|
|
|
467
451
|
queryResponse = _b.sent();
|
|
468
452
|
threadHasMoreMessages = queryResponse.messages.length === limit;
|
|
469
453
|
newThreadMessages = channel.state.threads[parentID] || [];
|
|
470
|
-
// next set loadingMore to false so we can start asking for more data
|
|
454
|
+
// next set loadingMore to false so we can start asking for more data
|
|
471
455
|
loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);
|
|
472
456
|
return [3 /*break*/, 4];
|
|
473
457
|
case 3:
|
|
@@ -477,18 +461,12 @@ var ChannelInner = function (props) {
|
|
|
477
461
|
case 4: return [2 /*return*/];
|
|
478
462
|
}
|
|
479
463
|
});
|
|
480
|
-
}); }
|
|
481
|
-
var closeThread = useCallback(function (event) {
|
|
482
|
-
if (event && event.preventDefault) {
|
|
483
|
-
event.preventDefault();
|
|
484
|
-
}
|
|
485
|
-
dispatch({ type: 'closeThread' });
|
|
486
|
-
}, []);
|
|
464
|
+
}); };
|
|
487
465
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
488
466
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
489
467
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
490
|
-
var channelStateContextValue = __assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount });
|
|
491
|
-
var channelActionContextValue = {
|
|
468
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
469
|
+
var channelActionContextValue = useMemo(function () { return ({
|
|
492
470
|
addNotification: addNotification,
|
|
493
471
|
closeThread: closeThread,
|
|
494
472
|
dispatch: dispatch,
|
|
@@ -502,8 +480,9 @@ var ChannelInner = function (props) {
|
|
|
502
480
|
retrySendMessage: retrySendMessage,
|
|
503
481
|
sendMessage: sendMessage,
|
|
504
482
|
setQuotedMessage: setQuotedMessage,
|
|
483
|
+
skipMessageDataMemoization: skipMessageDataMemoization,
|
|
505
484
|
updateMessage: updateMessage,
|
|
506
|
-
};
|
|
485
|
+
}); }, [channel.cid, loadMore, quotedMessage]);
|
|
507
486
|
var componentContextValue = useMemo(function () { return ({
|
|
508
487
|
Attachment: props.Attachment || DefaultAttachment,
|
|
509
488
|
AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
|
|
@@ -547,10 +526,11 @@ var ChannelInner = function (props) {
|
|
|
547
526
|
EmojiIndex: props.EmojiIndex,
|
|
548
527
|
EmojiPicker: props.EmojiPicker,
|
|
549
528
|
}); }, []);
|
|
550
|
-
var typingContextValue = {
|
|
529
|
+
var typingContextValue = useCreateTypingContext({
|
|
551
530
|
typing: typing,
|
|
552
|
-
};
|
|
531
|
+
});
|
|
553
532
|
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
533
|
+
var chatContainerClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chatContainer) || 'str-chat__container';
|
|
554
534
|
var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
|
|
555
535
|
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
556
536
|
? 'str-chat--windows-flags'
|
|
@@ -563,7 +543,7 @@ var ChannelInner = function (props) {
|
|
|
563
543
|
return (React.createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
564
544
|
React.createElement(LoadingIndicator, { size: 25 })));
|
|
565
545
|
}
|
|
566
|
-
if (!
|
|
546
|
+
if (!channel.watch) {
|
|
567
547
|
return (React.createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
568
548
|
React.createElement("div", null, t('Channel Missing'))));
|
|
569
549
|
}
|
|
@@ -573,7 +553,7 @@ var ChannelInner = function (props) {
|
|
|
573
553
|
React.createElement(ComponentProvider, { value: componentContextValue },
|
|
574
554
|
React.createElement(EmojiProvider, { value: emojiContextValue },
|
|
575
555
|
React.createElement(TypingProvider, { value: typingContextValue },
|
|
576
|
-
React.createElement("div", { className:
|
|
556
|
+
React.createElement("div", { className: "" + chatContainerClass }, children))))))));
|
|
577
557
|
};
|
|
578
558
|
/**
|
|
579
559
|
* A wrapper component that provides channel data and renders children.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ChannelStateContextValue } from '../../../context/ChannelStateContext';
|
|
2
|
+
import type { DefaultAttachmentType, DefaultChannelType, DefaultMessageType, DefaultUserType } from '../../../types/types';
|
|
3
|
+
export declare const useCreateChannelStateContext: <At extends DefaultAttachmentType = DefaultAttachmentType, Ch extends DefaultChannelType = DefaultChannelType, Co extends import("stream-chat").LiteralStringForUnion = import("stream-chat").LiteralStringForUnion, Ev extends import("../../../types/types").UnknownType = import("../../../types/types").UnknownType, Me extends DefaultMessageType = DefaultMessageType, Re extends import("../../../types/types").UnknownType = import("../../../types/types").UnknownType, Us extends DefaultUserType<Us> = DefaultUserType<import("../../../types/types").DefaultUserTypeInternal>>(value: Omit<ChannelStateContextValue<At, Ch, Co, Ev, Me, Re, Us>, "channelCapabilities"> & {
|
|
4
|
+
channelCapabilitiesArray: string[];
|
|
5
|
+
skipMessageDataMemoization?: boolean | undefined;
|
|
6
|
+
}) => ChannelStateContextValue<At, Ch, Co, Ev, Me, Re, Us>;
|
|
7
|
+
//# sourceMappingURL=useCreateChannelStateContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreateChannelStateContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Channel/hooks/useCreateChannelStateContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAErF,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAGlB,kBAAkB,EAElB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,4BAA4B;8BAUX,MAAM,EAAE;;0DA8HrC,CAAC"}
|