@commercetools-uikit/search-select-input
Version:
A search select input component built on top of `@commercetools-uikit/async-select-input` to asynchronously load results (options) using the keyword that the user has entered.
150 lines (140 loc) • 10.1 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
var _objectWithoutProperties = require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
var react = require('react');
var reactIntl = require('react-intl');
var AsyncSelectInput = require('@commercetools-uikit/async-select-input');
var utils = require('@commercetools-uikit/utils');
var selectUtils = require('@commercetools-uikit/select-utils');
var _styled = require('@emotion/styled/base');
var designSystem = require('@commercetools-uikit/design-system');
var jsxRuntime = require('@emotion/react/jsx-runtime');
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
var AsyncSelectInput__default = /*#__PURE__*/_interopDefault(AsyncSelectInput);
var _styled__default = /*#__PURE__*/_interopDefault(_styled);
var messages = reactIntl.defineMessages({
noOptionsMessage: {
id: 'UIKit.SearchSelectInput.noOptionsMessage',
description: 'Text of search select dropdown when no options match search text',
defaultMessage: 'No matches found for your search term'
},
loadingOptionsMessage: {
id: 'UIKit.SearchSelectInput.loadingOptionsMessage',
description: 'Text showed while the options are being loaded',
defaultMessage: 'Loading exact matches'
},
placeholderMessage: {
id: 'UIKit.SearchSelectInput.placeholderMessage',
description: 'Placeholder text for the input',
defaultMessage: 'Search by…'
},
searchSelectInputAsFilterPlaceholder: {
id: 'UIKit.SearchSelectInput.searchSelectInputAsFilterPlaceholder',
description: 'Placeholder text for the input',
defaultMessage: 'Search'
}
});
const SearchSelectInputWrapper = /*#__PURE__*/_styled__default["default"]("div", process.env.NODE_ENV === "production" ? {
target: "e6cl9390"
} : {
target: "e6cl9390",
label: "SearchSelectInputWrapper"
})(props => !props.isDisabled && !props.isReadOnly ? `div[class$='control'] {
&:hover {
cursor: text;
}
div[class$='indicatorContainer' i] {
cursor: pointer;
svg * {
fill: ${designSystem.designTokens.colorNeutral60};
}
:hover svg * {
fill: ${designSystem.designTokens.colorPrimary};
}
}
}` : '', ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlYXJjaC1zZWxlY3QtaW5wdXQuc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9DIiwiZmlsZSI6InNlYXJjaC1zZWxlY3QtaW5wdXQuc3R5bGVzLnRzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgdHlwZSB7IFRTZWFyY2hTZWxlY3RJbnB1dFByb3BzIH0gZnJvbSAnLi9zZWFyY2gtc2VsZWN0LWlucHV0JztcblxuY29uc3QgU2VhcmNoU2VsZWN0SW5wdXRXcmFwcGVyID0gc3R5bGVkLmRpdjxcbiAgUGljazxUU2VhcmNoU2VsZWN0SW5wdXRQcm9wcywgJ2lzRGlzYWJsZWQnIHwgJ2lzUmVhZE9ubHknIHwgJ2lzQ29uZGVuc2VkJz5cbj5gXG4gICR7KHByb3BzKSA9PlxuICAgICFwcm9wcy5pc0Rpc2FibGVkICYmICFwcm9wcy5pc1JlYWRPbmx5XG4gICAgICA/IGBkaXZbY2xhc3MkPSdjb250cm9sJ10ge1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjdXJzb3I6IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZGl2W2NsYXNzJD0naW5kaWNhdG9yQ29udGFpbmVyJyBpXSB7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgIHN2ZyAqIHtcbiAgICAgICAgICAgIGZpbGw6ICR7ZGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgOmhvdmVyIHN2ZyAqIHtcbiAgICAgICAgICAgIGZpbGw6ICR7ZGVzaWduVG9rZW5zLmNvbG9yUHJpbWFyeX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9YFxuICAgICAgOiAnJ31cbmA7XG5cbmV4cG9ydCB7IFNlYXJjaFNlbGVjdElucHV0V3JhcHBlciB9O1xuIl19 */"));
const _excluded = ["value", "menuPortalZIndex", "maxMenuHeight", "controlShouldRenderValue", "appearance", "optionStyle"];
function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
const SearchSelectInput = _ref => {
let _ref$value = _ref.value,
value = _ref$value === void 0 ? null : _ref$value,
_ref$menuPortalZIndex = _ref.menuPortalZIndex,
menuPortalZIndex = _ref$menuPortalZIndex === void 0 ? 1 : _ref$menuPortalZIndex,
_ref$maxMenuHeight = _ref.maxMenuHeight,
maxMenuHeight = _ref$maxMenuHeight === void 0 ? 220 : _ref$maxMenuHeight,
_ref$controlShouldRen = _ref.controlShouldRenderValue,
controlShouldRenderValue = _ref$controlShouldRen === void 0 ? true : _ref$controlShouldRen,
_ref$appearance = _ref.appearance,
appearance = _ref$appearance === void 0 ? 'default' : _ref$appearance,
_ref$optionStyle = _ref.optionStyle,
optionStyle = _ref$optionStyle === void 0 ? 'list' : _ref$optionStyle,
props = _objectWithoutProperties(_ref, _excluded);
const intl = reactIntl.useIntl();
if (!props.isReadOnly) {
process.env.NODE_ENV !== "production" ? utils.warning(typeof props.onChange === 'function', 'SearchSelectInput: `onChange` is required when input is not read only.') : void 0;
}
selectUtils.warnIfMenuPortalPropsAreMissing({
menuPortalZIndex: menuPortalZIndex,
menuPortalTarget: props.menuPortalTarget,
componentName: 'SearchSelectInput'
});
const noOptionsMessage = props.noOptionsMessage || (() => intl.formatMessage(messages.noOptionsMessage));
const loadingMessage = props.loadingMessage || intl.formatMessage(messages.loadingOptionsMessage);
const placeholder = appearance === 'filter' && !props.placeholder ? intl.formatMessage(messages.searchSelectInputAsFilterPlaceholder) : props.placeholder || intl.formatMessage(messages.placeholderMessage);
const optionType = props.optionType;
const components = react.useMemo(() => _objectSpread(_objectSpread(_objectSpread({
Option: optionInnerProps => jsxRuntime.jsx(selectUtils.CustomSelectInputOption, _objectSpread(_objectSpread({}, optionInnerProps), {}, {
optionType: optionType,
optionInnerProps: optionInnerProps
}))
}, optionStyle === 'checkbox' ? selectUtils.optionStyleCheckboxComponents(appearance) : {}), props.components), {}, {
DropdownIndicator: selectUtils.SearchIconDropdownIndicator
}), [optionStyle, appearance, props.components, optionType]);
return jsxRuntime.jsx(SearchSelectInputWrapper, {
isDisabled: props.isDisabled,
isReadOnly: props.isReadOnly,
isCondensed: appearance === 'filter' ? true : props.isCondensed,
children: jsxRuntime.jsx(AsyncSelectInput__default["default"], _objectSpread(_objectSpread(_objectSpread({}, props), {}, {
value: value,
menuPortalZIndex: menuPortalZIndex,
maxMenuHeight: maxMenuHeight,
appearance: appearance,
optionStyle: optionStyle,
components: components,
placeholder: placeholder,
iconLeft: props.iconLeft,
loadingMessage: loadingMessage,
noOptionsMessage: noOptionsMessage,
isSearchable: true
// @ts-expect-error
,
closeMenuOnSelect: props.closeMenuOnSelect
}, optionStyle === 'checkbox' ? selectUtils.optionsStyleCheckboxSelectProps() : {}), {}, {
controlShouldRenderValue: appearance === 'filter' ? false : controlShouldRenderValue
}))
});
};
SearchSelectInput.displayName = 'SearchSelectInput';
var SearchSelectInput$1 = SearchSelectInput;
// NOTE: This string will be replaced on build time with the package version.
var version = "20.2.3";
exports["default"] = SearchSelectInput$1;
exports.version = version;