UNPKG

suomifi-ui-components

Version:
136 lines (133 loc) 5.72 kB
import { __rest, __assign, __makeTemplateObject } from 'tslib'; import React, { forwardRef } from 'react'; import { styled } from 'styled-components'; import classnames from 'classnames'; import '../../../reset/HtmlA/HtmlA.js'; import '../../../reset/HtmlButton/HtmlButton.js'; import { HtmlDivWithRef, HtmlDiv } from '../../../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 '../../../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 { IconErrorFilled } from 'suomifi-icons'; import { AutoId } from '../../utils/AutoId/AutoId.js'; import { SuomifiThemeConsumer } from '../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js'; import '../../theme/SuomifiTheme/SuomifiTheme.js'; import '../../theme/SpacingProvider/SpacingProvider.js'; import { separateMarginProps } from '../../theme/utils/spacing.js'; import { baseStyles } from './ErrorSummary.baseStyles.js'; import { Heading } from '../../Heading/Heading.js'; import { Link } from '../../Link/Link/Link.js'; import '../../Link/ExternalLink/ExternalLink.js'; import '../../Link/SkipLink/SkipLink.js'; import '../../Link/RouterLink/RouterLink.js'; import '../../Link/LinkListItem/LinkListItem.js'; import '../../Link/LinkList/LinkList.js'; var baseClassName = 'fi-error-summary'; var inlineAlertClassNames = { styleWrapper: "".concat(baseClassName, "_style-wrapper"), content: "".concat(baseClassName, "_content"), heading: "".concat(baseClassName, "_heading"), textContentWrapper: "".concat(baseClassName, "_text-content-wrapper"), icon: "".concat(baseClassName, "_icon"), smallScreen: "".concat(baseClassName, "--small-screen") }; var BaseErrorSummary = function BaseErrorSummary(props) { var _a; var className = props.className, headingText = props.headingText, _b = props.headingVariant, headingVariant = _b === void 0 ? 'h3' : _b, headingRef = props.headingRef, items = props.items, smallScreen = props.smallScreen, id = props.id; props.forwardedRef; var rest = __rest(props, ["className", "headingText", "headingVariant", "headingRef", "items", "smallScreen", "id", "forwardedRef"]); var _c = separateMarginProps(rest), passProps = _c[1]; var focusInput = function focusInput(event, errorItem) { event.preventDefault(); if (errorItem.inputRef && errorItem.inputRef.current) { errorItem.inputRef.current.focus(); } else if (errorItem.inputId && errorItem.inputId !== '') { var element = document.getElementById(errorItem.inputId); if (element) { element.focus(); } } }; return /*#__PURE__*/React.createElement(HtmlDivWithRef, __assign({ asProp: "section" }, passProps, { className: classnames(baseClassName, className, (_a = {}, _a[inlineAlertClassNames.smallScreen] = !!smallScreen, _a)), style: __assign({}, passProps === null || passProps === void 0 ? void 0 : passProps.style) }), /*#__PURE__*/React.createElement(HtmlDiv, { className: inlineAlertClassNames.styleWrapper }, /*#__PURE__*/React.createElement(IconErrorFilled, { className: classnames(inlineAlertClassNames.icon) }), /*#__PURE__*/React.createElement(HtmlDiv, { className: inlineAlertClassNames.textContentWrapper, id: id }, /*#__PURE__*/React.createElement(Heading, { variant: headingVariant, className: inlineAlertClassNames.heading, ref: headingRef, tabIndex: 0 }, headingText), /*#__PURE__*/React.createElement(HtmlDiv, { className: inlineAlertClassNames.content }, items && ( /*#__PURE__*/React.createElement("ul", null, items.map(function (item) { return /*#__PURE__*/React.createElement("li", { key: item.text }, /*#__PURE__*/React.createElement(Link, { href: item.inputId || '#', onClick: function onClick(event) { focusInput(event, item); } }, item.text)); }))))))); }; var StyledErrorSummary = styled(function (props) { props.theme; var passProps = __rest(props, ["theme"]); return /*#__PURE__*/React.createElement(BaseErrorSummary, __assign({}, passProps)); }).withConfig({ componentId: "sc-8gw4oz-0" })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) { var theme = _a.theme; return baseStyles(theme); }); var ErrorSummary = /*#__PURE__*/forwardRef(function (props, ref) { var propId = props.id, passProps = __rest(props, ["id"]); return /*#__PURE__*/React.createElement(SuomifiThemeConsumer, null, function (_a) { var suomifiTheme = _a.suomifiTheme; return /*#__PURE__*/React.createElement(AutoId, { id: propId }, function (id) { return /*#__PURE__*/React.createElement(StyledErrorSummary, __assign({ forwardedRef: ref, theme: suomifiTheme, id: id }, passProps)); }); }); }); ErrorSummary.displayName = 'ErrorSummary'; var templateObject_1; export { ErrorSummary }; //# sourceMappingURL=ErrorSummary.js.map