{"version":3,"file":"js/chunk-8941.bundle.js","mappings":"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","sources":["webpack://mithra/./wwwroot/ReactComponents/Common/Form/Autocomplete.js"],"sourcesContent":["/* eslint-disable prettier/prettier */\nconst React = require('react')\nconst PropTypes = require('prop-types')\nconst { findDOMNode } = require('react-dom')\nconst scrollIntoView = require('dom-scroll-into-view')\n\nconst IMPERATIVE_API = [\n 'blur',\n 'checkValidity',\n 'click',\n 'focus',\n 'select',\n 'setCustomValidity',\n 'setSelectionRange',\n 'setRangeText',\n]\n\nfunction getScrollOffset() {\n return {\n x: (window.pageXOffset !== undefined)\n ? window.pageXOffset\n : (document.documentElement || document.body.parentNode || document.body).scrollLeft,\n y: (window.pageYOffset !== undefined)\n ? window.pageYOffset\n : (document.documentElement || document.body.parentNode || document.body).scrollTop,\n }\n}\n\nclass Autocomplete extends React.Component {\n\n static propTypes = {\n /**\n * The items to display in the dropdown menu\n */\n items: PropTypes.array.isRequired,\n /**\n * The value to display in the input field\n */\n value: PropTypes.any,\n /**\n * Arguments: `event: Event, value: String`\n *\n * Invoked every time the user changes the input's value.\n */\n onChange: PropTypes.func,\n /**\n * Arguments: `value: String, item: Any`\n *\n * Invoked when the user selects an item from the dropdown menu.\n */\n onSelect: PropTypes.func,\n /**\n * Arguments: `item: Any, value: String`\n *\n * Invoked for each entry in `items` and its return value is used to\n * determine whether or not it should be displayed in the dropdown menu.\n * By default all items are always rendered.\n */\n shouldItemRender: PropTypes.func,\n /**\n * Arguments: `item: Any`\n *\n * Invoked when attempting to select an item. The return value is used to\n * determine whether the item should be selectable or not.\n * By default all items are selectable.\n */\n isItemSelectable: PropTypes.func,\n /**\n * Arguments: `itemA: Any, itemB: Any, value: String`\n *\n * The function which is used to sort `items` before display.\n */\n sortItems: PropTypes.func,\n /**\n * Arguments: `item: Any`\n *\n * Used to read the display value from each entry in `items`.\n */\n getItemValue: PropTypes.func.isRequired,\n /**\n * Arguments: `item: Any, isHighlighted: Boolean, styles: Object`\n *\n * Invoked for each entry in `items` that also passes `shouldItemRender` to\n * generate the render tree for each item in the dropdown menu. `styles` is\n * an optional set of styles that can be applied to improve the look/feel\n * of the items in the dropdown menu.\n */\n renderItem: PropTypes.func.isRequired,\n /**\n * Arguments: `items: Array, value: String, styles: Object`\n *\n * Invoked to generate the render tree for the dropdown menu. Ensure the\n * returned tree includes every entry in `items` or else the highlight order\n * and keyboard navigation logic will break. `styles` will contain\n * { top, left, minWidth } which are the coordinates of the top-left corner\n * and the width of the dropdown menu.\n */\n renderMenu: PropTypes.func,\n /**\n * Styles that are applied to the dropdown menu in the default `renderMenu`\n * implementation. If you override `renderMenu` and you want to use\n * `menuStyle` you must manually apply them (`this.props.menuStyle`).\n */\n menuStyle: PropTypes.object,\n /**\n * Arguments: `props: Object`\n *\n * Invoked to generate the input element. The `props` argument is the result\n * of merging `props.inputProps` with a selection of props that are required\n * both for functionality and accessibility. At the very least you need to\n * apply `props.ref` and all `props.on` event handlers. Failing to do\n * this will cause `Autocomplete` to behave unexpectedly.\n */\n renderInput: PropTypes.func,\n /**\n * Props passed to `props.renderInput`. By default these props will be\n * applied to the `` element rendered by `Autocomplete`, unless you\n * have specified a custom value for `props.renderInput`. Any properties\n * supported by `HTMLInputElement` can be specified, apart from the\n * following which are set by `Autocomplete`: value, autoComplete, role,\n * aria-autocomplete. `inputProps` is commonly used for (but not limited to)\n * placeholder, event handlers (onFocus, onBlur, etc.), autoFocus, etc..\n */\n inputProps: PropTypes.object,\n /**\n * Props that are applied to the element which wraps the `` and\n * dropdown menu elements rendered by `Autocomplete`.\n */\n wrapperProps: PropTypes.object,\n /**\n * This is a shorthand for `wrapperProps={{ style: }}`.\n * Note that `wrapperStyle` is applied before `wrapperProps`, so the latter\n * will win if it contains a `style` entry.\n */\n wrapperStyle: PropTypes.object,\n /**\n * Whether or not to automatically highlight the top match in the dropdown\n * menu.\n */\n autoHighlight: PropTypes.bool,\n /**\n * Whether or not to automatically select the highlighted item when the\n * `` loses focus.\n */\n selectOnBlur: PropTypes.bool,\n /**\n * Arguments: `isOpen: Boolean`\n *\n * Invoked every time the dropdown menu's visibility changes (i.e. every\n * time it is displayed/hidden).\n */\n onMenuVisibilityChange: PropTypes.func,\n /**\n * Used to override the internal logic which displays/hides the dropdown\n * menu. This is useful if you want to force a certain state based on your\n * UX/business logic. Use it together with `onMenuVisibilityChange` for\n * fine-grained control over the dropdown menu dynamics.\n */\n open: PropTypes.bool,\n debug: PropTypes.bool,\n }\n\n static defaultProps = {\n value: '',\n wrapperProps: {},\n wrapperStyle: {\n display: 'inline-block'\n },\n inputProps: {},\n renderInput(props) {\n return \n },\n onChange() {},\n onSelect() {},\n isItemSelectable() { return true },\n renderMenu(items, value, style) {\n return
\n },\n menuStyle: {\n borderRadius: '3px',\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.1)',\n background: 'rgba(255, 255, 255, 0.9)',\n padding: '2px 0',\n fontSize: '90%',\n position: 'fixed',\n overflow: 'auto',\n maxHeight: '50%', // TODO: don't cheat, let it flow to the bottom\n },\n autoHighlight: true,\n selectOnBlur: false,\n onMenuVisibilityChange() {},\n }\n\n constructor(props) {\n super(props)\n this.state = {\n isOpen: false,\n highlightedIndex: null,\n }\n this._debugStates = []\n this.ensureHighlightedIndex = this.ensureHighlightedIndex.bind(this)\n this.exposeAPI = this.exposeAPI.bind(this)\n this.handleInputFocus = this.handleInputFocus.bind(this)\n this.handleInputBlur = this.handleInputBlur.bind(this)\n this.handleChange = this.handleChange.bind(this)\n this.handleKeyDown = this.handleKeyDown.bind(this)\n this.handleInputClick = this.handleInputClick.bind(this)\n this.maybeAutoCompleteText = this.maybeAutoCompleteText.bind(this)\n }\n\n componentWillMount() {\n // this.refs is frozen, so we need to assign a new object to it\n this.refs = {}\n this._ignoreBlur = false\n this._ignoreFocus = false\n this._scrollOffset = null\n this._scrollTimer = null\n }\n\n componentWillUnmount() {\n clearTimeout(this._scrollTimer)\n this._scrollTimer = null\n }\n\n componentWillReceiveProps(nextProps) {\n if (this.state.highlightedIndex !== null) {\n this.setState(this.ensureHighlightedIndex)\n }\n if (nextProps.autoHighlight && (this.props.value !== nextProps.value || this.state.highlightedIndex === null)) {\n this.setState(this.maybeAutoCompleteText)\n }\n }\n\n componentDidMount() {\n if (this.isOpen()) {\n this.setMenuPositions()\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if ((this.state.isOpen && !prevState.isOpen) || ('open' in this.props && this.props.open && !prevProps.open))\n this.setMenuPositions()\n\n this.maybeScrollItemIntoView()\n if (prevState.isOpen !== this.state.isOpen) {\n this.props.onMenuVisibilityChange(this.state.isOpen)\n }\n }\n\n exposeAPI(el) {\n this.refs.input = el\n IMPERATIVE_API.forEach(ev => this[ev] = (el && el[ev] && el[ev].bind(el)))\n }\n\n maybeScrollItemIntoView() {\n if (this.isOpen() && this.state.highlightedIndex !== null) {\n const itemNode = this.refs[`item-${this.state.highlightedIndex}`]\n const menuNode = this.refs.menu\n scrollIntoView(\n findDOMNode(itemNode),\n findDOMNode(menuNode),\n { onlyScrollIfNeeded: true }\n )\n }\n }\n\n handleKeyDown(event) {\n if (Autocomplete.keyDownHandlers[event.key])\n Autocomplete.keyDownHandlers[event.key].call(this, event)\n else if (!this.isOpen()) {\n this.setState({\n isOpen: true\n })\n }\n }\n\n handleChange(event) {\n this.props.onChange(event, event.target.value)\n }\n\n static keyDownHandlers = {\n ArrowDown(event) {\n event.preventDefault()\n const items = this.getFilteredItems(this.props)\n if (!items.length) return\n const { highlightedIndex } = this.state\n let index = highlightedIndex === null ? -1 : highlightedIndex\n for (let i = 0; i < items.length ; i++) {\n const p = (index + i + 1) % items.length\n if (this.props.isItemSelectable(items[p])) {\n index = p\n break\n }\n }\n if (index > -1 && index !== highlightedIndex) {\n this.setState({\n highlightedIndex: index,\n isOpen: true,\n })\n }\n },\n\n ArrowUp(event) {\n event.preventDefault()\n const items = this.getFilteredItems(this.props)\n if (!items.length) return\n const { highlightedIndex } = this.state\n let index = highlightedIndex === null ? items.length : highlightedIndex\n for (let i = 0; i < items.length ; i++) {\n const p = (index - (1 + i) + items.length) % items.length\n if (this.props.isItemSelectable(items[p])) {\n index = p\n break\n }\n }\n if (index !== items.length) {\n this.setState({\n highlightedIndex: index,\n isOpen: true,\n })\n }\n },\n\n Enter(event) {\n // Key code 229 is used for selecting items from character selectors (Pinyin, Kana, etc)\n if (event.keyCode !== 13) return\n // In case the user is currently hovering over the menu\n this.setIgnoreBlur(false)\n if (!this.isOpen()) {\n // menu is closed so there is no selection to accept -> do nothing\n return\n }\n else if (this.state.highlightedIndex == null) {\n // input has focus but no menu item is selected + enter is hit -> close the menu, highlight whatever's in input\n this.setState({\n isOpen: false\n }, () => {\n this.refs.input.select()\n })\n }\n else {\n // text entered + menu item has been highlighted + enter is hit -> update value to that of selected menu item, close the menu\n event.preventDefault()\n const item = this.getFilteredItems(this.props)[this.state.highlightedIndex]\n const value = this.props.getItemValue(item)\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, () => {\n //this.refs.input.focus() // TODO: file issue\n this.refs.input.setSelectionRange(\n value.length,\n value.length\n )\n this.props.onSelect(value, item)\n })\n }\n },\n\n Escape() {\n // In case the user is currently hovering over the menu\n this.setIgnoreBlur(false)\n this.setState({\n highlightedIndex: null,\n isOpen: false\n })\n },\n\n Tab() {\n // In case the user is currently hovering over the menu\n this.setIgnoreBlur(false)\n },\n }\n\n getFilteredItems(props) {\n let items = props.items\n\n if (props.shouldItemRender) {\n items = items.filter((item) => (\n props.shouldItemRender(item, props.value)\n ))\n }\n\n if (props.sortItems) {\n items.sort((a, b) => (\n props.sortItems(a, b, props.value)\n ))\n }\n\n return items\n }\n\n maybeAutoCompleteText(state, props) {\n const { highlightedIndex } = state\n const { value, getItemValue } = props\n let index = highlightedIndex === null ? 0 : highlightedIndex\n let items = this.getFilteredItems(props)\n for (let i = 0; i < items.length ; i++) {\n if (props.isItemSelectable(items[index]))\n break\n index = (index + 1) % items.length\n }\n const matchedItem = items[index] && props.isItemSelectable(items[index]) ? items[index] : null\n if (value !== '' && matchedItem) {\n const itemValue = getItemValue(matchedItem)\n const itemValueDoesMatch = (itemValue.toLowerCase().indexOf(\n value.toLowerCase()\n ) === 0)\n if (itemValueDoesMatch) {\n return { highlightedIndex: index }\n }\n }\n return { highlightedIndex: null }\n }\n\n ensureHighlightedIndex(state, props) {\n if (state.highlightedIndex >= this.getFilteredItems(props).length) {\n return { highlightedIndex: null }\n }\n }\n\n setMenuPositions() {\n const node = this.refs.input\n const rect = node.getBoundingClientRect()\n const computedStyle = global.window.getComputedStyle(node)\n const marginBottom = parseInt(computedStyle.marginBottom, 10) || 0\n const marginLeft = parseInt(computedStyle.marginLeft, 10) || 0\n const marginRight = parseInt(computedStyle.marginRight, 10) || 0\n this.setState({\n menuTop: rect.bottom + marginBottom,\n menuLeft: rect.left + marginLeft,\n menuWidth: rect.width + marginLeft + marginRight\n })\n }\n\n highlightItemFromMouse(index) {\n this.setState({ highlightedIndex: index })\n }\n\n selectItemFromMouse(item) {\n const value = this.props.getItemValue(item)\n // The menu will de-render before a mouseLeave event\n // happens. Clear the flag to release control over focus\n this.setIgnoreBlur(false)\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, () => {\n this.props.onSelect(value, item)\n })\n }\n\n setIgnoreBlur(ignore) {\n this._ignoreBlur = ignore\n }\n\n renderMenu() {\n const items = this.getFilteredItems(this.props).map((item, index) => {\n const element = this.props.renderItem(\n item,\n this.state.highlightedIndex === index,\n { cursor: 'default' }\n )\n return React.cloneElement(element, {\n onMouseEnter: this.props.isItemSelectable(item) ?\n () => this.highlightItemFromMouse(index) : null,\n onClick: this.props.isItemSelectable(item) ?\n () => this.selectItemFromMouse(item) : null,\n ref: e => this.refs[`item-${index}`] = e,\n })\n })\n const style = {\n left: this.state.menuLeft,\n top: this.state.menuTop,\n minWidth: this.state.menuWidth,\n }\n const menu = this.props.renderMenu(items, this.props.value, style)\n return React.cloneElement(menu, {\n ref: e => this.refs.menu = e,\n // Ignore blur to prevent menu from de-rendering before we can process click\n onTouchStart: () => this.setIgnoreBlur(true),\n onMouseEnter: () => this.setIgnoreBlur(true),\n onMouseLeave: () => this.setIgnoreBlur(false),\n })\n }\n\n handleInputBlur(event) {\n if (this._ignoreBlur) {\n this._ignoreFocus = true\n this._scrollOffset = getScrollOffset()\n this.refs.input.focus()\n return\n }\n let setStateCallback\n const { highlightedIndex } = this.state\n if (this.props.selectOnBlur && highlightedIndex !== null) {\n const items = this.getFilteredItems(this.props)\n const item = items[highlightedIndex]\n const value = this.props.getItemValue(item)\n setStateCallback = () => this.props.onSelect(value, item)\n }\n this.setState({\n isOpen: false,\n highlightedIndex: null\n }, setStateCallback)\n const { onBlur } = this.props.inputProps\n if (onBlur) {\n onBlur(event)\n }\n }\n\n handleInputFocus(event) {\n if (this._ignoreFocus) {\n this._ignoreFocus = false\n const { x, y } = this._scrollOffset\n this._scrollOffset = null\n // Focus will cause the browser to scroll the into view.\n // This can cause the mouse coords to change, which in turn\n // could cause a new highlight to happen, cancelling the click\n // event (when selecting with the mouse)\n window.scrollTo(x, y)\n // Some browsers wait until all focus event handlers have been\n // processed before scrolling the into view, so let's\n // scroll again on the next tick to ensure we're back to where\n // the user was before focus was lost. We could do the deferred\n // scroll only, but that causes a jarring split second jump in\n // some browsers that scroll before the focus event handlers\n // are triggered.\n clearTimeout(this._scrollTimer)\n this._scrollTimer = setTimeout(() => {\n this._scrollTimer = null\n window.scrollTo(x, y)\n }, 0)\n return\n }\n this.setState({ isOpen: true })\n const { onFocus } = this.props.inputProps\n if (onFocus) {\n onFocus(event)\n }\n }\n\n isInputFocused() {\n const el = this.refs.input\n return el.ownerDocument && (el === el.ownerDocument.activeElement)\n }\n\n handleInputClick() {\n // Input will not be focused if it's disabled\n if (this.isInputFocused() && !this.isOpen())\n this.setState({ isOpen: true })\n }\n\n composeEventHandlers(internal, external) {\n return external\n ? e => { internal(e); external(e) }\n : internal\n }\n\n isOpen() {\n return 'open' in this.props ? this.props.open : this.state.isOpen\n }\n\n render() {\n if (this.props.debug) { // you don't like it, you love it\n this._debugStates.push({\n id: this._debugStates.length,\n state: this.state\n })\n }\n\n const { inputProps } = this.props\n const open = this.isOpen()\n return (\n
\n {this.props.renderInput({\n ...inputProps,\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-expanded': open,\n autoComplete: 'off',\n ref: this.exposeAPI,\n onFocus: this.handleInputFocus,\n onBlur: this.handleInputBlur,\n onChange: this.handleChange,\n onKeyDown: this.composeEventHandlers(this.handleKeyDown, inputProps.onKeyDown),\n onClick: this.composeEventHandlers(this.handleInputClick, inputProps.onClick),\n value: this.props.value,\n })}\n {open && this.renderMenu()}\n {this.props.debug && (\n
\n            {JSON.stringify(this._debugStates.slice(Math.max(0, this._debugStates.length - 5), this._debugStates.length), null, 2)}\n          
\n )}\n
\n )\n }\n}\n\nmodule.exports = Autocomplete\n\n"],"names":["React","require","PropTypes","findDOMNode","scrollIntoView","IMPERATIVE_API","Autocomplete","_React$Component","props","_this","_classCallCheck2","default","state","isOpen","highlightedIndex","_debugStates","ensureHighlightedIndex","bind","exposeAPI","handleInputFocus","handleInputBlur","handleChange","handleKeyDown","handleInputClick","maybeAutoCompleteText","_inherits2","_createClass2","key","value","this","refs","_ignoreBlur","_ignoreFocus","_scrollOffset","_scrollTimer","clearTimeout","nextProps","setState","autoHighlight","setMenuPositions","prevProps","prevState","open","maybeScrollItemIntoView","onMenuVisibilityChange","el","_this2","input","forEach","ev","itemNode","concat","menuNode","menu","onlyScrollIfNeeded","event","keyDownHandlers","call","onChange","target","items","shouldItemRender","filter","item","sortItems","sort","a","b","getItemValue","index","getFilteredItems","i","length","isItemSelectable","matchedItem","toLowerCase","indexOf","node","rect","getBoundingClientRect","computedStyle","global","window","getComputedStyle","marginBottom","parseInt","marginLeft","marginRight","menuTop","bottom","menuLeft","left","menuWidth","width","_this3","setIgnoreBlur","onSelect","ignore","_this4","map","element","renderItem","cursor","cloneElement","onMouseEnter","highlightItemFromMouse","onClick","selectItemFromMouse","ref","e","style","top","minWidth","renderMenu","onTouchStart","onMouseLeave","setStateCallback","_this5","x","undefined","pageXOffset","document","documentElement","body","parentNode","scrollLeft","y","pageYOffset","scrollTop","focus","selectOnBlur","onBlur","inputProps","_this6","_this$_scrollOffset","scrollTo","setTimeout","onFocus","ownerDocument","activeElement","isInputFocused","internal","external","debug","push","id","createElement","_extends2","_objectSpread","wrapperStyle","wrapperProps","renderInput","role","autoComplete","onKeyDown","composeEventHandlers","JSON","stringify","slice","Math","max","Component","_defineProperty2","array","isRequired","any","func","menuStyle","object","bool","display","children","borderRadius","boxShadow","background","padding","fontSize","position","overflow","maxHeight","ArrowDown","preventDefault","p","ArrowUp","Enter","_this7","keyCode","select","setSelectionRange","Escape","Tab","module","exports"],"sourceRoot":""}