suomifi-ui-components
Version:
Suomi.fi UI component library
121 lines (115 loc) • 5.56 kB
JavaScript
;
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