@skbkontur/react-ui 0.0.0-b5a1896fa9 → 0.0.0-bd4276284d

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.
@@ -329,11 +329,11 @@ CustomComboBox = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNod
329
329
 
330
330
 
331
331
 
332
- dispatch = function (action) {
332
+ dispatch = function (action, sync) {if (sync === void 0) {sync = true;}
333
333
  var effects;
334
334
  var nextState;
335
335
 
336
- _reactDom.default.flushSync(function () {
336
+ var updateState = function updateState() {
337
337
  _this.setState(
338
338
  function (state) {
339
339
  var stateAndEffect = _this.reducer(state, _this.props, action);var _ref =
@@ -346,7 +346,13 @@ CustomComboBox = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNod
346
346
  effects.forEach(_this.handleEffect);
347
347
  });
348
348
 
349
- });
349
+ };
350
+
351
+ if (sync) {
352
+ return _reactDom.default.flushSync(updateState);
353
+ }
354
+
355
+ return updateState();
350
356
  };_this.
351
357
 
352
358
  handleEffect = function (effect) {
@@ -420,6 +426,6 @@ CustomComboBox = (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNod
420
426
  * @public
421
427
  */;_proto.open = function open() {this.dispatch({ type: 'Open' });} /**
422
428
  * @public
423
- */;_proto.close = function close() {this.dispatch({ type: 'Close' });};_proto.render = function render() {var _this3 = this;var viewProps = { align: this.props.align, borderless: this.props.borderless, disabled: this.props.disabled, disablePortal: this.props.disablePortal, editing: this.state.editing, error: this.props.error, items: this.state.items, loading: this.state.loading, menuAlign: this.props.menuAlign, opened: this.state.opened, drawArrow: this.props.drawArrow, menuPos: this.props.menuPos, placeholder: this.props.placeholder, size: this.props.size, textValue: this.state.textValue, totalCount: this.props.totalCount, value: this.props.value, warning: this.props.warning, 'aria-describedby': this.props['aria-describedby'], width: this.props.width, maxLength: this.props.maxLength, maxMenuHeight: this.props.maxMenuHeight, leftIcon: this.props.leftIcon, rightIcon: this.props.rightIcon, inputMode: this.props.inputMode, onValueChange: this.handleValueChange, onClickOutside: this.handleClickOutside, onFocus: this.handleFocus, onFocusOutside: this.handleBlur, onInputBlur: this.handleInputBlur, onInputValueChange: function onInputValueChange(value) {return _this3.dispatch({ type: 'TextChange', value: value });}, onInputFocus: this.handleFocus, onInputClick: this.handleInputClick, onInputKeyDown: function onInputKeyDown(event) {event.persist();_this3.dispatch({ type: 'KeyPress', event: event });}, onMouseEnter: this.props.onMouseEnter, onMouseOver: this.props.onMouseOver, onMouseLeave: this.props.onMouseLeave, renderItem: this.props.renderItem, renderNotFound: this.props.renderNotFound, itemWrapper: this.props.itemWrapper, renderValue: this.props.renderValue, renderTotalCount: this.props.renderTotalCount, renderAddButton: this.props.renderAddButton, repeatRequest: this.state.repeatRequest, requestStatus: this.state.requestStatus, refInput: function refInput(input) {_this3.input = input;}, refMenu: function refMenu(menu) {_this3.menu = menu;}, refInputLikeText: function refInputLikeText(inputLikeText) {_this3.inputLikeText = inputLikeText;} };return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_ComboBoxView.ComboBoxView, (0, _extends2.default)({}, viewProps, { ref: this.setRootNode })));};_proto.componentDidMount = function componentDidMount() {this.dispatch({ type: 'Mount' });if (this.props.autoFocus) {this.focus();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {if (prevState.editing && !this.state.editing) {this.handleBlur();}this.dispatch({ type: 'DidUpdate', prevProps: prevProps, prevState: prevState });} /**
429
+ */;_proto.close = function close() {this.dispatch({ type: 'Close' });};_proto.render = function render() {var _this3 = this;var viewProps = { align: this.props.align, borderless: this.props.borderless, disabled: this.props.disabled, disablePortal: this.props.disablePortal, editing: this.state.editing, error: this.props.error, items: this.state.items, loading: this.state.loading, menuAlign: this.props.menuAlign, opened: this.state.opened, drawArrow: this.props.drawArrow, menuPos: this.props.menuPos, placeholder: this.props.placeholder, size: this.props.size, textValue: this.state.textValue, totalCount: this.props.totalCount, value: this.props.value, warning: this.props.warning, 'aria-describedby': this.props['aria-describedby'], width: this.props.width, maxLength: this.props.maxLength, maxMenuHeight: this.props.maxMenuHeight, leftIcon: this.props.leftIcon, rightIcon: this.props.rightIcon, inputMode: this.props.inputMode, onValueChange: this.handleValueChange, onClickOutside: this.handleClickOutside, onFocus: this.handleFocus, onFocusOutside: this.handleBlur, onInputBlur: this.handleInputBlur, onInputValueChange: function onInputValueChange(value) {return _this3.dispatch({ type: 'TextChange', value: value });}, onInputFocus: this.handleFocus, onInputClick: this.handleInputClick, onInputKeyDown: function onInputKeyDown(event) {event.persist();_this3.dispatch({ type: 'KeyPress', event: event });}, onMouseEnter: this.props.onMouseEnter, onMouseOver: this.props.onMouseOver, onMouseLeave: this.props.onMouseLeave, renderItem: this.props.renderItem, renderNotFound: this.props.renderNotFound, itemWrapper: this.props.itemWrapper, renderValue: this.props.renderValue, renderTotalCount: this.props.renderTotalCount, renderAddButton: this.props.renderAddButton, repeatRequest: this.state.repeatRequest, requestStatus: this.state.requestStatus, refInput: function refInput(input) {_this3.input = input;}, refMenu: function refMenu(menu) {_this3.menu = menu;}, refInputLikeText: function refInputLikeText(inputLikeText) {_this3.inputLikeText = inputLikeText;} };return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_ComboBoxView.ComboBoxView, (0, _extends2.default)({}, viewProps, { ref: this.setRootNode })));};_proto.componentDidMount = function componentDidMount() {this.dispatch({ type: 'Mount' }, false);if (this.props.autoFocus) {this.focus();}};_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {if (prevState.editing && !this.state.editing) {this.handleBlur();}this.dispatch({ type: 'DidUpdate', prevProps: prevProps, prevState: prevState }, false);} /**
424
430
  * @public
425
431
  */;_proto.reset = function reset() {this.dispatch({ type: 'Reset' });};return CustomComboBox;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'CustomComboBox', _temp)) || _class) || _class;exports.CustomComboBox = CustomComboBox;
@@ -1 +1 @@
1
- {"version":3,"sources":["CustomComboBox.tsx"],"names":["DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","ComboBoxRequestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","responsiveLayout","rootNode","state","requestId","cancelationToken","reducer","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","ReactDOM","flushSync","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","catch","race","code","cancelSearch","CancelationError","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\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 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?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\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<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<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\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\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 = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\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() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\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 menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\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\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\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 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>) => {\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 };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\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({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n ReactDOM.flushSync(() => {\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n });\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\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 this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\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 });\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 // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\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,"sources":["CustomComboBox.tsx"],"names":["DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","ComboBoxRequestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","responsiveLayout","rootNode","state","requestId","cancelationToken","reducer","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","sync","effects","nextState","updateState","setState","stateAndEffect","Array","forEach","handleEffect","ReactDOM","flushSync","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","catch","race","code","cancelSearch","CancelationError","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\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 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?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\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<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<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\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\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 = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\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() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\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 menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\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\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\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 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>) => {\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 };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} 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({ type: 'DidUpdate', prevProps, prevState }, false);\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n const updateState = () => {\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n if (sync) {\n return ReactDOM.flushSync(updateState);\n }\n\n return updateState();\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\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 this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\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 });\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 // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  export interface HTMLProps {
4
4
  a: React.AnchorHTMLAttributes<HTMLAnchorElement>;
5
5
  abbr: React.HTMLAttributes<HTMLElement>;
6
+ div: React.HTMLAttributes<HTMLDivElement>;
6
7
  address: React.HTMLAttributes<HTMLElement>;
7
8
  area: React.AreaHTMLAttributes<HTMLAreaElement>;
8
9
  article: React.HTMLAttributes<HTMLElement>;
@@ -85,10 +85,15 @@ export var CustomComboBox = responsiveLayout(_class = rootNode(_class = (_temp =
85
85
  _this.handleBlur();
86
86
  };
87
87
 
88
- _this.dispatch = function (action) {
88
+ _this.dispatch = function (action, sync) {
89
+ if (sync === void 0) {
90
+ sync = true;
91
+ }
92
+
89
93
  var effects;
90
94
  var nextState;
91
- ReactDOM.flushSync(function () {
95
+
96
+ var updateState = function updateState() {
92
97
  _this.setState(function (state) {
93
98
  var stateAndEffect = _this.reducer(state, _this.props, action);
94
99
 
@@ -100,7 +105,13 @@ export var CustomComboBox = responsiveLayout(_class = rootNode(_class = (_temp =
100
105
  }, function () {
101
106
  effects.forEach(_this.handleEffect);
102
107
  });
103
- });
108
+ };
109
+
110
+ if (sync) {
111
+ return ReactDOM.flushSync(updateState);
112
+ }
113
+
114
+ return updateState();
104
115
  };
105
116
 
106
117
  _this.handleEffect = function (effect) {
@@ -416,7 +427,7 @@ export var CustomComboBox = responsiveLayout(_class = rootNode(_class = (_temp =
416
427
  _proto.componentDidMount = function componentDidMount() {
417
428
  this.dispatch({
418
429
  type: 'Mount'
419
- });
430
+ }, false);
420
431
 
421
432
  if (this.props.autoFocus) {
422
433
  this.focus();
@@ -432,7 +443,7 @@ export var CustomComboBox = responsiveLayout(_class = rootNode(_class = (_temp =
432
443
  type: 'DidUpdate',
433
444
  prevProps: prevProps,
434
445
  prevState: prevState
435
- });
446
+ }, false);
436
447
  }
437
448
  /**
438
449
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["CustomComboBox.tsx"],"names":["React","ReactDOM","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","responsiveLayout","rootNode","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","state","requestId","cancelationToken","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","flushSync","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\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 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?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\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<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<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\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\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 = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\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() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\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 menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\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\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\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 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>) => {\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 };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' });\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({ type: 'DidUpdate', prevProps, prevState });\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n ReactDOM.flushSync(() => {\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n });\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\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 this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\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 });\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 // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\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,"sources":["CustomComboBox.tsx"],"names":["React","ReactDOM","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","responsiveLayout","rootNode","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","state","requestId","cancelationToken","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","sync","effects","nextState","updateState","setState","stateAndEffect","Array","forEach","handleEffect","flushSync","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\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 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?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\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<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<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\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\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 = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\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() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\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 menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\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\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\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 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>) => {\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 };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} 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({ type: 'DidUpdate', prevProps, prevState }, false);\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n const updateState = () => {\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n if (sync) {\n return ReactDOM.flushSync(updateState);\n }\n\n return updateState();\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\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 this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\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 });\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 // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "0.0.0-b5a1896fa9",
3
+ "version": "0.0.0-bd4276284d",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/unstable/0.0.0-b5a1896fa9/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/unstable/0.0.0-bd4276284d/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"
package/typings/html.d.ts CHANGED
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  export interface HTMLProps {
4
4
  a: React.AnchorHTMLAttributes<HTMLAnchorElement>;
5
5
  abbr: React.HTMLAttributes<HTMLElement>;
6
+ div: React.HTMLAttributes<HTMLDivElement>;
6
7
  address: React.HTMLAttributes<HTMLElement>;
7
8
  area: React.AreaHTMLAttributes<HTMLAreaElement>;
8
9
  article: React.HTMLAttributes<HTMLElement>;