@skbkontur/react-ui 6.3.2 → 6.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.3.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@6.3.2...@skbkontur/react-ui@6.3.3) (2026-08-28)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **ComboBox:** show menu on arrow click ([69b1807](https://github.com/skbkontur/retail-ui/commit/69b18073db1e5eaa79d36926c154f0977735f9ab))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [6.3.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@6.3.1...@skbkontur/react-ui@6.3.2) (2026-08-28)
7
18
 
8
19
 
@@ -59,6 +59,7 @@ interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' |
59
59
  onInputValueChange?: (value: string) => void;
60
60
  onInputFocus?: () => void;
61
61
  onInputClick?: () => void;
62
+ onArrowClick?: () => void;
62
63
  onClearCrossClick?: () => void;
63
64
  onInputKeyDown?: (e: React.KeyboardEvent) => void;
64
65
  onMouseEnter?: (e: React.MouseEvent) => void;
@@ -82,6 +83,7 @@ interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' |
82
83
  type DefaultProps<T> = Required<Pick<ComboBoxViewProps<T>, 'renderItem' | 'renderValue' | 'renderAddButton' | 'repeatRequest' | 'requestStatus' | 'onClickOutside' | 'onFocusOutside' | 'width' | 'showClearIcon'>>;
83
84
  export declare const ComboBoxViewIds: {
84
85
  menu: string;
86
+ arrow: string;
85
87
  };
86
88
  interface ComboBoxViewState {
87
89
  anchorElement: Nullable<Element>;
@@ -123,5 +125,6 @@ export declare class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T
123
125
  private renderSpinner;
124
126
  private getRightIcon;
125
127
  private refMobileInput;
128
+ private handleArrowClick;
126
129
  }
127
130
  export {};
@@ -60,6 +60,7 @@ import { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';
60
60
  import { getComboBoxTheme } from './getComboBoxTheme.js';
61
61
  export var ComboBoxViewIds = {
62
62
  menu: 'ComboBoxView__menu',
63
+ arrow: 'ComboBoxView__arrow',
63
64
  };
64
65
  var ComboBoxView = /** @class */ (function (_super) {
65
66
  __extends(ComboBoxView, _super);
@@ -149,13 +150,18 @@ var ComboBoxView = /** @class */ (function (_super) {
149
150
  return React.createElement(LoadingIcon, { size: size });
150
151
  }
151
152
  if (rightIcon || drawArrow) {
152
- return rightIcon || React.createElement(ArrowDownIcon, { size: size });
153
+ return (rightIcon || (React.createElement(ArrowDownIcon, { "data-tid": ComboBoxViewIds.arrow, size: size, onMouseDown: function (event) { return event.preventDefault(); }, onClick: _this.handleArrowClick })));
153
154
  }
154
155
  return null;
155
156
  };
156
157
  _this.refMobileInput = function (input) {
157
158
  _this.mobileInput = input;
158
159
  };
160
+ _this.handleArrowClick = function (event) {
161
+ var _a, _b;
162
+ event.preventDefault();
163
+ (_b = (_a = _this.props).onArrowClick) === null || _b === void 0 ? void 0 : _b.call(_a);
164
+ };
159
165
  return _this;
160
166
  }
161
167
  ComboBoxView_1 = ComboBoxView;
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBoxView.js","sourceRoot":"","sources":["ComboBoxView.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA0FzD,MAAM,CAAC,IAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,oBAAoB;CAC3B,CAAC;AAWF;IAAqC,gCAAwD;IAA7F;;;QAoBU,cAAQ,GAAG,iBAAiB,CAAC,cAAY,CAAC,YAAY,CAAC,CAAC;QAKxD,iBAAW,GAAoB,IAAI,CAAC;QAEpC,0BAAoB,GAAG,KAAK,CAAC,SAAS,EAAS,CAAC;QAOhD,YAAM,GAAG,eAAe,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;QAE/C,WAAK,GAAsB;YAChC,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE,KAAI,CAAC,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAA,MAAA,KAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,QAAQ,EAAE,CAAA;SAC1F,CAAC;QAyEM,qBAAe,GAAG;YAClB,IAAA,KAUF,KAAI,CAAC,KAAK,EATZ,KAAK,WAAA,EACL,OAAO,aAAA,EACP,MAAM,YAAA,EACN,OAAO,aAAA,EACP,aAAa,mBAAA,EACb,gBAAgB,sBAAA,EAChB,cAAc,oBAAA,EACd,UAAU,gBAAA,EACV,kBAAkB,wBACN,CAAC;YAET,IAAA,KAA4D,KAAI,CAAC,QAAQ,EAAE,EAAzE,aAAa,mBAAA,EAAE,aAAa,mBAAA,EAAE,UAAU,gBAAA,EAAE,WAAW,iBAAoB,CAAC;YAClF,OAAO,CACL,oBAAC,YAAY,IACX,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,KAAI,CAAC,MAAM,EACnB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,KAAI,CAAC,gBAAgB,EACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,KAAI,CAAC,eAAe,EACrC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,KAAI,CAAC,cAAc,EAC7B,IAAI,EAAE,KAAI,CAAC,IAAI,EACf,kBAAkB,EAAE,kBAAkB,GACtC,CACH,CAAC;QACJ,CAAC,CAAC;QAEM,gBAAU,GAAG;YACb,IAAA,KAAiC,KAAI,CAAC,QAAQ,EAAE,EAA9C,MAAM,YAAA,EAAE,OAAO,aAAA,EAAE,SAAS,eAAoB,CAAC;YAC/C,IAAA,aAAa,GAAK,KAAI,CAAC,KAAK,cAAf,CAAgB;YAErC,OAAO,CACL,MAAM;gBACN,aAAa,IAAI,CACf,oBAAC,KAAK,IACJ,MAAM,QACN,SAAS,QACT,uBAAuB,QACvB,QAAQ,EAAC,MAAM,EACf,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,EACrC,SAAS,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAC/C,aAAa,EAAE,KAAI,CAAC,KAAK,CAAC,aAAa,EACvC,MAAM,EAAE,QAAQ,CAAC,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAC5C,GAAG,EAAE,KAAI,CAAC,oBAAoB,IAE7B,KAAI,CAAC,eAAe,EAAE,CACjB,CACT,CACF,CAAC;QACJ,CAAC,CAAC;QAEM,sBAAgB,GAAG;YACzB,IAAI,SAAS,GAAG,IAAI,CAAC;YAEf,IAAA,KAAkG,KAAI,CAAC,KAAK,EAA1G,OAAO,aAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,OAAO,aAAA,EAAE,kBAAkB,wBAAA,EAAE,cAAc,oBAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAe,CAAC;YACnH,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvC,SAAS,GAAG,KAAI,CAAC,aAAa,EAAE,CAAC;YACnC,CAAC;YAED,IAAM,WAAW,GAAG,UAAU,CAAC,KAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClD,IAAM,UAAU,GAAe;gBAC7B,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,MAAM;gBACb,OAAO,SAAA;gBACP,aAAa,EAAE,kBAAkB;gBACjC,SAAS,EAAE,cAAc;gBACzB,KAAK,EAAE,SAAS;gBAChB,WAAW,aAAA;gBACX,SAAS,WAAA;gBACT,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC1C,CAAC;YAEF,IAAM,mBAAmB,GAAG,WAAW;gBACrC,CAAC,CAAC;oBACE,oBAAoB,EAAE,oBAAC,KAAK,aAAC,GAAG,EAAE,KAAI,CAAC,cAAc,IAAM,UAAU,EAAI;oBACzE,IAAI,EAAE,KAAI,CAAC,IAAI;iBAChB;gBACH,CAAC,CAAC;oBACE,oBAAoB,EAAE,oBAAC,KAAK,aAAC,GAAG,EAAE,KAAI,CAAC,cAAc,IAAM,UAAU,EAAI;iBAC1E,CAAC;YAEN,OAAO,CACL,MAAM,IAAI,CACR,oBAAC,WAAW,eAAK,mBAAmB,IAAE,cAAc,EAAE,KAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,WACnF,KAAI,CAAC,eAAe,EAAE,CACX,CACf,CACF,CAAC;QACJ,CAAC,CAAC;QAEM,eAAS,GAAG;YAClB,OAAO,WAAW,CAAC,KAAI,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEM,qBAAe,GAAG;YACxB,OAAO,KAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,KAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC;QA2HM,uBAAiB,GAAG;;YAC1B,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,YAAY,kDAAI,CAAC;YAE5B,MAAA,KAAI,CAAC,WAAW,0CAAE,KAAK,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEM,sBAAgB,GAAG,UAAC,IAAO;;YACjC,IAAI,KAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC7B,KAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,KAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAA,MAAA,KAAI,CAAC,KAAK,EAAC,aAAa,kDAAI,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;QAEM,cAAQ,GAAG,UAAC,KAAmD;YACrE,IAAI,KAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC;QAEM,mBAAa,GAAG,cAAM,OAAA,CAC5B,8BAAM,SAAS,EAAE,KAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAC3C,oBAAC,OAAO,IAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,EAAE,EAAC,MAAM,SAAG,CACrC,CACR,EAJ6B,CAI7B,CAAC;QAEM,kBAAY,GAAG;YACf,IAAA,KAA2C,KAAI,CAAC,KAAK,EAAnD,OAAO,aAAA,EAAE,KAAK,WAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAe,CAAC;YAC5D,IAAM,IAAI,GAAG,KAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACvC,OAAO,oBAAC,WAAW,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACrC,CAAC;YAED,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;gBAC3B,OAAO,SAAS,IAAI,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACpD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEM,oBAAc,GAAG,UAAC,KAAsB;YAC9C,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC;;IACJ,CAAC;qBAxYY,YAAY;IAyChB,wCAAiB,GAAxB;QACE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,0CAAmB,GAAnB;QACE,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAE/C,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC;gBACZ,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,yCAAkB,GAAzB,UAA0B,SAA+B;QACjD,IAAA,KAAmB,IAAI,EAArB,KAAK,WAAA,EAAE,KAAK,WAAS,CAAC;QAE9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;YACjD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAEM,6BAAM,GAAb;QAAA,iBAYC;QAXC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5D,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,QACnB,UAAC,KAAK;YACL,KAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,oBAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAI,CAAC,KAAK,IAAG,KAAI,CAAC,UAAU,EAAE,CAAyB,CAAC;QAC/F,CAAC,CACqB,CACzB,CAAC;IACJ,CAAC;IAEM,iCAAU,GAAjB;QACQ,IAAA,KAAsD,IAAI,CAAC,KAAK,EAA9D,YAAY,kBAAA,EAAE,YAAY,kBAAA,EAAE,WAAW,iBAAA,EAAE,MAAM,YAAe,CAAC;QACjE,IAAA,KAA4C,IAAI,CAAC,QAAQ,EAAE,EAAzD,cAAc,oBAAA,EAAE,cAAc,oBAAA,EAAE,KAAK,WAAoB,CAAC;QAElE,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAErC,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEjC,OAAO,CACL,oBAAC,aAAa,eAAK,IAAI,CAAC,KAAK;YAC3B,oBAAC,WAAW,IAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;gBACzF,0CACY,sBAAsB,CAAC,YAAY,EAC7C,KAAK,EAAE,EAAE,KAAK,OAAA,EAAE,EAChB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAC7B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,IAAI,CAAC,WAAW;oBAEpB,KAAK;oBACL,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAClD,CACK,CACA,CACjB,CAAC;IACJ,CAAC;IAkHO,kCAAW,GAAnB;QACE,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAE/B,IAAA,KA2BF,IAAI,CAAC,KAAK,EA1BZ,EAAE,QAAA,EACF,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,QAAQ,cAAA,EACR,OAAO,aAAA,EACP,KAAK,WAAA,EACL,OAAO,aAAA,EACP,WAAW,iBAAA,EACX,kBAAkB,wBAAA,EAClB,YAAY,kBAAA,EACZ,YAAY,kBAAA,EACZ,cAAc,oBAAA,EACd,WAAW,iBAAA,EACX,SAAS,eAAA,EACT,KAAK,WAAA,EACL,OAAO,aAAA,EACP,gBAAgB,sBAAA,EAChB,QAAQ,cAAA,EACR,SAAS,eAAA,EACW,eAAe,yBAAA,EACrB,SAAS,mBAAA,EACvB,aAAa,mBAAA,EACb,IAAI,UAAA,EACJ,QAAQ,cAAA,EACR,WAAW,iBAAA,EACX,mBAAmB,yBACP,CAAC;QAEf,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAM,UAAU,GAAG;YACjB,EAAE,IAAA;YACF,KAAK,OAAA;YACL,UAAU,YAAA;YACV,QAAQ,UAAA;YACR,KAAK,OAAA;YACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YAC1C,aAAa,EAAE,kBAAkB;YACjC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY;YACzD,QAAQ,UAAA;YACR,SAAS,WAAA;YACT,KAAK,EAAE,SAAS,IAAI,EAAE;YACtB,SAAS,EAAE,cAAc;YACzB,WAAW,aAAA;YACX,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,IAAI,CAAC,QAAQ;YAClB,OAAO,SAAA;YACP,SAAS,WAAA;YACT,YAAY,EAAE,KAAK;YACnB,kBAAkB,EAAE,eAAe;YACnC,eAAe,EAAE,IAAI,CAAC,MAAM;YAC5B,YAAY,EAAE,SAAS;YACvB,aAAa,eAAA;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QAEF,IAAM,sBAAsB,GAAG;YAC7B,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;SAC5B,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC;YACjD,OAAO,oBAAC,0BAA0B,eAAK,UAAU,EAAM,sBAAsB,EAAI,CAAC;QACpF,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CACL,oBAAC,WAAW,eACN,UAAU,IACd,IAAI,EAAC,MAAM,EACX,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,mBAAmB,IACvC,CACH,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;gBAChD,OAAO,oBAAC,0BAA0B,eAAK,UAAU,EAAM,sBAAsB,EAAI,CAAC;YACpF,CAAC;YAED,OAAO,oBAAC,KAAK,eAAK,UAAU,EAAI,CAAC;QACnC,CAAC;QAEO,IAAA,WAAW,GAAK,IAAI,CAAC,QAAQ,EAAE,YAApB,CAAqB;QACxC,OAAO,CACL,oBAAC,aAAa,IACZ,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAC,MAAM,EACZ,GAAG,EAAE,gBAAgB,sBACH,eAAe,mBAClB,IAAI,CAAC,MAAM,EAC1B,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACnE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAE9C,aAAa,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAClD,CACjB,CAAC;IACJ,CAAC;;IAtVa,gCAAmB,GAAG,cAAc,AAAjB,CAAkB;IACrC,wBAAW,GAAG,cAAc,AAAjB,CAAkB;IAE7B,yBAAY,GAA0B;QAClD,UAAU,EAAE,UAAC,IAAS,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC/B,WAAW,EAAE,UAAC,IAAS,IAAK,OAAA,IAAI,EAAJ,CAAI;QAChC,eAAe,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QAC3B,aAAa,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS;QAC9B,aAAa,EAAE,qBAAqB,CAAC,OAAO;QAC5C,cAAc,EAAE;YACd,IAAI;QACN,CAAC;QACD,cAAc,EAAE;YACd,IAAI;QACN,CAAC;QACD,KAAK,EAAE,GAAG;QACV,aAAa,EAAE,OAAO;KACvB,AAdyB,CAcxB;IAlBS,YAAY;QAJxB,qBAAqB;QACrB,gBAAgB;QAChB,QAAQ;QACR,QAAQ;OACI,YAAY,CAwYxB;IAAD,mBAAC;CAAA,AAxYD,CAAqC,KAAK,CAAC,SAAS,GAwYnD;SAxYY,YAAY","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox/index.js';\nimport type { InputIconType, InputProps, ShowClearIcon } from '../../components/Input/index.js';\nimport { Input } from '../../components/Input/index.js';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput/index.js';\nimport { MaskedInput } from '../../components/MaskedInput/index.js';\nimport { getStyles as getMaskedInputStyles } from '../../components/MaskedInput/MaskedInput.styles.js';\nimport type { MenuItemState } from '../../components/MenuItem/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { Spinner } from '../../components/Spinner/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { LoadingIcon } from '../icons2022/LoadingIcon.js';\nimport { InputLikeText } from '../InputLikeText/index.js';\nimport { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout.js';\nimport type { Menu } from '../Menu/index.js';\nimport { MobilePopup } from '../MobilePopup/index.js';\nimport { Popup } from '../Popup/index.js';\nimport { RenderLayer } from '../RenderLayer/index.js';\nimport { ZIndex } from '../ZIndex/index.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { ComboBoxMenu } from './ComboBoxMenu.js';\nimport { CustomComboBoxDataTids } from './CustomComboBox.js';\nimport { getStyles } from './CustomComboBox.styles.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\nimport { getComboBoxTheme } from './getComboBoxTheme.js';\n\ninterface ComboBoxViewProps<T>\n extends\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n items?: Nullable<Array<ComboBoxExtendedItem<T>>>;\n loading?: boolean;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: SizeProp;\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onMobileClose?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onClearCrossClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input | InternalTextareaWithLayout>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n preventIconsOffset?: boolean;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxViewProps<T>,\n | 'renderItem'\n | 'renderValue'\n | 'renderAddButton'\n | 'repeatRequest'\n | 'requestStatus'\n | 'onClickOutside'\n | 'onFocusOutside'\n | 'width'\n | 'showClearIcon'\n >\n>;\n\nexport const ComboBoxViewIds = {\n menu: 'ComboBoxView__menu',\n};\n\ninterface ComboBoxViewState {\n anchorElement: Nullable<Element>;\n clearCrossShowed: boolean;\n}\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@withSize\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>, ComboBoxViewState> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n public static displayName = 'ComboBoxView';\n\n public static defaultProps: DefaultProps<unknown> = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n width: 250,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBoxView.defaultProps);\n\n public getRootNode!: TGetRootNode;\n private input: Nullable<Input | InternalTextareaWithLayout>;\n private setRootNode!: TSetRootNode;\n private mobileInput: Nullable<Input> = null;\n private isMobileLayout!: boolean;\n private dropdownContainerRef = React.createRef<Popup>();\n private styles!: ReturnType<typeof getStyles>;\n private maskedInputStyles!: ReturnType<typeof getMaskedInputStyles>;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private theme!: Theme;\n private size!: SizeProp;\n private menuId = ComboBoxViewIds.menu + getRandomID();\n\n public state: ComboBoxViewState = {\n anchorElement: null,\n clearCrossShowed: this.props.showClearIcon === 'always' && !!this.props.value?.toString(),\n };\n\n public componentDidMount() {\n this.updateAnchorElement();\n\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n updateAnchorElement() {\n const parent = this.getParent();\n const anchorElement = this.state.anchorElement;\n\n if (anchorElement !== parent) {\n this.setState({\n anchorElement: parent,\n });\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n\n this.updateAnchorElement();\n\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n this.styles = getStyles(this.emotion);\n this.maskedInputStyles = getMaskedInputStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getComboBoxTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { onMouseEnter, onMouseLeave, onMouseOver, opened } = this.props;\n const { onClickOutside, onFocusOutside, width } = this.getProps();\n\n const isMobile = this.isMobileLayout;\n\n const input = this.renderInput();\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n data-tid={CustomComboBoxDataTids.comboBoxView}\n style={{ width }}\n className={this.styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n ref={this.setRootNode}\n >\n {input}\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getComboBoxMenu = () => {\n const {\n items,\n loading,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderNotFound,\n totalCount,\n preventIconsOffset,\n } = this.props;\n\n const { repeatRequest, requestStatus, renderItem, itemWrapper } = this.getProps();\n return (\n <ComboBoxMenu\n hasMargin={false}\n menuId={this.menuId}\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n itemWrapper={itemWrapper}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n isMobile={this.isMobileLayout}\n size={this.size}\n preventIconsOffset={preventIconsOffset}\n />\n );\n };\n\n private renderMenu = () => {\n const { opened, menuPos, menuAlign } = this.getProps();\n const { anchorElement } = this.state;\n\n return (\n opened &&\n anchorElement && (\n <Popup\n opened\n hasShadow\n tryBestFallbackPosition\n minWidth=\"100%\"\n anchorElement={anchorElement}\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(menuPos, menuAlign)}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n ref={this.dropdownContainerRef}\n >\n {this.getComboBoxMenu()}\n </Popup>\n )\n );\n };\n\n private renderMobileMenu = () => {\n let rightIcon = null;\n\n const { loading, items, opened, onFocus, onInputValueChange, onInputKeyDown, placeholder, textValue } = this.props;\n if (loading && items && !!items.length) {\n rightIcon = this.renderSpinner();\n }\n\n const themeGTE6_1 = isThemeGTE(this.theme, '6.1');\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onFocus,\n onValueChange: onInputValueChange,\n onKeyDown: onInputKeyDown,\n value: textValue,\n placeholder,\n rightIcon,\n size: themeGTE6_1 ? this.size : undefined,\n };\n\n const themeDependantProps = themeGTE6_1\n ? {\n footerChildComponent: <Input ref={this.refMobileInput} {...inputProps} />,\n size: this.size,\n }\n : {\n headerChildComponent: <Input ref={this.refMobileInput} {...inputProps} />,\n };\n\n return (\n opened && (\n <MobilePopup {...themeDependantProps} onCloseRequest={this.props.onMobileClose} opened>\n {this.getComboBoxMenu()}\n </MobilePopup>\n )\n );\n };\n\n private getParent = () => {\n return getRootNode(this);\n };\n\n private renderAddButton = (): React.ReactNode => {\n return this.getProps().renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const isMobile = this.isMobileLayout;\n\n const {\n id,\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n showClearIcon,\n mask,\n maskChar,\n formatChars,\n onBeforePasteInMask,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n const inputProps = {\n id,\n align,\n borderless,\n disabled,\n error,\n maxLength: this.props.maxLength,\n onBlur: isMobile ? undefined : onInputBlur,\n onValueChange: onInputValueChange,\n onFocus: onInputFocus,\n onClick: isMobile ? this.handleMobileFocus : onInputClick,\n leftIcon,\n rightIcon,\n value: textValue || '',\n onKeyDown: onInputKeyDown,\n placeholder,\n width: '100%',\n ref: this.refInput,\n warning,\n inputMode,\n autoComplete: 'off',\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': this.menuId,\n 'aria-label': ariaLabel,\n showClearIcon,\n size: this.size,\n };\n\n const multilineTextareaProps = {\n autoResize: true,\n rows: 1,\n extraRow: false,\n maxRows: this.props.maxRows,\n };\n\n if (this.props.viewMode === 'multiline' && !mask) {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n if (editing) {\n if (mask) {\n return (\n <MaskedInput\n {...inputProps}\n type=\"text\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n onBeforePasteValue={onBeforePasteInMask}\n />\n );\n }\n\n if (this.props.viewMode === 'multiline-editing') {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n return <Input {...inputProps} />;\n }\n\n const { renderValue } = this.getProps();\n return (\n <InputLikeText\n id={id}\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={this.size}\n width=\"100%\"\n ref={refInputLikeText}\n aria-describedby={ariaDescribedby}\n aria-controls={this.menuId}\n showClearIcon={showClearIcon}\n className={this.cx(mask && this.maskedInputStyles.root(this.theme))}\n onClearCrossClick={this.props.onClearCrossClick}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleMobileFocus = () => {\n this.props.onInputClick?.();\n\n this.mobileInput?.focus();\n };\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n\n if (this.isMobileLayout) {\n this.props.onMobileClose?.();\n }\n };\n\n private refInput = (input: Nullable<Input | InternalTextareaWithLayout>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={this.styles.spinnerWrapper()}>\n <Spinner size=\"small\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n const size = this.size;\n\n if (loading && items && !!items.length) {\n return <LoadingIcon size={size} />;\n }\n\n if (rightIcon || drawArrow) {\n return rightIcon || <ArrowDownIcon size={size} />;\n }\n\n return null;\n };\n\n private refMobileInput = (input: Nullable<Input>) => {\n this.mobileInput = input;\n };\n}\n"]}
1
+ {"version":3,"file":"ComboBoxView.js","sourceRoot":"","sources":["ComboBoxView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox/index.js';\nimport type { InputIconType, InputProps, ShowClearIcon } from '../../components/Input/index.js';\nimport { Input } from '../../components/Input/index.js';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput/index.js';\nimport { MaskedInput } from '../../components/MaskedInput/index.js';\nimport { getStyles as getMaskedInputStyles } from '../../components/MaskedInput/MaskedInput.styles.js';\nimport type { MenuItemState } from '../../components/MenuItem/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { Spinner } from '../../components/Spinner/index.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getRandomID, isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { LoadingIcon } from '../icons2022/LoadingIcon.js';\nimport { InputLikeText } from '../InputLikeText/index.js';\nimport { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout.js';\nimport type { Menu } from '../Menu/index.js';\nimport { MobilePopup } from '../MobilePopup/index.js';\nimport { Popup } from '../Popup/index.js';\nimport { RenderLayer } from '../RenderLayer/index.js';\nimport { ZIndex } from '../ZIndex/index.js';\nimport { ArrowDownIcon } from './ArrowDownIcon.js';\nimport { ComboBoxMenu } from './ComboBoxMenu.js';\nimport { CustomComboBoxDataTids } from './CustomComboBox.js';\nimport { getStyles } from './CustomComboBox.styles.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\nimport { getComboBoxTheme } from './getComboBoxTheme.js';\n\ninterface ComboBoxViewProps<T>\n extends\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n items?: Nullable<Array<ComboBoxExtendedItem<T>>>;\n loading?: boolean;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: SizeProp;\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxLength?: number;\n maxMenuHeight?: number | string;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onMobileClose?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => void;\n onArrowClick?: () => void;\n onClearCrossClick?: () => void;\n onInputKeyDown?: (e: React.KeyboardEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderValue?: (item: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n repeatRequest?: () => void;\n requestStatus?: ComboBoxRequestStatus;\n refInput?: (input: Nullable<Input | InternalTextareaWithLayout>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n preventIconsOffset?: boolean;\n}\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxViewProps<T>,\n | 'renderItem'\n | 'renderValue'\n | 'renderAddButton'\n | 'repeatRequest'\n | 'requestStatus'\n | 'onClickOutside'\n | 'onFocusOutside'\n | 'width'\n | 'showClearIcon'\n >\n>;\n\nexport const ComboBoxViewIds = {\n menu: 'ComboBoxView__menu',\n arrow: 'ComboBoxView__arrow',\n};\n\ninterface ComboBoxViewState {\n anchorElement: Nullable<Element>;\n clearCrossShowed: boolean;\n}\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@withSize\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>, ComboBoxViewState> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n public static displayName = 'ComboBoxView';\n\n public static defaultProps: DefaultProps<unknown> = {\n renderItem: (item: any) => item,\n renderValue: (item: any) => item,\n renderAddButton: () => null,\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n onClickOutside: () => {\n /**/\n },\n onFocusOutside: () => {\n /**/\n },\n width: 250,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBoxView.defaultProps);\n\n public getRootNode!: TGetRootNode;\n private input: Nullable<Input | InternalTextareaWithLayout>;\n private setRootNode!: TSetRootNode;\n private mobileInput: Nullable<Input> = null;\n private isMobileLayout!: boolean;\n private dropdownContainerRef = React.createRef<Popup>();\n private styles!: ReturnType<typeof getStyles>;\n private maskedInputStyles!: ReturnType<typeof getMaskedInputStyles>;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private theme!: Theme;\n private size!: SizeProp;\n private menuId = ComboBoxViewIds.menu + getRandomID();\n\n public state: ComboBoxViewState = {\n anchorElement: null,\n clearCrossShowed: this.props.showClearIcon === 'always' && !!this.props.value?.toString(),\n };\n\n public componentDidMount() {\n this.updateAnchorElement();\n\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n updateAnchorElement() {\n const parent = this.getParent();\n const anchorElement = this.state.anchorElement;\n\n if (anchorElement !== parent) {\n this.setState({\n anchorElement: parent,\n });\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n\n this.updateAnchorElement();\n\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n this.styles = getStyles(this.emotion);\n this.maskedInputStyles = getMaskedInputStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getComboBoxTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n const { onMouseEnter, onMouseLeave, onMouseOver, opened } = this.props;\n const { onClickOutside, onFocusOutside, width } = this.getProps();\n\n const isMobile = this.isMobileLayout;\n\n const input = this.renderInput();\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n data-tid={CustomComboBoxDataTids.comboBoxView}\n style={{ width }}\n className={this.styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n ref={this.setRootNode}\n >\n {input}\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getComboBoxMenu = () => {\n const {\n items,\n loading,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderNotFound,\n totalCount,\n preventIconsOffset,\n } = this.props;\n\n const { repeatRequest, requestStatus, renderItem, itemWrapper } = this.getProps();\n return (\n <ComboBoxMenu\n hasMargin={false}\n menuId={this.menuId}\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={this.handleItemSelect}\n opened={opened}\n refMenu={refMenu}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n itemWrapper={itemWrapper}\n renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n isMobile={this.isMobileLayout}\n size={this.size}\n preventIconsOffset={preventIconsOffset}\n />\n );\n };\n\n private renderMenu = () => {\n const { opened, menuPos, menuAlign } = this.getProps();\n const { anchorElement } = this.state;\n\n return (\n opened &&\n anchorElement && (\n <Popup\n opened\n hasShadow\n tryBestFallbackPosition\n minWidth=\"100%\"\n anchorElement={anchorElement}\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(menuPos, menuAlign)}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n ref={this.dropdownContainerRef}\n >\n {this.getComboBoxMenu()}\n </Popup>\n )\n );\n };\n\n private renderMobileMenu = () => {\n let rightIcon = null;\n\n const { loading, items, opened, onFocus, onInputValueChange, onInputKeyDown, placeholder, textValue } = this.props;\n if (loading && items && !!items.length) {\n rightIcon = this.renderSpinner();\n }\n\n const themeGTE6_1 = isThemeGTE(this.theme, '6.1');\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onFocus,\n onValueChange: onInputValueChange,\n onKeyDown: onInputKeyDown,\n value: textValue,\n placeholder,\n rightIcon,\n size: themeGTE6_1 ? this.size : undefined,\n };\n\n const themeDependantProps = themeGTE6_1\n ? {\n footerChildComponent: <Input ref={this.refMobileInput} {...inputProps} />,\n size: this.size,\n }\n : {\n headerChildComponent: <Input ref={this.refMobileInput} {...inputProps} />,\n };\n\n return (\n opened && (\n <MobilePopup {...themeDependantProps} onCloseRequest={this.props.onMobileClose} opened>\n {this.getComboBoxMenu()}\n </MobilePopup>\n )\n );\n };\n\n private getParent = () => {\n return getRootNode(this);\n };\n\n private renderAddButton = (): React.ReactNode => {\n return this.getProps().renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const isMobile = this.isMobileLayout;\n\n const {\n id,\n align,\n borderless,\n disabled,\n editing,\n error,\n onFocus,\n onInputBlur,\n onInputValueChange,\n onInputFocus,\n onInputClick,\n onInputKeyDown,\n placeholder,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n showClearIcon,\n mask,\n maskChar,\n formatChars,\n onBeforePasteInMask,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n const inputProps = {\n id,\n align,\n borderless,\n disabled,\n error,\n maxLength: this.props.maxLength,\n onBlur: isMobile ? undefined : onInputBlur,\n onValueChange: onInputValueChange,\n onFocus: onInputFocus,\n onClick: isMobile ? this.handleMobileFocus : onInputClick,\n leftIcon,\n rightIcon,\n value: textValue || '',\n onKeyDown: onInputKeyDown,\n placeholder,\n width: '100%',\n ref: this.refInput,\n warning,\n inputMode,\n autoComplete: 'off',\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': this.menuId,\n 'aria-label': ariaLabel,\n showClearIcon,\n size: this.size,\n };\n\n const multilineTextareaProps = {\n autoResize: true,\n rows: 1,\n extraRow: false,\n maxRows: this.props.maxRows,\n };\n\n if (this.props.viewMode === 'multiline' && !mask) {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n if (editing) {\n if (mask) {\n return (\n <MaskedInput\n {...inputProps}\n type=\"text\"\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n onBeforePasteValue={onBeforePasteInMask}\n />\n );\n }\n\n if (this.props.viewMode === 'multiline-editing') {\n return <InternalTextareaWithLayout {...inputProps} {...multilineTextareaProps} />;\n }\n\n return <Input {...inputProps} />;\n }\n\n const { renderValue } = this.getProps();\n return (\n <InputLikeText\n id={id}\n align={align}\n borderless={borderless}\n error={error}\n onFocus={onFocus}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n disabled={disabled}\n warning={warning}\n placeholder={placeholder}\n size={this.size}\n width=\"100%\"\n ref={refInputLikeText}\n aria-describedby={ariaDescribedby}\n aria-controls={this.menuId}\n showClearIcon={showClearIcon}\n className={this.cx(mask && this.maskedInputStyles.root(this.theme))}\n onClearCrossClick={this.props.onClearCrossClick}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleMobileFocus = () => {\n this.props.onInputClick?.();\n\n this.mobileInput?.focus();\n };\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n\n if (this.isMobileLayout) {\n this.props.onMobileClose?.();\n }\n };\n\n private refInput = (input: Nullable<Input | InternalTextareaWithLayout>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={this.styles.spinnerWrapper()}>\n <Spinner size=\"small\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n const size = this.size;\n\n if (loading && items && !!items.length) {\n return <LoadingIcon size={size} />;\n }\n\n if (rightIcon || drawArrow) {\n return (\n rightIcon || (\n <ArrowDownIcon\n data-tid={ComboBoxViewIds.arrow}\n size={size}\n onMouseDown={(event) => event.preventDefault()}\n onClick={this.handleArrowClick}\n />\n )\n );\n }\n\n return null;\n };\n\n private refMobileInput = (input: Nullable<Input>) => {\n this.mobileInput = input;\n };\n\n private handleArrowClick = (event: React.MouseEvent) => {\n event.preventDefault();\n this.props.onArrowClick?.();\n };\n}\n"]}
@@ -159,4 +159,5 @@ export declare class CustomComboBox<T> extends React.PureComponent<CustomComboBo
159
159
  private handleBlur;
160
160
  private handleInputBlur;
161
161
  private handleInputClick;
162
+ private handleArrowClick;
162
163
  }
@@ -220,6 +220,15 @@ var CustomComboBox = /** @class */ (function (_super) {
220
220
  _this.dispatch({ type: 'InputClick' });
221
221
  }
222
222
  };
223
+ _this.handleArrowClick = function () {
224
+ if (_this.props.disabled) {
225
+ return;
226
+ }
227
+ if (!_this.focused) {
228
+ _this.focus({ withoutOpenDropdown: true });
229
+ }
230
+ _this.dispatch({ type: 'ArrowClick', isRequestActive: Boolean(_this.cancelationToken) });
231
+ };
223
232
  return _this;
224
233
  }
225
234
  /**
@@ -364,6 +373,7 @@ var CustomComboBox = /** @class */ (function (_super) {
364
373
  onInputValueChange: function (value) { return _this.dispatch({ type: 'TextChange', value: value }); },
365
374
  onInputFocus: this.handleFocus,
366
375
  onInputClick: this.handleInputClick,
376
+ onArrowClick: this.handleArrowClick,
367
377
  onClearCrossClick: function () { return _this.dispatch({ type: 'ClearCrossClick' }); },
368
378
  onInputKeyDown: function (event) {
369
379
  event.persist();
@@ -1 +1 @@
1
- {"version":3,"file":"CustomComboBox.js","sourceRoot":"","sources":["CustomComboBox.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox/index.js';\nimport type { Input, InputIconType, ShowClearIcon } from '../../components/Input/index.js';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput/index.js';\nimport type { MenuItemState } from '../../components/MenuItem/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { REACT_MAJOR_VERSION } from '../../lib/react-is.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { CancelationError, taskWithDelay } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport type { InputLikeText } from '../InputLikeText/index.js';\nimport type { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout.js';\nimport type { Menu } from '../Menu/index.js';\nimport { ComboBoxView } from './ComboBoxView.js';\nimport type { CustomComboBoxAction, CustomComboBoxEffect } from './CustomComboBoxReducer.js';\nimport { reducer } from './CustomComboBoxReducer.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\n\nexport * from './tids.js';\n\nexport interface CustomComboBoxProps<T>\n extends\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: SizeProp;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToId: (item: T) => string | number;\n getItems: (query: string) => Promise<Array<ComboBoxExtendedItem<T>>>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n preventIconsOffset?: boolean;\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<Array<ComboBoxExtendedItem<T>>>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@withSize\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n public static displayName = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input | InternalTextareaWithLayout>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private globalObject!: GlobalObject;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n private canOpenPopup = true;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = (opts?: { withoutOpenDropdown?: boolean }) => {\n if (this.props.disabled) {\n return;\n }\n\n if (opts?.withoutOpenDropdown) {\n this.canOpenPopup = false;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = (): void => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private size!: SizeProp;\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n this.requestId += 1;\n const expectingId = this.requestId;\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open(): void {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close(): void {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n menuAlign: this.props.menuAlign,\n placeholder: this.props.placeholder,\n size: this.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n showClearIcon: this.props.showClearIcon,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-label': this.props['aria-label'],\n id: this.props.id,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n mask: this.props.mask,\n maskChar: this.props.maskChar,\n formatChars: this.props.formatChars,\n onBeforePasteInMask: this.props.onBeforePasteInMask,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onMobileClose: this.handleMobileClose,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onClearCrossClick: () => this.dispatch({ type: 'ClearCrossClick' }),\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n itemWrapper: this.props.itemWrapper,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input | InternalTextareaWithLayout>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n viewMode: this.props.viewMode,\n maxRows: this.props.maxRows,\n preventIconsOffset: this.props.preventIconsOffset,\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} size={this.props.size} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' }, false);\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch(\n {\n type: 'DidUpdate',\n prevProps,\n prevState,\n },\n false,\n );\n }\n\n /**\n * @public\n */\n public reset(): void {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n const updateState = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n // Auto-batching React@18 creates problems that are fixed with flushSync\n // https://github.com/skbkontur/retail-ui/pull/3144#issuecomment-1535235366\n if (sync && REACT_MAJOR_VERSION >= 18) {\n ReactDOM.flushSync(() => updateState(action));\n } else {\n updateState(action);\n }\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this, this.globalObject);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: !this.isMobileLayout,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n this.dispatch({ type: 'Focus', searchOnFocus: this.canOpenPopup && this.props.searchOnFocus });\n\n if (!this.canOpenPopup) {\n this.canOpenPopup = true;\n }\n };\n\n private handleMobileClose = () => {\n this.handleInputBlur();\n };\n\n private handleClickOutside = () => {\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n\n this.focused = false;\n // workaround for the similar bug with focusout\n // in Firefox, Chrome and IE\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n }, 0);\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n\n if (this.state.opened && !this.isMobileLayout) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
1
+ {"version":3,"file":"CustomComboBox.js","sourceRoot":"","sources":["CustomComboBox.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox/index.js';\nimport type { Input, InputIconType, ShowClearIcon } from '../../components/Input/index.js';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput/index.js';\nimport type { MenuItemState } from '../../components/MenuItem/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { REACT_MAJOR_VERSION } from '../../lib/react-is.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { CancelationError, taskWithDelay } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport type { InputLikeText } from '../InputLikeText/index.js';\nimport type { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout.js';\nimport type { Menu } from '../Menu/index.js';\nimport { ComboBoxView } from './ComboBoxView.js';\nimport type { CustomComboBoxAction, CustomComboBoxEffect } from './CustomComboBoxReducer.js';\nimport { reducer } from './CustomComboBoxReducer.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\n\nexport * from './tids.js';\n\nexport interface CustomComboBoxProps<T>\n extends\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n /**\n * Позволяет вручную задать текущую позицию выпадающего окна\n */\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: SizeProp;\n totalCount?: number;\n value?: Nullable<T>;\n showClearIcon?: ShowClearIcon;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n itemWrapper?: (item: T) => React.ComponentType;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToId: (item: T) => string | number;\n getItems: (query: string) => Promise<Array<ComboBoxExtendedItem<T>>>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n viewMode?: ComboBoxViewMode;\n maxRows?: number;\n preventIconsOffset?: boolean;\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<Array<ComboBoxExtendedItem<T>>>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\n@withSize\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n public static displayName = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input | InternalTextareaWithLayout>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private globalObject!: GlobalObject;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n private canOpenPopup = true;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = (opts?: { withoutOpenDropdown?: boolean }) => {\n if (this.props.disabled) {\n return;\n }\n\n if (opts?.withoutOpenDropdown) {\n this.canOpenPopup = false;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = (): void => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private size!: SizeProp;\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n this.requestId += 1;\n const expectingId = this.requestId;\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open(): void {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close(): void {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n menuAlign: this.props.menuAlign,\n placeholder: this.props.placeholder,\n size: this.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n showClearIcon: this.props.showClearIcon,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-label': this.props['aria-label'],\n id: this.props.id,\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n mask: this.props.mask,\n maskChar: this.props.maskChar,\n formatChars: this.props.formatChars,\n onBeforePasteInMask: this.props.onBeforePasteInMask,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onMobileClose: this.handleMobileClose,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onArrowClick: this.handleArrowClick,\n onClearCrossClick: () => this.dispatch({ type: 'ClearCrossClick' }),\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n itemWrapper: this.props.itemWrapper,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input | InternalTextareaWithLayout>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n viewMode: this.props.viewMode,\n maxRows: this.props.maxRows,\n preventIconsOffset: this.props.preventIconsOffset,\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} size={this.props.size} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' }, false);\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch(\n {\n type: 'DidUpdate',\n prevProps,\n prevState,\n },\n false,\n );\n }\n\n /**\n * @public\n */\n public reset(): void {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n const updateState = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n // Auto-batching React@18 creates problems that are fixed with flushSync\n // https://github.com/skbkontur/retail-ui/pull/3144#issuecomment-1535235366\n if (sync && REACT_MAJOR_VERSION >= 18) {\n ReactDOM.flushSync(() => updateState(action));\n } else {\n updateState(action);\n }\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this, this.globalObject);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: !this.isMobileLayout,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n this.dispatch({ type: 'Focus', searchOnFocus: this.canOpenPopup && this.props.searchOnFocus });\n\n if (!this.canOpenPopup) {\n this.canOpenPopup = true;\n }\n };\n\n private handleMobileClose = () => {\n this.handleInputBlur();\n };\n\n private handleClickOutside = () => {\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n\n this.focused = false;\n // workaround for the similar bug with focusout\n // in Firefox, Chrome and IE\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n }, 0);\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n\n if (this.state.opened && !this.isMobileLayout) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n\n private handleArrowClick = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (!this.focused) {\n this.focus({ withoutOpenDropdown: true });\n }\n\n this.dispatch({ type: 'ArrowClick', isRequestActive: Boolean(this.cancelationToken) });\n };\n}\n"]}
@@ -24,6 +24,9 @@ export type CustomComboBoxAction<T> = {
24
24
  searchOnFocus?: boolean;
25
25
  } | {
26
26
  type: 'InputClick';
27
+ } | {
28
+ type: 'ArrowClick';
29
+ isRequestActive: boolean;
27
30
  } | {
28
31
  type: 'ClearCrossClick';
29
32
  } | {
@@ -281,6 +281,12 @@ export function reducer(state, props, action) {
281
281
  }
282
282
  return state;
283
283
  }
284
+ case 'ArrowClick': {
285
+ if (state.opened || action.isRequestActive) {
286
+ return [{ opened: false, items: null }, [Effect.cancelRequest]];
287
+ }
288
+ return [state, [Effect.search('')]];
289
+ }
284
290
  case 'ClearCrossClick': {
285
291
  var newState = {
286
292
  editing: true,
@@ -1 +1 @@
1
- {"version":3,"file":"CustomComboBoxReducer.js","sourceRoot":"","sources":["CustomComboBoxReducer.tsx"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash.debounce';\nimport isEqual from 'lodash.isequal';\nimport type React from 'react';\n\nimport type { ComboBoxExtendedItem } from '../../components/ComboBox/index.js';\nimport { isKeyArrowUp, isKeyArrowVertical, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CustomComboBox, CustomComboBoxProps, CustomComboBoxState } from './CustomComboBox.js';\nimport { DefaultState } from './CustomComboBox.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\n\nexport type CustomComboBoxAction<T> =\n | { type: 'ValueChange'; value: T; keepFocus: boolean }\n | { type: 'TextChange'; value: string }\n | { type: 'KeyPress'; event: React.KeyboardEvent }\n | {\n type: 'DidUpdate';\n prevProps: CustomComboBoxProps<T>;\n prevState: CustomComboBoxState<T>;\n }\n | { type: 'Mount' }\n | { type: 'Focus'; searchOnFocus?: boolean }\n | { type: 'InputClick' }\n | { type: 'ClearCrossClick' }\n | { type: 'Blur' }\n | { type: 'Reset' }\n | { type: 'Open' }\n | { type: 'Close' }\n | { type: 'Search'; query: string }\n | { type: 'RequestItems' }\n | { type: 'ReceiveItems'; items: Array<ComboBoxExtendedItem<T>> }\n | { type: 'RequestFailure'; repeatRequest: () => void }\n | { type: 'CancelRequest' };\n\nexport type CustomComboBoxEffect<T> = (\n dispatch: (action: CustomComboBoxAction<T>) => void,\n getState: () => CustomComboBoxState<T>,\n getProps: () => CustomComboBoxProps<T>,\n getInstance: () => CustomComboBox<T>,\n globalObject: GlobalObject,\n) => void;\n\ntype Effect = CustomComboBoxEffect<any>;\n\ninterface EffectFactory {\n search: (query: string) => Effect;\n debouncedSearch: Effect & {\n cancel(): void;\n flush(): void;\n };\n cancelRequest: Effect;\n blur: Effect;\n focus: Effect;\n\n valueChange: (value: any) => Effect;\n valueClear: Effect;\n unexpectedInput: (textValue: string, items: Nullable<any[]>) => Effect;\n inputChange: Effect;\n inputFocus: Effect;\n highlightMenuItem: Effect;\n selectMenuItem: (event: React.KeyboardEvent<HTMLElement>) => Effect;\n inputKeyDown: (event: React.KeyboardEvent<HTMLElement>) => Effect;\n moveMenuHighlight: (direction: 'up' | 'down') => Effect;\n resetHighlightedMenuItem: Effect;\n reflow: Effect;\n selectInputText: Effect;\n}\n\nconst DEBOUNCE_DELAY = 300;\n\nconst getValueString = (value: any, valueToString: CustomComboBoxProps<any>['valueToString']) => {\n return isNonNullable(value) ? valueToString(value) : '';\n};\n\nexport const Effect: EffectFactory = {\n search: (query) => (dispatch, getState, getProps, getInstance) => {\n getInstance().search(query);\n },\n debouncedSearch: debounce((dispatch, getState, getProps, getInstance, globalObject) => {\n const searchEffect = Effect.search(getState().textValue);\n searchEffect(dispatch, getState, getProps, getInstance, globalObject);\n }, DEBOUNCE_DELAY),\n cancelRequest: (dispatch, getState, getProps, getInstance) => {\n Effect.debouncedSearch.cancel();\n getInstance().cancelSearch();\n },\n blur: (dispatch, getState, getProps) => {\n const { onBlur } = getProps();\n if (onBlur) {\n onBlur();\n }\n },\n focus: (dispatch, getState, getProps) => {\n const { onFocus } = getProps();\n if (onFocus) {\n onFocus();\n }\n },\n valueChange: (value) => (dispatch, getState, getProps) => {\n const { onValueChange } = getProps();\n if (onValueChange) {\n onValueChange(value);\n }\n },\n valueClear: (dispatch) => {\n dispatch({ type: 'TextChange', value: '' });\n },\n unexpectedInput: (textValue, items) => (dispatch, getState, getProps) => {\n const { onUnexpectedInput, valueToString } = getProps();\n if (Array.isArray(items) && items.length === 1) {\n const singleItem = items[0];\n const valueContent = getValueString(singleItem, valueToString);\n\n if (valueContent === textValue) {\n dispatch({ type: 'ValueChange', value: singleItem, keepFocus: false });\n return;\n }\n }\n\n if (onUnexpectedInput) {\n const value = onUnexpectedInput(textValue);\n if (value !== undefined) {\n dispatch({ type: 'ValueChange', value, keepFocus: false });\n }\n }\n },\n inputChange: (dispatch, getState, getProps) => {\n const { onInputValueChange } = getProps();\n const { textValue } = getState();\n if (onInputValueChange) {\n const returnedValue = onInputValueChange(textValue);\n if (typeof returnedValue === 'string' && returnedValue !== textValue) {\n dispatch({ type: 'TextChange', value: returnedValue });\n }\n }\n },\n inputFocus: (dispatch, getState, getProps, getInstance) => {\n const { input } = getInstance();\n\n if (!input) {\n return;\n }\n\n input.focus();\n const inputNode = input.getNode();\n if (inputNode) {\n inputNode.scrollLeft = inputNode.scrollWidth;\n inputNode.scrollTop = inputNode.scrollHeight;\n }\n },\n highlightMenuItem: (dispatch, getState, getProps, getInstance, globalObject) => {\n const { value, itemToId, valueToString } = getProps();\n const { items, focused, textValue, requestStatus } = getState();\n const { menu } = getInstance();\n const valueString = getValueString(value, valueToString);\n\n if (!menu) {\n return;\n }\n\n if (!focused) {\n return;\n }\n\n let index = -1;\n if (items?.length && isNonNullable(value)) {\n index = items.findIndex((x) => itemToId(x) === itemToId(value));\n menu.highlightItem(index);\n } else {\n menu.reset();\n }\n\n if (index >= 0) {\n // @ts-expect-error: Use of private property.\n globalObject.requestAnimationFrame?.(() => menu?.scrollToSelected());\n return;\n }\n\n const queryTextDifferenceOfSavedValue = textValue !== valueString;\n const needFocusToRefreshButton = requestStatus === ComboBoxRequestStatus.Failed;\n if (queryTextDifferenceOfSavedValue || needFocusToRefreshButton) {\n globalObject.requestAnimationFrame?.(() => menu?.highlightItem(0));\n }\n },\n selectMenuItem: (event) => (dispatch, getState, getProps, getInstance) => {\n const { menu } = getInstance();\n if (menu) {\n menu.enter(event);\n }\n },\n moveMenuHighlight: (direction) => (dispatch, getState, getProps, getInstance) => {\n const { menu } = getInstance();\n if (menu) {\n menu[direction]();\n }\n },\n resetHighlightedMenuItem: (dispatch, getState, getProps, getInstance) => {\n const combobox = getInstance();\n\n if (combobox.menu && combobox.menu.hasHighlightedItem()) {\n combobox.menu.reset();\n }\n },\n reflow: () => {\n LayoutEvents.emit();\n },\n selectInputText: (dispatch, getState, getProps, getInstance) => {\n const combobox = getInstance();\n combobox.selectInputText();\n },\n inputKeyDown: (event) => (dispatch, getState, getProps) => {\n const { onInputKeyDown } = getProps();\n if (onInputKeyDown) {\n onInputKeyDown(event);\n }\n },\n};\n\nconst never = () => null;\n\nexport function reducer<T>(\n state: CustomComboBoxState<T>,\n props: CustomComboBoxProps<T>,\n action: CustomComboBoxAction<T>,\n): Pick<CustomComboBoxState<T>, never> | [Pick<CustomComboBoxState<T>, never>, Array<CustomComboBoxEffect<T>>] {\n switch (action.type) {\n case 'ValueChange': {\n const { value, keepFocus } = action;\n const textValue = getValueString(value, props.valueToString);\n if (keepFocus) {\n return [\n {\n opened: false,\n inputChanged: false,\n editing: true,\n items: null,\n textValue,\n },\n [Effect.valueChange(value), Effect.cancelRequest, Effect.inputFocus],\n ];\n }\n return [\n {\n opened: false,\n inputChanged: false,\n editing: false,\n items: null,\n textValue,\n },\n [Effect.valueChange(value), Effect.cancelRequest],\n ];\n }\n case 'TextChange': {\n const newState = {\n inputChanged: true,\n textValue: action.value,\n };\n if (!action.value && !props.searchOnFocus) {\n return [\n {\n ...newState,\n opened: false,\n items: null,\n },\n [Effect.inputChange],\n ];\n }\n return [newState, [Effect.debouncedSearch, Effect.inputChange]];\n }\n case 'KeyPress': {\n const e = action.event as React.KeyboardEvent<HTMLElement>;\n const effects = [];\n let nextState = state;\n\n switch (true) {\n case isKeyEnter(e):\n if (!state.opened) {\n break;\n }\n e.preventDefault();\n effects.push(Effect.selectMenuItem(e));\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n effects.push(Effect.moveMenuHighlight(isKeyArrowUp(e) ? 'up' : 'down'));\n if (!state.opened) {\n effects.push(Effect.search(state.textValue));\n }\n break;\n case isKeyEscape(e):\n nextState = {\n ...state,\n items: null,\n opened: false,\n };\n break;\n }\n return [nextState, [...effects, Effect.inputKeyDown(e)]];\n }\n case 'DidUpdate': {\n if (isEqual(props.value, action.prevProps.value)) {\n return state;\n }\n\n const nextTextValue = getValueString(props.value, props.valueToString);\n\n if (!state.focused) {\n return [\n {\n editing: false,\n inputChanged: false,\n textValue: nextTextValue,\n },\n [Effect.cancelRequest],\n ];\n }\n\n if (state.focused && state.opened) {\n return [{ ...state, textValue: nextTextValue }, [Effect.cancelRequest, Effect.search(nextTextValue)]];\n }\n\n if (state.focused) {\n return {\n ...state,\n textValue: nextTextValue,\n };\n }\n\n break;\n }\n case 'Mount': {\n return {\n textValue: getValueString(props.value, props.valueToString),\n };\n }\n case 'Focus': {\n const newState = {\n focused: true,\n editing: true,\n };\n if (!action.searchOnFocus) {\n return [newState, [Effect.focus]];\n }\n if (state.editing) {\n return [newState, [Effect.search(state.textValue), Effect.focus]];\n }\n return [newState, [Effect.search(''), Effect.focus, Effect.selectInputText]];\n }\n case 'InputClick': {\n const newState = {\n inputChanged: false,\n };\n if (!state.opened && props.searchOnFocus) {\n return [newState, [Effect.search('')]];\n }\n return state;\n }\n case 'ClearCrossClick': {\n const newState = {\n editing: true,\n loading: true,\n };\n return [newState, [Effect.valueClear, Effect.focus, Effect.search('')]];\n }\n case 'Blur': {\n const { inputChanged, items } = state;\n if (!inputChanged) {\n return [\n {\n focused: false,\n opened: false,\n items: null,\n editing: false,\n },\n [Effect.blur, Effect.cancelRequest],\n ];\n }\n\n return [\n {\n focused: false,\n opened: false,\n items: null,\n },\n [Effect.blur, Effect.cancelRequest, Effect.unexpectedInput(state.textValue, items)],\n ];\n }\n case 'Reset': {\n return DefaultState;\n }\n case 'Open': {\n return { opened: true };\n }\n case 'Close': {\n return { opened: false, items: null };\n }\n case 'Search': {\n return [state, [Effect.search(action.query)]];\n }\n case 'RequestItems': {\n return {\n loading: true,\n opened: true,\n requestStatus: ComboBoxRequestStatus.Pending,\n };\n }\n case 'ReceiveItems': {\n const shouldResetMenuHighlight = state.textValue === '';\n return [\n {\n loading: false,\n opened: true,\n items: action.items,\n requestStatus: ComboBoxRequestStatus.Success,\n },\n [shouldResetMenuHighlight ? Effect.resetHighlightedMenuItem : Effect.highlightMenuItem, Effect.reflow],\n ];\n }\n case 'RequestFailure': {\n return [\n {\n loading: false,\n opened: true,\n items: null,\n requestStatus: ComboBoxRequestStatus.Failed,\n repeatRequest: action.repeatRequest,\n },\n [Effect.highlightMenuItem],\n ];\n }\n case 'CancelRequest': {\n return {\n loading: false,\n requestStatus: ComboBoxRequestStatus.Unknown,\n };\n }\n default: {\n never();\n }\n }\n return state;\n}\n"]}
1
+ {"version":3,"file":"CustomComboBoxReducer.js","sourceRoot":"","sources":["CustomComboBoxReducer.tsx"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash.debounce';\nimport isEqual from 'lodash.isequal';\nimport type React from 'react';\n\nimport type { ComboBoxExtendedItem } from '../../components/ComboBox/index.js';\nimport { isKeyArrowUp, isKeyArrowVertical, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { isNonNullable } from '../../lib/utils.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport type { CustomComboBox, CustomComboBoxProps, CustomComboBoxState } from './CustomComboBox.js';\nimport { DefaultState } from './CustomComboBox.js';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes.js';\n\nexport type CustomComboBoxAction<T> =\n | { type: 'ValueChange'; value: T; keepFocus: boolean }\n | { type: 'TextChange'; value: string }\n | { type: 'KeyPress'; event: React.KeyboardEvent }\n | {\n type: 'DidUpdate';\n prevProps: CustomComboBoxProps<T>;\n prevState: CustomComboBoxState<T>;\n }\n | { type: 'Mount' }\n | { type: 'Focus'; searchOnFocus?: boolean }\n | { type: 'InputClick' }\n | { type: 'ArrowClick'; isRequestActive: boolean }\n | { type: 'ClearCrossClick' }\n | { type: 'Blur' }\n | { type: 'Reset' }\n | { type: 'Open' }\n | { type: 'Close' }\n | { type: 'Search'; query: string }\n | { type: 'RequestItems' }\n | { type: 'ReceiveItems'; items: Array<ComboBoxExtendedItem<T>> }\n | { type: 'RequestFailure'; repeatRequest: () => void }\n | { type: 'CancelRequest' };\n\nexport type CustomComboBoxEffect<T> = (\n dispatch: (action: CustomComboBoxAction<T>) => void,\n getState: () => CustomComboBoxState<T>,\n getProps: () => CustomComboBoxProps<T>,\n getInstance: () => CustomComboBox<T>,\n globalObject: GlobalObject,\n) => void;\n\ntype Effect = CustomComboBoxEffect<any>;\n\ninterface EffectFactory {\n search: (query: string) => Effect;\n debouncedSearch: Effect & {\n cancel(): void;\n flush(): void;\n };\n cancelRequest: Effect;\n blur: Effect;\n focus: Effect;\n\n valueChange: (value: any) => Effect;\n valueClear: Effect;\n unexpectedInput: (textValue: string, items: Nullable<any[]>) => Effect;\n inputChange: Effect;\n inputFocus: Effect;\n highlightMenuItem: Effect;\n selectMenuItem: (event: React.KeyboardEvent<HTMLElement>) => Effect;\n inputKeyDown: (event: React.KeyboardEvent<HTMLElement>) => Effect;\n moveMenuHighlight: (direction: 'up' | 'down') => Effect;\n resetHighlightedMenuItem: Effect;\n reflow: Effect;\n selectInputText: Effect;\n}\n\nconst DEBOUNCE_DELAY = 300;\n\nconst getValueString = (value: any, valueToString: CustomComboBoxProps<any>['valueToString']) => {\n return isNonNullable(value) ? valueToString(value) : '';\n};\n\nexport const Effect: EffectFactory = {\n search: (query) => (dispatch, getState, getProps, getInstance) => {\n getInstance().search(query);\n },\n debouncedSearch: debounce((dispatch, getState, getProps, getInstance, globalObject) => {\n const searchEffect = Effect.search(getState().textValue);\n searchEffect(dispatch, getState, getProps, getInstance, globalObject);\n }, DEBOUNCE_DELAY),\n cancelRequest: (dispatch, getState, getProps, getInstance) => {\n Effect.debouncedSearch.cancel();\n getInstance().cancelSearch();\n },\n blur: (dispatch, getState, getProps) => {\n const { onBlur } = getProps();\n if (onBlur) {\n onBlur();\n }\n },\n focus: (dispatch, getState, getProps) => {\n const { onFocus } = getProps();\n if (onFocus) {\n onFocus();\n }\n },\n valueChange: (value) => (dispatch, getState, getProps) => {\n const { onValueChange } = getProps();\n if (onValueChange) {\n onValueChange(value);\n }\n },\n valueClear: (dispatch) => {\n dispatch({ type: 'TextChange', value: '' });\n },\n unexpectedInput: (textValue, items) => (dispatch, getState, getProps) => {\n const { onUnexpectedInput, valueToString } = getProps();\n if (Array.isArray(items) && items.length === 1) {\n const singleItem = items[0];\n const valueContent = getValueString(singleItem, valueToString);\n\n if (valueContent === textValue) {\n dispatch({ type: 'ValueChange', value: singleItem, keepFocus: false });\n return;\n }\n }\n\n if (onUnexpectedInput) {\n const value = onUnexpectedInput(textValue);\n if (value !== undefined) {\n dispatch({ type: 'ValueChange', value, keepFocus: false });\n }\n }\n },\n inputChange: (dispatch, getState, getProps) => {\n const { onInputValueChange } = getProps();\n const { textValue } = getState();\n if (onInputValueChange) {\n const returnedValue = onInputValueChange(textValue);\n if (typeof returnedValue === 'string' && returnedValue !== textValue) {\n dispatch({ type: 'TextChange', value: returnedValue });\n }\n }\n },\n inputFocus: (dispatch, getState, getProps, getInstance) => {\n const { input } = getInstance();\n\n if (!input) {\n return;\n }\n\n input.focus();\n const inputNode = input.getNode();\n if (inputNode) {\n inputNode.scrollLeft = inputNode.scrollWidth;\n inputNode.scrollTop = inputNode.scrollHeight;\n }\n },\n highlightMenuItem: (dispatch, getState, getProps, getInstance, globalObject) => {\n const { value, itemToId, valueToString } = getProps();\n const { items, focused, textValue, requestStatus } = getState();\n const { menu } = getInstance();\n const valueString = getValueString(value, valueToString);\n\n if (!menu) {\n return;\n }\n\n if (!focused) {\n return;\n }\n\n let index = -1;\n if (items?.length && isNonNullable(value)) {\n index = items.findIndex((x) => itemToId(x) === itemToId(value));\n menu.highlightItem(index);\n } else {\n menu.reset();\n }\n\n if (index >= 0) {\n // @ts-expect-error: Use of private property.\n globalObject.requestAnimationFrame?.(() => menu?.scrollToSelected());\n return;\n }\n\n const queryTextDifferenceOfSavedValue = textValue !== valueString;\n const needFocusToRefreshButton = requestStatus === ComboBoxRequestStatus.Failed;\n if (queryTextDifferenceOfSavedValue || needFocusToRefreshButton) {\n globalObject.requestAnimationFrame?.(() => menu?.highlightItem(0));\n }\n },\n selectMenuItem: (event) => (dispatch, getState, getProps, getInstance) => {\n const { menu } = getInstance();\n if (menu) {\n menu.enter(event);\n }\n },\n moveMenuHighlight: (direction) => (dispatch, getState, getProps, getInstance) => {\n const { menu } = getInstance();\n if (menu) {\n menu[direction]();\n }\n },\n resetHighlightedMenuItem: (dispatch, getState, getProps, getInstance) => {\n const combobox = getInstance();\n\n if (combobox.menu && combobox.menu.hasHighlightedItem()) {\n combobox.menu.reset();\n }\n },\n reflow: () => {\n LayoutEvents.emit();\n },\n selectInputText: (dispatch, getState, getProps, getInstance) => {\n const combobox = getInstance();\n combobox.selectInputText();\n },\n inputKeyDown: (event) => (dispatch, getState, getProps) => {\n const { onInputKeyDown } = getProps();\n if (onInputKeyDown) {\n onInputKeyDown(event);\n }\n },\n};\n\nconst never = () => null;\n\nexport function reducer<T>(\n state: CustomComboBoxState<T>,\n props: CustomComboBoxProps<T>,\n action: CustomComboBoxAction<T>,\n): Pick<CustomComboBoxState<T>, never> | [Pick<CustomComboBoxState<T>, never>, Array<CustomComboBoxEffect<T>>] {\n switch (action.type) {\n case 'ValueChange': {\n const { value, keepFocus } = action;\n const textValue = getValueString(value, props.valueToString);\n if (keepFocus) {\n return [\n {\n opened: false,\n inputChanged: false,\n editing: true,\n items: null,\n textValue,\n },\n [Effect.valueChange(value), Effect.cancelRequest, Effect.inputFocus],\n ];\n }\n return [\n {\n opened: false,\n inputChanged: false,\n editing: false,\n items: null,\n textValue,\n },\n [Effect.valueChange(value), Effect.cancelRequest],\n ];\n }\n case 'TextChange': {\n const newState = {\n inputChanged: true,\n textValue: action.value,\n };\n if (!action.value && !props.searchOnFocus) {\n return [\n {\n ...newState,\n opened: false,\n items: null,\n },\n [Effect.inputChange],\n ];\n }\n return [newState, [Effect.debouncedSearch, Effect.inputChange]];\n }\n case 'KeyPress': {\n const e = action.event as React.KeyboardEvent<HTMLElement>;\n const effects = [];\n let nextState = state;\n\n switch (true) {\n case isKeyEnter(e):\n if (!state.opened) {\n break;\n }\n e.preventDefault();\n effects.push(Effect.selectMenuItem(e));\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n effects.push(Effect.moveMenuHighlight(isKeyArrowUp(e) ? 'up' : 'down'));\n if (!state.opened) {\n effects.push(Effect.search(state.textValue));\n }\n break;\n case isKeyEscape(e):\n nextState = {\n ...state,\n items: null,\n opened: false,\n };\n break;\n }\n return [nextState, [...effects, Effect.inputKeyDown(e)]];\n }\n case 'DidUpdate': {\n if (isEqual(props.value, action.prevProps.value)) {\n return state;\n }\n\n const nextTextValue = getValueString(props.value, props.valueToString);\n\n if (!state.focused) {\n return [\n {\n editing: false,\n inputChanged: false,\n textValue: nextTextValue,\n },\n [Effect.cancelRequest],\n ];\n }\n\n if (state.focused && state.opened) {\n return [{ ...state, textValue: nextTextValue }, [Effect.cancelRequest, Effect.search(nextTextValue)]];\n }\n\n if (state.focused) {\n return {\n ...state,\n textValue: nextTextValue,\n };\n }\n\n break;\n }\n case 'Mount': {\n return {\n textValue: getValueString(props.value, props.valueToString),\n };\n }\n case 'Focus': {\n const newState = {\n focused: true,\n editing: true,\n };\n if (!action.searchOnFocus) {\n return [newState, [Effect.focus]];\n }\n if (state.editing) {\n return [newState, [Effect.search(state.textValue), Effect.focus]];\n }\n return [newState, [Effect.search(''), Effect.focus, Effect.selectInputText]];\n }\n case 'InputClick': {\n const newState = {\n inputChanged: false,\n };\n if (!state.opened && props.searchOnFocus) {\n return [newState, [Effect.search('')]];\n }\n return state;\n }\n case 'ArrowClick': {\n if (state.opened || action.isRequestActive) {\n return [{ opened: false, items: null }, [Effect.cancelRequest]];\n }\n return [state, [Effect.search('')]];\n }\n case 'ClearCrossClick': {\n const newState = {\n editing: true,\n loading: true,\n };\n return [newState, [Effect.valueClear, Effect.focus, Effect.search('')]];\n }\n case 'Blur': {\n const { inputChanged, items } = state;\n if (!inputChanged) {\n return [\n {\n focused: false,\n opened: false,\n items: null,\n editing: false,\n },\n [Effect.blur, Effect.cancelRequest],\n ];\n }\n\n return [\n {\n focused: false,\n opened: false,\n items: null,\n },\n [Effect.blur, Effect.cancelRequest, Effect.unexpectedInput(state.textValue, items)],\n ];\n }\n case 'Reset': {\n return DefaultState;\n }\n case 'Open': {\n return { opened: true };\n }\n case 'Close': {\n return { opened: false, items: null };\n }\n case 'Search': {\n return [state, [Effect.search(action.query)]];\n }\n case 'RequestItems': {\n return {\n loading: true,\n opened: true,\n requestStatus: ComboBoxRequestStatus.Pending,\n };\n }\n case 'ReceiveItems': {\n const shouldResetMenuHighlight = state.textValue === '';\n return [\n {\n loading: false,\n opened: true,\n items: action.items,\n requestStatus: ComboBoxRequestStatus.Success,\n },\n [shouldResetMenuHighlight ? Effect.resetHighlightedMenuItem : Effect.highlightMenuItem, Effect.reflow],\n ];\n }\n case 'RequestFailure': {\n return [\n {\n loading: false,\n opened: true,\n items: null,\n requestStatus: ComboBoxRequestStatus.Failed,\n repeatRequest: action.repeatRequest,\n },\n [Effect.highlightMenuItem],\n ];\n }\n case 'CancelRequest': {\n return {\n loading: false,\n requestStatus: ComboBoxRequestStatus.Unknown,\n };\n }\n default: {\n never();\n }\n }\n return state;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "6.3.2",
3
+ "version": "6.3.3",
4
4
  "description": "UI Components",
5
5
  "homepage": "https://tech.skbkontur.ru/kontur-ui",
6
6
  "bugs": {