UNPKG

suomifi-ui-components

Version:
162 lines (159 loc) 6.68 kB
import { __extends, __rest, __assign, __makeTemplateObject } from 'tslib'; import React, { Component, forwardRef } from 'react'; import { styled } from 'styled-components'; import classnames from 'classnames'; import { AutoId } from '../../../utils/AutoId/AutoId.js'; import { SuomifiThemeConsumer } from '../../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js'; import '../../../theme/SuomifiTheme/SuomifiTheme.js'; import { SpacingConsumer } from '../../../theme/SpacingProvider/SpacingProvider.js'; import { separateMarginProps } from '../../../theme/utils/spacing.js'; import { getConditionalAriaProp } from '../../../../utils/aria/aria.js'; import { Text } from '../../../Text/Text.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 { HtmlInput } from '../../../../reset/HtmlInput/HtmlInput.js'; import { HtmlLabel } from '../../../../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 { HtmlSpan } from '../../../../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 { ToggleIcon } from '../ToggleBase/ToggleIcon.js'; import { baseClassName } from '../ToggleBase/ToggleBase.js'; import { baseStyles } from './ToggleInput.baseStyles.js'; import { filterDuplicateKeys } from '../../../../utils/common/common.js'; var toggleClassNames = { disabled: "".concat(baseClassName, "--disabled"), input: "".concat(baseClassName, "--input"), inputElement: "".concat(baseClassName, "_input-element"), label: "".concat(baseClassName, "_label"), iconContainer: "".concat(baseClassName, "_icon-container") }; var BaseToggleInput = function (_super) { __extends(BaseToggleInput, _super); function BaseToggleInput() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { toggleState: !!_this.props.checked || !!_this.props.defaultChecked }; _this.handleChange = function () { var _a = _this.props, checked = _a.checked, onChange = _a.onChange; var toggleState = _this.state.toggleState; if (checked === undefined) { _this.setState({ toggleState: !toggleState }); } if (!!onChange) { onChange(!toggleState); } }; return _this; } BaseToggleInput.getDerivedStateFromProps = function (nextProps, prevState) { var checked = nextProps.checked; if (checked !== undefined && checked !== prevState.toggleState) { return { toggleState: checked }; } return null; }; BaseToggleInput.prototype.render = function () { var _a; var _b = this.props, children = _b.children, _c = _b.disabled, disabled = _c === void 0 ? false : _c; _b.onChange; var id = _b.id, name = _b.name, className = _b.className, ariaLabel = _b["aria-label"], ariaLabelledBy = _b["aria-labelledby"]; _b.checked; _b.defaultChecked; var style = _b.style, rest = __rest(_b, ["children", "disabled", "onChange", "id", "name", "className", 'aria-label', 'aria-labelledby', "checked", "defaultChecked", "style"]); var _d = separateMarginProps(rest), passProps = _d[1]; var toggleState = this.state.toggleState; return /*#__PURE__*/React.createElement(HtmlSpan, { className: classnames(className, baseClassName, toggleClassNames.input, (_a = {}, _a[toggleClassNames.disabled] = !!disabled, _a)), style: style }, /*#__PURE__*/React.createElement(HtmlLabel, { className: toggleClassNames.label, htmlFor: id }, /*#__PURE__*/React.createElement(HtmlInput, __assign({}, passProps, { checked: !!toggleState, id: id, name: name, disabled: disabled, className: toggleClassNames.inputElement, onChange: this.handleChange, type: "checkbox" }, getConditionalAriaProp('aria-label', [ariaLabel]), getConditionalAriaProp('aria-labelledby', [ariaLabelledBy]))), /*#__PURE__*/React.createElement(HtmlSpan, { className: toggleClassNames.iconContainer }, /*#__PURE__*/React.createElement(ToggleIcon, { disabled: disabled, checked: toggleState })), /*#__PURE__*/React.createElement(Text, { color: !!disabled ? 'depthBase' : 'blackBase' }, children))); }; return BaseToggleInput; }(Component); var StyledToggleInput = styled(function (props) { props.theme; props.globalMargins; var passProps = __rest(props, ["theme", "globalMargins"]); return /*#__PURE__*/React.createElement(BaseToggleInput, __assign({}, passProps)); }).withConfig({ componentId: "sc-1ypveg7-0" })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) { var theme = _a.theme, globalMargins = _a.globalMargins, rest = __rest(_a, ["theme", "globalMargins"]); var _b = separateMarginProps(rest), marginProps = _b[0]; var cleanedGlobalMargins = filterDuplicateKeys(globalMargins.toggleButton, marginProps); return baseStyles(theme, cleanedGlobalMargins, marginProps); }); var ToggleInput = /*#__PURE__*/forwardRef(function (props, ref) { var propId = props.id, passProps = __rest(props, ["id"]); return /*#__PURE__*/React.createElement(SpacingConsumer, null, function (_a) { var margins = _a.margins; 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(StyledToggleInput, __assign({ theme: suomifiTheme, id: id, globalMargins: margins, forwardedRef: ref }, passProps)); }); }); }); }); ToggleInput.displayName = 'ToggleInput'; var templateObject_1; export { ToggleInput }; //# sourceMappingURL=ToggleInput.js.map