UNPKG

suomifi-ui-components

Version:
121 lines (115 loc) 5.56 kB
'use strict'; var tslib = require('tslib'); var React = require('react'); var styled = require('styled-components'); var suomifiIcons = require('suomifi-icons'); var DropdownItem_basestyles = require('./DropdownItem.basestyles.js'); var Dropdown = require('../Dropdown/Dropdown.js'); var classnames = require('classnames'); var SuomifiThemeProvider = require('../../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js'); require('../../../theme/SuomifiTheme/SuomifiTheme.js'); require('../../../theme/SpacingProvider/SpacingProvider.js'); require('../../../../reset/HtmlA/HtmlA.js'); require('../../../../reset/HtmlButton/HtmlButton.js'); require('../../../../reset/HtmlDiv/HtmlDiv.js'); require('../../../../reset/HtmlFieldSet/HtmlFieldSet.js'); require('../../../../reset/HtmlH/HtmlH.js'); require('../../../../reset/HtmlInput/HtmlInput.js'); require('../../../../reset/HtmlLabel/HtmlLabel.js'); require('../../../../reset/HtmlLegend/HtmlLegend.js'); var HtmlLi = require('../../../../reset/HtmlLi/HtmlLi.js'); require('../../../../reset/HtmlNav/HtmlNav.js'); require('../../../../reset/HtmlOl/HtmlOl.js'); require('../../../../reset/HtmlSpan/HtmlSpan.js'); require('../../../../reset/HtmlTextarea/HtmlTextarea.js'); require('../../../../reset/HtmlUl/HtmlUl.js'); require('../../../../reset/HtmlTable/HtmlTable.js'); require('../../../../reset/HtmlTable/HtmlTableCaption.js'); require('../../../../reset/HtmlTable/HtmlTableHeader.js'); require('../../../../reset/HtmlTable/HtmlTableRow.js'); require('../../../../reset/HtmlTable/HtmlTableBody.js'); require('../../../../reset/HtmlTable/HtmlTableHeaderCell.js'); require('../../../../reset/HtmlTable/HtmlTableCell.js'); var common = require('../../../../utils/common/common.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); var classnames__default = /*#__PURE__*/_interopDefault(classnames); var dropdownItemClassNames = { hasKeyboardFocus: "".concat(Dropdown.dropdownClassNames.item, "--hasKeyboardFocus"), selected: "".concat(Dropdown.dropdownClassNames.item, "--selected"), disabled: "".concat(Dropdown.dropdownClassNames.item, "--disabled"), noSelectedStyles: "".concat(Dropdown.dropdownClassNames.item, "--noSelectedStyles"), icon: "".concat(Dropdown.dropdownClassNames.item, "_icon") }; var BaseDropdownItem = function BaseDropdownItem(props) { var _a; var children = props.children, className = props.className; props.theme; var consumer = props.consumer, value = props.value, _b = props.disabled, disabled = _b === void 0 ? false : _b, passProps = tslib.__rest(props, ["children", "className", "theme", "consumer", "value", "disabled"]); var selected = consumer.selectedDropdownValue === value; var hasKeyboardFocus = consumer.focusedItemValue === value; var listElementId = "".concat(consumer.id, "-").concat(value); var listElementRef = React.useRef(null); React.useLayoutEffect(function () { var _a, _b; var ownerDocument = common.getOwnerDocument(listElementRef); if (((_a = ownerDocument.activeElement) === null || _a === void 0 ? void 0 : _a.id) !== listElementId && hasKeyboardFocus) { (_b = listElementRef.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true }); } }, [consumer.focusedItemValue]); var handleClick = function handleClick() { if (!disabled) { consumer.onItemClick(value); } }; return /*#__PURE__*/React__default.default.createElement(HtmlLi.HtmlLi, tslib.__assign({ className: classnames__default.default(className, Dropdown.dropdownClassNames.item, (_a = {}, _a[dropdownItemClassNames.hasKeyboardFocus] = hasKeyboardFocus, _a[dropdownItemClassNames.selected] = selected, _a[dropdownItemClassNames.disabled] = disabled, _a[dropdownItemClassNames.noSelectedStyles] = consumer.noSelectedStyles, _a)), tabIndex: hasKeyboardFocus ? 0 : -1, role: "option", "aria-disabled": disabled, "aria-selected": selected, id: listElementId, onClick: handleClick, forwardedRef: listElementRef, onKeyDown: function onKeyDown(event) { if (event.key === 'Tab') { event.preventDefault(); consumer.onItemTabPress(); } }, onMouseOver: function onMouseOver() { consumer.onItemMouseOver(value); } }, passProps), children, selected && !consumer.noSelectedStyles && ( /*#__PURE__*/React__default.default.createElement(suomifiIcons.IconCheck, { className: dropdownItemClassNames.icon, "aria-hidden": true }))); }; var StyledDropdownItem = styled.styled(BaseDropdownItem).withConfig({ componentId: "sc-1pc651a-0" })(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) { var theme = _a.theme; return DropdownItem_basestyles.baseStyles(theme); }); var DropdownItem = function DropdownItem(props) { return /*#__PURE__*/React__default.default.createElement(SuomifiThemeProvider.SuomifiThemeConsumer, null, function (_a) { var suomifiTheme = _a.suomifiTheme; return /*#__PURE__*/React__default.default.createElement(Dropdown.DropdownConsumer, null, function (consumer) { return /*#__PURE__*/React__default.default.createElement(StyledDropdownItem, tslib.__assign({ theme: suomifiTheme, consumer: consumer }, props)); }); }); }; DropdownItem.displayName = 'DropdownItem'; var templateObject_1; exports.DropdownItem = DropdownItem; //# sourceMappingURL=DropdownItem.js.map