UNPKG

@bigfishtv/cockpit

Version:

161 lines (127 loc) 5.14 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _class, _temp; var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Button = require('../button/Button'); var _Button2 = _interopRequireDefault(_Button); var _Modal = require('./Modal'); var _Modal2 = _interopRequireDefault(_Modal); var _Table = require('../table/Table'); var _Table2 = _interopRequireDefault(_Table); var _Spinner = require('../Spinner'); var _Spinner2 = _interopRequireDefault(_Spinner); var _xhrUtils = require('../../api/xhrUtils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * Modal component for dynamically selecting items loaded via a json url, typically used by ModelSelectModal */ var ModelModal = (_temp = _class = function (_Component) { _inherits(ModelModal, _Component); function ModelModal(props) { _classCallCheck(this, ModelModal); var _this = _possibleConstructorReturn(this, _Component.call(this, props)); _this.handleClose = function () { _this.props.closeModal(); }; _this.handleSelect = function (item) { var multiple = _this.props.multiple || _this.props.multiselect; _this.props.onSave(multiple ? [item] : item); _this.handleClose(); }; _this.handleSave = function () { var _this$state = _this.state, data = _this$state.data, selectedIds = _this$state.selectedIds; var multiple = _this.props.multiple || _this.props.multiselect; var items = data.filter(function (item) { return selectedIds.indexOf(item.id) >= 0; }); _this.props.onSave(multiple ? items : items.length ? items[0] : null); _this.handleClose(); }; _this.state = { selectedIds: [], error: false, loading: true, data: [] }; return _this; } ModelModal.prototype.componentDidMount = function componentDidMount() { var _this2 = this; var url = this.props.url; (0, _xhrUtils.get)({ url: url, quietSuccess: true, callback: function callback(data) { return _this2.setState({ data: data, loading: false, error: false }); }, errorCallback: function errorCallback(data) { return _this2.setState({ error: true }); } }); }; ModelModal.prototype.render = function render() { var _this3 = this; var _state = this.state, data = _state.data, selectedIds = _state.selectedIds, loading = _state.loading, error = _state.error; return _react2.default.createElement( _Modal2.default, { title: this.props.title, size: 'small', ModalActions: function ModalActions(props) { return _react2.default.createElement( 'div', null, _react2.default.createElement(_Button2.default, { text: 'Select', style: 'primary', onClick: _this3.handleSave, disabled: !selectedIds.length }), _react2.default.createElement(_Button2.default, { text: 'Cancel', onClick: _this3.handleClose }) ); } }, loading ? _react2.default.createElement( 'div', { className: 'loader-center' }, error ? _react2.default.createElement(Icon, { name: 'warning' }) : _react2.default.createElement(_Spinner2.default, null) ) : _react2.default.createElement(_Table2.default, { data: data, selectedIds: selectedIds, fields: this.props.fields, multiselect: this.props.multiselect, onSelect: this.handleSelect, onSelectionChange: function onSelectionChange(selectedIds) { return _this3.setState({ selectedIds: selectedIds }); }, negativeHeight: 400 }) ); }; return ModelModal; }(_react.Component), _class.propTypes = { /** Modal title */ title: _propTypes2.default.string, /** Url to model index json */ url: _propTypes2.default.string.isRequired, /** Allow multiple selections */ multiple: _propTypes2.default.bool, /** [Depreciated] Allow multiple selections */ multiselect: _propTypes2.default.bool, /** Fields to display in table */ fields: _propTypes2.default.arrayOf(_propTypes2.default.object) }, _class.defaultProps = { title: 'Select', url: null, multiple: false, multiselect: false, fields: [] }, _temp); exports.default = ModelModal;