stream-chat-react 10.10.2 → 10.12.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.
Files changed (35) hide show
  1. package/dist/browser.full-bundle.js +181 -70
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +5 -5
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/ChannelPreview/ChannelPreview.d.ts +3 -0
  6. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  7. package/dist/components/ChannelPreview/ChannelPreview.js +6 -1
  8. package/dist/components/ChannelPreview/hooks/index.d.ts +1 -0
  9. package/dist/components/ChannelPreview/hooks/index.d.ts.map +1 -1
  10. package/dist/components/ChannelPreview/hooks/index.js +1 -0
  11. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +17 -0
  12. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts.map +1 -0
  13. package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.js +58 -0
  14. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +4 -3
  15. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
  16. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +52 -31
  17. package/dist/components/Message/MessageSimple.d.ts.map +1 -1
  18. package/dist/components/Message/MessageSimple.js +10 -3
  19. package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  20. package/dist/components/Message/hooks/useReactionHandler.js +17 -21
  21. package/dist/components/MessageInput/CooldownTimer.js +1 -1
  22. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
  23. package/dist/components/MessageInput/hooks/useCooldownTimer.js +5 -2
  24. package/dist/context/MessageContext.d.ts +3 -1
  25. package/dist/context/MessageContext.d.ts.map +1 -1
  26. package/dist/context/TranslationContext.d.ts +1 -1
  27. package/dist/context/TranslationContext.d.ts.map +1 -1
  28. package/dist/i18n/Streami18n.d.ts +9 -3
  29. package/dist/i18n/Streami18n.d.ts.map +1 -1
  30. package/dist/i18n/Streami18n.js +18 -11
  31. package/dist/index.cjs.js +167 -70
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/version.d.ts +1 -1
  34. package/dist/version.js +1 -1
  35. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ChatContextValue } from '../../context/ChatContext';
3
+ import { MessageDeliveryStatus } from './hooks/useMessageDeliveryStatus';
3
4
  import type { Channel } from 'stream-chat';
4
5
  import type { AvatarProps } from '../Avatar/Avatar';
5
6
  import type { StreamMessage } from '../../context/ChannelStateContext';
@@ -15,6 +16,8 @@ export declare type ChannelPreviewUIComponentProps<StreamChatGenerics extends De
15
16
  lastMessage?: StreamMessage<StreamChatGenerics>;
16
17
  /** Latest message preview to display, will be a string or JSX element supporting markdown. */
17
18
  latestMessage?: string | JSX.Element;
19
+ /** Status describing whether own message has been delivered or read by another. If the last message is not an own message, then the status is undefined. */
20
+ messageDeliveryStatus?: MessageDeliveryStatus;
18
21
  /** Number of unread Messages */
19
22
  unread?: number;
20
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAOhE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAG7E,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,8BAA8B,CACxC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,CAAC,kBAAkB,CAAC,GAAG;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAChD,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6MAA6M;IAC7M,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,+LAA+L;IAC/L,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,6PAA6P;IAC7P,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,0JAyE1B,CAAC"}
1
+ {"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAOhE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAA4B,MAAM,kCAAkC,CAAC;AAEnG,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,8BAA8B,CACxC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,CAAC,kBAAkB,CAAC,GAAG;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAChD,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,4JAA4J;IAC5J,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6MAA6M;IAC7M,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,+LAA+L;IAC/L,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,6PAA6P;IAC7P,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,0JA8E1B,CAAC"}
@@ -6,6 +6,7 @@ import { useChannelPreviewInfo } from './hooks/useChannelPreviewInfo';
6
6
  import { getLatestMessagePreview } from './utils';
7
7
  import { useChatContext } from '../../context/ChatContext';
8
8
  import { useTranslationContext } from '../../context/TranslationContext';
9
+ import { useMessageDeliveryStatus } from './hooks/useMessageDeliveryStatus';
9
10
  export var ChannelPreview = function (props) {
10
11
  var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a, channelUpdateCount = props.channelUpdateCount;
11
12
  var _b = useChatContext('ChannelPreview'), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
@@ -13,6 +14,10 @@ export var ChannelPreview = function (props) {
13
14
  var _d = useChannelPreviewInfo({ channel: channel }), displayImage = _d.displayImage, displayTitle = _d.displayTitle;
14
15
  var _e = useState(channel.state.messages[channel.state.messages.length - 1]), lastMessage = _e[0], setLastMessage = _e[1];
15
16
  var _f = useState(0), unread = _f[0], setUnread = _f[1];
17
+ var messageDeliveryStatus = useMessageDeliveryStatus({
18
+ channel: channel,
19
+ lastMessage: lastMessage,
20
+ }).messageDeliveryStatus;
16
21
  var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
17
22
  var muted = useIsChannelMuted(channel).muted;
18
23
  useEffect(function () {
@@ -52,5 +57,5 @@ export var ChannelPreview = function (props) {
52
57
  if (!Preview)
53
58
  return null;
54
59
  var latestMessage = getLatestMessagePreview(channel, t, userLanguage);
55
- return (React.createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, setActiveChannel: setActiveChannel, unread: unread })));
60
+ return (React.createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, messageDeliveryStatus: messageDeliveryStatus, setActiveChannel: setActiveChannel, unread: unread })));
56
61
  };
@@ -1,2 +1,3 @@
1
1
  export { useChannelPreviewInfo } from './useChannelPreviewInfo';
2
+ export { MessageDeliveryStatus } from './useMessageDeliveryStatus';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelPreview/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelPreview/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +1,2 @@
1
1
  export { useChannelPreviewInfo } from './useChannelPreviewInfo';
2
+ export { MessageDeliveryStatus } from './useMessageDeliveryStatus';
@@ -0,0 +1,17 @@
1
+ import type { Channel } from 'stream-chat';
2
+ import type { DefaultStreamChatGenerics } from '../../../types/types';
3
+ import type { StreamMessage } from '../../../context';
4
+ export declare enum MessageDeliveryStatus {
5
+ DELIVERED = "delivered",
6
+ READ = "read"
7
+ }
8
+ declare type UseMessageStatusParamsChannelPreviewProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
9
+ channel: Channel<StreamChatGenerics>;
10
+ /** The last message received in a channel */
11
+ lastMessage?: StreamMessage<StreamChatGenerics>;
12
+ };
13
+ export declare const useMessageDeliveryStatus: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ channel, lastMessage, }: UseMessageStatusParamsChannelPreviewProps<StreamChatGenerics>) => {
14
+ messageDeliveryStatus: MessageDeliveryStatus | undefined;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=useMessageDeliveryStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessageDeliveryStatus.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelPreview/hooks/useMessageDeliveryStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAIlD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,oBAAY,qBAAqB;IAC/B,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED,aAAK,yCAAyC,CAC5C,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;CAwEpC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import { useChatContext } from '../../../context';
3
+ export var MessageDeliveryStatus;
4
+ (function (MessageDeliveryStatus) {
5
+ MessageDeliveryStatus["DELIVERED"] = "delivered";
6
+ MessageDeliveryStatus["READ"] = "read";
7
+ })(MessageDeliveryStatus || (MessageDeliveryStatus = {}));
8
+ export var useMessageDeliveryStatus = function (_a) {
9
+ var channel = _a.channel, lastMessage = _a.lastMessage;
10
+ var client = useChatContext().client;
11
+ var _b = useState(), messageDeliveryStatus = _b[0], setMessageDeliveryStatus = _b[1];
12
+ var isOwnMessage = useCallback(function (message) { var _a; return client.user && ((_a = message === null || message === void 0 ? void 0 : message.user) === null || _a === void 0 ? void 0 : _a.id) === client.user.id; }, [client]);
13
+ useEffect(function () {
14
+ var lastMessageIsOwn = isOwnMessage(lastMessage);
15
+ if (!(lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.created_at) || !lastMessageIsOwn)
16
+ return;
17
+ var lastMessageCreatedAtDate = typeof lastMessage.created_at === 'string'
18
+ ? new Date(lastMessage.created_at)
19
+ : lastMessage.created_at;
20
+ var channelReadByOthersAfterLastMessageUpdate = Object.values(channel.state.read).some(function (_a) {
21
+ var channelLastMarkedReadDate = _a.last_read, user = _a.user;
22
+ var ignoreOwnReadStatus = client.user && user.id !== client.user.id;
23
+ return ignoreOwnReadStatus && lastMessageCreatedAtDate < channelLastMarkedReadDate;
24
+ });
25
+ setMessageDeliveryStatus(channelReadByOthersAfterLastMessageUpdate
26
+ ? MessageDeliveryStatus.READ
27
+ : MessageDeliveryStatus.DELIVERED);
28
+ }, [channel.state.read, client, isOwnMessage, lastMessage]);
29
+ useEffect(function () {
30
+ var handleMessageNew = function (event) {
31
+ // the last message is not mine, so do not show the delivery status
32
+ if (!isOwnMessage(event.message)) {
33
+ return setMessageDeliveryStatus(undefined);
34
+ }
35
+ return setMessageDeliveryStatus(MessageDeliveryStatus.DELIVERED);
36
+ };
37
+ channel.on('message.new', handleMessageNew);
38
+ return function () {
39
+ channel.off('message.new', handleMessageNew);
40
+ };
41
+ }, [channel, client, isOwnMessage]);
42
+ useEffect(function () {
43
+ if (!isOwnMessage(lastMessage))
44
+ return;
45
+ var handleMarkRead = function (event) {
46
+ var _a, _b;
47
+ if (((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id))
48
+ setMessageDeliveryStatus(MessageDeliveryStatus.READ);
49
+ };
50
+ channel.on('message.read', handleMarkRead);
51
+ return function () {
52
+ channel.off('message.read', handleMarkRead);
53
+ };
54
+ }, [channel, client, lastMessage, isOwnMessage]);
55
+ return {
56
+ messageDeliveryStatus: messageDeliveryStatus,
57
+ };
58
+ };
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ChannelOrUserResponse } from '../utils';
3
- import type { ChannelFilters, ChannelOptions, ChannelSort, UserFilters, UserOptions, UserSort } from 'stream-chat';
4
- import type { Channel } from 'stream-chat';
3
+ import type { Channel, ChannelFilters, ChannelOptions, ChannelSort, UserFilters, UserOptions, UserSort } from 'stream-chat';
5
4
  import type { SearchBarController } from '../SearchBar';
6
5
  import type { SearchInputController } from '../SearchInput';
7
6
  import type { SearchResultsController } from '../SearchResults';
@@ -37,6 +36,8 @@ export declare type ChannelSearchParams<StreamChatGenerics extends DefaultStream
37
36
  onSearchExit?: () => void;
38
37
  /** Custom handler function to run on search result item selection */
39
38
  onSelectResult?: (params: ChannelSearchFunctionParams<StreamChatGenerics>, result: ChannelOrUserResponse<StreamChatGenerics>) => Promise<void> | void;
39
+ /** The number of milliseconds to debounce the search query. The default interval is 200ms. */
40
+ searchDebounceIntervalMs?: number;
40
41
  /** Boolean to search for channels as well as users in the server query, default is false and just searches for users */
41
42
  searchForChannels?: boolean;
42
43
  /** Custom search function to override the default implementation */
@@ -48,5 +49,5 @@ export declare type ChannelSearchControllerParams<StreamChatGenerics extends Def
48
49
  /** Set the array of channels displayed in the ChannelList */
49
50
  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>;
50
51
  };
51
- export declare const useChannelSearch: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ channelType, clearSearchOnClickOutside, disabled, onSearch: onSearchCallback, onSearchExit, onSelectResult, searchForChannels, searchFunction, searchQueryParams, setChannels, }: ChannelSearchControllerParams<StreamChatGenerics>) => SearchController<StreamChatGenerics>;
52
+ export declare const useChannelSearch: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ channelType, clearSearchOnClickOutside, disabled, onSearch: onSearchCallback, onSearchExit, onSelectResult, searchDebounceIntervalMs, searchForChannels, searchFunction, searchQueryParams, setChannels, }: ChannelSearchControllerParams<StreamChatGenerics>) => SearchController<StreamChatGenerics>;
52
53
  //# sourceMappingURL=useChannelSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChannelSearch.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelSearch/hooks/useChannelSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useChannelSearch.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelSearch/hooks/useChannelSearch.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,27 @@
1
1
  import { __assign, __awaiter, __generator, __spreadArray } from "tslib";
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
- import throttle from 'lodash.throttle';
3
+ import debounce from 'lodash.debounce';
4
4
  import uniqBy from 'lodash.uniqby';
5
5
  import { isChannel } from '../utils';
6
6
  import { useChatContext } from '../../../context/ChatContext';
7
7
  export var useChannelSearch = function (_a) {
8
- var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, onSearchCallback = _a.onSearch, onSearchExit = _a.onSearchExit, onSelectResult = _a.onSelectResult, _e = _a.searchForChannels, searchForChannels = _e === void 0 ? false : _e, searchFunction = _a.searchFunction, searchQueryParams = _a.searchQueryParams, setChannels = _a.setChannels;
9
- var _f = useChatContext('useChannelSearch'), client = _f.client, setActiveChannel = _f.setActiveChannel, themeVersion = _f.themeVersion;
10
- var _g = useState(false), inputIsFocused = _g[0], setInputIsFocused = _g[1];
11
- var _h = useState(''), query = _h[0], setQuery = _h[1];
12
- var _j = useState([]), results = _j[0], setResults = _j[1];
13
- var _k = useState(false), searching = _k[0], setSearching = _k[1];
8
+ var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, onSearchCallback = _a.onSearch, onSearchExit = _a.onSearchExit, onSelectResult = _a.onSelectResult, _e = _a.searchDebounceIntervalMs, searchDebounceIntervalMs = _e === void 0 ? 300 : _e, _f = _a.searchForChannels, searchForChannels = _f === void 0 ? false : _f, searchFunction = _a.searchFunction, searchQueryParams = _a.searchQueryParams, setChannels = _a.setChannels;
9
+ var _g = useChatContext('useChannelSearch'), client = _g.client, setActiveChannel = _g.setActiveChannel, themeVersion = _g.themeVersion;
10
+ var _h = useState(false), inputIsFocused = _h[0], setInputIsFocused = _h[1];
11
+ var _j = useState(''), query = _j[0], setQuery = _j[1];
12
+ var _k = useState([]), results = _k[0], setResults = _k[1];
13
+ var _l = useState(false), searching = _l[0], setSearching = _l[1];
14
+ var searchQueryPromiseInProgress = useRef();
15
+ var shouldIgnoreQueryResults = useRef(false);
14
16
  var inputRef = useRef(null);
15
17
  var searchBarRef = useRef(null);
16
18
  var clearState = useCallback(function () {
17
19
  setQuery('');
18
20
  setResults([]);
19
21
  setSearching(false);
22
+ if (searchQueryPromiseInProgress.current) {
23
+ shouldIgnoreQueryResults.current = true;
24
+ }
20
25
  }, []);
21
26
  var activateSearch = useCallback(function () {
22
27
  setInputIsFocused(true);
@@ -99,45 +104,56 @@ export var useChannelSearch = function (_a) {
99
104
  });
100
105
  }); }, [clearSearchOnClickOutside, client, exitSearch, onSelectResult, setActiveChannel, setChannels]);
101
106
  var getChannels = useCallback(function (text) { return __awaiter(void 0, void 0, void 0, function () {
102
- var userResponse, channelResponse, _a, channels, users_1, users, error_1;
107
+ var results, userQueryPromise, users, channelQueryPromise, _a, channels, users, error_1;
103
108
  var _b, _c, _d, _e, _f, _g;
104
109
  return __generator(this, function (_h) {
105
110
  switch (_h.label) {
106
111
  case 0:
107
- if (!text || searching)
108
- return [2 /*return*/];
109
- setSearching(true);
112
+ results = [];
110
113
  _h.label = 1;
111
114
  case 1:
112
115
  _h.trys.push([1, 6, , 7]);
113
- return [4 /*yield*/, client.queryUsers(__assign({ $or: [{ id: { $autocomplete: text } }, { name: { $autocomplete: text } }], id: { $ne: client.userID } }, (_b = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _b === void 0 ? void 0 : _b.filters), __assign({ id: 1 }, (_c = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _c === void 0 ? void 0 : _c.sort), __assign({ limit: 8 }, (_d = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _d === void 0 ? void 0 : _d.options))];
116
+ userQueryPromise = client.queryUsers(__assign({ $or: [{ id: { $autocomplete: text } }, { name: { $autocomplete: text } }], id: { $ne: client.userID } }, (_b = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _b === void 0 ? void 0 : _b.filters), __assign({ id: 1 }, (_c = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _c === void 0 ? void 0 : _c.sort), __assign({ limit: 8 }, (_d = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.userFilters) === null || _d === void 0 ? void 0 : _d.options));
117
+ if (!!searchForChannels) return [3 /*break*/, 3];
118
+ searchQueryPromiseInProgress.current = userQueryPromise;
119
+ return [4 /*yield*/, searchQueryPromiseInProgress.current];
114
120
  case 2:
115
- userResponse = _h.sent();
116
- if (!searchForChannels) return [3 /*break*/, 4];
117
- channelResponse = client.queryChannels(__assign({ name: { $autocomplete: text } }, (_e = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _e === void 0 ? void 0 : _e.filters), ((_f = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _f === void 0 ? void 0 : _f.sort) || {}, __assign({ limit: 5 }, (_g = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _g === void 0 ? void 0 : _g.options));
118
- return [4 /*yield*/, Promise.all([channelResponse, userResponse])];
119
- case 3:
120
- _a = _h.sent(), channels = _a[0], users_1 = _a[1].users;
121
- setResults(__spreadArray(__spreadArray([], channels, true), users_1, true));
122
- setSearching(false);
123
- return [2 /*return*/];
124
- case 4: return [4 /*yield*/, Promise.resolve(userResponse)];
125
- case 5:
126
121
  users = (_h.sent()).users;
127
- setResults(users);
128
- return [3 /*break*/, 7];
122
+ results = users;
123
+ return [3 /*break*/, 5];
124
+ case 3:
125
+ channelQueryPromise = client.queryChannels(__assign({ name: { $autocomplete: text } }, (_e = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _e === void 0 ? void 0 : _e.filters), ((_f = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _f === void 0 ? void 0 : _f.sort) || {}, __assign({ limit: 5 }, (_g = searchQueryParams === null || searchQueryParams === void 0 ? void 0 : searchQueryParams.channelFilters) === null || _g === void 0 ? void 0 : _g.options));
126
+ searchQueryPromiseInProgress.current = Promise.all([
127
+ channelQueryPromise,
128
+ userQueryPromise,
129
+ ]);
130
+ return [4 /*yield*/, searchQueryPromiseInProgress.current];
131
+ case 4:
132
+ _a = _h.sent(), channels = _a[0], users = _a[1].users;
133
+ results = __spreadArray(__spreadArray([], channels, true), users, true);
134
+ _h.label = 5;
135
+ case 5: return [3 /*break*/, 7];
129
136
  case 6:
130
137
  error_1 = _h.sent();
131
- clearState();
132
138
  console.error(error_1);
133
139
  return [3 /*break*/, 7];
134
140
  case 7:
135
141
  setSearching(false);
142
+ if (!shouldIgnoreQueryResults.current) {
143
+ setResults(results);
144
+ }
145
+ else {
146
+ shouldIgnoreQueryResults.current = false;
147
+ }
148
+ searchQueryPromiseInProgress.current = undefined;
136
149
  return [2 /*return*/];
137
150
  }
138
151
  });
139
- }); }, [client, searching, searchForChannels]);
140
- var getChannelsThrottled = throttle(getChannels, 200);
152
+ }); }, [client, searchForChannels, searchQueryParams]);
153
+ var scheduleGetChannels = useCallback(debounce(getChannels, searchDebounceIntervalMs), [
154
+ getChannels,
155
+ searchDebounceIntervalMs,
156
+ ]);
141
157
  var onSearch = useCallback(function (event) {
142
158
  event.preventDefault();
143
159
  if (disabled)
@@ -149,12 +165,17 @@ export var useChannelSearch = function (_a) {
149
165
  setSearching: setSearching,
150
166
  }, event);
151
167
  }
152
- else {
168
+ else if (event.target.value) {
169
+ setSearching(true);
153
170
  setQuery(event.target.value);
154
- getChannelsThrottled(event.target.value);
171
+ scheduleGetChannels(event.target.value);
172
+ }
173
+ else if (!event.target.value) {
174
+ clearState();
175
+ scheduleGetChannels.cancel();
155
176
  }
156
177
  onSearchCallback === null || onSearchCallback === void 0 ? void 0 : onSearchCallback(event);
157
- }, [disabled, getChannelsThrottled, onSearchCallback, searchFunction]);
178
+ }, [clearState, disabled, scheduleGetChannels, onSearchCallback, searchFunction]);
158
179
  return {
159
180
  activateSearch: activateSearch,
160
181
  clearState: clearState,
@@ -1 +1 @@
1
- {"version":3,"file":"MessageSimple.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageSimple.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAuLnE;;GAEG;AACH,eAAO,MAAM,aAAa,4JAQzB,CAAC"}
1
+ {"version":3,"file":"MessageSimple.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageSimple.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AA4LnE;;GAEG;AACH,eAAO,MAAM,aAAa,4JAQzB,CAAC"}
@@ -31,6 +31,13 @@ var MessageSimpleWithContext = function (props) {
31
31
  if (message.deleted_at || message.type === 'deleted') {
32
32
  return React.createElement(MessageDeleted, { message: message });
33
33
  }
34
+ /** FIXME: isReactionEnabled should be removed with next major version and a proper centralized permissions logic should be put in place
35
+ * With the current permissions implementation it would be sth like:
36
+ * const messageActions = getMessageActions();
37
+ * const canReact = messageActions.includes(MESSAGE_ACTIONS.react);
38
+ */
39
+ var canReact = isReactionEnabled;
40
+ var canShowReactions = hasReactions;
34
41
  var showMetadata = !groupedByUser || endOfGroup;
35
42
  var showReplyCountButton = !threadList && !!message.reply_count;
36
43
  var allowRetry = message.status === 'failed' && message.errorStatusCode !== 403;
@@ -40,7 +47,7 @@ var MessageSimpleWithContext = function (props) {
40
47
  'pinned-message': message.pinned,
41
48
  'str-chat__message--has-attachment': hasAttachment,
42
49
  'str-chat__message--highlighted': highlighted,
43
- 'str-chat__message--with-reactions str-chat__message-with-thread-link': hasReactions && isReactionEnabled,
50
+ 'str-chat__message--with-reactions str-chat__message-with-thread-link': canShowReactions,
44
51
  'str-chat__message-send-can-be-retried': (message === null || message === void 0 ? void 0 : message.status) === 'failed' && (message === null || message === void 0 ? void 0 : message.errorStatusCode) !== 403,
45
52
  'str-chat__virtual-message__wrapper--end': endOfGroup,
46
53
  'str-chat__virtual-message__wrapper--first': firstOfGroup,
@@ -57,8 +64,8 @@ var MessageSimpleWithContext = function (props) {
57
64
  }), "data-testid": 'message-inner', onClick: allowRetry ? function () { return handleRetry(message); } : undefined, onKeyUp: allowRetry ? function () { return handleRetry(message); } : undefined },
58
65
  React.createElement(MessageOptions, null),
59
66
  React.createElement("div", { className: 'str-chat__message-reactions-host' },
60
- hasReactions && isReactionEnabled && React.createElement(ReactionsList, { reverse: true }),
61
- showDetailedReactions && isReactionEnabled && (React.createElement(ReactionSelector, { ref: reactionSelectorRef }))),
67
+ canShowReactions && React.createElement(ReactionsList, { reverse: true }),
68
+ showDetailedReactions && canReact && React.createElement(ReactionSelector, { ref: reactionSelectorRef })),
62
69
  React.createElement("div", { className: 'str-chat__message-bubble' },
63
70
  ((_a = message.attachments) === null || _a === void 0 ? void 0 : _a.length) && !message.quoted_message ? (React.createElement(Attachment, { actionHandler: handleAction, attachments: message.attachments })) : null,
64
71
  React.createElement(MessageText, { message: message, renderText: renderText }),
@@ -1 +1 @@
1
- {"version":3,"file":"useReactionHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/hooks/useReactionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAInF,OAAO,EAAE,aAAa,EAA0B,MAAM,sCAAsC,CAAC;AAG7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,4MACsF,CAAC;AAE1H,eAAO,MAAM,kBAAkB,gKA8ED,MAAM,UAAU,MAAM,kBAAkB,kBAmCrE,CAAC;AAEF,eAAO,MAAM,gBAAgB,oKAIL,UAAU,cAAc,GAAG,IAAI,CAAC,sBAClC,UAAU,cAAc,GAAG,IAAI,CAAC,iCACrB,OAAO;;;;CA+FvC,CAAC"}
1
+ {"version":3,"file":"useReactionHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/hooks/useReactionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAInF,OAAO,EAAE,aAAa,EAA0B,MAAM,sCAAsC,CAAC;AAG7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,4MACsF,CAAC;AAE1H,eAAO,MAAM,kBAAkB,gKAgFD,MAAM,UAAU,MAAM,kBAAkB,kBAmCrE,CAAC;AAEF,eAAO,MAAM,gBAAgB,oKAIL,UAAU,cAAc,GAAG,IAAI,CAAC,sBAClC,UAAU,cAAc,GAAG,IAAI,CAAC,iCACrB,OAAO;;;;CAwFvC,CAAC"}
@@ -7,7 +7,7 @@ import { useChatContext } from '../../../context/ChatContext';
7
7
  export var reactionHandlerWarning = "Reaction handler was called, but it is missing one of its required arguments.\nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.";
8
8
  export var useReactionHandler = function (message) {
9
9
  var updateMessage = useChannelActionContext('useReactionHandler').updateMessage;
10
- var channel = useChannelStateContext('useReactionHandler').channel;
10
+ var _a = useChannelStateContext('useReactionHandler'), channel = _a.channel, channelCapabilities = _a.channelCapabilities;
11
11
  var client = useChatContext('useReactionHandler').client;
12
12
  var createMessagePreview = useCallback(function (add, reaction, message) {
13
13
  var _a, _b;
@@ -31,7 +31,7 @@ export var useReactionHandler = function (message) {
31
31
  ? __spreadArray([reaction], ((message === null || message === void 0 ? void 0 : message.own_reactions) || []), true) : (_b = message === null || message === void 0 ? void 0 : message.own_reactions) === null || _b === void 0 ? void 0 : _b.filter(function (item) { return item.type !== reaction.type; });
32
32
  return __assign(__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_counts: newReactionCounts, reaction_scores: newReactionCounts });
33
33
  }, [client.user, client.userID]);
34
- var creatReactionPreview = function (type) {
34
+ var createReactionPreview = function (type) {
35
35
  var _a;
36
36
  return ({
37
37
  message_id: message === null || message === void 0 ? void 0 : message.id,
@@ -43,33 +43,32 @@ export var useReactionHandler = function (message) {
43
43
  };
44
44
  var toggleReaction = throttle(function (id, type, add) { return __awaiter(void 0, void 0, void 0, function () {
45
45
  var newReaction, tempMessage, messageResponse, _a, error_1;
46
- var _b;
47
- return __generator(this, function (_c) {
48
- switch (_c.label) {
46
+ return __generator(this, function (_b) {
47
+ switch (_b.label) {
49
48
  case 0:
50
- if (!message || ((_b = channel.data) === null || _b === void 0 ? void 0 : _b.frozen))
49
+ if (!message || !channelCapabilities['send-reaction'])
51
50
  return [2 /*return*/];
52
- newReaction = creatReactionPreview(type);
51
+ newReaction = createReactionPreview(type);
53
52
  tempMessage = createMessagePreview(add, newReaction, message);
54
- _c.label = 1;
53
+ _b.label = 1;
55
54
  case 1:
56
- _c.trys.push([1, 6, , 7]);
55
+ _b.trys.push([1, 6, , 7]);
57
56
  updateMessage(tempMessage);
58
57
  if (!add) return [3 /*break*/, 3];
59
58
  return [4 /*yield*/, channel.sendReaction(id, { type: type })];
60
59
  case 2:
61
- _a = _c.sent();
60
+ _a = _b.sent();
62
61
  return [3 /*break*/, 5];
63
62
  case 3: return [4 /*yield*/, channel.deleteReaction(id, type)];
64
63
  case 4:
65
- _a = _c.sent();
66
- _c.label = 5;
64
+ _a = _b.sent();
65
+ _b.label = 5;
67
66
  case 5:
68
67
  messageResponse = _a;
69
68
  updateMessage(messageResponse.message);
70
69
  return [3 /*break*/, 7];
71
70
  case 6:
72
- error_1 = _c.sent();
71
+ error_1 = _b.sent();
73
72
  // revert to the original message if the API call fails
74
73
  updateMessage(message);
75
74
  return [3 /*break*/, 7];
@@ -124,12 +123,10 @@ export var useReactionHandler = function (message) {
124
123
  }); };
125
124
  };
126
125
  export var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef, closeReactionSelectorOnClick) {
127
- var _a;
128
- var _b = useChannelStateContext('useReactionClick'), channel = _b.channel, _c = _b.channelCapabilities, channelCapabilities = _c === void 0 ? {} : _c, channelConfig = _b.channelConfig;
129
- var _d = useState(false), showDetailedReactions = _d[0], setShowDetailedReactions = _d[1];
126
+ var _a = useChannelStateContext('useReactionClick').channelCapabilities, channelCapabilities = _a === void 0 ? {} : _a;
127
+ var _b = useState(false), showDetailedReactions = _b[0], setShowDetailedReactions = _b[1];
130
128
  var hasListener = useRef(false);
131
- var isFrozen = !!((_a = channel.data) === null || _a === void 0 ? void 0 : _a.frozen);
132
- var isReactionEnabled = ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction']) || isFrozen;
129
+ var isReactionEnabled = channelCapabilities['send-reaction'];
133
130
  var messageDeleted = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
134
131
  var closeDetailedReactions = useCallback(function (event) {
135
132
  var _a;
@@ -177,9 +174,8 @@ export var useReactionClick = function (message, reactionSelectorRef, messageWra
177
174
  }
178
175
  }, [messageDeleted, closeDetailedReactions, messageWrapperRef]);
179
176
  var onReactionListClick = function (event) {
180
- if (event === null || event === void 0 ? void 0 : event.stopPropagation) {
181
- event.stopPropagation();
182
- }
177
+ var _a;
178
+ (_a = event === null || event === void 0 ? void 0 : event.stopPropagation) === null || _a === void 0 ? void 0 : _a.call(event);
183
179
  setShowDetailedReactions(function (prev) { return !prev; });
184
180
  };
185
181
  return {
@@ -13,5 +13,5 @@ export var CooldownTimer = function (_a) {
13
13
  }, 1000);
14
14
  return function () { return clearInterval(countdownInterval); };
15
15
  });
16
- return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
16
+ return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds));
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useCooldownTimer.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0FAExB,kBAsCJ,CAAC"}
1
+ {"version":3,"file":"useCooldownTimer.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAK5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0FAExB,kBAyCJ,CAAC"}
@@ -16,9 +16,12 @@ export var useCooldownTimer = function () {
16
16
  }, [messages, (_a = client.user) === null || _a === void 0 ? void 0 : _a.id, latestMessageDatesByChannels, channel.cid]);
17
17
  useEffect(function () {
18
18
  var timeSinceOwnLastMessage = ownLatestMessageDate
19
- ? (new Date().getTime() - ownLatestMessageDate.getTime()) / 1000
19
+ ? // prevent negative values
20
+ Math.max(0, (new Date().getTime() - ownLatestMessageDate.getTime()) / 1000)
20
21
  : undefined;
21
- setCooldownRemaining(!skipCooldown && timeSinceOwnLastMessage && cooldownInterval > timeSinceOwnLastMessage
22
+ setCooldownRemaining(!skipCooldown &&
23
+ typeof timeSinceOwnLastMessage !== 'undefined' &&
24
+ cooldownInterval > timeSinceOwnLastMessage
22
25
  ? Math.round(cooldownInterval - timeSinceOwnLastMessage)
23
26
  : 0);
24
27
  }, [cooldownInterval, ownLatestMessageDate, skipCooldown]);
@@ -45,7 +45,9 @@ export declare type MessageContextValue<StreamChatGenerics extends DefaultStream
45
45
  handleRetry: ChannelActionContextValue<StreamChatGenerics>['retrySendMessage'];
46
46
  /** Function that returns whether or not the Message belongs to the current user */
47
47
  isMyMessage: () => boolean;
48
- /** Whether or not reactions are enabled for the active channel */
48
+ /** @deprecated will be removed in the next major release.
49
+ * Whether sending reactions is enabled for the active channel.
50
+ */
49
51
  isReactionEnabled: boolean;
50
52
  /** The message object */
51
53
  message: StreamMessage<StreamChatGenerics>;
@@ -1 +1 @@
1
- {"version":3,"file":"MessageContext.d.ts","sourceRoot":"","sources":["../../src/context/MessageContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7E,oBAAY,oBAAoB,CAC9B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,CACb,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,oBAAY,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,kCAAkC;IAClC,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;IAC9D,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrD,8CAA8C;IAC9C,YAAY,EAAE,uBAAuB,CAAC;IACtC,gDAAgD;IAChD,YAAY,EAAE,iBAAiB,CAAC;IAChC,8CAA8C;IAC9C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,8CAA8C;IAC9C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,2CAA2C;IAC3C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6CAA6C;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,6CAA6C;IAC7C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,+CAA+C;IAC/C,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,0CAA0C;IAC1C,WAAW,EAAE,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC/E,mFAAmF;IACnF,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,kEAAkE;IAClE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB;IACzB,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,mEAAmE;IACnE,sBAAsB,EAAE,iBAAiB,CAAC;IAC1C,mEAAmE;IACnE,sBAAsB,EAAE,iBAAiB,CAAC;IAC1C,8DAA8D;IAC9D,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,6EAA6E;IAC7E,WAAW,EAAE,iBAAiB,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,EAAE,iBAAiB,CAAC;IAC/B,0DAA0D;IAC1D,mBAAmB,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACnE,qDAAqD;IACrD,eAAe,EAAE,iBAAiB,CAAC;IACnC,mDAAmD;IACnD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wKAAwK;IACxK,2BAA2B,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACpE,kMAAkM;IAClM,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAChE,0HAA0H;IAC1H,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2HAA2H;IAC3H,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qIAAqI;IACrI,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACpC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6IAA6I;IAC7I,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACnC,qHAAqH;IACrH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,MAAM,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC5C,6KAA6K;IAC7K,UAAU,CAAC,EAAE,CACX,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,EAAE,EACpD,OAAO,CAAC,EAAE,iBAAiB,KACxB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,cAAc,2EAAkE,CAAC;AAE9F,eAAO,MAAM,eAAe;;kBAW3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,qGAGZ,MAAM,4CAavB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;CAqB9B,CAAC"}
1
+ {"version":3,"file":"MessageContext.d.ts","sourceRoot":"","sources":["../../src/context/MessageContext.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  import Dayjs from 'dayjs';
3
3
  import type { TFunction } from 'i18next';
4
- import type { Moment } from 'moment';
4
+ import type { Moment } from 'moment-timezone';
5
5
  import type { TranslationLanguages } from 'stream-chat';
6
6
  import type { UnknownType } from '../types/types';
7
7
  export declare type SupportedTranslations = 'de' | 'en' | 'es' | 'fr' | 'hi' | 'it' | 'ja' | 'ko' | 'nl' | 'pt' | 'ru' | 'tr';
@@ -1 +1 @@
1
- {"version":3,"file":"TranslationContext.d.ts","sourceRoot":"","sources":["../../src/context/TranslationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,oBAAY,qBAAqB,GAC7B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,eAAO,MAAM,mBAAmB,aAAc,MAAM,sCAGnD,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,qBAAqB,mCACf,CAAC;AAE7C,eAAO,MAAM,MAAM,WAAY,qBAAqB,mBACtB,CAAC;AAE/B,eAAO,MAAM,gBAAgB,WAAY,qBAAqB,8BACJ,CAAC;AAE3D,oBAAY,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE1D,oBAAY,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;AAElF,oBAAY,eAAe,GAAG,CAAC,KAAK,CAAC,EAAE,oBAAoB,KAAK,qBAAqB,CAAC;AAEtF,oBAAY,uBAAuB,GAAG;IACpC,CAAC,EAAE,SAAS,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,oBAAoB,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAAY,oBAAoB,gBAAiB,CAAC;AAEpF,eAAO,MAAM,kBAAkB,wCAI7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;WAGF,uBAAuB;kBAEpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,mBAAoB,MAAM,4BAY3D,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAclC,CAAC"}
1
+ {"version":3,"file":"TranslationContext.d.ts","sourceRoot":"","sources":["../../src/context/TranslationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,oBAAY,qBAAqB,GAC7B,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,eAAO,MAAM,mBAAmB,aAAc,MAAM,sCAGnD,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,qBAAqB,mCACf,CAAC;AAE7C,eAAO,MAAM,MAAM,WAAY,qBAAqB,mBACtB,CAAC;AAE/B,eAAO,MAAM,gBAAgB,WAAY,qBAAqB,8BACJ,CAAC;AAE3D,oBAAY,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE1D,oBAAY,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;AAElF,oBAAY,eAAe,GAAG,CAAC,KAAK,CAAC,EAAE,oBAAoB,KAAK,qBAAqB,CAAC;AAEtF,oBAAY,uBAAuB,GAAG;IACpC,CAAC,EAAE,SAAS,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,oBAAoB,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAAY,oBAAoB,gBAAiB,CAAC;AAEpF,eAAO,MAAM,kBAAkB,wCAI7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;WAGF,uBAAuB;kBAEpD,CAAC;AAEF,eAAO,MAAM,qBAAqB,mBAAoB,MAAM,4BAY3D,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAclC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { TFunction } from 'i18next';
2
2
  import Dayjs from 'dayjs';
3
- import type moment from 'moment';
3
+ import type momentTimezone from 'moment-timezone';
4
4
  import type { TranslationLanguages } from 'stream-chat';
5
5
  import type { TDateTimeParser } from '../context/TranslationContext';
6
6
  import type { UnknownType } from '../types/types';
@@ -25,8 +25,9 @@ declare type CalendarLocaleConfig = {
25
25
  sameDay: string;
26
26
  sameElse: string;
27
27
  };
28
+ declare type DateTimeParserModule = typeof Dayjs | typeof momentTimezone;
28
29
  declare type Options = {
29
- DateTimeParser?: typeof Dayjs | typeof moment;
30
+ DateTimeParser?: DateTimeParserModule;
30
31
  dayjsLocaleConfigForLanguage?: Partial<ILocale> & {
31
32
  calendar?: CalendarLocaleConfig;
32
33
  };
@@ -34,6 +35,7 @@ declare type Options = {
34
35
  disableDateTimeTranslations?: boolean;
35
36
  language?: TranslationLanguages;
36
37
  logger?: (message?: string) => void;
38
+ timezone?: string;
37
39
  translationsForLanguage?: Partial<typeof enTranslations>;
38
40
  };
39
41
  export declare const defaultTranslatorFunction: TFunction;
@@ -63,7 +65,7 @@ export declare class Streami18n {
63
65
  */
64
66
  logger: (msg?: string) => void;
65
67
  currentLanguage: TranslationLanguages;
66
- DateTimeParser: typeof Dayjs | typeof moment;
68
+ DateTimeParser: DateTimeParserModule;
67
69
  isCustomDateTimeParser: boolean;
68
70
  i18nextConfig: {
69
71
  debug: boolean;
@@ -76,6 +78,10 @@ export declare class Streami18n {
76
78
  nsSeparator: false;
77
79
  parseMissingKeyHandler: (key: string) => string;
78
80
  };
81
+ /**
82
+ * A valid TZ identifier string (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
83
+ */
84
+ timezone?: string;
79
85
  /**
80
86
  * Constructor accepts following options:
81
87
  * - language (String) default: 'en'
@@ -1 +1 @@
1
- {"version":3,"file":"Streami18n.d.ts","sourceRoot":"","sources":["../../src/i18n/Streami18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Streami18n.d.ts","sourceRoot":"","sources":["../../src/i18n/Streami18n.ts"],"names":[],"mappings":"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"}