zrmc
Version:
ZRMC is an ES7 React wrapper for Material Components Web.
188 lines (154 loc) • 5.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties");
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _ = require("../");
var _2 = _interopRequireDefault(_);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* mdc-icon-toggle
*
* See:
* https://material.io/develop/web/components/buttons/icon-toggle-buttons/
*
*/
var MDC_ICONTOGGLE = "mdc-icon-toggle"; /**
* Copyright (c) 2015-present, CWB SAS
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var IconToggle = function (_Component) {
(0, _inherits3.default)(IconToggle, _Component);
function IconToggle() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, IconToggle);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = IconToggle.__proto__ || Object.getPrototypeOf(IconToggle)).call.apply(_ref, [this].concat(args))), _this), _this.state = { pressed: _this.props.pressed }, _this.handleClick = function (event) {
event.preventDefault();
var pressed = !_this.state.pressed;
_this.setState({ pressed: pressed });
if (_this.props.onChange) {
_this.props.onChange(pressed);
}
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(IconToggle, [{
key: "render",
value: function render() {
var _this2 = this;
var _props = this.props,
disabled = _props.disabled,
name = _props.name,
label = _props.label,
labelOff = _props.labelOff,
onChange = _props.onChange,
color = _props.color,
fa = _props.fa,
children = _props.children,
off = _props.off,
props = (0, _objectWithoutProperties3.default)(_props, ["disabled", "name", "label", "labelOff", "onChange", "color", "fa", "children", "off"]);
var classes = MDC_ICONTOGGLE;
var ch = this.state.pressed ? children : off;
if (name) {
ch = this.state.pressed ? name : off;
classes += " material-icons";
} else if (fa) {
var cn = "fa";
var icon = " fa-" + fa;
if (this.state.pressed) {
if (!off) {
cn = "fas";
}
} else if (off) {
icon = " fa-" + off;
} else {
cn = "far";
}
ch = _react2.default.createElement("i", { className: "" + cn + icon });
}
if (disabled) {
classes += " mdc-icon-toggle--disabled";
}
var style = {};
if (color) {
style.color = color;
}
var l = this.state.pressed ? label : labelOff;
var element = _react2.default.createElement(
"i",
{
className: classes,
role: "button",
"aria-pressed": this.state.pressed,
"arria-label": l,
tabIndex: "0",
style: style,
onKeyUp: function onKeyUp(e) {
e.preventDefault();
},
onClick: function onClick(e) {
if (!disabled) {
_this2.handleClick(e);
}
}
},
ch
);
return _2.default.render(element, props);
}
}], [{
key: "getDerivedStateFromProps",
value: function getDerivedStateFromProps(nextProps, prevState) {
var pressed = nextProps.pressed;
if (pressed !== prevState.pressed && !nextProps.derivedState) {
return { pressed: pressed };
}
return null;
}
}]);
return IconToggle;
}(_react.Component);
exports.default = IconToggle;
IconToggle.defaultProps = {
mdcElement: MDC_ICONTOGGLE,
pressed: false,
disabled: false,
label: null,
fa: null,
children: null,
off: null,
onChange: null,
color: null
};
IconToggle.propTypes = {
mdcElement: _propTypes2.default.string,
pressed: _propTypes2.default.bool,
disabled: _propTypes2.default.bool,
name: _propTypes2.default.string,
fa: _propTypes2.default.string,
children: _propTypes2.default.node,
off: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.string]),
label: _propTypes2.default.string,
labelOff: _propTypes2.default.string,
onChange: _propTypes2.default.func,
color: _propTypes2.default.string
};