suomifi-ui-components
Version:
Suomi.fi UI component library
162 lines (159 loc) • 6.68 kB
JavaScript
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