@iobroker/adapter-react
Version:
React classes to develop admin interfaces for ioBroker with react.
168 lines (134 loc) • 6.44 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _react = _interopRequireDefault(require("react"));
var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles"));
var _Fab = _interopRequireDefault(require("@material-ui/core/Fab"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _Toolbar = _interopRequireDefault(require("@material-ui/core/Toolbar"));
var _i18n = _interopRequireDefault(require("../i18n"));
var _Save = _interopRequireDefault(require("@material-ui/icons/Save"));
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var styles = function styles(theme) {
return {
buttonIcon: {
marginRight: 8
}
};
};
/**
* @typedef {object} LogoProps
* @property {boolean} noTextOnButtons Are the buttons without text
* @property {any} theme Theme object (from this.state.theme)
* @property {boolean} isIFrame bottom position 0 or 38 for iFrame
* @property {function} onSave on Save handler
* @property {function} onClose on Close handler
*
* @extends {React.Component<LogoProps>}
*/
var SaveCloseButtons = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(SaveCloseButtons, _React$Component);
var _super = _createSuper(SaveCloseButtons);
function SaveCloseButtons(props) {
var _this;
(0, _classCallCheck2["default"])(this, SaveCloseButtons);
_this = _super.call(this, props);
try {
_this.isIFrame = !props.newReact && window.self !== window.top;
} catch (e) {
_this.isIFrame = !props.newReact;
}
return _this;
}
(0, _createClass2["default"])(SaveCloseButtons, [{
key: "render",
value: function render() {
var _this2 = this;
var noTextOnButtons = this.props.noTextOnButtons;
var buttonStyle = {
borderRadius: this.props.theme.saveToolbar.button.borderRadius || 3,
height: this.props.theme.saveToolbar.button.height || 32
};
var style = {
bottom: this.isIFrame ? 38 : 0,
left: this.props.paddingLeft || 0,
right: 0,
position: 'absolute',
background: this.props.theme.saveToolbar.background
};
if (this.props.dense) {
style.minHeight = 48;
}
if (this.props.error) {
buttonStyle.border = '1px solid red';
}
return /*#__PURE__*/_react["default"].createElement(_Toolbar["default"], {
position: "absolute",
style: style
}, /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
variant: "extended",
"aria-label": "Save",
disabled: !this.props.changed || this.props.error,
onClick: function onClick() {
return _this2.props.onSave(false);
},
style: buttonStyle
}, /*#__PURE__*/_react["default"].createElement(_Save["default"], {
className: !noTextOnButtons ? this.props.classes.buttonIcon : ''
}), !noTextOnButtons && _i18n["default"].t('ra_Save')), /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
variant: "extended",
"aria-label": "Save and close",
disabled: !this.props.changed || this.props.error,
onClick: function onClick() {
return _this2.props.onSave(true);
},
style: Object.assign({}, buttonStyle, {
marginLeft: 10
})
}, /*#__PURE__*/_react["default"].createElement(_Save["default"], {
className: !noTextOnButtons ? this.props.classes.buttonIcon : ''
}), !noTextOnButtons ? _i18n["default"].t('ra_Save and close') : '+', noTextOnButtons && /*#__PURE__*/_react["default"].createElement(_Close["default"], null)), /*#__PURE__*/_react["default"].createElement("div", {
style: {
flexGrow: 1
}
}), /*#__PURE__*/_react["default"].createElement(_Fab["default"], {
variant: "extended",
"aria-label": "Close",
onClick: function onClick() {
return _this2.props.onClose();
},
style: buttonStyle
}, /*#__PURE__*/_react["default"].createElement(_Close["default"], {
className: !noTextOnButtons ? this.props.classes.buttonIcon : ''
}), !noTextOnButtons && _i18n["default"].t('ra_Close')));
}
}]);
return SaveCloseButtons;
}(_react["default"].Component);
SaveCloseButtons.propTypes = {
dense: _propTypes["default"].bool,
paddingLeft: _propTypes["default"].number,
noTextOnButtons: _propTypes["default"].bool,
theme: _propTypes["default"].object,
isIFrame: _propTypes["default"].bool,
changed: _propTypes["default"].bool.isRequired,
error: _propTypes["default"].bool,
onSave: _propTypes["default"].func.isRequired,
onClose: _propTypes["default"].func.isRequired,
newReact: _propTypes["default"].bool
};
/** @type {typeof SaveCloseButtons} */
var _export = (0, _withStyles["default"])(styles)(SaveCloseButtons);
var _default = _export;
exports["default"] = _default;
//# sourceMappingURL=SaveCloseButtons.js.map