suomifi-ui-components
Version:
Suomi.fi UI component library
162 lines (156 loc) • 7.04 kB
JavaScript
;
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 aria = require('../../../../utils/aria/aria.js');
var Text = require('../../../Text/Text.js');
require('../../../../reset/HtmlA/HtmlA.js');
var HtmlButton = 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');
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 ToggleBase = require('../ToggleBase/ToggleBase.js');
var ToggleIcon = require('../ToggleBase/ToggleIcon.js');
var ToggeButton_baseStyles = require('./ToggeButton.baseStyles.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 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"),
button: "".concat(ToggleBase.baseClassName, "--button"),
label: "".concat(ToggleBase.baseClassName, "_label"),
iconContainer: "".concat(ToggleBase.baseClassName, "_icon-container")
};
var BaseToggleButton = function (_super) {
tslib.__extends(BaseToggleButton, _super);
function BaseToggleButton() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
toggleState: !!_this.props.checked || !!_this.props.defaultChecked
};
_this.handleClick = function () {
var _a = _this.props,
checked = _a.checked,
onClick = _a.onClick;
var toggleState = _this.state.toggleState;
if (checked === undefined) {
_this.setState({
toggleState: !toggleState
});
}
if (!!onClick) {
onClick(!toggleState);
}
};
return _this;
}
BaseToggleButton.getDerivedStateFromProps = function (nextProps, prevState) {
var checked = nextProps.checked;
if (checked !== undefined && checked !== prevState.toggleState) {
return {
toggleState: checked
};
}
return null;
};
BaseToggleButton.prototype.render = function () {
var _a;
var _b = this.props,
children = _b.children,
_c = _b.disabled,
disabled = _c === void 0 ? false : _c;
_b.onClick;
var id = _b.id,
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", "onClick", "id", "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.button, (_a = {}, _a[toggleClassNames.disabled] = !!disabled, _a), toggleClassNames.label),
style: style
}, /*#__PURE__*/React__default.default.createElement(HtmlButton.HtmlButton, tslib.__assign({}, passProps, {
onClick: this.handleClick,
"aria-pressed": !!toggleState,
disabled: disabled,
id: id,
tabIndex: 0
}, 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 BaseToggleButton;
}(React.Component);
var StyledToggleButton = styled.styled(function (props) {
props.theme;
props.globalMargins;
var passProps = tslib.__rest(props, ["theme", "globalMargins"]);
return /*#__PURE__*/React__default.default.createElement(BaseToggleButton, tslib.__assign({}, passProps));
}).withConfig({
componentId: "sc-jih7r4-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 ToggeButton_baseStyles.baseStyles(theme, cleanedGlobalMargins, marginProps);
});
var ToggleButton = /*#__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(StyledToggleButton, tslib.__assign({
theme: suomifiTheme,
id: id,
globalMargins: margins,
forwardedRef: ref
}, passProps));
});
});
});
});
ToggleButton.displayName = 'ToggleButton';
var templateObject_1;
exports.ToggleButton = ToggleButton;
//# sourceMappingURL=ToggleButton.js.map