@skbkontur/react-ui 4.22.4 → 4.22.6-next.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 +11 -0
- package/cjs/components/Autocomplete/Autocomplete.js +2 -0
- package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
- package/cjs/components/Hint/Hint.d.ts +4 -3
- package/cjs/components/Hint/Hint.js +9 -8
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +10 -5
- package/cjs/components/Tooltip/Tooltip.js +59 -20
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +3 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +15 -4
- package/cjs/internal/Popup/Popup.js +67 -4
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/components/Autocomplete/Autocomplete/Autocomplete.js +2 -0
- package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Hint/Hint/Hint.js +50 -45
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +4 -3
- package/components/Tooltip/Tooltip/Tooltip.js +64 -43
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +10 -5
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +2 -0
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +50 -7
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +15 -4
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","root","content","contentInner","popupPin","PopupIds","Popup","responsiveLayout","rootNode","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","React","createRef","hasAnchorElementListeners","rootId","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","styles","theme","refPopupContentElement","resetLocation","cancelDelayedUpdateLocation","setState","element","lastPopupContentElement","handleLayoutEvent","updateLocation","popupContentElement","getLocation","onPositionChange","locationEquals","componentDidMount","layoutEventsToken","LayoutEvents","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","setRootNode","mobileOnCloseRequest","useWrapper","anchor","globalObject","Element","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","id","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","requestAnimationFrame","cancelAnimationFrame","x","y","abs","popupElement","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","isTestEnv","defaultRootNode"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\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 { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement, mergeRefs } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\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\nexport const PopupPositions = [\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] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\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\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\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: Readonly<PopupPositionsType[]>;\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 withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n public static displayName = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(globalObject.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: 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 private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\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 lastPopupContentElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\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 const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\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 renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <CommonWrapper rootNodeRef={this.setRootNode}>\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n </CommonWrapper>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, globalObject.Element);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\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 const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div\n className={styles.content(this.theme)}\n data-tid={PopupDataTids.content}\n ref={mergeRefs([this.refForTransition, this.refPopupContentElement])}\n >\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\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 nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\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 {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && 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 refPopupContentElement = (element: Nullable<Element>) => {\n this.lastPopupContentElement = element;\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, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupContentElement}\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 this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupContentElement = this.lastPopupContentElement;\n\n if (!popupContentElement) {\n return;\n }\n\n const location = this.getLocation(popupContentElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location?.position);\n }\n\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 (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, globalObject.Element))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\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.getProps().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.getProps().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","PopupPositions","OldPopupPositions","DefaultPosition","OldDefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","root","content","contentInner","popupPin","PopupIds","Popup","responsiveLayout","rootNode","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","React","createRef","hasAnchorElementListeners","rootId","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","styles","theme","refPopupContentElement","resetLocation","cancelDelayedUpdateLocation","setState","element","lastPopupContentElement","handleLayoutEvent","updateLocation","popupContentElement","getLocation","onPositionChange","locationEquals","componentDidMount","layoutEventsToken","LayoutEvents","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","flags","featureFlags","renderMain","renderMobile","renderChildren","setRootNode","mobileOnCloseRequest","useWrapper","anchor","globalObject","Element","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","id","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","requestAnimationFrame","cancelAnimationFrame","x","y","abs","reorderPropsPositionsWithPriorityPos","positions","pos_","pos","index","findIndex","startsWith","join","slice","popupElement","tryPreserveFirstRenderedPosition","popupUnifyPositioning","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","isTestEnv","defaultRootNode"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\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 { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement, mergeRefs } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport {\n getFullReactUIFlagsContext,\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n} from '../../lib/featureFlagsContext';\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\nexport const PopupPositions = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n] as const;\n\nexport const OldPopupPositions = [\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] as const;\n\nexport const DefaultPosition = PopupPositions[0];\nexport const OldDefaultPosition = OldPopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\nexport type ShortPopupPositionsType = 'top' | 'bottom' | 'left' | 'right';\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\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\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\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?: Readonly<PopupPositionsType[]>;\n pos?: PopupPositionsType | ShortPopupPositionsType;\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 withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n public static displayName = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(globalObject.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 * Приоритетная позиция попапа\n */\n pos: PropTypes.string,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: 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 private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n public featureFlags!: ReactUIFeatureFlags;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupContentElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\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 const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\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 <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <CommonWrapper rootNodeRef={this.setRootNode}>\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n </CommonWrapper>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, globalObject.Element);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\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 const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div\n className={styles.content(this.theme)}\n data-tid={PopupDataTids.content}\n ref={mergeRefs([this.refForTransition, this.refPopupContentElement])}\n >\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\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 nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\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 {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && 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 refPopupContentElement = (element: Nullable<Element>) => {\n this.lastPopupContentElement = element;\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, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupContentElement}\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 this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupContentElement = this.lastPopupContentElement;\n\n if (!popupContentElement) {\n return;\n }\n\n const location = this.getLocation(popupContentElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location?.position);\n }\n\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 (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private reorderPropsPositionsWithPriorityPos() {\n const positions = this.props.positions ? this.props.positions : PopupPositions;\n let pos_ = '';\n if (this.props.pos) {\n pos_ = this.props.pos;\n } else {\n pos_ = positions[0];\n }\n const index = positions.findIndex((position) => position.startsWith(pos_));\n if (index === -1) {\n warning(false, 'Unexpected position ' + pos_ + ' passed to Popup. Expected one of: ' + positions.join(', '));\n return positions;\n }\n return [...positions.slice(index), ...positions.slice(0, index)];\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { tryPreserveFirstRenderedPosition } = this.getProps();\n let positions;\n if (this.featureFlags.popupUnifyPositioning) {\n positions = this.reorderPropsPositionsWithPriorityPos();\n } else if (this.props.positions) {\n positions = this.props.positions;\n } else {\n positions = OldPopupPositions;\n }\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, globalObject.Element))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\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.getProps().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.getProps().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"]}
|
|
@@ -276,6 +276,30 @@ import { Hint, Button, ReactUIFeatureFlagsContext } from '@skbkontur/react-ui';
|
|
|
276
276
|
</ReactUIFeatureFlagsContext.Provider>
|
|
277
277
|
```
|
|
278
278
|
|
|
279
|
+
|
|
280
|
+
### popupUnifyPositioning
|
|
281
|
+
|
|
282
|
+
Этот флаг делает одинаковым порядок выбора позиции Hint'ом и Tooltip'ом. Таким образом при одинаковых условиях Hint и Tooltip будут отрисовываться с одинаковой стороны с одинаковым выравниванием.
|
|
283
|
+
Отличие Hint и Tooltip остается в том, что при изменении viewport открытый Tooltip остается на том месте, на котором он был отрисован, а Hint -- ищет более "выгодное" положение.
|
|
284
|
+
|
|
285
|
+
```jsx harmony
|
|
286
|
+
import { Hint, Button, Tooltip, ReactUIFeatureFlagsContext } from '@skbkontur/react-ui';
|
|
287
|
+
|
|
288
|
+
<ReactUIFeatureFlagsContext.Provider value={{ popupUnifyPositioning: true }}>
|
|
289
|
+
<Hint text={'Example!'} manual opened>
|
|
290
|
+
<Button use="success" size="medium" disabled>
|
|
291
|
+
Пригласить
|
|
292
|
+
</Button>
|
|
293
|
+
</Hint>
|
|
294
|
+
|
|
295
|
+
<Tooltip render={() => 'Example!'} trigger="opened">
|
|
296
|
+
<Button use="success" size="medium" disabled>
|
|
297
|
+
Пригласить
|
|
298
|
+
</Button>
|
|
299
|
+
</Tooltip>
|
|
300
|
+
</ReactUIFeatureFlagsContext.Provider>
|
|
301
|
+
```
|
|
302
|
+
|
|
279
303
|
## Объект со всеми флагами
|
|
280
304
|
|
|
281
305
|
Чтобы получить объект со всеми флагами, необходимо применить вспомогательную функцию getFullValidationsFlagsContext к объекту заданных флагов:
|
|
@@ -9,4 +9,5 @@ export declare const getFullReactUIFlagsContext: (flags: ReactUIFeatureFlags) =>
|
|
|
9
9
|
linkFocusOutline?: boolean | undefined;
|
|
10
10
|
comboBoxAllowValueChangeInEditingState?: boolean | undefined;
|
|
11
11
|
hintAddDynamicPositioning?: boolean | undefined;
|
|
12
|
+
popupUnifyPositioning?: boolean | undefined;
|
|
12
13
|
};
|
|
@@ -9,6 +9,7 @@ export interface ReactUIFeatureFlags {
|
|
|
9
9
|
linkFocusOutline?: boolean;
|
|
10
10
|
comboBoxAllowValueChangeInEditingState?: boolean;
|
|
11
11
|
hintAddDynamicPositioning?: boolean;
|
|
12
|
+
popupUnifyPositioning?: boolean;
|
|
12
13
|
}
|
|
13
14
|
export declare const reactUIFeatureFlagsDefault: ReactUIFeatureFlags;
|
|
14
15
|
export declare const ReactUIFeatureFlagsContext: React.Context<ReactUIFeatureFlags>;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
|
|
15
16
|
var reactUIFeatureFlagsDefault = {
|
|
16
17
|
tokenInputRemoveWhitespaceFromDefaultDelimiters: false,
|
|
17
18
|
kebabHintRemovePin: false,
|
|
@@ -21,7 +22,8 @@ var reactUIFeatureFlagsDefault = {
|
|
|
21
22
|
textareaUseSafari17Workaround: false,
|
|
22
23
|
linkFocusOutline: false,
|
|
23
24
|
comboBoxAllowValueChangeInEditingState: false,
|
|
24
|
-
hintAddDynamicPositioning: false
|
|
25
|
+
hintAddDynamicPositioning: false,
|
|
26
|
+
popupUnifyPositioning: false };exports.reactUIFeatureFlagsDefault = reactUIFeatureFlagsDefault;
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
var ReactUIFeatureFlagsContext = /*#__PURE__*/_react.default.createContext(reactUIFeatureFlagsDefault);exports.ReactUIFeatureFlagsContext = ReactUIFeatureFlagsContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ReactUIFeatureFlagsContext.tsx"],"names":["reactUIFeatureFlagsDefault","tokenInputRemoveWhitespaceFromDefaultDelimiters","kebabHintRemovePin","sidePageEnableFocusLockWhenBackgroundBlocked","spinnerLoaderRemoveDefaultCaption","menuItemsAtAnyLevel","textareaUseSafari17Workaround","linkFocusOutline","comboBoxAllowValueChangeInEditingState","hintAddDynamicPositioning","ReactUIFeatureFlagsContext","React","createContext","displayName","__KONTUR_REACT_UI__"],"mappings":"qNAAA
|
|
1
|
+
{"version":3,"sources":["ReactUIFeatureFlagsContext.tsx"],"names":["reactUIFeatureFlagsDefault","tokenInputRemoveWhitespaceFromDefaultDelimiters","kebabHintRemovePin","sidePageEnableFocusLockWhenBackgroundBlocked","spinnerLoaderRemoveDefaultCaption","menuItemsAtAnyLevel","textareaUseSafari17Workaround","linkFocusOutline","comboBoxAllowValueChangeInEditingState","hintAddDynamicPositioning","popupUnifyPositioning","ReactUIFeatureFlagsContext","React","createContext","displayName","__KONTUR_REACT_UI__"],"mappings":"qNAAA;;;;;;;;;;;;;;;AAeO,IAAMA,0BAA+C,GAAG;AAC7DC,EAAAA,+CAA+C,EAAE,KADY;AAE7DC,EAAAA,kBAAkB,EAAE,KAFyC;AAG7DC,EAAAA,4CAA4C,EAAE,KAHe;AAI7DC,EAAAA,iCAAiC,EAAE,KAJ0B;AAK7DC,EAAAA,mBAAmB,EAAE,KALwC;AAM7DC,EAAAA,6BAA6B,EAAE,KAN8B;AAO7DC,EAAAA,gBAAgB,EAAE,KAP2C;AAQ7DC,EAAAA,sCAAsC,EAAE,KARqB;AAS7DC,EAAAA,yBAAyB,EAAE,KATkC;AAU7DC,EAAAA,qBAAqB,EAAE,KAVsC,EAAxD,C;;;AAaA,IAAMC,0BAA0B,gBAAGC,eAAMC,aAAN,CAAyCb,0BAAzC,CAAnC,C;;AAEPW,0BAA0B,CAACG,WAA3B,GAAyC,4BAAzC;AACAH,0BAA0B,CAACI,mBAA3B,GAAiD,4BAAjD","sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n tokenInputRemoveWhitespaceFromDefaultDelimiters?: boolean;\n kebabHintRemovePin?: boolean;\n sidePageEnableFocusLockWhenBackgroundBlocked?: boolean;\n spinnerLoaderRemoveDefaultCaption?: boolean;\n menuItemsAtAnyLevel?: boolean;\n textareaUseSafari17Workaround?: boolean;\n linkFocusOutline?: boolean;\n comboBoxAllowValueChangeInEditingState?: boolean;\n hintAddDynamicPositioning?: boolean;\n popupUnifyPositioning?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n tokenInputRemoveWhitespaceFromDefaultDelimiters: false,\n kebabHintRemovePin: false,\n sidePageEnableFocusLockWhenBackgroundBlocked: false,\n spinnerLoaderRemoveDefaultCaption: false,\n menuItemsAtAnyLevel: false,\n textareaUseSafari17Workaround: false,\n linkFocusOutline: false,\n comboBoxAllowValueChangeInEditingState: false,\n hintAddDynamicPositioning: false,\n popupUnifyPositioning: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\n\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\nReactUIFeatureFlagsContext.__KONTUR_REACT_UI__ = 'ReactUIFeatureFlagsContext';\n"]}
|
|
@@ -107,6 +107,7 @@ var Autocomplete = (_dec = locale('Autocomplete', AutocompleteLocaleHelper), res
|
|
|
107
107
|
|
|
108
108
|
var inputProps = _extends({}, rest, {
|
|
109
109
|
width: '100%',
|
|
110
|
+
autoComplete: 'off',
|
|
110
111
|
onValueChange: _this.handleValueChange,
|
|
111
112
|
onKeyDown: _this.handleKeyDown,
|
|
112
113
|
onFocus: _this.handleFocus,
|
|
@@ -134,6 +135,7 @@ var Autocomplete = (_dec = locale('Autocomplete', AutocompleteLocaleHelper), res
|
|
|
134
135
|
var _this$mobilePopup;
|
|
135
136
|
|
|
136
137
|
var inputProps = {
|
|
138
|
+
autoComplete: 'off',
|
|
137
139
|
autoFocus: true,
|
|
138
140
|
width: '100%',
|
|
139
141
|
onValueChange: _this.handleValueChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Autocomplete.tsx"],"names":["React","PropTypes","MenuMessage","locale","getRandomID","isNullable","ThemeContext","isKeyArrowDown","isKeyArrowUp","isKeyEnter","isKeyEscape","Input","DropdownContainer","Menu","MenuItem","RenderLayer","createPropsGetter","fixClickFocusIE","CommonWrapper","MobilePopup","responsiveLayout","getRootNode","rootNode","getDOMRect","styles","AutocompleteLocaleHelper","getAutocompleteTheme","match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","menu","AutocompleteIds","Autocomplete","state","selected","focused","isMobileOpened","opened","input","menuId","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","width","theme","inputWidth","mobileMenuHeaderText","ariaLabel","rest","inputProps","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","enterValue","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","renderHints","map","i","handleMenuItemClick","size","fireChange","setState","e","key","event","blur","preventDefault","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","notFound","updateValue","menuWidth","menuPos","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","Component","__KONTUR_REACT_UI__","displayName","propTypes","func","oneOfType","array"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MenuMessage } from '../../internal/MenuMessage';\nimport { locale } from '../../lib/locale/decorators';\nimport { getRandomID, isNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Autocomplete.styles';\nimport { AutocompleteLocale, AutocompleteLocaleHelper } from './locale';\nimport { getAutocompleteTheme } from './getAutocompleteTheme';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<AriaAttributes, 'aria-label'>,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: SizeProp;\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n menu: 'Autocomplete__menu',\n} as const;\n\nexport const AutocompleteIds = {\n menu: AutocompleteDataTids.menu,\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\n@locale('Autocomplete', AutocompleteLocaleHelper)\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n public static displayName = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private readonly locale!: AutocompleteLocale;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private menuId = AutocompleteIds.menu + getRandomID();\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getAutocompleteTheme(theme);\n return (\n <ThemeContext.Provider value={this.theme}>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={styles.root(this.theme)}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input aria-label={ariaLabel} aria-controls={this.menuId} {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderHints(): React.ReactNode {\n const items = this.state.items;\n\n if (!this.props.value) {\n return <MenuMessage>{this.locale.enterValue}</MenuMessage>;\n }\n\n if (items?.length === 0 && this.props.value) {\n return <MenuMessage>{this.locale.notFound}</MenuMessage>;\n }\n\n if (isNullable(items) && this.props.value) {\n return <MenuMessage>{this.locale.updateValue}</MenuMessage>;\n }\n\n return null;\n }\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal, menuPos } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={AutocompleteDataTids.menu}\n getParent={this.getAnchor}\n align={menuAlign}\n disablePortal={disablePortal}\n menuPos={menuPos}\n >\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: this.locale.enterValue,\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n id={this.menuId}\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n {this.renderHints()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile} size={this.props.size}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Autocomplete.tsx"],"names":["React","PropTypes","MenuMessage","locale","getRandomID","isNullable","ThemeContext","isKeyArrowDown","isKeyArrowUp","isKeyEnter","isKeyEscape","Input","DropdownContainer","Menu","MenuItem","RenderLayer","createPropsGetter","fixClickFocusIE","CommonWrapper","MobilePopup","responsiveLayout","getRootNode","rootNode","getDOMRect","styles","AutocompleteLocaleHelper","getAutocompleteTheme","match","pattern","items","Promise","resolve","lowerCasedPattern","toLowerCase","itemsMatchingPattern","filter","item","includes","renderItem","AutocompleteDataTids","root","menu","AutocompleteIds","Autocomplete","state","selected","focused","isMobileOpened","opened","input","menuId","requestId","getProps","defaultProps","renderMain","props","isMobile","isMobileLayout","onValueChange","onKeyDown","onFocus","onBlur","_renderItem","disablePortal","hasShadow","menuAlign","menuMaxHeight","preventWindowScroll","source","width","theme","inputWidth","mobileMenuHeaderText","ariaLabel","rest","inputProps","autoComplete","handleValueChange","handleKeyDown","handleFocus","ref","refInput","handleBlur","handleClickOutside","refRootSpan","renderMobileMenu","renderMenu","autoFocus","onKeyPress","handleKeyPressMobile","value","placeholder","enterValue","handleCloseMobile","refMobilePopup","refMenu","mobilePopup","close","length","getItems","renderHints","map","i","handleMenuItemClick","size","fireChange","setState","e","key","event","blur","preventDefault","up","down","enter","getAnchor","el","span","rootSpan","focus","componentDidUpdate","prevProps","updateItems","render","setRootNode","notFound","updateValue","menuWidth","menuPos","menuProps","maxHeight","handleItemClick","index","button","choose","trim","promise","expectingId","then","Component","__KONTUR_REACT_UI__","displayName","propTypes","func","oneOfType","array"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, KeyboardEvent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MenuMessage } from '../../internal/MenuMessage';\nimport { locale } from '../../lib/locale/decorators';\nimport { getRandomID, isNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter, isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport { Input, InputProps } from '../Input';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem } from '../MenuItem';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Autocomplete.styles';\nimport { AutocompleteLocale, AutocompleteLocaleHelper } from './locale';\nimport { getAutocompleteTheme } from './getAutocompleteTheme';\n\nfunction match(pattern: string, items: string[]) {\n if (!pattern || !items) {\n return Promise.resolve([]);\n }\n\n const lowerCasedPattern = pattern.toLowerCase();\n const itemsMatchingPattern = items.filter((item) => {\n return item.toLowerCase().includes(lowerCasedPattern);\n });\n\n return Promise.resolve(itemsMatchingPattern);\n}\n\nfunction renderItem(item: any) {\n return item;\n}\n\nexport interface AutocompleteProps\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<AriaAttributes, 'aria-label'>,\n Override<\n InputProps,\n {\n /** Функция отрисовки элемента меню */\n renderItem?: (item: string) => React.ReactNode;\n /** Промис, резолвящий элементы меню */\n source?: string[] | ((patter: string) => Promise<string[]>);\n /** Отключает использование портала */\n disablePortal?: boolean;\n /** Отрисовка тени у выпадающего меню */\n hasShadow?: boolean;\n /** Выравнивание выпадающего меню */\n menuAlign?: 'left' | 'right';\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Отключить скролл окна, когда меню открыто */\n preventWindowScroll?: boolean;\n /** Вызывается при изменении `value` */\n onValueChange: (value: string) => void;\n /** onBlur */\n onBlur?: () => void;\n /** Размер инпута */\n size?: SizeProp;\n /** value */\n value: string;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n }\n > {}\n\nexport interface AutocompleteState {\n items: Nullable<string[]>;\n selected: number;\n focused: boolean;\n isMobileOpened: boolean;\n}\n\nexport const AutocompleteDataTids = {\n root: 'Autocomplete__root',\n menu: 'Autocomplete__menu',\n} as const;\n\nexport const AutocompleteIds = {\n menu: AutocompleteDataTids.menu,\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n AutocompleteProps,\n 'renderItem' | 'size' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'menuAlign' | 'preventWindowScroll'\n >\n>;\n\n/**\n * Стандартный инпут с подсказками.\n *\n * Все свойства передаются во внутренний *Input*.\n */\n@responsiveLayout\n@rootNode\n@locale('Autocomplete', AutocompleteLocaleHelper)\nexport class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {\n public static __KONTUR_REACT_UI__ = 'Autocomplete';\n public static displayName = 'Autocomplete';\n\n public static propTypes = {\n /**\n * Функция для отрисовки элемента в выпадающем списке. Единственный аргумент\n * — *item*.\n */\n renderItem: PropTypes.func,\n\n /**\n * Если передан массив, то совпадения ищутся по этому массиву.\n *\n * Если передается функция, то она должна возвращать thenable, который\n * резолвится уже отфильтрованным массивом. Возвращенный thenable может\n * иметь метод cancel, который будет вызван при отмене поиска (пользователь\n * изменил строку поиска, автокомплит потерял фокус).\n * ```\n * function(pattern) {\n * return service.findAll(pattern);\n * }\n * ```\n */\n source: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),\n };\n\n public static defaultProps: DefaultProps = {\n renderItem,\n size: 'small',\n disablePortal: false,\n hasShadow: true,\n menuMaxHeight: 300,\n menuAlign: 'left',\n preventWindowScroll: true,\n };\n\n public state: AutocompleteState = {\n items: null,\n selected: -1,\n focused: false,\n isMobileOpened: false,\n };\n\n private theme!: Theme;\n private readonly locale!: AutocompleteLocale;\n private isMobileLayout!: boolean;\n private opened = false;\n private input: Nullable<Input> = null;\n private menu: Nullable<Menu>;\n private menuId = AutocompleteIds.menu + getRandomID();\n private rootSpan: Nullable<HTMLSpanElement>;\n private mobilePopup: Nullable<MobilePopup>;\n\n private requestId = 0;\n\n private getProps = createPropsGetter(Autocomplete.defaultProps);\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus() {\n if (this.input) {\n this.input.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n this.handleBlur();\n }\n\n public componentDidUpdate(prevProps: AutocompleteProps) {\n if (prevProps.value !== this.props.value) {\n this.updateItems(this.props.value || '');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getAutocompleteTheme(theme);\n return (\n <ThemeContext.Provider value={this.theme}>\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n public renderMain = (props: CommonWrapperRestProps<AutocompleteProps>) => {\n const { focused } = this.state;\n\n const isMobile = this.isMobileLayout;\n\n const {\n onValueChange,\n onKeyDown,\n onFocus,\n onBlur,\n renderItem: _renderItem,\n disablePortal,\n hasShadow,\n menuAlign,\n menuMaxHeight,\n preventWindowScroll,\n source,\n width = this.theme.inputWidth,\n mobileMenuHeaderText,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const inputProps = {\n ...rest,\n width: '100%',\n autoComplete: 'off',\n onValueChange: this.handleValueChange,\n onKeyDown: this.handleKeyDown,\n onFocus: this.handleFocus,\n ref: this.refInput,\n };\n\n return (\n <RenderLayer onFocusOutside={this.handleBlur} onClickOutside={this.handleClickOutside} active={focused}>\n <span\n data-tid={AutocompleteDataTids.root}\n className={styles.root(this.theme)}\n style={{ width }}\n ref={this.refRootSpan}\n >\n <Input aria-label={ariaLabel} aria-controls={this.menuId} {...inputProps} />\n {isMobile ? this.renderMobileMenu() : this.renderMenu()}\n </span>\n </RenderLayer>\n );\n };\n\n private renderHints(): React.ReactNode {\n const items = this.state.items;\n\n if (!this.props.value) {\n return <MenuMessage>{this.locale.enterValue}</MenuMessage>;\n }\n\n if (items?.length === 0 && this.props.value) {\n return <MenuMessage>{this.locale.notFound}</MenuMessage>;\n }\n\n if (isNullable(items) && this.props.value) {\n return <MenuMessage>{this.locale.updateValue}</MenuMessage>;\n }\n\n return null;\n }\n\n private renderMenu(): React.ReactNode {\n const items = this.state.items;\n const { menuMaxHeight, hasShadow, menuWidth, width, preventWindowScroll, menuAlign, disablePortal, menuPos } =\n this.getProps();\n const menuProps = {\n ref: this.refMenu,\n maxHeight: menuMaxHeight,\n hasShadow,\n width: menuWidth || (width && getDOMRect(this.rootSpan).width),\n preventWindowScroll,\n };\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={AutocompleteDataTids.menu}\n getParent={this.getAnchor}\n align={menuAlign}\n disablePortal={disablePortal}\n menuPos={menuPos}\n >\n <Menu {...menuProps}>{this.getItems()}</Menu>\n </DropdownContainer>\n );\n }\n\n private renderMobileMenu = () => {\n const inputProps: InputProps = {\n autoComplete: 'off',\n autoFocus: true,\n width: '100%',\n onValueChange: this.handleValueChange,\n onKeyPress: this.handleKeyPressMobile,\n value: this.props.value,\n placeholder: this.locale.enterValue,\n };\n\n const items = this.state.items;\n\n return (\n <MobilePopup\n id={this.menuId}\n headerChildComponent={<Input {...inputProps} />}\n caption={this.props.mobileMenuHeaderText}\n opened={this.state.isMobileOpened}\n onCloseRequest={this.handleCloseMobile}\n ref={this.refMobilePopup}\n >\n <Menu ref={this.refMenu} onItemClick={this.mobilePopup?.close} disableScrollContainer maxHeight={'auto'}>\n {items && items.length > 0 && this.getItems()}\n {this.renderHints()}\n </Menu>\n </MobilePopup>\n );\n };\n\n private getItems = () => {\n const items = this.state.items;\n const isMobile = this.isMobileLayout;\n\n return items\n ? items.map((item, i) => {\n return (\n <MenuItem onClick={this.handleMenuItemClick(i)} key={i} isMobile={isMobile} size={this.props.size}>\n {this.getProps().renderItem(item)}\n </MenuItem>\n );\n })\n : null;\n };\n\n private handleValueChange = (value: string) => {\n this.opened = true;\n\n this.fireChange(value);\n };\n\n private handleCloseMobile = () => {\n this.setState({\n isMobileOpened: false,\n });\n\n this.handleBlur();\n };\n\n private handleKeyPressMobile = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.mobilePopup?.close();\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (this.isMobileLayout) {\n this.setState({ isMobileOpened: true });\n }\n\n if (this.state.focused) {\n return;\n }\n\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = () => {\n if (!this.state.focused) {\n return;\n }\n\n this.opened = false;\n this.setState({ items: null, focused: false });\n\n if (this.input) {\n this.input.blur();\n }\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n switch (true) {\n case isKeyEscape(e):\n e.preventDefault();\n this.setState({ items: null });\n return;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n return;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n return;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n return;\n }\n };\n\n private handleMenuItemClick(i: number) {\n return (event: React.SyntheticEvent<HTMLElement>) => this.handleItemClick(event, i);\n }\n\n private getAnchor = () => {\n return getRootNode(this);\n };\n\n private handleItemClick(event: React.SyntheticEvent<HTMLElement> | React.MouseEvent<HTMLElement>, index: number) {\n if ((event as React.MouseEvent<HTMLElement>).button) {\n return;\n }\n\n event.preventDefault();\n this.choose(index);\n }\n\n private choose(index: number) {\n if (!this.state.items) {\n return;\n }\n\n const value = this.state.items[index];\n this.opened = false;\n this.setState({\n selected: -1,\n items: null,\n });\n\n this.fireChange(value);\n this.blur();\n }\n\n private updateItems(value: string) {\n if (!this.opened) {\n return;\n }\n const pattern = value.trim();\n const source = this.props.source;\n\n if (!source) {\n return;\n }\n\n let promise;\n this.requestId += 1;\n const expectingId = this.requestId;\n if (typeof source === 'function') {\n promise = source(pattern);\n } else {\n promise = match(pattern, source);\n }\n promise.then((items) => {\n if (this.opened && expectingId === this.requestId) {\n this.setState({\n items,\n selected: -1,\n });\n }\n });\n }\n\n private fireChange(value: string) {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n }\n\n private refInput = (el: Input | null) => {\n this.input = el;\n };\n\n private refMenu = (menu: Menu | null) => {\n this.menu = menu;\n };\n\n private refRootSpan = (span: HTMLSpanElement) => {\n this.rootSpan = span;\n };\n\n private refMobilePopup = (mobilePopup: MobilePopup | null) => {\n this.mobilePopup = mobilePopup;\n };\n}\n"]}
|