stream-chat-react 6.7.0 → 6.9.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/README.md +1 -1
- package/dist/browser.full-bundle.js +3989 -1360
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +10 -3
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.js +1 -1
- 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 +4 -0
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +69 -94
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +15 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +87 -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/ChannelList/ChannelList.d.ts +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/useNotificationAddedToChannelListener.d.ts +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +3 -2
- 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 +4 -6
- 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/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +10 -0
- 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/Message/hooks/useReactionHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useReactionHandler.js +1 -5
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -0
- package/dist/components/MessageInput/MessageInput.d.ts +3 -1
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInput.js +2 -1
- 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 +88 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +6 -1
- package/dist/components/MessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +2 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.js +19 -13
- package/dist/components/MessageInput/hooks/utils.d.ts +15 -0
- package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/utils.js +114 -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 +2 -2
- package/dist/css/index.css +1 -7329
- package/dist/index.cjs.js +449 -175
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/ActionsBox.scss +2 -0
- package/dist/scss/Attachment.scss +4 -0
- package/dist/scss/AttachmentActions.scss +1 -0
- package/dist/scss/Audio.scss +2 -0
- package/dist/scss/Avatar.scss +2 -0
- package/dist/scss/Card.scss +6 -2
- package/dist/scss/ChannelHeader.scss +22 -3
- package/dist/scss/ChannelList.scss +5 -6
- package/dist/scss/ChannelSearch.scss +2 -4
- package/dist/scss/ChatDown.scss +1 -0
- package/dist/scss/DateSeparator.scss +3 -0
- package/dist/scss/EditMessageForm.scss +4 -0
- package/dist/scss/EventComponent.scss +4 -0
- package/dist/scss/Gallery.scss +7 -1
- package/dist/scss/LoadMoreButton.scss +1 -0
- package/dist/scss/Message.scss +78 -2
- package/dist/scss/MessageInput.scss +3 -0
- package/dist/scss/MessageInputFlat.scss +8 -1
- package/dist/scss/MessageList.scss +10 -0
- package/dist/scss/MessageRepliesCountButton.scss +1 -0
- package/dist/scss/MessageTeam.scss +3 -7
- package/dist/scss/Modal.scss +3 -0
- package/dist/scss/ReactionList.scss +18 -18
- package/dist/scss/ReactionSelector.scss +4 -0
- package/dist/scss/SimpleReactionsList.scss +2 -1
- package/dist/scss/Thread.scss +19 -0
- package/dist/scss/TypingIndicator.scss +7 -0
- package/dist/scss/VirtualMessage.scss +8 -7
- package/dist/scss/_base.scss +17 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +22 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +10 -29
- package/CHANGELOG.md +0 -1534
- package/dist/css/index.js +0 -1
- package/dist/css/index.min.css +0 -1
|
@@ -216,7 +216,7 @@ var ReactTextareaAutocomplete = /** @class */ (function (_super) {
|
|
|
216
216
|
text: textToReplace,
|
|
217
217
|
};
|
|
218
218
|
}
|
|
219
|
-
if (!textToReplace.text) {
|
|
219
|
+
if (!textToReplace.text && currentTrigger !== ':') {
|
|
220
220
|
throw new Error("Output \"text\" is not defined! Object should has shape {text: string, caretPosition: string | number}. Check the implementation for trigger \"" + currentTrigger + "\" and its token \"" + actualToken + "\"\n");
|
|
221
221
|
}
|
|
222
222
|
if (!textToReplace.caretPosition) {
|
|
@@ -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",
|
|
@@ -9,6 +9,8 @@ import type { DefaultAttachmentType, DefaultChannelType, DefaultCommandType, Def
|
|
|
9
9
|
export declare type ChannelProps<At extends DefaultAttachmentType = DefaultAttachmentType, Ch extends DefaultChannelType = DefaultChannelType, Co extends DefaultCommandType = DefaultCommandType, Ev extends DefaultEventType = DefaultEventType, Me extends DefaultMessageType = DefaultMessageType, Re extends DefaultReactionType = DefaultReactionType, Us extends DefaultUserType<Us> = DefaultUserType> = {
|
|
10
10
|
/** List of accepted file types */
|
|
11
11
|
acceptedFiles?: string[];
|
|
12
|
+
/** Custom handler function that runs when the active channel has unread messages (i.e., when chat is running on a separate browser tab) */
|
|
13
|
+
activeUnreadHandler?: (unread: number, documentTitle: string) => void;
|
|
12
14
|
/** Custom UI component to display a message attachment, defaults to and accepts same props as: [Attachment](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/Attachment.tsx) */
|
|
13
15
|
Attachment?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['Attachment'];
|
|
14
16
|
/** Optional UI component to override the default suggestion Header component, defaults to and accepts same props as: [Header](https://github.com/GetStream/stream-chat-react/blob/master/src/components/AutoCompleteTextarea/Header.tsx) */
|
|
@@ -97,6 +99,8 @@ export declare type ChannelProps<At extends DefaultAttachmentType = DefaultAttac
|
|
|
97
99
|
ReactionsList?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['ReactionsList'];
|
|
98
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) */
|
|
99
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;
|
|
100
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) */
|
|
101
105
|
ThreadHeader?: ComponentContextValue<At, Ch, Co, Ev, Me, Re, Us>['ThreadHeader'];
|
|
102
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';
|
|
@@ -91,7 +93,7 @@ var UnMemoizedChannel = function (props) {
|
|
|
91
93
|
return React.createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
|
|
92
94
|
};
|
|
93
95
|
var ChannelInner = function (props) {
|
|
94
|
-
var acceptedFiles = props.acceptedFiles, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator = _b === void 0 ? DefaultLoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator = _c === void 0 ? DefaultLoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover;
|
|
96
|
+
var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator = _b === void 0 ? DefaultLoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator = _c === void 0 ? DefaultLoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, skipMessageDataMemoization = props.skipMessageDataMemoization;
|
|
95
97
|
var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
|
|
96
98
|
var t = useTranslationContext().t;
|
|
97
99
|
var _f = useState([]), notifications = _f[0], setNotifications = _f[1];
|
|
@@ -109,14 +111,12 @@ var ChannelInner = function (props) {
|
|
|
109
111
|
emojiData: emojiData,
|
|
110
112
|
emojiSetDef: emojiSetDef,
|
|
111
113
|
};
|
|
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)) {
|
|
114
|
+
var throttledCopyStateFromChannel = throttle(function () { return dispatch({ channel: channel, type: 'copyStateFromChannelOnEvent' }); }, 500, {
|
|
115
|
+
leading: true,
|
|
116
|
+
trailing: true,
|
|
117
|
+
});
|
|
118
|
+
var markRead = function () {
|
|
119
|
+
if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
|
|
120
120
|
return;
|
|
121
121
|
}
|
|
122
122
|
lastRead.current = new Date();
|
|
@@ -129,10 +129,10 @@ var ChannelInner = function (props) {
|
|
|
129
129
|
if (originalTitle.current) {
|
|
130
130
|
document.title = originalTitle.current;
|
|
131
131
|
}
|
|
132
|
-
}
|
|
133
|
-
var markReadThrottled =
|
|
134
|
-
var handleEvent =
|
|
135
|
-
var _a, _b, _c, _d
|
|
132
|
+
};
|
|
133
|
+
var markReadThrottled = throttle(markRead, 500, { leading: true, trailing: true });
|
|
134
|
+
var handleEvent = function (event) {
|
|
135
|
+
var _a, _b, _c, _d;
|
|
136
136
|
if (event.message) {
|
|
137
137
|
dispatch({
|
|
138
138
|
channel: channel,
|
|
@@ -141,11 +141,7 @@ var ChannelInner = function (props) {
|
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
143
|
if (event.type === 'typing.start' || event.type === 'typing.stop') {
|
|
144
|
-
dispatch({
|
|
145
|
-
channel: channel,
|
|
146
|
-
type: 'setTyping',
|
|
147
|
-
});
|
|
148
|
-
return;
|
|
144
|
+
return dispatch({ channel: channel, type: 'setTyping' });
|
|
149
145
|
}
|
|
150
146
|
if (event.type === 'connection.changed' && typeof event.online === 'boolean') {
|
|
151
147
|
online.current = event.online;
|
|
@@ -159,29 +155,33 @@ var ChannelInner = function (props) {
|
|
|
159
155
|
if (!document.hidden) {
|
|
160
156
|
markReadThrottled();
|
|
161
157
|
}
|
|
162
|
-
else if ((
|
|
158
|
+
else if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
|
|
163
159
|
var unread = channel.countUnread(lastRead.current);
|
|
164
|
-
|
|
160
|
+
if (activeUnreadHandler) {
|
|
161
|
+
activeUnreadHandler(unread, originalTitle.current);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
document.title = "(" + unread + ") " + originalTitle.current;
|
|
165
|
+
}
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
169
|
throttledCopyStateFromChannel();
|
|
169
|
-
}
|
|
170
|
+
};
|
|
170
171
|
// useLayoutEffect here to prevent spinner. Use Suspense when it is available in stable release
|
|
171
172
|
useLayoutEffect(function () {
|
|
172
173
|
var errored = false;
|
|
173
174
|
var done = false;
|
|
174
175
|
var onVisibilityChange = function () {
|
|
175
|
-
if (!document.hidden)
|
|
176
|
+
if (!document.hidden)
|
|
176
177
|
markRead();
|
|
177
|
-
}
|
|
178
178
|
};
|
|
179
179
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
180
180
|
var e_1;
|
|
181
181
|
return __generator(this, function (_a) {
|
|
182
182
|
switch (_a.label) {
|
|
183
183
|
case 0:
|
|
184
|
-
if (
|
|
184
|
+
if (!!channel.initialized) return [3 /*break*/, 4];
|
|
185
185
|
_a.label = 1;
|
|
186
186
|
case 1:
|
|
187
187
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -197,7 +197,7 @@ var ChannelInner = function (props) {
|
|
|
197
197
|
case 4:
|
|
198
198
|
done = true;
|
|
199
199
|
originalTitle.current = document.title;
|
|
200
|
-
if (
|
|
200
|
+
if (!errored) {
|
|
201
201
|
dispatch({ channel: channel, type: 'initStateFromChannel' });
|
|
202
202
|
if (channel.countUnread() > 0)
|
|
203
203
|
markRead();
|
|
@@ -217,15 +217,14 @@ var ChannelInner = function (props) {
|
|
|
217
217
|
if (errored || !done)
|
|
218
218
|
return;
|
|
219
219
|
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
220
|
-
|
|
221
|
-
channel.off(handleEvent);
|
|
220
|
+
channel === null || channel === void 0 ? void 0 : channel.off(handleEvent);
|
|
222
221
|
client.off('connection.changed', handleEvent);
|
|
223
222
|
client.off('connection.recovered', handleEvent);
|
|
224
223
|
client.off('user.updated', handleEvent);
|
|
225
224
|
client.off('user.deleted', handleEvent);
|
|
226
225
|
notificationTimeouts.forEach(clearTimeout);
|
|
227
226
|
};
|
|
228
|
-
}, [channel
|
|
227
|
+
}, [channel.cid]);
|
|
229
228
|
useEffect(function () {
|
|
230
229
|
var _a;
|
|
231
230
|
if (state.thread && ((_a = state.messages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -252,17 +251,15 @@ var ChannelInner = function (props) {
|
|
|
252
251
|
}, 5000);
|
|
253
252
|
notificationTimeouts.push(timeout);
|
|
254
253
|
};
|
|
255
|
-
var loadMoreFinished =
|
|
254
|
+
var loadMoreFinished = debounce(function (hasMore, messages) {
|
|
256
255
|
if (!isMounted.current)
|
|
257
256
|
return;
|
|
258
257
|
dispatch({ hasMore: hasMore, messages: messages, type: 'loadMoreFinished' });
|
|
259
258
|
}, 2000, {
|
|
260
259
|
leading: true,
|
|
261
260
|
trailing: true,
|
|
262
|
-
})
|
|
263
|
-
var loadMore =
|
|
264
|
-
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
265
|
-
function (limit) {
|
|
261
|
+
});
|
|
262
|
+
var loadMore = function (limit) {
|
|
266
263
|
if (limit === void 0) { limit = 100; }
|
|
267
264
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
268
265
|
var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
|
|
@@ -270,7 +267,7 @@ var ChannelInner = function (props) {
|
|
|
270
267
|
return __generator(this, function (_b) {
|
|
271
268
|
switch (_b.label) {
|
|
272
269
|
case 0:
|
|
273
|
-
if (!online.current || !window.navigator.onLine
|
|
270
|
+
if (!online.current || !window.navigator.onLine)
|
|
274
271
|
return [2 /*return*/, 0];
|
|
275
272
|
oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
|
|
276
273
|
if (state.loadingMore || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received')
|
|
@@ -305,27 +302,22 @@ var ChannelInner = function (props) {
|
|
|
305
302
|
}
|
|
306
303
|
});
|
|
307
304
|
});
|
|
308
|
-
}
|
|
309
|
-
var updateMessage =
|
|
310
|
-
|
|
311
|
-
return;
|
|
312
|
-
// adds the message to the local channel state..
|
|
313
|
-
// this adds to both the main channel state as well as any reply threads
|
|
305
|
+
};
|
|
306
|
+
var updateMessage = function (updatedMessage) {
|
|
307
|
+
// add the message to the local channel state
|
|
314
308
|
channel.state.addMessageSorted(updatedMessage, true);
|
|
315
309
|
dispatch({
|
|
316
310
|
channel: channel,
|
|
317
311
|
parentId: state.thread && updatedMessage.parent_id,
|
|
318
312
|
type: 'copyMessagesFromChannel',
|
|
319
313
|
});
|
|
320
|
-
}
|
|
314
|
+
};
|
|
321
315
|
var isUserResponseArray = function (output) { var _a; return ((_a = output[0]) === null || _a === void 0 ? void 0 : _a.id) != null; };
|
|
322
|
-
var doSendMessage =
|
|
316
|
+
var doSendMessage = function (message, customMessageData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
323
317
|
var attachments, id, _a, mentioned_users, parent_id, text, mentions, messageData, messageResponse, error_1, stringError, parsedError;
|
|
324
318
|
return __generator(this, function (_b) {
|
|
325
319
|
switch (_b.label) {
|
|
326
320
|
case 0:
|
|
327
|
-
if (!channel)
|
|
328
|
-
return [2 /*return*/];
|
|
329
321
|
attachments = message.attachments, id = message.id, _a = message.mentioned_users, mentioned_users = _a === void 0 ? [] : _a, parent_id = message.parent_id, text = message.text;
|
|
330
322
|
mentions = isUserResponseArray(mentioned_users)
|
|
331
323
|
? mentioned_users.map(function (_a) {
|
|
@@ -349,7 +341,7 @@ var ChannelInner = function (props) {
|
|
|
349
341
|
_b.label = 5;
|
|
350
342
|
case 5:
|
|
351
343
|
// replace it after send is completed
|
|
352
|
-
if (messageResponse
|
|
344
|
+
if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
|
|
353
345
|
updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
|
|
354
346
|
}
|
|
355
347
|
if (quotedMessage)
|
|
@@ -364,25 +356,20 @@ var ChannelInner = function (props) {
|
|
|
364
356
|
case 7: return [2 /*return*/];
|
|
365
357
|
}
|
|
366
358
|
});
|
|
367
|
-
}); }
|
|
368
|
-
var createMessagePreview =
|
|
369
|
-
// create a preview of the message
|
|
359
|
+
}); };
|
|
360
|
+
var createMessagePreview = function (text, attachments, parent, mentioned_users) {
|
|
370
361
|
var clientSideID = client.userID + "-" + uuidv4();
|
|
371
362
|
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));
|
|
372
|
-
}
|
|
373
|
-
var sendMessage =
|
|
363
|
+
};
|
|
364
|
+
var sendMessage = function (_a, customMessageData) {
|
|
374
365
|
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;
|
|
375
366
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
376
367
|
var messagePreview;
|
|
377
368
|
return __generator(this, function (_f) {
|
|
378
369
|
switch (_f.label) {
|
|
379
370
|
case 0:
|
|
380
|
-
if (!channel)
|
|
381
|
-
return [2 /*return*/];
|
|
382
|
-
// remove error messages upon submit
|
|
383
371
|
channel.state.filterErrorMessages();
|
|
384
372
|
messagePreview = createMessagePreview(text, attachments, parent, mentioned_users);
|
|
385
|
-
// first we add the message to the UI
|
|
386
373
|
updateMessage(messagePreview);
|
|
387
374
|
return [4 /*yield*/, doSendMessage(messagePreview, customMessageData)];
|
|
388
375
|
case 1:
|
|
@@ -391,62 +378,55 @@ var ChannelInner = function (props) {
|
|
|
391
378
|
}
|
|
392
379
|
});
|
|
393
380
|
});
|
|
394
|
-
}
|
|
395
|
-
var retrySendMessage =
|
|
381
|
+
};
|
|
382
|
+
var retrySendMessage = function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
396
383
|
return __generator(this, function (_a) {
|
|
397
384
|
switch (_a.label) {
|
|
398
385
|
case 0:
|
|
399
|
-
// set the message status to sending
|
|
400
386
|
updateMessage(__assign(__assign({}, message), { errorStatusCode: undefined, status: 'sending' }));
|
|
401
|
-
// actually try to send the message...
|
|
402
387
|
return [4 /*yield*/, doSendMessage(message)];
|
|
403
388
|
case 1:
|
|
404
|
-
// actually try to send the message...
|
|
405
389
|
_a.sent();
|
|
406
390
|
return [2 /*return*/];
|
|
407
391
|
}
|
|
408
392
|
});
|
|
409
|
-
}); }
|
|
410
|
-
var removeMessage =
|
|
411
|
-
if (!channel)
|
|
412
|
-
return;
|
|
393
|
+
}); };
|
|
394
|
+
var removeMessage = function (message) {
|
|
413
395
|
channel.state.removeMessage(message);
|
|
414
396
|
dispatch({
|
|
415
397
|
channel: channel,
|
|
416
398
|
parentId: state.thread && message.parent_id,
|
|
417
399
|
type: 'copyMessagesFromChannel',
|
|
418
400
|
});
|
|
419
|
-
}
|
|
401
|
+
};
|
|
420
402
|
/** THREAD */
|
|
421
|
-
var openThread =
|
|
422
|
-
|
|
423
|
-
return;
|
|
424
|
-
if (event && event.preventDefault) {
|
|
425
|
-
event.preventDefault();
|
|
426
|
-
}
|
|
403
|
+
var openThread = function (message, event) {
|
|
404
|
+
event.preventDefault();
|
|
427
405
|
dispatch({ channel: channel, message: message, type: 'openThread' });
|
|
428
|
-
}
|
|
429
|
-
var
|
|
406
|
+
};
|
|
407
|
+
var closeThread = function (event) {
|
|
408
|
+
event.preventDefault();
|
|
409
|
+
dispatch({ type: 'closeThread' });
|
|
410
|
+
};
|
|
411
|
+
var loadMoreThreadFinished = debounce(function (threadHasMore, threadMessages) {
|
|
430
412
|
dispatch({
|
|
431
413
|
threadHasMore: threadHasMore,
|
|
432
414
|
threadMessages: threadMessages,
|
|
433
415
|
type: 'loadMoreThreadFinished',
|
|
434
416
|
});
|
|
435
|
-
}, 2000, { leading: true, trailing: true })
|
|
436
|
-
var loadMoreThread =
|
|
417
|
+
}, 2000, { leading: true, trailing: true });
|
|
418
|
+
var loadMoreThread = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
437
419
|
var parentID, oldMessages, oldestMessageID, limit, queryResponse, threadHasMoreMessages, newThreadMessages, e_3;
|
|
438
420
|
var _a;
|
|
439
421
|
return __generator(this, function (_b) {
|
|
440
422
|
switch (_b.label) {
|
|
441
423
|
case 0:
|
|
442
|
-
|
|
443
|
-
if (!channel || state.threadLoadingMore || !state.thread)
|
|
424
|
+
if (state.threadLoadingMore || !state.thread)
|
|
444
425
|
return [2 /*return*/];
|
|
445
426
|
dispatch({ type: 'startLoadingThread' });
|
|
446
427
|
parentID = state.thread.id;
|
|
447
428
|
if (!parentID) {
|
|
448
|
-
dispatch({ type: 'closeThread' });
|
|
449
|
-
return [2 /*return*/];
|
|
429
|
+
return [2 /*return*/, dispatch({ type: 'closeThread' })];
|
|
450
430
|
}
|
|
451
431
|
oldMessages = channel.state.threads[parentID] || [];
|
|
452
432
|
oldestMessageID = (_a = oldMessages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
@@ -462,7 +442,7 @@ var ChannelInner = function (props) {
|
|
|
462
442
|
queryResponse = _b.sent();
|
|
463
443
|
threadHasMoreMessages = queryResponse.messages.length === limit;
|
|
464
444
|
newThreadMessages = channel.state.threads[parentID] || [];
|
|
465
|
-
// next set loadingMore to false so we can start asking for more data
|
|
445
|
+
// next set loadingMore to false so we can start asking for more data
|
|
466
446
|
loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);
|
|
467
447
|
return [3 /*break*/, 4];
|
|
468
448
|
case 3:
|
|
@@ -472,18 +452,12 @@ var ChannelInner = function (props) {
|
|
|
472
452
|
case 4: return [2 /*return*/];
|
|
473
453
|
}
|
|
474
454
|
});
|
|
475
|
-
}); }
|
|
476
|
-
var closeThread = useCallback(function (event) {
|
|
477
|
-
if (event && event.preventDefault) {
|
|
478
|
-
event.preventDefault();
|
|
479
|
-
}
|
|
480
|
-
dispatch({ type: 'closeThread' });
|
|
481
|
-
}, []);
|
|
455
|
+
}); };
|
|
482
456
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
483
457
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
484
458
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
485
|
-
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 });
|
|
486
|
-
var channelActionContextValue = {
|
|
459
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
460
|
+
var channelActionContextValue = useMemo(function () { return ({
|
|
487
461
|
addNotification: addNotification,
|
|
488
462
|
closeThread: closeThread,
|
|
489
463
|
dispatch: dispatch,
|
|
@@ -497,8 +471,9 @@ var ChannelInner = function (props) {
|
|
|
497
471
|
retrySendMessage: retrySendMessage,
|
|
498
472
|
sendMessage: sendMessage,
|
|
499
473
|
setQuotedMessage: setQuotedMessage,
|
|
474
|
+
skipMessageDataMemoization: skipMessageDataMemoization,
|
|
500
475
|
updateMessage: updateMessage,
|
|
501
|
-
};
|
|
476
|
+
}); }, [channel.cid, loadMore, quotedMessage]);
|
|
502
477
|
var componentContextValue = useMemo(function () { return ({
|
|
503
478
|
Attachment: props.Attachment || DefaultAttachment,
|
|
504
479
|
AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
|
|
@@ -542,13 +517,13 @@ var ChannelInner = function (props) {
|
|
|
542
517
|
EmojiIndex: props.EmojiIndex,
|
|
543
518
|
EmojiPicker: props.EmojiPicker,
|
|
544
519
|
}); }, []);
|
|
545
|
-
var typingContextValue = {
|
|
520
|
+
var typingContextValue = useCreateTypingContext({
|
|
546
521
|
typing: typing,
|
|
547
|
-
};
|
|
522
|
+
});
|
|
548
523
|
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
549
524
|
var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
|
|
550
525
|
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
551
|
-
? '
|
|
526
|
+
? 'str-chat--windows-flags'
|
|
552
527
|
: '';
|
|
553
528
|
if (state.error) {
|
|
554
529
|
return (React.createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
@@ -558,7 +533,7 @@ var ChannelInner = function (props) {
|
|
|
558
533
|
return (React.createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
559
534
|
React.createElement(LoadingIndicator, { size: 25 })));
|
|
560
535
|
}
|
|
561
|
-
if (!
|
|
536
|
+
if (!channel.watch) {
|
|
562
537
|
return (React.createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
563
538
|
React.createElement("div", null, t('Channel Missing'))));
|
|
564
539
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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<import("../../../context/ChannelStateContext").ChannelState<At, Ch, Co, Ev, Me, Re, Us>, "typing"> & {
|
|
4
|
+
channel: import("stream-chat").Channel<At, Ch, Co, Ev, Me, Re, Us>;
|
|
5
|
+
channelConfig: import("stream-chat").ChannelConfigWithInfo<Co> | undefined;
|
|
6
|
+
multipleUploads: boolean;
|
|
7
|
+
notifications: import("../../../context/ChannelStateContext").ChannelNotifications;
|
|
8
|
+
acceptedFiles?: string[] | undefined;
|
|
9
|
+
maxNumberOfFiles?: number | undefined;
|
|
10
|
+
mutes?: import("stream-chat").Mute<Us>[] | undefined;
|
|
11
|
+
watcher_count?: number | undefined;
|
|
12
|
+
} & {
|
|
13
|
+
skipMessageDataMemoization?: boolean | undefined;
|
|
14
|
+
}) => ChannelStateContextValue<At, Ch, Co, Ev, Me, Re, Us>;
|
|
15
|
+
//# 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;;;;;;;;;;;0DA+HxC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { isDate, isDayOrMoment } from '../../../context/TranslationContext';
|
|
3
|
+
export var useCreateChannelStateContext = function (value) {
|
|
4
|
+
var _a;
|
|
5
|
+
var acceptedFiles = value.acceptedFiles, channel = value.channel, channelConfig = value.channelConfig, error = value.error, hasMore = value.hasMore, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _b = value.messages, messages = _b === void 0 ? [] : _b, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _c = value.read, read = _c === void 0 ? {} : _c, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _d = value.threadMessages, threadMessages = _d === void 0 ? [] : _d, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
6
|
+
var channelId = channel.cid;
|
|
7
|
+
var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
|
|
8
|
+
var membersLength = Object.keys(members || []).length;
|
|
9
|
+
var notificationsLength = notifications.length;
|
|
10
|
+
var readUsers = Object.values(read);
|
|
11
|
+
var readUsersLength = readUsers.length;
|
|
12
|
+
var readUsersLastReads = readUsers.map(function (_a) {
|
|
13
|
+
var last_read = _a.last_read;
|
|
14
|
+
return last_read.toISOString();
|
|
15
|
+
}).join();
|
|
16
|
+
var threadMessagesLength = threadMessages === null || threadMessages === void 0 ? void 0 : threadMessages.length;
|
|
17
|
+
var memoizedMessageData = skipMessageDataMemoization
|
|
18
|
+
? messages
|
|
19
|
+
: messages
|
|
20
|
+
.map(function (_a) {
|
|
21
|
+
var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, reply_count = _a.reply_count, status = _a.status, updated_at = _a.updated_at;
|
|
22
|
+
return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
|
|
23
|
+
var type = _a.type;
|
|
24
|
+
return type;
|
|
25
|
+
}).join() : '') + pinned + reply_count + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
|
|
26
|
+
? updated_at.toISOString()
|
|
27
|
+
: updated_at || '');
|
|
28
|
+
})
|
|
29
|
+
.join();
|
|
30
|
+
var memoizedThreadMessageData = threadMessages
|
|
31
|
+
.map(function (_a) {
|
|
32
|
+
var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at;
|
|
33
|
+
return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
|
|
34
|
+
var type = _a.type;
|
|
35
|
+
return type;
|
|
36
|
+
}).join() : '') + pinned + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
|
|
37
|
+
? updated_at.toISOString()
|
|
38
|
+
: updated_at || '');
|
|
39
|
+
})
|
|
40
|
+
.join();
|
|
41
|
+
var channelStateContext = useMemo(function () { return ({
|
|
42
|
+
acceptedFiles: acceptedFiles,
|
|
43
|
+
channel: channel,
|
|
44
|
+
channelConfig: channelConfig,
|
|
45
|
+
error: error,
|
|
46
|
+
hasMore: hasMore,
|
|
47
|
+
loading: loading,
|
|
48
|
+
loadingMore: loadingMore,
|
|
49
|
+
maxNumberOfFiles: maxNumberOfFiles,
|
|
50
|
+
members: members,
|
|
51
|
+
messages: messages,
|
|
52
|
+
multipleUploads: multipleUploads,
|
|
53
|
+
mutes: mutes,
|
|
54
|
+
notifications: notifications,
|
|
55
|
+
pinnedMessages: pinnedMessages,
|
|
56
|
+
quotedMessage: quotedMessage,
|
|
57
|
+
read: read,
|
|
58
|
+
thread: thread,
|
|
59
|
+
threadHasMore: threadHasMore,
|
|
60
|
+
threadLoadingMore: threadLoadingMore,
|
|
61
|
+
threadMessages: threadMessages,
|
|
62
|
+
watcher_count: watcher_count,
|
|
63
|
+
watcherCount: watcherCount,
|
|
64
|
+
watchers: watchers,
|
|
65
|
+
}); }, [
|
|
66
|
+
channelId,
|
|
67
|
+
error,
|
|
68
|
+
hasMore,
|
|
69
|
+
lastRead,
|
|
70
|
+
loading,
|
|
71
|
+
loadingMore,
|
|
72
|
+
membersLength,
|
|
73
|
+
memoizedMessageData,
|
|
74
|
+
memoizedThreadMessageData,
|
|
75
|
+
notificationsLength,
|
|
76
|
+
quotedMessage,
|
|
77
|
+
readUsersLength,
|
|
78
|
+
readUsersLastReads,
|
|
79
|
+
skipMessageDataMemoization,
|
|
80
|
+
thread,
|
|
81
|
+
threadHasMore,
|
|
82
|
+
threadLoadingMore,
|
|
83
|
+
threadMessagesLength,
|
|
84
|
+
watcherCount,
|
|
85
|
+
]);
|
|
86
|
+
return channelStateContext;
|
|
87
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TypingContextValue } from '../../../context/TypingContext';
|
|
2
|
+
import type { DefaultAttachmentType, DefaultChannelType, DefaultMessageType, DefaultUserType } from '../../../types/types';
|
|
3
|
+
export declare const useCreateTypingContext: <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: TypingContextValue<At, Ch, Co, Ev, Me, Re, Us>) => TypingContextValue<At, Ch, Co, Ev, Me, Re, Us>;
|
|
4
|
+
//# sourceMappingURL=useCreateTypingContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreateTypingContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Channel/hooks/useCreateTypingContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAGlB,kBAAkB,EAElB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,sBAAsB,qqBAuBlC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
export var useCreateTypingContext = function (value) {
|
|
3
|
+
var typing = value.typing;
|
|
4
|
+
var typingValue = Object.keys(typing || {}).join();
|
|
5
|
+
var typingContext = useMemo(function () { return ({
|
|
6
|
+
typing: typing,
|
|
7
|
+
}); }, [typingValue]);
|
|
8
|
+
return typingContext;
|
|
9
|
+
};
|
|
@@ -13,9 +13,9 @@ export declare type ChannelListProps<At extends DefaultAttachmentType = DefaultA
|
|
|
13
13
|
/** Additional props for underlying ChannelSearch component, [available props](https://getstream.io/chat/docs/sdk/react/utility-components/channel_search/#props) */
|
|
14
14
|
additionalChannelSearchProps?: ChannelSearchProps<At, Ch, Co, Ev, Me, Re, Us>;
|
|
15
15
|
/**
|
|
16
|
-
* When the client receives
|
|
17
|
-
* If the channel doesn't currently exist in the list, we grab the channel from
|
|
18
|
-
* and push it to the top of the list. You can disable this behavior by setting this prop
|
|
16
|
+
* When the client receives `message.new`, `notification.message_new`, and `notification.added_to_channel` events, we automatically
|
|
17
|
+
* push that channel to the top of the list. If the channel doesn't currently exist in the list, we grab the channel from
|
|
18
|
+
* `client.activeChannels` and push it to the top of the list. You can disable this behavior by setting this prop
|
|
19
19
|
* to false, which will prevent channels not in the list from incrementing the list. The default is true.
|
|
20
20
|
*/
|
|
21
21
|
allowNewMessagesFromUnfilteredChannels?: boolean;
|