UNPKG

suomifi-ui-components

Version:
137 lines (134 loc) 5.61 kB
import { __extends, __rest, __assign, __makeTemplateObject } from 'tslib'; import React, { Component } from 'react'; import { styled } from 'styled-components'; import classnames from 'classnames'; import { IconCheck } from 'suomifi-icons'; import { escapeStringRegexp } from '../../../../../utils/common/common.js'; import '../../../../../reset/HtmlA/HtmlA.js'; import '../../../../../reset/HtmlButton/HtmlButton.js'; import '../../../../../reset/HtmlDiv/HtmlDiv.js'; import '../../../../../reset/HtmlFieldSet/HtmlFieldSet.js'; import '../../../../../reset/HtmlH/HtmlH.js'; import '../../../../../reset/HtmlInput/HtmlInput.js'; import '../../../../../reset/HtmlLabel/HtmlLabel.js'; import '../../../../../reset/HtmlLegend/HtmlLegend.js'; import { HtmlLi } from '../../../../../reset/HtmlLi/HtmlLi.js'; import '../../../../../reset/HtmlNav/HtmlNav.js'; import '../../../../../reset/HtmlOl/HtmlOl.js'; import '../../../../../reset/HtmlSpan/HtmlSpan.js'; import '../../../../../reset/HtmlTextarea/HtmlTextarea.js'; import '../../../../../reset/HtmlUl/HtmlUl.js'; import '../../../../../reset/HtmlTable/HtmlTable.js'; import '../../../../../reset/HtmlTable/HtmlTableCaption.js'; import '../../../../../reset/HtmlTable/HtmlTableHeader.js'; import '../../../../../reset/HtmlTable/HtmlTableRow.js'; import '../../../../../reset/HtmlTable/HtmlTableBody.js'; import '../../../../../reset/HtmlTable/HtmlTableHeaderCell.js'; import '../../../../../reset/HtmlTable/HtmlTableCell.js'; import { SuomifiThemeConsumer } from '../../../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js'; import '../../../../theme/SuomifiTheme/SuomifiTheme.js'; import '../../../../theme/SpacingProvider/SpacingProvider.js'; import { baseStyles } from './SelectItem.baseStyles.js'; import { HtmlMark } from '../../../../../reset/HtmlMark/HtmlMark.js'; var baseClassName = 'fi-select-item'; var selectItemClassNames = { wrapper: "".concat(baseClassName, "_wrapper"), hasKeyboardFocus: "".concat(baseClassName, "--hasKeyboardFocus"), queryHighlight: "".concat(baseClassName, "--query_highlight"), selected: "".concat(baseClassName, "--selected"), disabled: "".concat(baseClassName, "--disabled"), icon: "".concat(baseClassName, "_icon") }; var BaseSelectItem = function (_super) { __extends(BaseSelectItem, _super); function BaseSelectItem() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.highlightQuery = function (text, query) { if (query === void 0) { query = ''; } if (query.length > 0) { var substrings = text.split(new RegExp("(".concat(escapeStringRegexp(query), ")"), 'gi')); return substrings.map(function (substring, i) { var isMatch = substring.toLowerCase() === query.toLowerCase(); if (!isMatch && substring.length > 0) { return /*#__PURE__*/React.createElement(HtmlMark, { className: selectItemClassNames.queryHighlight, key: i }, substring); } return /*#__PURE__*/React.createElement(React.Fragment, { key: i }, substring); }); } return text; }; return _this; } BaseSelectItem.prototype.render = function () { var _a; var _this = this; var _b = this.props, className = _b.className; _b.theme; var children = _b.children, checked = _b.checked, hasKeyboardFocus = _b.hasKeyboardFocus, hightlightQuery = _b.hightlightQuery, disabled = _b.disabled, id = _b.id, _onClick = _b.onClick, passProps = __rest(_b, ["className", "theme", "children", "checked", "hasKeyboardFocus", "hightlightQuery", "disabled", "id", "onClick"]); return /*#__PURE__*/React.createElement(HtmlLi, __assign({ className: classnames(baseClassName, className, (_a = {}, _a[selectItemClassNames.hasKeyboardFocus] = hasKeyboardFocus, _a[selectItemClassNames.selected] = checked, _a[selectItemClassNames.disabled] = disabled, _a)), tabIndex: -1, role: "option", "aria-selected": checked, "aria-disabled": disabled || false, id: id, onClick: function onClick(event) { if (!!_onClick) { _onClick(event); } }, onMouseDown: function onMouseDown(event) { event.preventDefault(); } }, passProps), React.Children.map(children, function (child) { if (typeof child === 'string') { return _this.highlightQuery(child, hightlightQuery); } return child; }), checked && ( /*#__PURE__*/React.createElement(IconCheck, { className: selectItemClassNames.icon, "aria-hidden": true }))); }; return BaseSelectItem; }(Component); var StyledSelectItem = styled(BaseSelectItem).withConfig({ componentId: "sc-tljhbw-0" })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) { var theme = _a.theme; return baseStyles(theme); }); var SelectItem = function (_super) { __extends(SelectItem, _super); function SelectItem() { return _super !== null && _super.apply(this, arguments) || this; } SelectItem.prototype.render = function () { var _this = this; return /*#__PURE__*/React.createElement(SuomifiThemeConsumer, null, function (_a) { var suomifiTheme = _a.suomifiTheme; return /*#__PURE__*/React.createElement(StyledSelectItem, __assign({ theme: suomifiTheme }, _this.props)); }); }; return SelectItem; }(Component); var templateObject_1; export { SelectItem }; //# sourceMappingURL=SelectItem.js.map