primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
964 lines (932 loc) • 36.8 kB
JavaScript
this.primereact = this.primereact || {};
this.primereact.autocomplete = (function (exports, React, PrimeReact, button, hooks, inputtext, overlayservice, tooltip, utils, csstransition, portal, ripple, virtualscroller) {
'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespace(React);
var PrimeReact__default = /*#__PURE__*/_interopDefaultLegacy(PrimeReact);
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArrayLimit(arr, i) {
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
if (null != _i) {
var _s,
_e,
_x,
_r,
_arr = [],
_n = !0,
_d = !1;
try {
if (_x = (_i = _i.call(arr)).next, 0 === i) {
if (Object(_i) !== _i) return;
_n = !1;
} else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
} catch (err) {
_d = !0, _e = err;
} finally {
try {
if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return;
} finally {
if (_d) throw _e;
}
}
return _arr;
}
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
var AutoCompleteBase = {
defaultProps: {
__TYPE: 'AutoComplete',
id: null,
appendTo: null,
autoFocus: false,
autoHighlight: false,
className: null,
completeMethod: null,
delay: 300,
disabled: false,
dropdown: false,
dropdownAriaLabel: null,
dropdownAutoFocus: true,
dropdownIcon: 'pi pi-chevron-down',
dropdownMode: 'blank',
emptyMessage: null,
field: null,
forceSelection: false,
inputClassName: null,
inputId: null,
inputRef: null,
inputStyle: null,
itemTemplate: null,
maxLength: null,
minLength: 1,
multiple: false,
name: null,
onBlur: null,
onChange: null,
onClear: null,
onClick: null,
onContextMenu: null,
onDblClick: null,
onDropdownClick: null,
onFocus: null,
onHide: null,
onKeyPress: null,
onKeyUp: null,
onMouseDown: null,
onSelect: null,
onShow: null,
onUnselect: null,
optionGroupChildren: null,
optionGroupLabel: null,
optionGroupTemplate: null,
panelClassName: null,
panelStyle: null,
placeholder: null,
readOnly: false,
removeIcon: 'pi pi-times-circle',
scrollHeight: '200px',
selectedItemTemplate: null,
selectionLimit: null,
showEmptyMessage: false,
size: null,
style: null,
suggestions: null,
tabIndex: null,
tooltip: null,
tooltipOptions: null,
transitionOptions: null,
type: 'text',
value: null,
virtualScrollerOptions: null,
children: undefined
},
getProps: function getProps(props) {
return utils.ObjectUtils.getMergedProps(props, AutoCompleteBase.defaultProps);
},
getOtherProps: function getOtherProps(props) {
return utils.ObjectUtils.getDiffProps(props, AutoCompleteBase.defaultProps);
}
};
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
function _toPrimitive(input, hint) {
if (_typeof(input) !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (_typeof(res) !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return _typeof(key) === "symbol" ? key : String(key);
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var AutoCompletePanel = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.forwardRef(function (props, ref) {
var getOptionGroupRenderKey = function getOptionGroupRenderKey(optionGroup) {
return utils.ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel);
};
var createGroupChildren = function createGroupChildren(optionGroup, i, style) {
var groupChildren = props.getOptionGroupChildren(optionGroup);
return groupChildren.map(function (item, j) {
var key = i + '_' + j;
var selected = props.selectedItem === item;
var content = props.itemTemplate ? utils.ObjectUtils.getJSXElement(props.itemTemplate, item, j) : props.field ? utils.ObjectUtils.resolveFieldData(item, props.field) : item;
var className = utils.classNames('p-autocomplete-item', {
'p-disabled': item.disabled
});
return /*#__PURE__*/React__namespace.createElement("li", {
key: key,
role: "option",
"aria-selected": selected,
className: className,
style: style,
onClick: function onClick(e) {
return props.onItemClick(e, item);
},
"data-group": i,
"data-index": j
}, content, /*#__PURE__*/React__namespace.createElement(ripple.Ripple, null));
});
};
var createItem = function createItem(suggestion, index) {
var scrollerOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var style = {
height: scrollerOptions.props ? scrollerOptions.props.itemSize : undefined
};
if (props.optionGroupLabel) {
var content = props.optionGroupTemplate ? utils.ObjectUtils.getJSXElement(props.optionGroupTemplate, suggestion, index) : props.getOptionGroupLabel(suggestion);
var childrenContent = createGroupChildren(suggestion, index, style);
var key = index + '_' + getOptionGroupRenderKey(suggestion);
return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, {
key: key
}, /*#__PURE__*/React__namespace.createElement("li", {
className: "p-autocomplete-item-group",
style: style
}, content), childrenContent);
} else {
var _content = props.itemTemplate ? utils.ObjectUtils.getJSXElement(props.itemTemplate, suggestion, index) : props.field ? utils.ObjectUtils.resolveFieldData(suggestion, props.field) : suggestion;
var className = utils.classNames('p-autocomplete-item', {
'p-disabled': suggestion.disabled
});
return /*#__PURE__*/React__namespace.createElement("li", {
key: index,
role: "option",
"aria-selected": props.selectedItem === suggestion,
className: className,
style: style,
onClick: function onClick(e) {
return props.onItemClick(e, suggestion);
}
}, _content, /*#__PURE__*/React__namespace.createElement(ripple.Ripple, null));
}
};
var createItems = function createItems() {
return props.suggestions ? props.suggestions.map(createItem) : null;
};
var createContent = function createContent() {
if (props.showEmptyMessage && utils.ObjectUtils.isEmpty(props.suggestions)) {
var emptyMessage = props.emptyMessage || PrimeReact.localeOption('emptyMessage');
return /*#__PURE__*/React__namespace.createElement("ul", {
className: "p-autocomplete-items"
}, /*#__PURE__*/React__namespace.createElement("li", {
className: "p-autocomplete-item"
}, emptyMessage));
}
if (props.virtualScrollerOptions) {
var virtualScrollerProps = _objectSpread(_objectSpread({}, props.virtualScrollerOptions), {
style: _objectSpread(_objectSpread({}, props.virtualScrollerOptions.style), {
height: props.scrollHeight
}),
autoSize: true,
items: props.suggestions,
itemTemplate: function itemTemplate(item, options) {
return item && createItem(item, options.index, options);
},
contentTemplate: function contentTemplate(options) {
var className = utils.classNames('p-autocomplete-items', options.className);
return /*#__PURE__*/React__namespace.createElement("ul", {
ref: options.contentRef,
style: options.style,
className: className,
role: "listbox",
id: props.listId
}, options.children);
}
});
return /*#__PURE__*/React__namespace.createElement(virtualscroller.VirtualScroller, _extends({
ref: props.virtualScrollerRef
}, virtualScrollerProps));
} else {
var items = createItems();
return /*#__PURE__*/React__namespace.createElement("ul", {
className: "p-autocomplete-items",
role: "listbox",
id: props.listId
}, items);
}
};
var createElement = function createElement() {
var className = utils.classNames('p-autocomplete-panel p-component', props.panelClassName, {
'p-input-filled': PrimeReact__default["default"].inputStyle === 'filled',
'p-ripple-disabled': PrimeReact__default["default"].ripple === false
});
var style = _objectSpread({
maxHeight: props.scrollHeight
}, props.panelStyle || {});
var content = createContent();
return /*#__PURE__*/React__namespace.createElement(csstransition.CSSTransition, {
nodeRef: ref,
classNames: "p-connected-overlay",
"in": props["in"],
timeout: {
enter: 120,
exit: 100
},
options: props.transitionOptions,
unmountOnExit: true,
onEnter: props.onEnter,
onEntering: props.onEntering,
onEntered: props.onEntered,
onExit: props.onExit,
onExited: props.onExited
}, /*#__PURE__*/React__namespace.createElement("div", {
ref: ref,
className: className,
style: style,
onClick: props.onClick
}, content));
};
var element = createElement();
return /*#__PURE__*/React__namespace.createElement(portal.Portal, {
element: element,
appendTo: props.appendTo
});
}));
AutoCompletePanel.displayName = 'AutoCompletePanel';
var AutoComplete = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) {
var props = AutoCompleteBase.getProps(inProps);
var _React$useState = React__namespace.useState(props.id),
_React$useState2 = _slicedToArray(_React$useState, 2),
idState = _React$useState2[0],
setIdState = _React$useState2[1];
var _React$useState3 = React__namespace.useState(false),
_React$useState4 = _slicedToArray(_React$useState3, 2),
searchingState = _React$useState4[0],
setSearchingState = _React$useState4[1];
var _React$useState5 = React__namespace.useState(false),
_React$useState6 = _slicedToArray(_React$useState5, 2),
focusedState = _React$useState6[0],
setFocusedState = _React$useState6[1];
var _React$useState7 = React__namespace.useState(false),
_React$useState8 = _slicedToArray(_React$useState7, 2),
overlayVisibleState = _React$useState8[0],
setOverlayVisibleState = _React$useState8[1];
var elementRef = React__namespace.useRef(null);
var overlayRef = React__namespace.useRef(null);
var inputRef = React__namespace.useRef(props.inputRef);
var multiContainerRef = React__namespace.useRef(null);
var virtualScrollerRef = React__namespace.useRef(null);
var timeout = React__namespace.useRef(null);
var selectedItem = React__namespace.useRef(null);
var _useOverlayListener = hooks.useOverlayListener({
target: elementRef,
overlay: overlayRef,
listener: function listener(event, _ref) {
var type = _ref.type,
valid = _ref.valid;
if (valid) {
type === 'outside' ? !isInputClicked(event) && hide() : hide();
}
},
when: overlayVisibleState
}),
_useOverlayListener2 = _slicedToArray(_useOverlayListener, 2),
bindOverlayListener = _useOverlayListener2[0],
unbindOverlayListener = _useOverlayListener2[1];
var isInputClicked = function isInputClicked(event) {
return props.multiple ? event.target === multiContainerRef.current || multiContainerRef.current.contains(event.target) : event.target === inputRef.current;
};
var onInputChange = function onInputChange(event) {
//Cancel the search request if user types within the timeout
if (timeout.current) {
clearTimeout(timeout.current);
}
var query = event.target.value;
if (!props.multiple) {
updateModel(event, query);
}
if (utils.ObjectUtils.isEmpty(query)) {
hide();
props.onClear && props.onClear(event);
} else {
if (query.length >= props.minLength) {
timeout.current = setTimeout(function () {
search(event, query, 'input');
}, props.delay);
} else {
hide();
}
}
};
var search = function search(event, query, source) {
//allow empty string but not undefined or null
if (query === undefined || query === null) {
return;
}
//do not search blank values on input change
if (source === 'input' && query.trim().length === 0) {
return;
}
if (props.completeMethod) {
setSearchingState(true);
props.completeMethod({
originalEvent: event,
query: query
});
}
};
var selectItem = function selectItem(event, option, preventInputFocus) {
if (props.multiple) {
inputRef.current.value = '';
if (!isSelected(option)) {
// allows empty value/selectionlimit and within sectionlimit
if (!props.value || !props.selectionLimit || props.value.length < props.selectionLimit) {
var newValue = props.value ? [].concat(_toConsumableArray(props.value), [option]) : [option];
updateModel(event, newValue);
}
}
} else {
updateInputField(option);
updateModel(event, option);
}
if (props.onSelect) {
props.onSelect({
originalEvent: event,
value: option
});
}
if (!preventInputFocus) {
utils.DomHandler.focus(inputRef.current);
hide();
}
};
var updateModel = function updateModel(event, value) {
// #2176 only call change if value actually changed
if (selectedItem && utils.ObjectUtils.deepEquals(selectedItem.current, value)) {
return;
}
if (props.onChange) {
props.onChange({
originalEvent: event,
value: value,
stopPropagation: function stopPropagation() {},
preventDefault: function preventDefault() {},
target: {
name: props.name,
id: idState,
value: value
}
});
}
selectedItem.current = value;
};
var formatValue = function formatValue(value) {
if (value) {
if (typeof value === 'string') {
return value;
} else if (props.selectedItemTemplate) {
var resolvedFieldData = utils.ObjectUtils.getJSXElement(props.selectedItemTemplate, value);
return resolvedFieldData ? resolvedFieldData : value;
} else if (props.field) {
var _resolvedFieldData = utils.ObjectUtils.resolveFieldData(value, props.field);
return _resolvedFieldData !== null && _resolvedFieldData !== undefined ? _resolvedFieldData : value;
} else {
return value;
}
}
return '';
};
var updateInputField = function updateInputField(value) {
inputRef.current.value = formatValue(value);
};
var show = function show() {
setOverlayVisibleState(true);
};
var hide = function hide() {
setOverlayVisibleState(false);
setSearchingState(false);
};
var onOverlayEnter = function onOverlayEnter() {
utils.ZIndexUtils.set('overlay', overlayRef.current, PrimeReact__default["default"].autoZIndex, PrimeReact__default["default"].zIndex['overlay']);
alignOverlay();
};
var onOverlayEntering = function onOverlayEntering() {
if (props.autoHighlight && props.suggestions && props.suggestions.length) {
var element = getScrollableElement().firstChild.firstChild;
utils.DomHandler.addClass(element, 'p-highlight');
}
};
var onOverlayEntered = function onOverlayEntered() {
bindOverlayListener();
props.onShow && props.onShow();
};
var onOverlayExit = function onOverlayExit() {
unbindOverlayListener();
};
var onOverlayExited = function onOverlayExited() {
utils.ZIndexUtils.clear(overlayRef.current);
props.onHide && props.onHide();
};
var alignOverlay = function alignOverlay() {
var target = props.multiple ? multiContainerRef.current : inputRef.current;
utils.DomHandler.alignOverlay(overlayRef.current, target, props.appendTo || PrimeReact__default["default"].appendTo);
};
var onPanelClick = function onPanelClick(event) {
overlayservice.OverlayService.emit('overlay-click', {
originalEvent: event,
target: elementRef.current
});
};
var onDropdownClick = function onDropdownClick(event) {
if (props.dropdownAutoFocus) {
utils.DomHandler.focus(inputRef.current, props.dropdownAutoFocus);
}
if (props.dropdownMode === 'blank') search(event, '', 'dropdown');else if (props.dropdownMode === 'current') search(event, inputRef.current.value, 'dropdown');
if (props.onDropdownClick) {
props.onDropdownClick({
originalEvent: event,
query: inputRef.current.value
});
}
};
var removeItem = function removeItem(event, index) {
var removedValue = props.value[index];
var newValue = props.value.filter(function (_, i) {
return index !== i;
});
updateModel(event, newValue);
if (props.onUnselect) {
props.onUnselect({
originalEvent: event,
value: removedValue
});
}
};
var onInputKeyDown = function onInputKeyDown(event) {
if (overlayVisibleState) {
var highlightItem = utils.DomHandler.findSingle(overlayRef.current, 'li.p-highlight');
switch (event.which) {
//down
case 40:
if (highlightItem) {
var nextElement = findNextItem(highlightItem);
if (nextElement) {
utils.DomHandler.addClass(nextElement, 'p-highlight');
utils.DomHandler.removeClass(highlightItem, 'p-highlight');
utils.DomHandler.scrollInView(getScrollableElement(), nextElement);
}
} else {
highlightItem = utils.DomHandler.findSingle(overlayRef.current, 'li');
if (utils.DomHandler.hasClass(highlightItem, 'p-autocomplete-item-group')) {
highlightItem = findNextItem(highlightItem);
}
if (highlightItem) {
utils.DomHandler.addClass(highlightItem, 'p-highlight');
}
}
event.preventDefault();
break;
//up
case 38:
if (highlightItem) {
var previousElement = findPrevItem(highlightItem);
if (previousElement) {
utils.DomHandler.addClass(previousElement, 'p-highlight');
utils.DomHandler.removeClass(highlightItem, 'p-highlight');
utils.DomHandler.scrollInView(getScrollableElement(), previousElement);
}
}
event.preventDefault();
break;
//enter
case 13:
if (highlightItem) {
selectHighlightItem(event, highlightItem);
hide();
event.preventDefault();
}
break;
//escape
case 27:
hide();
event.preventDefault();
break;
//tab
case 9:
if (highlightItem) {
selectHighlightItem(event, highlightItem);
}
hide();
break;
}
}
if (props.multiple) {
switch (event.which) {
//backspace
case 8:
if (props.value && props.value.length && !inputRef.current.value) {
var removedValue = props.value[props.value.length - 1];
var newValue = props.value.slice(0, -1);
updateModel(event, newValue);
if (props.onUnselect) {
props.onUnselect({
originalEvent: event,
value: removedValue
});
}
}
break;
}
}
};
var selectHighlightItem = function selectHighlightItem(event, item) {
if (props.optionGroupLabel) {
var optionGroup = props.suggestions[item.dataset.group];
selectItem(event, getOptionGroupChildren(optionGroup)[item.dataset.index]);
} else {
selectItem(event, props.suggestions[utils.DomHandler.index(item)]);
}
};
var findNextItem = function findNextItem(item) {
var nextItem = item.nextElementSibling;
return nextItem ? utils.DomHandler.hasClass(nextItem, 'p-autocomplete-item-group') ? findNextItem(nextItem) : nextItem : null;
};
var findPrevItem = function findPrevItem(item) {
var prevItem = item.previousElementSibling;
return prevItem ? utils.DomHandler.hasClass(prevItem, 'p-autocomplete-item-group') ? findPrevItem(prevItem) : prevItem : null;
};
var onInputFocus = function onInputFocus(event) {
setFocusedState(true);
props.onFocus && props.onFocus(event);
};
var forceItemSelection = function forceItemSelection(event) {
var inputValue = event.target.value.trim();
var item = (props.suggestions || []).find(function (it) {
var value = props.field ? utils.ObjectUtils.resolveFieldData(it, props.field) : it;
return value && inputValue === value.trim();
});
if (item) {
selectItem(event, item, true);
} else {
inputRef.current.value = '';
updateModel(event, null);
props.onClear && props.onClear(event);
}
};
var onInputBlur = function onInputBlur(event) {
setFocusedState(false);
if (props.forceSelection) {
forceItemSelection(event);
}
props.onBlur && props.onBlur(event);
};
var onMultiContainerClick = function onMultiContainerClick(event) {
utils.DomHandler.focus(inputRef.current);
props.onClick && props.onClick(event);
};
var onMultiInputFocus = function onMultiInputFocus(event) {
onInputFocus(event);
utils.DomHandler.addClass(multiContainerRef.current, 'p-focus');
};
var onMultiInputBlur = function onMultiInputBlur(event) {
onInputBlur(event);
utils.DomHandler.removeClass(multiContainerRef.current, 'p-focus');
};
var isSelected = function isSelected(val) {
return props.value ? props.value.some(function (v) {
return utils.ObjectUtils.equals(v, val);
}) : false;
};
var getScrollableElement = function getScrollableElement() {
return virtualScrollerRef.current ? overlayRef.current.firstChild : overlayRef.current;
};
var getOptionGroupLabel = function getOptionGroupLabel(optionGroup) {
return props.optionGroupLabel ? utils.ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel) : optionGroup;
};
var getOptionGroupChildren = function getOptionGroupChildren(optionGroup) {
return utils.ObjectUtils.resolveFieldData(optionGroup, props.optionGroupChildren);
};
React__namespace.useEffect(function () {
utils.ObjectUtils.combinedRefs(inputRef, props.inputRef);
}, [inputRef, props.inputRef]);
hooks.useMountEffect(function () {
if (!idState) {
setIdState(utils.UniqueComponentId());
}
if (props.autoFocus) {
utils.DomHandler.focus(inputRef.current, props.autoFocus);
}
});
hooks.useUpdateEffect(function () {
if (searchingState) {
utils.ObjectUtils.isNotEmpty(props.suggestions) || props.showEmptyMessage ? show() : hide();
setSearchingState(false);
}
}, [props.suggestions]);
hooks.useUpdateEffect(function () {
if (inputRef.current && !props.multiple) {
updateInputField(props.value);
}
if (overlayVisibleState) {
alignOverlay();
}
});
hooks.useUnmountEffect(function () {
if (timeout.current) {
clearTimeout(timeout.current);
}
utils.ZIndexUtils.clear(overlayRef.current);
});
React__namespace.useImperativeHandle(ref, function () {
return {
props: props,
search: search,
show: show,
hide: hide,
focus: function focus() {
return utils.DomHandler.focus(inputRef.current);
},
getElement: function getElement() {
return elementRef.current;
},
getOverlay: function getOverlay() {
return overlayRef.current;
},
getInput: function getInput() {
return inputRef.current;
},
getVirtualScroller: function getVirtualScroller() {
return virtualScrollerRef.current;
}
};
});
var createSimpleAutoComplete = function createSimpleAutoComplete() {
var value = formatValue(props.value);
var ariaControls = overlayVisibleState ? idState + '_list' : null;
var className = utils.classNames('p-autocomplete-input', props.inputClassName, {
'p-autocomplete-dd-input': props.dropdown
});
return /*#__PURE__*/React__namespace.createElement(inputtext.InputText, _extends({
ref: inputRef,
id: props.inputId,
type: props.type,
name: props.name,
defaultValue: value,
role: "combobox",
"aria-autocomplete": "list",
"aria-controls": ariaControls,
"aria-haspopup": "listbox",
"aria-expanded": overlayVisibleState,
className: className,
style: props.inputStyle,
autoComplete: "off",
readOnly: props.readOnly,
disabled: props.disabled,
placeholder: props.placeholder,
size: props.size,
maxLength: props.maxLength,
tabIndex: props.tabIndex,
onBlur: onInputBlur,
onFocus: onInputFocus,
onChange: onInputChange,
onMouseDown: props.onMouseDown,
onKeyUp: props.onKeyUp,
onKeyDown: onInputKeyDown,
onKeyPress: props.onKeyPress,
onContextMenu: props.onContextMenu,
onClick: props.onClick,
onDoubleClick: props.onDblClick
}, ariaProps));
};
var createChips = function createChips() {
if (utils.ObjectUtils.isNotEmpty(props.value)) {
return props.value.map(function (val, index) {
var key = index + 'multi-item';
return /*#__PURE__*/React__namespace.createElement("li", {
key: key,
className: "p-autocomplete-token p-highlight"
}, /*#__PURE__*/React__namespace.createElement("span", {
className: "p-autocomplete-token-label"
}, formatValue(val)), !props.disabled && utils.IconUtils.getJSXIcon(props.removeIcon, {
className: 'p-autocomplete-token-icon',
onClick: function onClick(e) {
return removeItem(e, index);
}
}, {
props: props
}));
});
}
return null;
};
var createMultiInput = function createMultiInput() {
var ariaControls = overlayVisibleState ? idState + '_list' : null;
return /*#__PURE__*/React__namespace.createElement("li", {
className: "p-autocomplete-input-token"
}, /*#__PURE__*/React__namespace.createElement("input", _extends({
ref: inputRef,
type: props.type,
disabled: props.disabled,
placeholder: props.placeholder,
role: "combobox",
"aria-autocomplete": "list",
"aria-controls": ariaControls,
"aria-haspopup": "listbox",
"aria-expanded": overlayVisibleState,
autoComplete: "off",
readOnly: props.readOnly,
tabIndex: props.tabIndex,
onChange: onInputChange,
id: props.inputId,
name: props.name,
style: props.inputStyle,
className: props.inputClassName,
maxLength: props.maxLength,
onKeyUp: props.onKeyUp,
onKeyDown: onInputKeyDown,
onKeyPress: props.onKeyPress,
onFocus: onMultiInputFocus,
onBlur: onMultiInputBlur
}, ariaProps)));
};
var createMultipleAutoComplete = function createMultipleAutoComplete() {
var className = utils.classNames('p-autocomplete-multiple-container p-component p-inputtext', {
'p-disabled': props.disabled
});
var tokens = createChips();
var input = createMultiInput();
return /*#__PURE__*/React__namespace.createElement("ul", {
ref: multiContainerRef,
className: className,
onContextMenu: props.onContextMenu,
onMouseDown: props.onMouseDown,
onClick: onMultiContainerClick,
onDoubleClick: props.onDblClick
}, tokens, input);
};
var createDropdown = function createDropdown() {
if (props.dropdown) {
var ariaLabel = props.dropdownAriaLabel || props.placeholder || PrimeReact.localeOption('choose');
return /*#__PURE__*/React__namespace.createElement(button.Button, {
type: "button",
icon: props.dropdownIcon,
className: "p-autocomplete-dropdown",
disabled: props.disabled,
onClick: onDropdownClick,
"aria-label": ariaLabel
});
}
return null;
};
var createLoader = function createLoader() {
if (searchingState) {
return /*#__PURE__*/React__namespace.createElement("i", {
className: "p-autocomplete-loader pi pi-spinner pi-spin"
});
}
return null;
};
var createInput = function createInput() {
return props.multiple ? createMultipleAutoComplete() : createSimpleAutoComplete();
};
var listId = idState + '_list';
var hasTooltip = utils.ObjectUtils.isNotEmpty(props.tooltip);
var otherProps = AutoCompleteBase.getOtherProps(props);
var ariaProps = utils.ObjectUtils.reduceKeys(otherProps, utils.DomHandler.ARIA_PROPS);
var className = utils.classNames('p-autocomplete p-component p-inputwrapper', {
'p-autocomplete-dd': props.dropdown,
'p-autocomplete-multiple': props.multiple,
'p-inputwrapper-filled': props.value,
'p-inputwrapper-focus': focusedState
}, props.className);
var loader = createLoader();
var input = createInput();
var dropdown = createDropdown();
return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("span", _extends({
ref: elementRef,
id: idState,
style: props.style,
className: className
}, otherProps), input, loader, dropdown, /*#__PURE__*/React__namespace.createElement(AutoCompletePanel, _extends({
ref: overlayRef,
virtualScrollerRef: virtualScrollerRef
}, props, {
listId: listId,
onItemClick: selectItem,
selectedItem: selectedItem,
onClick: onPanelClick,
getOptionGroupLabel: getOptionGroupLabel,
getOptionGroupChildren: getOptionGroupChildren,
"in": overlayVisibleState,
onEnter: onOverlayEnter,
onEntering: onOverlayEntering,
onEntered: onOverlayEntered,
onExit: onOverlayExit,
onExited: onOverlayExited
}))), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
target: elementRef,
content: props.tooltip
}, props.tooltipOptions)));
}));
AutoComplete.displayName = 'AutoComplete';
exports.AutoComplete = AutoComplete;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
})({}, React, primereact.api, primereact.button, primereact.hooks, primereact.inputtext, primereact.overlayservice, primereact.tooltip, primereact.utils, primereact.csstransition, primereact.portal, primereact.ripple, primereact.virtualscroller);