suomifi-ui-components
Version:
Suomi.fi UI component library
137 lines (134 loc) • 5.61 kB
JavaScript
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