UNPKG

suomifi-ui-components

Version:
169 lines (163 loc) 7.33 kB
'use strict'; var tslib = require('tslib'); var React = require('react'); var styled = require('styled-components'); var classnames = require('classnames'); var AutoId = require('../../../utils/AutoId/AutoId.js'); var SuomifiThemeProvider = require('../../../theme/SuomifiThemeProvider/SuomifiThemeProvider.js'); require('../../../theme/SuomifiTheme/SuomifiTheme.js'); var SpacingProvider = require('../../../theme/SpacingProvider/SpacingProvider.js'); var spacing = require('../../../theme/utils/spacing.js'); var aria = require('../../../../utils/aria/aria.js'); var Text = require('../../../Text/Text.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'); var HtmlInput = require('../../../../reset/HtmlInput/HtmlInput.js'); var HtmlLabel = require('../../../../reset/HtmlLabel/HtmlLabel.js'); require('../../../../reset/HtmlLegend/HtmlLegend.js'); require('../../../../reset/HtmlLi/HtmlLi.js'); require('../../../../reset/HtmlNav/HtmlNav.js'); require('../../../../reset/HtmlOl/HtmlOl.js'); var HtmlSpan = 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 ToggleIcon = require('../ToggleBase/ToggleIcon.js'); var ToggleBase = require('../ToggleBase/ToggleBase.js'); var ToggleInput_baseStyles = require('./ToggleInput.baseStyles.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 toggleClassNames = { disabled: "".concat(ToggleBase.baseClassName, "--disabled"), input: "".concat(ToggleBase.baseClassName, "--input"), inputElement: "".concat(ToggleBase.baseClassName, "_input-element"), label: "".concat(ToggleBase.baseClassName, "_label"), iconContainer: "".concat(ToggleBase.baseClassName, "_icon-container") }; var BaseToggleInput = function (_super) { tslib.__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 = tslib.__rest(_b, ["children", "disabled", "onChange", "id", "name", "className", 'aria-label', 'aria-labelledby', "checked", "defaultChecked", "style"]); var _d = spacing.separateMarginProps(rest), passProps = _d[1]; var toggleState = this.state.toggleState; return /*#__PURE__*/React__default.default.createElement(HtmlSpan.HtmlSpan, { className: classnames__default.default(className, ToggleBase.baseClassName, toggleClassNames.input, (_a = {}, _a[toggleClassNames.disabled] = !!disabled, _a)), style: style }, /*#__PURE__*/React__default.default.createElement(HtmlLabel.HtmlLabel, { className: toggleClassNames.label, htmlFor: id }, /*#__PURE__*/React__default.default.createElement(HtmlInput.HtmlInput, tslib.__assign({}, passProps, { checked: !!toggleState, id: id, name: name, disabled: disabled, className: toggleClassNames.inputElement, onChange: this.handleChange, type: "checkbox" }, aria.getConditionalAriaProp('aria-label', [ariaLabel]), aria.getConditionalAriaProp('aria-labelledby', [ariaLabelledBy]))), /*#__PURE__*/React__default.default.createElement(HtmlSpan.HtmlSpan, { className: toggleClassNames.iconContainer }, /*#__PURE__*/React__default.default.createElement(ToggleIcon.ToggleIcon, { disabled: disabled, checked: toggleState })), /*#__PURE__*/React__default.default.createElement(Text.Text, { color: !!disabled ? 'depthBase' : 'blackBase' }, children))); }; return BaseToggleInput; }(React.Component); var StyledToggleInput = styled.styled(function (props) { props.theme; props.globalMargins; var passProps = tslib.__rest(props, ["theme", "globalMargins"]); return /*#__PURE__*/React__default.default.createElement(BaseToggleInput, tslib.__assign({}, passProps)); }).withConfig({ componentId: "sc-1ypveg7-0" })(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (_a) { var theme = _a.theme, globalMargins = _a.globalMargins, rest = tslib.__rest(_a, ["theme", "globalMargins"]); var _b = spacing.separateMarginProps(rest), marginProps = _b[0]; var cleanedGlobalMargins = common.filterDuplicateKeys(globalMargins.toggleButton, marginProps); return ToggleInput_baseStyles.baseStyles(theme, cleanedGlobalMargins, marginProps); }); var ToggleInput = /*#__PURE__*/React.forwardRef(function (props, ref) { var propId = props.id, passProps = tslib.__rest(props, ["id"]); return /*#__PURE__*/React__default.default.createElement(SpacingProvider.SpacingConsumer, null, function (_a) { var margins = _a.margins; return /*#__PURE__*/React__default.default.createElement(SuomifiThemeProvider.SuomifiThemeConsumer, null, function (_a) { var suomifiTheme = _a.suomifiTheme; return /*#__PURE__*/React__default.default.createElement(AutoId.AutoId, { id: propId }, function (id) { return /*#__PURE__*/React__default.default.createElement(StyledToggleInput, tslib.__assign({ theme: suomifiTheme, id: id, globalMargins: margins, forwardedRef: ref }, passProps)); }); }); }); }); ToggleInput.displayName = 'ToggleInput'; var templateObject_1; exports.ToggleInput = ToggleInput; //# sourceMappingURL=ToggleInput.js.map