@skbkontur/react-ui 3.8.5 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/cjs/components/Button/Button.d.ts +66 -10
- package/cjs/components/Button/Button.js +55 -0
- package/cjs/components/Button/Button.js.map +1 -1
- package/cjs/components/Button/Button.md +42 -30
- package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/ComboBox/ComboBox.d.ts +6 -0
- package/cjs/components/ComboBox/ComboBox.js +4 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +6 -0
- package/cjs/components/DateInput/DateInput.js +6 -0
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +6 -0
- package/cjs/components/DatePicker/DatePicker.js +6 -0
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
- package/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +5 -0
- package/cjs/components/Hint/Hint.js +5 -0
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +6 -2
- package/cjs/components/Input/Input.js +4 -0
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Link/Link.js +3 -6
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Link/Link.mixins.js +2 -1
- package/cjs/components/Link/Link.mixins.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +27 -11
- package/cjs/components/Radio/Radio.js +19 -6
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/Radio/Radio.md +36 -12
- package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +4 -1
- package/cjs/components/Select/Select.js +3 -0
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Tabs/Tab.d.ts +2 -2
- package/cjs/components/Tabs/Tab.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +6 -2
- package/cjs/components/Textarea/Textarea.js +4 -0
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +2 -2
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/components/Token/Token.d.ts +6 -0
- package/cjs/components/Token/Token.js +6 -0
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +6 -0
- package/cjs/components/TokenInput/TokenInput.js +6 -0
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
- package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +3 -3
- package/cjs/components/Tooltip/Tooltip.js +2 -1
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js +6 -0
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js +6 -0
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +13 -0
- package/cjs/internal/Popup/Popup.js +25 -3
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.js +1 -0
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/components/Button/Button/Button.js.map +1 -1
- package/components/Button/Button.d.ts +66 -10
- package/components/Button/Button.md +42 -30
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +2 -2
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +6 -0
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +6 -0
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +6 -0
- package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +2 -2
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +5 -0
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +6 -2
- package/components/Link/Link/Link.js +4 -8
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.mixins/Link.mixins.js +1 -1
- package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
- package/components/Radio/Radio/Radio.js +6 -5
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +27 -11
- package/components/Radio/Radio.md +36 -12
- package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +4 -1
- package/components/Tabs/Tab/Tab.js.map +1 -1
- package/components/Tabs/Tab.d.ts +2 -2
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +6 -2
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +2 -2
- package/components/Token/Token/Token.js.map +1 -1
- package/components/Token/Token.d.ts +6 -0
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +6 -0
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +1 -1
- package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js +2 -1
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +3 -3
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
- package/internal/Popup/Popup/Popup.js +9 -2
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +13 -0
- package/internal/Popup/PopupHelper/PopupHelper.js +2 -1
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ComboBoxView.tsx"],"names":["ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","styles","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","React","Component","__KONTUR_REACT_UI__","defaultProps","undefined","ComboBoxRequestStatus","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n editing?: boolean;\n error?: boolean;\n items?: Nullable<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\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 onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => 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 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>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\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 size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\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 renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\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 renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\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={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["ComboBoxView.tsx"],"names":["ComboBoxView","input","renderAddButton","props","textValue","handleItemSelect","item","onValueChange","refInput","renderSpinner","styles","spinnerWrapper","getRightIcon","loading","items","drawArrow","rightIcon","length","rightIconWrapper","componentDidMount","autoFocus","onFocus","componentDidUpdate","prevProps","editing","focus","render","menuAlign","onClickOutside","onFocusOutside","onMouseEnter","onMouseLeave","onMouseOver","opened","refMenu","maxMenuHeight","renderTotalCount","renderItem","renderNotFound","repeatRequest","requestStatus","totalCount","size","width","renderInput","topOffsets","spinner","arrow","root","disablePortal","align","borderless","disabled","error","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","placeholder","renderValue","value","warning","refInputLikeText","leftIcon","inputMode","maxLength","React","Component","__KONTUR_REACT_UI__","defaultProps","undefined","ComboBoxRequestStatus","Unknown"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { DropdownContainer } from '../DropdownContainer';\nimport { Input, InputIconType } from '../../components/Input';\nimport { InputLikeText } from '../InputLikeText';\nimport { Menu } from '../Menu';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { RenderLayer } from '../RenderLayer';\nimport { Spinner } from '../../components/Spinner';\nimport { Nullable } from '../../typings/utility-types';\nimport { ArrowChevronDownIcon } from '../icons/16px';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { ComboBoxMenu } from './ComboBoxMenu';\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { styles } from './CustomComboBox.styles';\n\ninterface ComboBoxViewProps<T> extends CommonProps {\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<T[]>;\n loading?: boolean;\n menuAlign?: 'left' | 'right';\n opened?: boolean;\n drawArrow?: boolean;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n textValue?: string;\n totalCount?: number;\n value?: Nullable<T>;\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 onValueChange?: (value: T) => void;\n onClickOutside?: (e: Event) => void;\n onFocus?: () => void;\n onFocusOutside?: () => void;\n onInputBlur?: () => void;\n onInputValueChange?: (value: string) => void;\n onInputFocus?: () => void;\n onInputClick?: () => 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 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>) => void;\n refMenu?: (menu: Nullable<Menu>) => void;\n refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;\n}\n\nexport class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBoxView';\n\n public static defaultProps = {\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 size: 'small',\n width: 250,\n };\n\n private input: Nullable<Input>;\n\n public componentDidMount() {\n if (this.props.autoFocus && this.props.onFocus) {\n this.props.onFocus();\n }\n }\n\n public componentDidUpdate(prevProps: ComboBoxViewProps<T>) {\n const { input, props } = this;\n if (props.editing && !prevProps.editing && input) {\n input.focus();\n }\n }\n\n public render() {\n const {\n items,\n loading,\n menuAlign,\n onClickOutside,\n onFocusOutside,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n opened,\n refMenu,\n maxMenuHeight,\n renderTotalCount,\n renderItem,\n renderNotFound,\n repeatRequest,\n requestStatus,\n totalCount,\n size,\n width,\n } = this.props;\n\n const input = this.renderInput();\n\n const topOffsets = {\n spinner: 6,\n arrow: 15,\n };\n if (size === 'medium') {\n topOffsets.spinner += 4;\n topOffsets.arrow += 4;\n }\n if (size === 'large') {\n topOffsets.spinner += 6;\n topOffsets.arrow += 6;\n }\n\n return (\n <CommonWrapper {...this.props}>\n <RenderLayer onClickOutside={onClickOutside} onFocusOutside={onFocusOutside} active={opened}>\n <span\n style={{ width }}\n className={styles.root()}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {input}\n {opened && (\n <DropdownContainer\n align={menuAlign}\n getParent={() => findDOMNode(this)}\n offsetY={1}\n disablePortal={this.props.disablePortal}\n >\n <ComboBoxMenu\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 renderAddButton={this.renderAddButton}\n repeatRequest={repeatRequest}\n requestStatus={requestStatus}\n totalCount={totalCount}\n />\n </DropdownContainer>\n )}\n </span>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private renderAddButton = (): React.ReactNode => {\n return this.props.renderAddButton(this.props.textValue);\n };\n\n private renderInput(): React.ReactNode {\n const {\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 renderValue,\n size,\n textValue,\n value,\n warning,\n refInputLikeText,\n leftIcon,\n inputMode,\n } = this.props;\n\n const rightIcon = this.getRightIcon();\n\n if (editing) {\n return (\n <Input\n align={align}\n borderless={borderless}\n disabled={disabled}\n error={error}\n maxLength={this.props.maxLength}\n onBlur={onInputBlur}\n onValueChange={onInputValueChange}\n onFocus={onInputFocus}\n onClick={onInputClick}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n value={textValue || ''}\n onKeyDown={onInputKeyDown}\n placeholder={placeholder}\n width=\"100%\"\n size={size}\n ref={this.refInput}\n warning={warning}\n inputMode={inputMode}\n />\n );\n }\n\n return (\n <InputLikeText\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={size}\n width=\"100%\"\n ref={refInputLikeText}\n >\n {isNonNullable(value) && renderValue ? renderValue(value) : null}\n </InputLikeText>\n );\n }\n\n private handleItemSelect = (item: T) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(item);\n }\n };\n\n private refInput = (input: Nullable<Input>) => {\n if (this.props.refInput) {\n this.props.refInput(input);\n }\n this.input = input;\n };\n\n private renderSpinner = () => (\n <span className={styles.spinnerWrapper()}>\n <Spinner type=\"mini\" caption=\"\" dimmed />\n </span>\n );\n\n private getRightIcon = () => {\n const { loading, items, drawArrow, rightIcon } = this.props;\n\n if (loading && items && !!items.length) {\n return this.renderSpinner();\n }\n\n if (rightIcon || drawArrow) {\n return <span className={styles.rightIconWrapper()}>{rightIcon ?? <ArrowChevronDownIcon />}</span>;\n }\n\n return null;\n };\n}\n"]}
|
|
@@ -12,6 +12,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
|
|
|
12
12
|
borderless?: boolean;
|
|
13
13
|
disablePortal?: boolean;
|
|
14
14
|
disabled?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Cостояние валидации при ошибке.
|
|
17
|
+
*/
|
|
15
18
|
error?: boolean;
|
|
16
19
|
maxLength?: number;
|
|
17
20
|
menuAlign?: 'left' | 'right';
|
|
@@ -32,6 +35,9 @@ export interface CustomComboBoxProps<T> extends CommonProps {
|
|
|
32
35
|
size?: 'small' | 'medium' | 'large';
|
|
33
36
|
totalCount?: number;
|
|
34
37
|
value?: Nullable<T>;
|
|
38
|
+
/**
|
|
39
|
+
* Cостояние валидации при предупреждении.
|
|
40
|
+
*/
|
|
35
41
|
warning?: boolean;
|
|
36
42
|
width?: string | number;
|
|
37
43
|
maxMenuHeight?: number | string;
|
|
@@ -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","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","reducer","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","isFirefox","isIE11","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","catch","race","code","cancelSearch","CancelationError","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","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","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\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 { isFirefox, isIE11 } from '../../lib/client';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\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 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 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 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\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\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 const expectingId = (this.requestId += 1);\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 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 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 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} />\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 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 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: true,\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 this.focused = false;\n if (isFirefox || isIE11) {\n // workaround for the Firefox focusout bug\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n } else {\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 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","CustomComboBox","state","input","menu","inputLikeText","requestId","loaderShowDelay","cancelationToken","reducer","cancelLoaderDelay","focus","props","disabled","selectInputText","selectAll","blur","handleBlur","dispatch","action","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","effect","getState","getProps","handleValueChange","value","type","keepFocus","handleFocus","handleClickOutside","e","close","isFirefox","isIE11","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","resolve","cancelLoader","catch","race","code","cancelSearch","CancelationError","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","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","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","refInputLikeText","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\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 { isFirefox, isIE11 } from '../../lib/client';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends 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 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 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 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\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\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 const expectingId = (this.requestId += 1);\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 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 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 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} />\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 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 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: true,\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 this.focused = false;\n if (isFirefox || isIE11) {\n // workaround for the Firefox focusout bug\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n } else {\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 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"]}
|
|
@@ -29,9 +29,22 @@ export interface PopupProps extends CommonProps, PopupHandlerProps {
|
|
|
29
29
|
pinSize?: number;
|
|
30
30
|
popupOffset: number;
|
|
31
31
|
positions: PopupPosition[];
|
|
32
|
+
/**
|
|
33
|
+
* Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.
|
|
34
|
+
*
|
|
35
|
+
* _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.
|
|
36
|
+
*/
|
|
32
37
|
useWrapper: boolean;
|
|
33
38
|
ignoreHover: boolean;
|
|
34
39
|
width: React.CSSProperties['width'];
|
|
40
|
+
/**
|
|
41
|
+
* При очередном рендере пытаться сохранить первоначальную позицию попапа
|
|
42
|
+
* (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).
|
|
43
|
+
*
|
|
44
|
+
* Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.
|
|
45
|
+
* @see https://github.com/skbkontur/retail-ui/pull/1195
|
|
46
|
+
*/
|
|
47
|
+
tryPreserveFirstRenderedPosition?: boolean;
|
|
35
48
|
}
|
|
36
49
|
interface PopupLocation {
|
|
37
50
|
coordinates: {
|
|
@@ -91,6 +91,19 @@ var PopupPositions = [
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
94
107
|
|
|
95
108
|
|
|
96
109
|
|
|
@@ -492,8 +505,8 @@ Popup = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(P
|
|
|
492
505
|
|
|
493
506
|
};_proto.
|
|
494
507
|
|
|
495
|
-
getLocation = function getLocation(popupElement, location) {
|
|
496
|
-
|
|
508
|
+
getLocation = function getLocation(popupElement, location) {var _this$props4 =
|
|
509
|
+
this.props,positions = _this$props4.positions,tryPreserveFirstRenderedPosition = _this$props4.tryPreserveFirstRenderedPosition;
|
|
497
510
|
var anchorElement = this.anchorElement;
|
|
498
511
|
|
|
499
512
|
(0, _warning.default)(
|
|
@@ -517,7 +530,16 @@ Popup = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(P
|
|
|
517
530
|
|
|
518
531
|
var isFullyVisible = _PopupHelper.PopupHelper.isFullyVisible(coordinates, popupRect);
|
|
519
532
|
var canBecomeVisible = !isFullyVisible && _PopupHelper.PopupHelper.canBecomeFullyVisible(position, coordinates);
|
|
520
|
-
|
|
533
|
+
|
|
534
|
+
if (
|
|
535
|
+
// если нужно сохранить первоначальную позицию и Попап целиком
|
|
536
|
+
// находится в пределах вьюпорта (или может быть проскроллен в него)
|
|
537
|
+
tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible) ||
|
|
538
|
+
// если Попап целиком во вьюпорте и в самой приоритетной позиции
|
|
539
|
+
// (иначе нужно попытаться позицию сменить)
|
|
540
|
+
isFullyVisible && position === positions[0])
|
|
541
|
+
{
|
|
542
|
+
// сохраняем текущую позицию
|
|
521
543
|
return { coordinates: coordinates, position: position };
|
|
522
544
|
}
|
|
523
545
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","DUMMY_LOCATION","position","coordinates","top","left","PopupPositions","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","anchorInstance","refAnchorElement","instance","element","extractElement","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","zIndex","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","LayoutEvents","addListener","UNSAFE_componentWillReceiveProps","nextProps","delayUpdateLocation","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","onOpen","onClose","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","child","React","isValidElement","undefined","renderContent","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","styles","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","raf","cancel","x","y","positions","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","Math","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: 'top left',\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport type PopupPosition =\n | 'top left'\n | 'top center'\n | 'top right'\n | 'right top'\n | 'right middle'\n | 'right bottom'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom';\n\nexport const PopupPositions: PopupPosition[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n];\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: PopupPosition[];\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPosition;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private anchorInstance: Nullable<React.ReactInstance>;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: Readonly<PopupProps>) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (nextProps.opened) {\n if (!this.state.location) {\n this.setState({ location: DUMMY_LOCATION });\n }\n this.delayUpdateLocation();\n }\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n if (hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (!hadNoLocation && !this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let child: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n child = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n child = <span>{anchorElement}</span>;\n }\n\n return (\n <RenderContainer anchor={child} ref={child ? this.refAnchorElement : undefined}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private refAnchorElement = (instance: React.ReactInstance | null) => {\n this.anchorInstance = instance;\n const element = this.extractElement(instance);\n this.updateAnchorElement(element);\n this.anchorElement = element;\n };\n\n private extractElement(instance: React.ReactInstance | null) {\n if (!instance) {\n return null;\n }\n const element = findDOMNode(instance);\n return isHTMLElement(element) ? element : null;\n }\n\n private updateAnchorElement(element: HTMLElement | null) {\n const anchorElement = this.anchorElement;\n\n if (element !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = element;\n this.addEventListeners(element);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n ref={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (zIndex: ZIndex | null) => {\n if (zIndex) {\n this.lastPopupElement = zIndex && (findDOMNode(zIndex) as HTMLElement);\n }\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n if (this.anchorInstance) {\n this.updateAnchorElement(this.extractElement(this.anchorInstance));\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const positions = this.props.positions;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPosition;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n if (isFullyVisible || canBecomeVisible) {\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Popup.tsx"],"names":["POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","DUMMY_LOCATION","position","coordinates","top","left","PopupPositions","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","anchorInstance","refAnchorElement","instance","element","extractElement","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","zIndex","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","LayoutEvents","addListener","UNSAFE_componentWillReceiveProps","nextProps","delayUpdateLocation","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","onOpen","onClose","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","child","React","isValidElement","undefined","renderContent","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","styles","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","raf","cancel","x","y","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","Math","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: 'top left',\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport type PopupPosition =\n | 'top left'\n | 'top center'\n | 'top right'\n | 'right top'\n | 'right middle'\n | 'right bottom'\n | 'bottom left'\n | 'bottom center'\n | 'bottom right'\n | 'left top'\n | 'left middle'\n | 'left bottom';\n\nexport const PopupPositions: PopupPosition[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n];\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: PopupPosition[];\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPosition;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private anchorInstance: Nullable<React.ReactInstance>;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public UNSAFE_componentWillReceiveProps(nextProps: Readonly<PopupProps>) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (nextProps.opened) {\n if (!this.state.location) {\n this.setState({ location: DUMMY_LOCATION });\n }\n this.delayUpdateLocation();\n }\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n if (hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (!hadNoLocation && !this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let child: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n child = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n child = <span>{anchorElement}</span>;\n }\n\n return (\n <RenderContainer anchor={child} ref={child ? this.refAnchorElement : undefined}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private refAnchorElement = (instance: React.ReactInstance | null) => {\n this.anchorInstance = instance;\n const element = this.extractElement(instance);\n this.updateAnchorElement(element);\n this.anchorElement = element;\n };\n\n private extractElement(instance: React.ReactInstance | null) {\n if (!instance) {\n return null;\n }\n const element = findDOMNode(instance);\n return isHTMLElement(element) ? element : null;\n }\n\n private updateAnchorElement(element: HTMLElement | null) {\n const anchorElement = this.anchorElement;\n\n if (element !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = element;\n this.addEventListeners(element);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n ref={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (zIndex: ZIndex | null) => {\n if (zIndex) {\n this.lastPopupElement = zIndex && (findDOMNode(zIndex) as HTMLElement);\n }\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n if (this.anchorInstance) {\n this.updateAnchorElement(this.extractElement(this.anchorInstance));\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPosition;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
@@ -44,6 +44,7 @@ function isAbsoluteRectFullyVisible(coordinates, popupRect) {
|
|
|
44
44
|
return _rectContainsRect(windowAbsoluteRect, absoluteRect);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
// Can become fully visible by scrolling into viewport
|
|
47
48
|
function canBecomeFullyVisible(positionName, coordinates) {
|
|
48
49
|
var position = getPositionObject(positionName);
|
|
49
50
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPosition } from './Popup';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: HTMLElement): Rect {\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPosition, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\nfunction _getViewProperty(getProperty: (e: HTMLElement) => number): number {\n const views = [document.documentElement, document.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n};\n"]}
|