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.
- package/dist/browser.full-bundle.js +181 -70
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +3 -0
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +6 -1
- package/dist/components/ChannelPreview/hooks/index.d.ts +1 -0
- package/dist/components/ChannelPreview/hooks/index.d.ts.map +1 -1
- package/dist/components/ChannelPreview/hooks/index.js +1 -0
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +17 -0
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts.map +1 -0
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.js +58 -0
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +4 -3
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.js +52 -31
- package/dist/components/Message/MessageSimple.d.ts.map +1 -1
- package/dist/components/Message/MessageSimple.js +10 -3
- package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useReactionHandler.js +17 -21
- package/dist/components/MessageInput/CooldownTimer.js +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.js +5 -2
- package/dist/context/MessageContext.d.ts +3 -1
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/context/TranslationContext.d.ts +1 -1
- package/dist/context/TranslationContext.d.ts.map +1 -1
- package/dist/i18n/Streami18n.d.ts +9 -3
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/Streami18n.js +18 -11
- package/dist/index.cjs.js +167 -70
- package/dist/index.cjs.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/i18n/Streami18n.js
CHANGED
|
@@ -6,6 +6,8 @@ import updateLocale from 'dayjs/plugin/updateLocale';
|
|
|
6
6
|
import LocalizedFormat from 'dayjs/plugin/localizedFormat';
|
|
7
7
|
import localeData from 'dayjs/plugin/localeData';
|
|
8
8
|
import relativeTime from 'dayjs/plugin/relativeTime';
|
|
9
|
+
import utc from 'dayjs/plugin/utc';
|
|
10
|
+
import timezone from 'dayjs/plugin/timezone';
|
|
9
11
|
import { deTranslations, enTranslations, esTranslations, frTranslations, hiTranslations, itTranslations, jaTranslations, koTranslations, nlTranslations, ptTranslations, ruTranslations, trTranslations, } from './translations';
|
|
10
12
|
var defaultNS = 'translation';
|
|
11
13
|
var defaultLng = 'en';
|
|
@@ -25,6 +27,8 @@ import 'dayjs/locale/tr';
|
|
|
25
27
|
// to make sure I don't mess up language at other places in app.
|
|
26
28
|
import 'dayjs/locale/en';
|
|
27
29
|
Dayjs.extend(updateLocale);
|
|
30
|
+
Dayjs.extend(utc);
|
|
31
|
+
Dayjs.extend(timezone);
|
|
28
32
|
Dayjs.updateLocale('de', {
|
|
29
33
|
calendar: {
|
|
30
34
|
lastDay: '[gestern um] LT',
|
|
@@ -193,6 +197,9 @@ var en_locale = {
|
|
|
193
197
|
var isDayJs = function (dateTimeParser) {
|
|
194
198
|
return dateTimeParser.extend !== undefined;
|
|
195
199
|
};
|
|
200
|
+
var supportsTz = function (dateTimeParser) {
|
|
201
|
+
return dateTimeParser.tz !== undefined;
|
|
202
|
+
};
|
|
196
203
|
/**
|
|
197
204
|
* Wrapper around [i18next](https://www.i18next.com/) class for Stream related translations.
|
|
198
205
|
* Instance of this class should be provided to Chat component to handle translations.
|
|
@@ -436,6 +443,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
436
443
|
this.logger = finalOptions.logger;
|
|
437
444
|
this.currentLanguage = finalOptions.language;
|
|
438
445
|
this.DateTimeParser = finalOptions.DateTimeParser;
|
|
446
|
+
this.timezone = finalOptions.timezone;
|
|
439
447
|
try {
|
|
440
448
|
if (this.DateTimeParser && isDayJs(this.DateTimeParser)) {
|
|
441
449
|
this.DateTimeParser.extend(LocalizedFormat);
|
|
@@ -485,19 +493,18 @@ var Streami18n = /** @class */ (function () {
|
|
|
485
493
|
"register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)");
|
|
486
494
|
}
|
|
487
495
|
this.tDateTimeParser = function (timestamp) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
*/
|
|
492
|
-
if (isDayJs(_this.DateTimeParser)) {
|
|
493
|
-
return _this.DateTimeParser(timestamp).locale(defaultLng);
|
|
494
|
-
}
|
|
495
|
-
return _this.DateTimeParser(timestamp).locale(defaultLng);
|
|
496
|
-
}
|
|
496
|
+
var language = finalOptions.disableDateTimeTranslations || !_this.localeExists(_this.currentLanguage)
|
|
497
|
+
? defaultLng
|
|
498
|
+
: _this.currentLanguage;
|
|
497
499
|
if (isDayJs(_this.DateTimeParser)) {
|
|
498
|
-
return _this.DateTimeParser
|
|
500
|
+
return supportsTz(_this.DateTimeParser)
|
|
501
|
+
? _this.DateTimeParser(timestamp).tz(_this.timezone).locale(language)
|
|
502
|
+
: _this.DateTimeParser(timestamp).locale(language);
|
|
503
|
+
}
|
|
504
|
+
if (supportsTz(_this.DateTimeParser) && _this.timezone) {
|
|
505
|
+
return _this.DateTimeParser(timestamp).tz(_this.timezone).locale(language);
|
|
499
506
|
}
|
|
500
|
-
return _this.DateTimeParser(timestamp).locale(
|
|
507
|
+
return _this.DateTimeParser(timestamp).locale(language);
|
|
501
508
|
};
|
|
502
509
|
}
|
|
503
510
|
/**
|
package/dist/index.cjs.js
CHANGED
|
@@ -14,6 +14,8 @@ var i18n = require('i18next');
|
|
|
14
14
|
var updateLocale = require('dayjs/plugin/updateLocale');
|
|
15
15
|
var localeData = require('dayjs/plugin/localeData');
|
|
16
16
|
var relativeTime = require('dayjs/plugin/relativeTime');
|
|
17
|
+
var utc = require('dayjs/plugin/utc');
|
|
18
|
+
var timezone = require('dayjs/plugin/timezone');
|
|
17
19
|
require('dayjs/locale/de');
|
|
18
20
|
require('dayjs/locale/es');
|
|
19
21
|
require('dayjs/locale/fr');
|
|
@@ -88,6 +90,8 @@ var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
|
|
|
88
90
|
var updateLocale__default = /*#__PURE__*/_interopDefaultLegacy(updateLocale);
|
|
89
91
|
var localeData__default = /*#__PURE__*/_interopDefaultLegacy(localeData);
|
|
90
92
|
var relativeTime__default = /*#__PURE__*/_interopDefaultLegacy(relativeTime);
|
|
93
|
+
var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
|
|
94
|
+
var timezone__default = /*#__PURE__*/_interopDefaultLegacy(timezone);
|
|
91
95
|
var ImageGallery__default = /*#__PURE__*/_interopDefaultLegacy(ImageGallery);
|
|
92
96
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
93
97
|
var linkify__namespace = /*#__PURE__*/_interopNamespace(linkify);
|
|
@@ -609,6 +613,8 @@ var Cancel="İptal";var Close="Kapat";var Delete="Sil";var Delivered="İletildi"
|
|
|
609
613
|
var defaultNS = 'translation';
|
|
610
614
|
var defaultLng = 'en';
|
|
611
615
|
Dayjs__default["default"].extend(updateLocale__default["default"]);
|
|
616
|
+
Dayjs__default["default"].extend(utc__default["default"]);
|
|
617
|
+
Dayjs__default["default"].extend(timezone__default["default"]);
|
|
612
618
|
Dayjs__default["default"].updateLocale('de', {
|
|
613
619
|
calendar: {
|
|
614
620
|
lastDay: '[gestern um] LT',
|
|
@@ -777,6 +783,9 @@ var en_locale = {
|
|
|
777
783
|
var isDayJs = function (dateTimeParser) {
|
|
778
784
|
return dateTimeParser.extend !== undefined;
|
|
779
785
|
};
|
|
786
|
+
var supportsTz = function (dateTimeParser) {
|
|
787
|
+
return dateTimeParser.tz !== undefined;
|
|
788
|
+
};
|
|
780
789
|
/**
|
|
781
790
|
* Wrapper around [i18next](https://www.i18next.com/) class for Stream related translations.
|
|
782
791
|
* Instance of this class should be provided to Chat component to handle translations.
|
|
@@ -1020,6 +1029,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
1020
1029
|
this.logger = finalOptions.logger;
|
|
1021
1030
|
this.currentLanguage = finalOptions.language;
|
|
1022
1031
|
this.DateTimeParser = finalOptions.DateTimeParser;
|
|
1032
|
+
this.timezone = finalOptions.timezone;
|
|
1023
1033
|
try {
|
|
1024
1034
|
if (this.DateTimeParser && isDayJs(this.DateTimeParser)) {
|
|
1025
1035
|
this.DateTimeParser.extend(LocalizedFormat__default["default"]);
|
|
@@ -1069,19 +1079,18 @@ var Streami18n = /** @class */ (function () {
|
|
|
1069
1079
|
"register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)");
|
|
1070
1080
|
}
|
|
1071
1081
|
this.tDateTimeParser = function (timestamp) {
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
*/
|
|
1076
|
-
if (isDayJs(_this.DateTimeParser)) {
|
|
1077
|
-
return _this.DateTimeParser(timestamp).locale(defaultLng);
|
|
1078
|
-
}
|
|
1079
|
-
return _this.DateTimeParser(timestamp).locale(defaultLng);
|
|
1080
|
-
}
|
|
1082
|
+
var language = finalOptions.disableDateTimeTranslations || !_this.localeExists(_this.currentLanguage)
|
|
1083
|
+
? defaultLng
|
|
1084
|
+
: _this.currentLanguage;
|
|
1081
1085
|
if (isDayJs(_this.DateTimeParser)) {
|
|
1082
|
-
return _this.DateTimeParser
|
|
1086
|
+
return supportsTz(_this.DateTimeParser)
|
|
1087
|
+
? _this.DateTimeParser(timestamp).tz(_this.timezone).locale(language)
|
|
1088
|
+
: _this.DateTimeParser(timestamp).locale(language);
|
|
1089
|
+
}
|
|
1090
|
+
if (supportsTz(_this.DateTimeParser) && _this.timezone) {
|
|
1091
|
+
return _this.DateTimeParser(timestamp).tz(_this.timezone).locale(language);
|
|
1083
1092
|
}
|
|
1084
|
-
return _this.DateTimeParser(timestamp).locale(
|
|
1093
|
+
return _this.DateTimeParser(timestamp).locale(language);
|
|
1085
1094
|
};
|
|
1086
1095
|
}
|
|
1087
1096
|
/**
|
|
@@ -30422,7 +30431,7 @@ var CooldownTimer = function (_a) {
|
|
|
30422
30431
|
}, 1000);
|
|
30423
30432
|
return function () { return clearInterval(countdownInterval); };
|
|
30424
30433
|
});
|
|
30425
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds
|
|
30434
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds));
|
|
30426
30435
|
};
|
|
30427
30436
|
|
|
30428
30437
|
var useCommandTrigger = function () {
|
|
@@ -31138,9 +31147,12 @@ var useCooldownTimer = function () {
|
|
|
31138
31147
|
}, [messages, (_a = client.user) === null || _a === void 0 ? void 0 : _a.id, latestMessageDatesByChannels, channel.cid]);
|
|
31139
31148
|
React.useEffect(function () {
|
|
31140
31149
|
var timeSinceOwnLastMessage = ownLatestMessageDate
|
|
31141
|
-
?
|
|
31150
|
+
? // prevent negative values
|
|
31151
|
+
Math.max(0, (new Date().getTime() - ownLatestMessageDate.getTime()) / 1000)
|
|
31142
31152
|
: undefined;
|
|
31143
|
-
setCooldownRemaining(!skipCooldown &&
|
|
31153
|
+
setCooldownRemaining(!skipCooldown &&
|
|
31154
|
+
typeof timeSinceOwnLastMessage !== 'undefined' &&
|
|
31155
|
+
cooldownInterval > timeSinceOwnLastMessage
|
|
31144
31156
|
? Math.round(cooldownInterval - timeSinceOwnLastMessage)
|
|
31145
31157
|
: 0);
|
|
31146
31158
|
}, [cooldownInterval, ownLatestMessageDate, skipCooldown]);
|
|
@@ -32575,6 +32587,13 @@ var MessageSimpleWithContext = function (props) {
|
|
|
32575
32587
|
if (message.deleted_at || message.type === 'deleted') {
|
|
32576
32588
|
return React__default["default"].createElement(MessageDeleted$1, { message: message });
|
|
32577
32589
|
}
|
|
32590
|
+
/** FIXME: isReactionEnabled should be removed with next major version and a proper centralized permissions logic should be put in place
|
|
32591
|
+
* With the current permissions implementation it would be sth like:
|
|
32592
|
+
* const messageActions = getMessageActions();
|
|
32593
|
+
* const canReact = messageActions.includes(MESSAGE_ACTIONS.react);
|
|
32594
|
+
*/
|
|
32595
|
+
var canReact = isReactionEnabled;
|
|
32596
|
+
var canShowReactions = hasReactions;
|
|
32578
32597
|
var showMetadata = !groupedByUser || endOfGroup;
|
|
32579
32598
|
var showReplyCountButton = !threadList && !!message.reply_count;
|
|
32580
32599
|
var allowRetry = message.status === 'failed' && message.errorStatusCode !== 403;
|
|
@@ -32584,7 +32603,7 @@ var MessageSimpleWithContext = function (props) {
|
|
|
32584
32603
|
'pinned-message': message.pinned,
|
|
32585
32604
|
'str-chat__message--has-attachment': hasAttachment,
|
|
32586
32605
|
'str-chat__message--highlighted': highlighted,
|
|
32587
|
-
'str-chat__message--with-reactions str-chat__message-with-thread-link':
|
|
32606
|
+
'str-chat__message--with-reactions str-chat__message-with-thread-link': canShowReactions,
|
|
32588
32607
|
'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,
|
|
32589
32608
|
'str-chat__virtual-message__wrapper--end': endOfGroup,
|
|
32590
32609
|
'str-chat__virtual-message__wrapper--first': firstOfGroup,
|
|
@@ -32601,8 +32620,8 @@ var MessageSimpleWithContext = function (props) {
|
|
|
32601
32620
|
}), "data-testid": 'message-inner', onClick: allowRetry ? function () { return handleRetry(message); } : undefined, onKeyUp: allowRetry ? function () { return handleRetry(message); } : undefined },
|
|
32602
32621
|
React__default["default"].createElement(MessageOptions$1, null),
|
|
32603
32622
|
React__default["default"].createElement("div", { className: 'str-chat__message-reactions-host' },
|
|
32604
|
-
|
|
32605
|
-
showDetailedReactions &&
|
|
32623
|
+
canShowReactions && React__default["default"].createElement(ReactionsList$1, { reverse: true }),
|
|
32624
|
+
showDetailedReactions && canReact && React__default["default"].createElement(ReactionSelector$1, { ref: reactionSelectorRef })),
|
|
32606
32625
|
React__default["default"].createElement("div", { className: 'str-chat__message-bubble' },
|
|
32607
32626
|
((_a = message.attachments) === null || _a === void 0 ? void 0 : _a.length) && !message.quoted_message ? (React__default["default"].createElement(Attachment, { actionHandler: handleAction, attachments: message.attachments })) : null,
|
|
32608
32627
|
React__default["default"].createElement(MessageText, { message: message, renderText: renderText }),
|
|
@@ -34274,6 +34293,63 @@ var useIsChannelMuted = function (channel) {
|
|
|
34274
34293
|
return muted;
|
|
34275
34294
|
};
|
|
34276
34295
|
|
|
34296
|
+
exports.MessageDeliveryStatus = void 0;
|
|
34297
|
+
(function (MessageDeliveryStatus) {
|
|
34298
|
+
MessageDeliveryStatus["DELIVERED"] = "delivered";
|
|
34299
|
+
MessageDeliveryStatus["READ"] = "read";
|
|
34300
|
+
})(exports.MessageDeliveryStatus || (exports.MessageDeliveryStatus = {}));
|
|
34301
|
+
var useMessageDeliveryStatus = function (_a) {
|
|
34302
|
+
var channel = _a.channel, lastMessage = _a.lastMessage;
|
|
34303
|
+
var client = useChatContext().client;
|
|
34304
|
+
var _b = React.useState(), messageDeliveryStatus = _b[0], setMessageDeliveryStatus = _b[1];
|
|
34305
|
+
var isOwnMessage = React.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]);
|
|
34306
|
+
React.useEffect(function () {
|
|
34307
|
+
var lastMessageIsOwn = isOwnMessage(lastMessage);
|
|
34308
|
+
if (!(lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.created_at) || !lastMessageIsOwn)
|
|
34309
|
+
return;
|
|
34310
|
+
var lastMessageCreatedAtDate = typeof lastMessage.created_at === 'string'
|
|
34311
|
+
? new Date(lastMessage.created_at)
|
|
34312
|
+
: lastMessage.created_at;
|
|
34313
|
+
var channelReadByOthersAfterLastMessageUpdate = Object.values(channel.state.read).some(function (_a) {
|
|
34314
|
+
var channelLastMarkedReadDate = _a.last_read, user = _a.user;
|
|
34315
|
+
var ignoreOwnReadStatus = client.user && user.id !== client.user.id;
|
|
34316
|
+
return ignoreOwnReadStatus && lastMessageCreatedAtDate < channelLastMarkedReadDate;
|
|
34317
|
+
});
|
|
34318
|
+
setMessageDeliveryStatus(channelReadByOthersAfterLastMessageUpdate
|
|
34319
|
+
? exports.MessageDeliveryStatus.READ
|
|
34320
|
+
: exports.MessageDeliveryStatus.DELIVERED);
|
|
34321
|
+
}, [channel.state.read, client, isOwnMessage, lastMessage]);
|
|
34322
|
+
React.useEffect(function () {
|
|
34323
|
+
var handleMessageNew = function (event) {
|
|
34324
|
+
// the last message is not mine, so do not show the delivery status
|
|
34325
|
+
if (!isOwnMessage(event.message)) {
|
|
34326
|
+
return setMessageDeliveryStatus(undefined);
|
|
34327
|
+
}
|
|
34328
|
+
return setMessageDeliveryStatus(exports.MessageDeliveryStatus.DELIVERED);
|
|
34329
|
+
};
|
|
34330
|
+
channel.on('message.new', handleMessageNew);
|
|
34331
|
+
return function () {
|
|
34332
|
+
channel.off('message.new', handleMessageNew);
|
|
34333
|
+
};
|
|
34334
|
+
}, [channel, client, isOwnMessage]);
|
|
34335
|
+
React.useEffect(function () {
|
|
34336
|
+
if (!isOwnMessage(lastMessage))
|
|
34337
|
+
return;
|
|
34338
|
+
var handleMarkRead = function (event) {
|
|
34339
|
+
var _a, _b;
|
|
34340
|
+
if (((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id))
|
|
34341
|
+
setMessageDeliveryStatus(exports.MessageDeliveryStatus.READ);
|
|
34342
|
+
};
|
|
34343
|
+
channel.on('message.read', handleMarkRead);
|
|
34344
|
+
return function () {
|
|
34345
|
+
channel.off('message.read', handleMarkRead);
|
|
34346
|
+
};
|
|
34347
|
+
}, [channel, client, lastMessage, isOwnMessage]);
|
|
34348
|
+
return {
|
|
34349
|
+
messageDeliveryStatus: messageDeliveryStatus,
|
|
34350
|
+
};
|
|
34351
|
+
};
|
|
34352
|
+
|
|
34277
34353
|
var ChannelPreview = function (props) {
|
|
34278
34354
|
var channel = props.channel, _a = props.Preview, Preview = _a === void 0 ? ChannelPreviewMessenger : _a, channelUpdateCount = props.channelUpdateCount;
|
|
34279
34355
|
var _b = useChatContext('ChannelPreview'), activeChannel = _b.channel, client = _b.client, setActiveChannel = _b.setActiveChannel;
|
|
@@ -34281,6 +34357,10 @@ var ChannelPreview = function (props) {
|
|
|
34281
34357
|
var _d = useChannelPreviewInfo({ channel: channel }), displayImage = _d.displayImage, displayTitle = _d.displayTitle;
|
|
34282
34358
|
var _e = React.useState(channel.state.messages[channel.state.messages.length - 1]), lastMessage = _e[0], setLastMessage = _e[1];
|
|
34283
34359
|
var _f = React.useState(0), unread = _f[0], setUnread = _f[1];
|
|
34360
|
+
var messageDeliveryStatus = useMessageDeliveryStatus({
|
|
34361
|
+
channel: channel,
|
|
34362
|
+
lastMessage: lastMessage,
|
|
34363
|
+
}).messageDeliveryStatus;
|
|
34284
34364
|
var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
|
|
34285
34365
|
var muted = useIsChannelMuted(channel).muted;
|
|
34286
34366
|
React.useEffect(function () {
|
|
@@ -34320,24 +34400,29 @@ var ChannelPreview = function (props) {
|
|
|
34320
34400
|
if (!Preview)
|
|
34321
34401
|
return null;
|
|
34322
34402
|
var latestMessage = getLatestMessagePreview(channel, t, userLanguage);
|
|
34323
|
-
return (React__default["default"].createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, setActiveChannel: setActiveChannel, unread: unread })));
|
|
34403
|
+
return (React__default["default"].createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, messageDeliveryStatus: messageDeliveryStatus, setActiveChannel: setActiveChannel, unread: unread })));
|
|
34324
34404
|
};
|
|
34325
34405
|
|
|
34326
34406
|
var isChannel = function (output) { return output.cid != null; };
|
|
34327
34407
|
|
|
34328
34408
|
var useChannelSearch = function (_a) {
|
|
34329
|
-
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 =
|
|
34330
|
-
var
|
|
34331
|
-
var
|
|
34332
|
-
var
|
|
34333
|
-
var
|
|
34334
|
-
var
|
|
34409
|
+
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;
|
|
34410
|
+
var _g = useChatContext('useChannelSearch'), client = _g.client, setActiveChannel = _g.setActiveChannel, themeVersion = _g.themeVersion;
|
|
34411
|
+
var _h = React.useState(false), inputIsFocused = _h[0], setInputIsFocused = _h[1];
|
|
34412
|
+
var _j = React.useState(''), query = _j[0], setQuery = _j[1];
|
|
34413
|
+
var _k = React.useState([]), results = _k[0], setResults = _k[1];
|
|
34414
|
+
var _l = React.useState(false), searching = _l[0], setSearching = _l[1];
|
|
34415
|
+
var searchQueryPromiseInProgress = React.useRef();
|
|
34416
|
+
var shouldIgnoreQueryResults = React.useRef(false);
|
|
34335
34417
|
var inputRef = React.useRef(null);
|
|
34336
34418
|
var searchBarRef = React.useRef(null);
|
|
34337
34419
|
var clearState = React.useCallback(function () {
|
|
34338
34420
|
setQuery('');
|
|
34339
34421
|
setResults([]);
|
|
34340
34422
|
setSearching(false);
|
|
34423
|
+
if (searchQueryPromiseInProgress.current) {
|
|
34424
|
+
shouldIgnoreQueryResults.current = true;
|
|
34425
|
+
}
|
|
34341
34426
|
}, []);
|
|
34342
34427
|
var activateSearch = React.useCallback(function () {
|
|
34343
34428
|
setInputIsFocused(true);
|
|
@@ -34420,45 +34505,56 @@ var useChannelSearch = function (_a) {
|
|
|
34420
34505
|
});
|
|
34421
34506
|
}); }, [clearSearchOnClickOutside, client, exitSearch, onSelectResult, setActiveChannel, setChannels]);
|
|
34422
34507
|
var getChannels = React.useCallback(function (text) { return __awaiter(void 0, void 0, void 0, function () {
|
|
34423
|
-
var
|
|
34508
|
+
var results, userQueryPromise, users, channelQueryPromise, _a, channels, users, error_1;
|
|
34424
34509
|
var _b, _c, _d, _e, _f, _g;
|
|
34425
34510
|
return __generator(this, function (_h) {
|
|
34426
34511
|
switch (_h.label) {
|
|
34427
34512
|
case 0:
|
|
34428
|
-
|
|
34429
|
-
return [2 /*return*/];
|
|
34430
|
-
setSearching(true);
|
|
34513
|
+
results = [];
|
|
34431
34514
|
_h.label = 1;
|
|
34432
34515
|
case 1:
|
|
34433
34516
|
_h.trys.push([1, 6, , 7]);
|
|
34434
|
-
|
|
34517
|
+
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));
|
|
34518
|
+
if (!!searchForChannels) return [3 /*break*/, 3];
|
|
34519
|
+
searchQueryPromiseInProgress.current = userQueryPromise;
|
|
34520
|
+
return [4 /*yield*/, searchQueryPromiseInProgress.current];
|
|
34435
34521
|
case 2:
|
|
34436
|
-
userResponse = _h.sent();
|
|
34437
|
-
if (!searchForChannels) return [3 /*break*/, 4];
|
|
34438
|
-
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));
|
|
34439
|
-
return [4 /*yield*/, Promise.all([channelResponse, userResponse])];
|
|
34440
|
-
case 3:
|
|
34441
|
-
_a = _h.sent(), channels = _a[0], users_1 = _a[1].users;
|
|
34442
|
-
setResults(__spreadArray(__spreadArray([], channels, true), users_1, true));
|
|
34443
|
-
setSearching(false);
|
|
34444
|
-
return [2 /*return*/];
|
|
34445
|
-
case 4: return [4 /*yield*/, Promise.resolve(userResponse)];
|
|
34446
|
-
case 5:
|
|
34447
34522
|
users = (_h.sent()).users;
|
|
34448
|
-
|
|
34449
|
-
return [3 /*break*/,
|
|
34523
|
+
results = users;
|
|
34524
|
+
return [3 /*break*/, 5];
|
|
34525
|
+
case 3:
|
|
34526
|
+
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));
|
|
34527
|
+
searchQueryPromiseInProgress.current = Promise.all([
|
|
34528
|
+
channelQueryPromise,
|
|
34529
|
+
userQueryPromise,
|
|
34530
|
+
]);
|
|
34531
|
+
return [4 /*yield*/, searchQueryPromiseInProgress.current];
|
|
34532
|
+
case 4:
|
|
34533
|
+
_a = _h.sent(), channels = _a[0], users = _a[1].users;
|
|
34534
|
+
results = __spreadArray(__spreadArray([], channels, true), users, true);
|
|
34535
|
+
_h.label = 5;
|
|
34536
|
+
case 5: return [3 /*break*/, 7];
|
|
34450
34537
|
case 6:
|
|
34451
34538
|
error_1 = _h.sent();
|
|
34452
|
-
clearState();
|
|
34453
34539
|
console.error(error_1);
|
|
34454
34540
|
return [3 /*break*/, 7];
|
|
34455
34541
|
case 7:
|
|
34456
34542
|
setSearching(false);
|
|
34543
|
+
if (!shouldIgnoreQueryResults.current) {
|
|
34544
|
+
setResults(results);
|
|
34545
|
+
}
|
|
34546
|
+
else {
|
|
34547
|
+
shouldIgnoreQueryResults.current = false;
|
|
34548
|
+
}
|
|
34549
|
+
searchQueryPromiseInProgress.current = undefined;
|
|
34457
34550
|
return [2 /*return*/];
|
|
34458
34551
|
}
|
|
34459
34552
|
});
|
|
34460
|
-
}); }, [client,
|
|
34461
|
-
var
|
|
34553
|
+
}); }, [client, searchForChannels, searchQueryParams]);
|
|
34554
|
+
var scheduleGetChannels = React.useCallback(debounce__default["default"](getChannels, searchDebounceIntervalMs), [
|
|
34555
|
+
getChannels,
|
|
34556
|
+
searchDebounceIntervalMs,
|
|
34557
|
+
]);
|
|
34462
34558
|
var onSearch = React.useCallback(function (event) {
|
|
34463
34559
|
event.preventDefault();
|
|
34464
34560
|
if (disabled)
|
|
@@ -34470,12 +34566,17 @@ var useChannelSearch = function (_a) {
|
|
|
34470
34566
|
setSearching: setSearching,
|
|
34471
34567
|
}, event);
|
|
34472
34568
|
}
|
|
34473
|
-
else {
|
|
34569
|
+
else if (event.target.value) {
|
|
34570
|
+
setSearching(true);
|
|
34474
34571
|
setQuery(event.target.value);
|
|
34475
|
-
|
|
34572
|
+
scheduleGetChannels(event.target.value);
|
|
34573
|
+
}
|
|
34574
|
+
else if (!event.target.value) {
|
|
34575
|
+
clearState();
|
|
34576
|
+
scheduleGetChannels.cancel();
|
|
34476
34577
|
}
|
|
34477
34578
|
onSearchCallback === null || onSearchCallback === void 0 ? void 0 : onSearchCallback(event);
|
|
34478
|
-
}, [disabled,
|
|
34579
|
+
}, [clearState, disabled, scheduleGetChannels, onSearchCallback, searchFunction]);
|
|
34479
34580
|
return {
|
|
34480
34581
|
activateSearch: activateSearch,
|
|
34481
34582
|
clearState: clearState,
|
|
@@ -34868,7 +34969,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
34868
34969
|
*/
|
|
34869
34970
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
34870
34971
|
|
|
34871
|
-
var version = '10.
|
|
34972
|
+
var version = '10.12.0';
|
|
34872
34973
|
|
|
34873
34974
|
var useChat = function (_a) {
|
|
34874
34975
|
var _b, _c;
|
|
@@ -35520,7 +35621,7 @@ notifications) {
|
|
|
35520
35621
|
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.";
|
|
35521
35622
|
var useReactionHandler = function (message) {
|
|
35522
35623
|
var updateMessage = useChannelActionContext('useReactionHandler').updateMessage;
|
|
35523
|
-
var
|
|
35624
|
+
var _a = useChannelStateContext('useReactionHandler'), channel = _a.channel, channelCapabilities = _a.channelCapabilities;
|
|
35524
35625
|
var client = useChatContext('useReactionHandler').client;
|
|
35525
35626
|
var createMessagePreview = React.useCallback(function (add, reaction, message) {
|
|
35526
35627
|
var _a, _b;
|
|
@@ -35544,7 +35645,7 @@ var useReactionHandler = function (message) {
|
|
|
35544
35645
|
? __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; });
|
|
35545
35646
|
return __assign(__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_counts: newReactionCounts, reaction_scores: newReactionCounts });
|
|
35546
35647
|
}, [client.user, client.userID]);
|
|
35547
|
-
var
|
|
35648
|
+
var createReactionPreview = function (type) {
|
|
35548
35649
|
var _a;
|
|
35549
35650
|
return ({
|
|
35550
35651
|
message_id: message === null || message === void 0 ? void 0 : message.id,
|
|
@@ -35556,33 +35657,32 @@ var useReactionHandler = function (message) {
|
|
|
35556
35657
|
};
|
|
35557
35658
|
var toggleReaction = throttle__default["default"](function (id, type, add) { return __awaiter(void 0, void 0, void 0, function () {
|
|
35558
35659
|
var newReaction, tempMessage, messageResponse, _a;
|
|
35559
|
-
|
|
35560
|
-
|
|
35561
|
-
switch (_c.label) {
|
|
35660
|
+
return __generator(this, function (_b) {
|
|
35661
|
+
switch (_b.label) {
|
|
35562
35662
|
case 0:
|
|
35563
|
-
if (!message ||
|
|
35663
|
+
if (!message || !channelCapabilities['send-reaction'])
|
|
35564
35664
|
return [2 /*return*/];
|
|
35565
|
-
newReaction =
|
|
35665
|
+
newReaction = createReactionPreview(type);
|
|
35566
35666
|
tempMessage = createMessagePreview(add, newReaction, message);
|
|
35567
|
-
|
|
35667
|
+
_b.label = 1;
|
|
35568
35668
|
case 1:
|
|
35569
|
-
|
|
35669
|
+
_b.trys.push([1, 6, , 7]);
|
|
35570
35670
|
updateMessage(tempMessage);
|
|
35571
35671
|
if (!add) return [3 /*break*/, 3];
|
|
35572
35672
|
return [4 /*yield*/, channel.sendReaction(id, { type: type })];
|
|
35573
35673
|
case 2:
|
|
35574
|
-
_a =
|
|
35674
|
+
_a = _b.sent();
|
|
35575
35675
|
return [3 /*break*/, 5];
|
|
35576
35676
|
case 3: return [4 /*yield*/, channel.deleteReaction(id, type)];
|
|
35577
35677
|
case 4:
|
|
35578
|
-
_a =
|
|
35579
|
-
|
|
35678
|
+
_a = _b.sent();
|
|
35679
|
+
_b.label = 5;
|
|
35580
35680
|
case 5:
|
|
35581
35681
|
messageResponse = _a;
|
|
35582
35682
|
updateMessage(messageResponse.message);
|
|
35583
35683
|
return [3 /*break*/, 7];
|
|
35584
35684
|
case 6:
|
|
35585
|
-
|
|
35685
|
+
_b.sent();
|
|
35586
35686
|
// revert to the original message if the API call fails
|
|
35587
35687
|
updateMessage(message);
|
|
35588
35688
|
return [3 /*break*/, 7];
|
|
@@ -35637,12 +35737,10 @@ var useReactionHandler = function (message) {
|
|
|
35637
35737
|
}); };
|
|
35638
35738
|
};
|
|
35639
35739
|
var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef, closeReactionSelectorOnClick) {
|
|
35640
|
-
var _a;
|
|
35641
|
-
var _b =
|
|
35642
|
-
var _d = React.useState(false), showDetailedReactions = _d[0], setShowDetailedReactions = _d[1];
|
|
35740
|
+
var _a = useChannelStateContext('useReactionClick').channelCapabilities, channelCapabilities = _a === void 0 ? {} : _a;
|
|
35741
|
+
var _b = React.useState(false), showDetailedReactions = _b[0], setShowDetailedReactions = _b[1];
|
|
35643
35742
|
var hasListener = React.useRef(false);
|
|
35644
|
-
var
|
|
35645
|
-
var isReactionEnabled = ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.reactions) !== false && channelCapabilities['send-reaction']) || isFrozen;
|
|
35743
|
+
var isReactionEnabled = channelCapabilities['send-reaction'];
|
|
35646
35744
|
var messageDeleted = !!(message === null || message === void 0 ? void 0 : message.deleted_at);
|
|
35647
35745
|
var closeDetailedReactions = React.useCallback(function (event) {
|
|
35648
35746
|
var _a;
|
|
@@ -35690,9 +35788,8 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
35690
35788
|
}
|
|
35691
35789
|
}, [messageDeleted, closeDetailedReactions, messageWrapperRef]);
|
|
35692
35790
|
var onReactionListClick = function (event) {
|
|
35693
|
-
|
|
35694
|
-
|
|
35695
|
-
}
|
|
35791
|
+
var _a;
|
|
35792
|
+
(_a = event === null || event === void 0 ? void 0 : event.stopPropagation) === null || _a === void 0 ? void 0 : _a.call(event);
|
|
35696
35793
|
setShowDetailedReactions(function (prev) { return !prev; });
|
|
35697
35794
|
};
|
|
35698
35795
|
return {
|