stream-chat-react 10.7.6 → 10.8.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/Textarea.jsx"],"names":[],"mappings":"AAkBA;IACE;;;;;;;MAOE;IA2WF;;OAEG;IACH;;;aAMC;IAlXD,wBA4BC;IAZC;;;;;;;;;;;MAWC;IAGH;;;aAOE;IAEF,2BAOE;IAEF,8CAKE;IAEF,+BAIE;IAEF;;;;;;OAMG;IACH,8CAC6E;IAE7E,qCAUE;IAEF,+BAcE;IAEF,qBAQE;IAEF,yBA6BE;IAEF,mCAqEE;IAEF,qEAuBE;IAEF,sEA2DE;IAEF,uDAQE;IAEF,mCA0CE;IAEF,6CAQE;IAYF;;OAEG;IACH,+BAQE;IAEF;;MA6CE;IAEF,mCAME;IAEF,iCA+EE;IAEF,iCASE;IAGF,yCAiBE;IAEF,6BAAmD;IAEnD,qCAiBE;IAEF;;;;;;;;MAoCE;IAEF,uCAEE;IADA,iBAA0B;IAG5B,oDA2CC;IAED,sBA4CC;IATS,oDAAsB;CAUjC"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/AutoCompleteTextarea/Textarea.jsx"],"names":[],"mappings":"AAmBA;IACE;;;;;;;MAOE;IA2WF;;OAEG;IACH;;;aAMC;IAlXD,wBA4BC;IAZC;;;;;;;;;;;MAWC;IAGH;;;aAOE;IAEF,2BAOE;IAEF,8CAKE;IAEF,+BAIE;IAEF;;;;;;OAMG;IACH,8CAC6E;IAE7E,qCAUE;IAEF,+BAcE;IAEF,qBAQE;IAEF,yBA6BE;IAEF,mCAqEE;IAEF,qEAuBE;IAEF,sEA2DE;IAEF,uDAQE;IAEF,mCA0CE;IAEF,6CAQE;IAYF;;OAEG;IACH,+BAQE;IAEF;;MA6CE;IAEF,mCAME;IAEF,iCA+EE;IAEF,iCASE;IAGF,yCA0BE;IAEF,6BAAmD;IAEnD,qCAiBE;IAEF;;;;;;;;MAoCE;IAEF,uCAEE;IADA,iBAA0B;IAG5B,oDA2CC;IAED,sBA2EC;IATS,oDAAsB;CAUjC"}
@@ -24,6 +24,17 @@ var __assign = (this && this.__assign) || function () {
24
24
  };
25
25
  return __assign.apply(this, arguments);
26
26
  };
27
+ var __rest = (this && this.__rest) || function (s, e) {
28
+ var t = {};
29
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
30
+ t[p] = s[p];
31
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
32
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
33
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
34
+ t[p[i]] = s[p[i]];
35
+ }
36
+ return t;
37
+ };
27
38
  import React from 'react';
28
39
  import PropTypes from 'prop-types';
29
40
  import Textarea from 'react-textarea-autosize';
@@ -32,8 +43,9 @@ import { isValidElementType } from 'react-is';
32
43
  import clsx from 'clsx';
33
44
  import { List as DefaultSuggestionList } from './List';
34
45
  import { DEFAULT_CARET_POSITION, defaultScrollToItem, errorMessage, triggerPropsCheck, } from './utils';
35
- import { CommandItem } from '../CommandItem/CommandItem';
36
- import { UserItem } from '../UserItem/UserItem';
46
+ import { CommandItem } from '../CommandItem';
47
+ import { UserItem } from '../UserItem';
48
+ import { isSafari } from '../../utils/browsers';
37
49
  var ReactTextareaAutocomplete = /** @class */ (function (_super) {
38
50
  __extends(ReactTextareaAutocomplete, _super);
39
51
  function ReactTextareaAutocomplete(props) {
@@ -434,7 +446,14 @@ var ReactTextareaAutocomplete = /** @class */ (function (_super) {
434
446
  // that was actually clicked. If we clicked inside the auto-select dropdown, then
435
447
  // that's not a blur, from the auto-select point of view, so then do nothing.
436
448
  var el = e.relatedTarget;
437
- if (_this.dropdownRef && el instanceof Node && _this.dropdownRef.contains(el)) {
449
+ // If this is a blur event in Safari, then relatedTarget is never a dropdown item, but a common parent
450
+ // of textarea and dropdown container. That means that dropdownRef will not contain its parent and the
451
+ // autocomplete will be closed before onclick handler can be invoked selecting an item.
452
+ // It seems that Safari has different implementation determining the relatedTarget node than Chrome and Firefox.
453
+ // Therefore, if focused away in Safari, the dropdown will be kept rendered until pressing Esc or selecting and item from it.
454
+ var focusedAwayInSafari = isSafari() && e.type === 'blur';
455
+ if ((_this.dropdownRef && el instanceof Node && _this.dropdownRef.contains(el)) ||
456
+ focusedAwayInSafari) {
438
457
  return;
439
458
  }
440
459
  if (closeOnClickOutside)
@@ -540,8 +559,9 @@ var ReactTextareaAutocomplete = /** @class */ (function (_super) {
540
559
  ReactTextareaAutocomplete.prototype.render = function () {
541
560
  var _this = this;
542
561
  var _a = this.props, className = _a.className, containerClassName = _a.containerClassName, containerStyle = _a.containerStyle, style = _a.style;
562
+ var _b = this.props.additionalTextareaProps || {}, onBlur = _b.onBlur, onChange = _b.onChange, onClick = _b.onClick, onFocus = _b.onFocus, onKeyDown = _b.onKeyDown, onScroll = _b.onScroll, onSelect = _b.onSelect, restAdditionalTextareaProps = __rest(_b, ["onBlur", "onChange", "onClick", "onFocus", "onKeyDown", "onScroll", "onSelect"]);
543
563
  var maxRows = this.props.maxRows;
544
- var _b = this.state, dataLoading = _b.dataLoading, value = _b.value;
564
+ var _c = this.state, dataLoading = _c.dataLoading, value = _c.value;
545
565
  if (!this.props.grow)
546
566
  maxRows = 1;
547
567
  // By setting defaultValue to undefined, avoid error:
@@ -551,11 +571,33 @@ var ReactTextareaAutocomplete = /** @class */ (function (_super) {
551
571
  'rta--loading': dataLoading,
552
572
  }), style: containerStyle },
553
573
  this.renderSuggestionListContainer(),
554
- React.createElement(Textarea, __assign({ "data-testid": 'message-input' }, this._cleanUpProps(), { className: clsx('rta__textarea', className), maxRows: maxRows, onBlur: this._onClickAndBlurHandler, onChange: this._changeHandler, onClick: this._onClickAndBlurHandler, onFocus: this.props.onFocus, onKeyDown: this._handleKeyDown, onScroll: this._onScrollHandler, onSelect: this._selectHandler, ref: function (ref) {
574
+ React.createElement(Textarea, __assign({ "data-testid": 'message-input' }, this._cleanUpProps(), { className: clsx('rta__textarea', className), maxRows: maxRows, onBlur: function (e) {
575
+ _this._onClickAndBlurHandler(e);
576
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
577
+ }, onChange: function (e) {
578
+ _this._changeHandler(e);
579
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
580
+ }, onClick: function (e) {
581
+ _this._onClickAndBlurHandler(e);
582
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
583
+ }, onFocus: function (e) {
584
+ var _a, _b;
585
+ (_b = (_a = _this.props).onFocus) === null || _b === void 0 ? void 0 : _b.call(_a, e);
586
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
587
+ }, onKeyDown: function (e) {
588
+ _this._handleKeyDown(e);
589
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
590
+ }, onScroll: function (e) {
591
+ _this._onScrollHandler(e);
592
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
593
+ }, onSelect: function (e) {
594
+ _this._selectHandler(e);
595
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(e);
596
+ }, ref: function (ref) {
555
597
  var _a;
556
598
  (_a = _this.props) === null || _a === void 0 ? void 0 : _a.innerRef(ref);
557
599
  _this.textareaRef = ref;
558
- }, style: style, value: value }, this.props.additionalTextareaProps, { defaultValue: undefined }))));
600
+ }, style: style, value: value }, restAdditionalTextareaProps, { defaultValue: undefined }))));
559
601
  };
560
602
  ReactTextareaAutocomplete.defaultProps = {
561
603
  closeOnClickOutside: true,
@@ -1,5 +1,11 @@
1
1
  import type { Channel, StreamChat } from 'stream-chat';
2
2
  import type { DefaultStreamChatGenerics } from '../../types/types';
3
+ /**
4
+ * Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.
5
+ * @param client
6
+ * @param type
7
+ * @param id
8
+ */
3
9
  export declare const getChannel: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(client: StreamChat<StreamChatGenerics>, type: string, id: string) => Promise<Channel<StreamChatGenerics>>;
4
10
  export declare const MAX_QUERY_CHANNELS_LIMIT = 30;
5
11
  declare type MoveChannelUpParams<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelList/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,eAAO,MAAM,UAAU,mIAIf,MAAM,MACR,MAAM,yCAKX,CAAC;AAEF,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,aAAK,mBAAmB,CACtB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,aAAa,iMAgBzB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelList/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA2B,UAAU,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAWnE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,mIAIf,MAAM,MACR,MAAM,yCAaX,CAAC;AAEF,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,aAAK,mBAAmB,CACtB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,aAAa,iMAgBzB,CAAC"}
@@ -44,16 +44,37 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
44
44
  return to.concat(ar || Array.prototype.slice.call(from));
45
45
  };
46
46
  import uniqBy from 'lodash.uniqby';
47
+ /**
48
+ * prevent from duplicate invocation of channel.watch()
49
+ * when events 'notification.message_new' and 'notification.added_to_channel' arrive at the same time
50
+ */
51
+ var WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL = {};
52
+ /**
53
+ * Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.
54
+ * @param client
55
+ * @param type
56
+ * @param id
57
+ */
47
58
  export var getChannel = function (client, type, id) { return __awaiter(void 0, void 0, void 0, function () {
48
- var channel;
59
+ var channel, queryPromise;
49
60
  return __generator(this, function (_a) {
50
61
  switch (_a.label) {
51
62
  case 0:
52
63
  channel = client.channel(type, id);
53
- return [4 /*yield*/, channel.watch()];
64
+ queryPromise = WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid];
65
+ if (!queryPromise) return [3 /*break*/, 2];
66
+ return [4 /*yield*/, queryPromise];
54
67
  case 1:
55
68
  _a.sent();
56
- return [2 /*return*/, channel];
69
+ return [3 /*break*/, 4];
70
+ case 2:
71
+ WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid] = channel.watch();
72
+ return [4 /*yield*/, WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid]];
73
+ case 3:
74
+ _a.sent();
75
+ WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid] = undefined;
76
+ _a.label = 4;
77
+ case 4: return [2 /*return*/, channel];
57
78
  }
58
79
  });
59
80
  }); };
@@ -27,6 +27,8 @@ export declare type MessageInputProps<StreamChatGenerics extends DefaultStreamCh
27
27
  }) => void;
28
28
  /** If true, focuses the text input on component mount */
29
29
  focus?: boolean;
30
+ /** Generates the default value for the underlying textarea element. The function's return value takes precedence before additionalTextareaProps.defaultValue. */
31
+ getDefaultValue?: () => string | string[];
30
32
  /** If true, expands the text input vertically for new lines */
31
33
  grow?: boolean;
32
34
  /** Custom UI component handling how the message input is rendered, defaults to and accepts the same props as [MessageInputFlat](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/MessageInputFlat.tsx) */
@@ -1 +1 @@
1
- {"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"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"}
@@ -151,9 +151,9 @@ var messageInputReducer = function (state, action) {
151
151
  * hook for MessageInput state
152
152
  */
153
153
  export var useMessageInputState = function (props) {
154
- var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, message = props.message;
154
+ var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, getDefaultValue = props.getDefaultValue, message = props.message;
155
155
  var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
156
- var defaultValue = additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue;
156
+ var defaultValue = (getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue()) || (additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue);
157
157
  var initialStateValue = message ||
158
158
  (Array.isArray(defaultValue)
159
159
  ? { text: defaultValue.join('') }
package/dist/index.cjs.js CHANGED
@@ -37,6 +37,7 @@ var uniqBy = require('lodash.uniqby');
37
37
  var PropTypes = require('prop-types');
38
38
  var ReactIs = require('react-is');
39
39
  var path$1 = require('path');
40
+ var _objectWithoutProperties$1 = require('@babel/runtime/helpers/objectWithoutProperties');
40
41
  var _extends = require('@babel/runtime/helpers/extends');
41
42
  var _typeof = require('@babel/runtime/helpers/typeof');
42
43
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
@@ -97,6 +98,7 @@ var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
97
98
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
98
99
  var ReactIs__default = /*#__PURE__*/_interopDefaultLegacy(ReactIs);
99
100
  var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
101
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties$1);
100
102
  var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
101
103
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
102
104
  var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
@@ -24209,6 +24211,13 @@ var UnMemoizedUserItem = function (_a) {
24209
24211
  };
24210
24212
  var UserItem = React__default["default"].memo(UnMemoizedUserItem);
24211
24213
 
24214
+ var isSafari = function () {
24215
+ if (typeof navigator === 'undefined')
24216
+ return false;
24217
+ return /^((?!chrome|android).)*safari/i.test(navigator.userAgent || '');
24218
+ };
24219
+
24220
+ var _excluded$1 = ["onBlur", "onChange", "onClick", "onFocus", "onKeyDown", "onScroll", "onSelect"];
24212
24221
  function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24213
24222
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24214
24223
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
@@ -24585,7 +24594,13 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
24585
24594
  // that was actually clicked. If we clicked inside the auto-select dropdown, then
24586
24595
  // that's not a blur, from the auto-select point of view, so then do nothing.
24587
24596
  var el = e.relatedTarget;
24588
- if (_this.dropdownRef && el instanceof Node && _this.dropdownRef.contains(el)) {
24597
+ // If this is a blur event in Safari, then relatedTarget is never a dropdown item, but a common parent
24598
+ // of textarea and dropdown container. That means that dropdownRef will not contain its parent and the
24599
+ // autocomplete will be closed before onclick handler can be invoked selecting an item.
24600
+ // It seems that Safari has different implementation determining the relatedTarget node than Chrome and Firefox.
24601
+ // Therefore, if focused away in Safari, the dropdown will be kept rendered until pressing Esc or selecting and item from it.
24602
+ var focusedAwayInSafari = isSafari() && e.type === 'blur';
24603
+ if (_this.dropdownRef && el instanceof Node && _this.dropdownRef.contains(el) || focusedAwayInSafari) {
24589
24604
  return;
24590
24605
  }
24591
24606
  if (closeOnClickOutside) _this._closeAutocomplete();
@@ -24717,6 +24732,15 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
24717
24732
  containerClassName = _this$props8.containerClassName,
24718
24733
  containerStyle = _this$props8.containerStyle,
24719
24734
  style = _this$props8.style;
24735
+ var _ref = this.props.additionalTextareaProps || {},
24736
+ _onBlur = _ref.onBlur,
24737
+ _onChange = _ref.onChange,
24738
+ _onClick = _ref.onClick,
24739
+ _onFocus = _ref.onFocus,
24740
+ _onKeyDown = _ref.onKeyDown,
24741
+ _onScroll = _ref.onScroll,
24742
+ _onSelect = _ref.onSelect,
24743
+ restAdditionalTextareaProps = _objectWithoutProperties__default["default"](_ref, _excluded$1);
24720
24744
  var maxRows = this.props.maxRows;
24721
24745
  var _this$state7 = this.state,
24722
24746
  dataLoading = _this$state7.dataLoading,
@@ -24737,21 +24761,43 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
24737
24761
  }, this._cleanUpProps(), {
24738
24762
  className: clsx('rta__textarea', className),
24739
24763
  maxRows: maxRows,
24740
- onBlur: this._onClickAndBlurHandler,
24741
- onChange: this._changeHandler,
24742
- onClick: this._onClickAndBlurHandler,
24743
- onFocus: this.props.onFocus,
24744
- onKeyDown: this._handleKeyDown,
24745
- onScroll: this._onScrollHandler,
24746
- onSelect: this._selectHandler,
24747
- ref: function ref(_ref) {
24748
- var _this2$props;
24749
- (_this2$props = _this2.props) === null || _this2$props === void 0 ? void 0 : _this2$props.innerRef(_ref);
24750
- _this2.textareaRef = _ref;
24764
+ onBlur: function onBlur(e) {
24765
+ _this2._onClickAndBlurHandler(e);
24766
+ _onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
24767
+ },
24768
+ onChange: function onChange(e) {
24769
+ _this2._changeHandler(e);
24770
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e);
24771
+ },
24772
+ onClick: function onClick(e) {
24773
+ _this2._onClickAndBlurHandler(e);
24774
+ _onClick === null || _onClick === void 0 ? void 0 : _onClick(e);
24775
+ },
24776
+ onFocus: function onFocus(e) {
24777
+ var _this2$props$onFocus, _this2$props;
24778
+ (_this2$props$onFocus = (_this2$props = _this2.props).onFocus) === null || _this2$props$onFocus === void 0 ? void 0 : _this2$props$onFocus.call(_this2$props, e);
24779
+ _onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
24780
+ },
24781
+ onKeyDown: function onKeyDown(e) {
24782
+ _this2._handleKeyDown(e);
24783
+ _onKeyDown === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(e);
24784
+ },
24785
+ onScroll: function onScroll(e) {
24786
+ _this2._onScrollHandler(e);
24787
+ _onScroll === null || _onScroll === void 0 ? void 0 : _onScroll(e);
24788
+ },
24789
+ onSelect: function onSelect(e) {
24790
+ _this2._selectHandler(e);
24791
+ _onSelect === null || _onSelect === void 0 ? void 0 : _onSelect(e);
24792
+ },
24793
+ ref: function ref(_ref2) {
24794
+ var _this2$props2;
24795
+ (_this2$props2 = _this2.props) === null || _this2$props2 === void 0 ? void 0 : _this2$props2.innerRef(_ref2);
24796
+ _this2.textareaRef = _ref2;
24751
24797
  },
24752
24798
  style: style,
24753
24799
  value: value
24754
- }, this.props.additionalTextareaProps, {
24800
+ }, restAdditionalTextareaProps, {
24755
24801
  defaultValue: undefined
24756
24802
  })));
24757
24803
  }
@@ -30990,9 +31036,9 @@ var messageInputReducer = function (state, action) {
30990
31036
  * hook for MessageInput state
30991
31037
  */
30992
31038
  var useMessageInputState = function (props) {
30993
- var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, message = props.message;
31039
+ var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, getDefaultValue = props.getDefaultValue, message = props.message;
30994
31040
  var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
30995
- var defaultValue = additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue;
31041
+ var defaultValue = (getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue()) || (additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue);
30996
31042
  var initialStateValue = message ||
30997
31043
  (Array.isArray(defaultValue)
30998
31044
  ? { text: defaultValue.join('') }
@@ -32798,16 +32844,37 @@ var useChannelUpdatedListener = function (setChannels, customHandler, forceUpdat
32798
32844
  }, [customHandler]);
32799
32845
  };
32800
32846
 
32847
+ /**
32848
+ * prevent from duplicate invocation of channel.watch()
32849
+ * when events 'notification.message_new' and 'notification.added_to_channel' arrive at the same time
32850
+ */
32851
+ var WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL = {};
32852
+ /**
32853
+ * Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.
32854
+ * @param client
32855
+ * @param type
32856
+ * @param id
32857
+ */
32801
32858
  var getChannel = function (client, type, id) { return __awaiter(void 0, void 0, void 0, function () {
32802
- var channel;
32859
+ var channel, queryPromise;
32803
32860
  return __generator(this, function (_a) {
32804
32861
  switch (_a.label) {
32805
32862
  case 0:
32806
32863
  channel = client.channel(type, id);
32807
- return [4 /*yield*/, channel.watch()];
32864
+ queryPromise = WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid];
32865
+ if (!queryPromise) return [3 /*break*/, 2];
32866
+ return [4 /*yield*/, queryPromise];
32808
32867
  case 1:
32809
32868
  _a.sent();
32810
- return [2 /*return*/, channel];
32869
+ return [3 /*break*/, 4];
32870
+ case 2:
32871
+ WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid] = channel.watch();
32872
+ return [4 /*yield*/, WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid]];
32873
+ case 3:
32874
+ _a.sent();
32875
+ WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[channel.cid] = undefined;
32876
+ _a.label = 4;
32877
+ case 4: return [2 /*return*/, channel];
32811
32878
  }
32812
32879
  });
32813
32880
  }); };
@@ -33709,7 +33776,7 @@ var UnMemoizedChannelList = function (props) {
33709
33776
  */
33710
33777
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
33711
33778
 
33712
- var version = '10.7.6';
33779
+ var version = '10.8.1';
33713
33780
 
33714
33781
  var useChat = function (_a) {
33715
33782
  var _b, _c;