@cognitive-class/jupyterlab-cde-plugin
Version:
Drop-in Cognos Dashboard Embedded plugin for Jupyterlab
188 lines (147 loc) • 14.5 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
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);
exports.openDialog = openDialog;
var _events = require('events');
var _events2 = _interopRequireDefault(_events);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _preferenceDialog = require('./preference-dialog');
var _preferenceDialog2 = _interopRequireDefault(_preferenceDialog);
var _sourceMetaDialog = require('./source-meta-dialog');
var _sourceMetaDialog2 = _interopRequireDefault(_sourceMetaDialog);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var emitter = new _events2.default();
function openDialog() {
emitter.emit('openDialog');
}
var Container = function (_PureComponent) {
(0, _inherits3.default)(Container, _PureComponent);
function Container() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, Container);
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 = Container.__proto__ || (0, _getPrototypeOf2.default)(Container)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
isDialogOpen: false,
isSourceMetaDialogOpen: false,
selectedFiles: [],
csvUrl: null,
username: null
}, _this.openDialog = function () {
_this.setState({
selectedFiles: [],
csvUrl: null,
isDialogOpen: true
});
}, _this.closeDialog = function () {
_this.setState({
isDialogOpen: false
});
}, _this.handlePreferenceDialogRef = function (node) {
_this.preferenceDialog = node;
}, _this.handleSourceMetaDialogRef = function (node) {
_this.sourceMetaDialog = node;
}, _this.handleSave = function (selectedFiles) {
var _this$state = _this.state,
username = _this$state.username,
csvUrl = _this$state.csvUrl;
if (!csvUrl && !(username && selectedFiles.length > 0)) return;
_this.setState({
isDialogOpen: false,
isSourceMetaDialogOpen: true,
selectedFiles: selectedFiles
});
}, _this.handleSourceMetaSave = function () {
_this.setState({
isSourceMetaDialogOpen: false,
selectedFiles: []
});
}, _this.handleCancel = function () {
_this.setState({
isDialogOpen: false,
isSourceMetaDialogOpen: false
});
}, _this.handleCSVUrlChange = function (event) {
var target = event.target;
var value = target.type === 'checkbox' ? target.checked : target.value;
var name = target.name;
_this.setState((0, _defineProperty3.default)({}, name, value));
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(Container, [{
key: 'componentDidMount',
value: function componentDidMount() {
emitter.on('openDialog', this.openDialog);
function readCookie(k) {
return (document.cookie.match('(^|; )' + k + '=([^;]*)') || 0)[2];
}
var username = readCookie('username');
this.setState({ username: username });
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
emitter.removeListener('openDialog', this.openDialog);
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
preferencesDialogTitle = _props.preferencesDialogTitle,
preferencesDialogContent = _props.preferencesDialogContent;
var _state = this.state,
isDialogOpen = _state.isDialogOpen,
isSourceMetaDialogOpen = _state.isSourceMetaDialogOpen,
csvUrl = _state.csvUrl,
selectedFiles = _state.selectedFiles,
username = _state.username;
return _react2.default.createElement(
_react.Fragment,
null,
isDialogOpen && _react2.default.createElement(_preferenceDialog2.default, {
innerRef: this.handlePreferenceDialogRef,
onCancel: this.handleCancel,
onSave: this.handleSave,
title: preferencesDialogTitle,
content: preferencesDialogContent,
handleChange: this.handleCSVUrlChange,
username: username
}),
isSourceMetaDialogOpen && _react2.default.createElement(_sourceMetaDialog2.default, {
innerRef: this.handleSourceMetaDialogRef,
onCancel: this.handleCancel,
onSave: this.handleSourceMetaSave,
csvUrl: csvUrl,
selectedFiles: selectedFiles,
username: username
})
);
}
}]);
return Container;
}(_react.PureComponent);
Container.displayName = 'Container';
Container.propTypes = {
preferencesDialogTitle: _propTypes2.default.node.isRequired,
preferencesDialogContent: _propTypes2.default.node.isRequired
};
exports.default = Container;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb3VyY2UtbWFuYWdlci9jb250YWluZXIuanMiXSwibmFtZXMiOlsib3BlbkRpYWxvZyIsImVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJlbWl0IiwiQ29udGFpbmVyIiwic3RhdGUiLCJpc0RpYWxvZ09wZW4iLCJpc1NvdXJjZU1ldGFEaWFsb2dPcGVuIiwic2VsZWN0ZWRGaWxlcyIsImNzdlVybCIsInVzZXJuYW1lIiwic2V0U3RhdGUiLCJjbG9zZURpYWxvZyIsImhhbmRsZVByZWZlcmVuY2VEaWFsb2dSZWYiLCJub2RlIiwicHJlZmVyZW5jZURpYWxvZyIsImhhbmRsZVNvdXJjZU1ldGFEaWFsb2dSZWYiLCJzb3VyY2VNZXRhRGlhbG9nIiwiaGFuZGxlU2F2ZSIsImxlbmd0aCIsImhhbmRsZVNvdXJjZU1ldGFTYXZlIiwiaGFuZGxlQ2FuY2VsIiwiaGFuZGxlQ1NWVXJsQ2hhbmdlIiwiZXZlbnQiLCJ0YXJnZXQiLCJ2YWx1ZSIsInR5cGUiLCJjaGVja2VkIiwibmFtZSIsIm9uIiwicmVhZENvb2tpZSIsImsiLCJkb2N1bWVudCIsImNvb2tpZSIsIm1hdGNoIiwicmVtb3ZlTGlzdGVuZXIiLCJwcm9wcyIsInByZWZlcmVuY2VzRGlhbG9nVGl0bGUiLCJwcmVmZXJlbmNlc0RpYWxvZ0NvbnRlbnQiLCJQdXJlQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFRZ0JBLFUsR0FBQUEsVTs7QUFSaEI7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUMsVUFBVSxJQUFJQyxnQkFBSixFQUFoQjs7QUFFTyxTQUFTRixVQUFULEdBQXNCO0FBQzNCQyxVQUFRRSxJQUFSLENBQWEsWUFBYjtBQUNEOztJQUVvQkMsUzs7Ozs7Ozs7Ozs7Ozs7a05BUW5CQyxLLEdBQVE7QUFD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LGlCQUFPbUIsc0JBSlQ7QUFLRSxtQkFBU0Msd0JBTFg7QUFNRSx3QkFBYyxLQUFLaEIsa0JBTnJCO0FBT0Usb0JBQVVaO0FBUFosVUFGSjtBQVlHSCxrQ0FDQyw4QkFBQywwQkFBRDtBQUNFLG9CQUFVLEtBQUtTLHlCQURqQjtBQUVFLG9CQUFVLEtBQUtLLFlBRmpCO0FBR0Usa0JBQVEsS0FBS0Qsb0JBSGY7QUFJRSxrQkFBUVgsTUFKVjtBQUtFLHlCQUFlRCxhQUxqQjtBQU1FLG9CQUFVRTtBQU5aO0FBYkosT0FERjtBQXlCRDs7O0VBckhvQzZCLG9COztBQUFsQm5DLFMsQ0FDWm9DLFcsR0FBYyxXO0FBREZwQyxTLENBR1pxQyxTLEdBQVk7QUFDakJKLDBCQUF3Qkssb0JBQVU1QixJQUFWLENBQWU2QixVQUR0QjtBQUVqQkwsNEJBQTBCSSxvQkFBVTVCLElBQVYsQ0FBZTZCO0FBRnhCLEM7a0JBSEF2QyxTIiwiZmlsZSI6ImNvbnRhaW5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgUHJlZmVyZW5jZURpYWxvZyBmcm9tICcuL3ByZWZlcmVuY2UtZGlhbG9nJ1xuaW1wb3J0IFNvdXJjZU1ldGFEaWFsb2cgZnJvbSAnLi9zb3VyY2UtbWV0YS1kaWFsb2cnXG5cbmNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5EaWFsb2coKSB7XG4gIGVtaXR0ZXIuZW1pdCgnb3BlbkRpYWxvZycpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhaW5lciBleHRlbmRzIFB1cmVDb21wb25lbnQge1xuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnQ29udGFpbmVyJ1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgcHJlZmVyZW5jZXNEaWFsb2dUaXRsZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBwcmVmZXJlbmNlc0RpYWxvZ0NvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIH1cblxuICBzdGF0ZSA9IHtcbiAgICBpc0RpYWxvZ09wZW46IGZhbHNlLFxuICAgIGlzU291cmNlTWV0YURpYWxvZ09wZW46IGZhbHNlLFxuICAgIHNlbGVjdGVkRmlsZXM6IFtdLFxuICAgIGNzdlVybDogbnVsbCxcbiAgICB1c2VybmFtZTogbnVsbCxcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGVtaXR0ZXIub24oJ29wZW5EaWFsb2cnLCB0aGlzLm9wZW5EaWFsb2cpXG4gICAgZnVuY3Rpb24gcmVhZENvb2tpZShrKSB7IHJldHVybiAoZG9jdW1lbnQuY29va2llLm1hdGNoKGAoXnw7ICkke2t9PShbXjtdKilgKSB8fCAwKVsyXSB9XG4gICAgY29uc3QgdXNlcm5hbWUgPSByZWFkQ29va2llKCd1c2VybmFtZScpXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHVzZXJuYW1lIH0pXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdvcGVuRGlhbG9nJywgdGhpcy5vcGVuRGlhbG9nKVxuICB9XG5cbiAgb3BlbkRpYWxvZyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkRmlsZXM6IFtdLFxuICAgICAgY3N2VXJsOiBudWxsLFxuICAgICAgaXNEaWFsb2dPcGVuOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBjbG9zZURpYWxvZyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRGlhbG9nT3BlbjogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZVByZWZlcmVuY2VEaWFsb2dSZWYgPSAobm9kZSkgPT4ge1xuICAgIHRoaXMucHJlZmVyZW5jZURpYWxvZyA9IG5vZGVcbiAgfVxuXG4gIGhhbmRsZVNvdXJjZU1ldGFEaWFsb2dSZWYgPSAobm9kZSkgPT4ge1xuICAgIHRoaXMuc291cmNlTWV0YURpYWxvZyA9IG5vZGVcbiAgfVxuXG4gIGhhbmRsZVNhdmUgPSAoc2VsZWN0ZWRGaWxlcykgPT4ge1xuICAgIGNvbnN0IHsgdXNlcm5hbWUsIGNzdlVybCB9ID0gdGhpcy5zdGF0ZVxuICAgIGlmICghY3N2VXJsICYmICEodXNlcm5hbWUgJiYgc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwKSkgcmV0dXJuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0RpYWxvZ09wZW46IGZhbHNlLFxuICAgICAgaXNTb3VyY2VNZXRhRGlhbG9nT3BlbjogdHJ1ZSxcbiAgICAgIHNlbGVjdGVkRmlsZXMsXG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZVNvdXJjZU1ldGFTYXZlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNTb3VyY2VNZXRhRGlhbG9nT3BlbjogZmFsc2UsXG4gICAgICBzZWxlY3RlZEZpbGVzOiBbXSxcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEaWFsb2dPcGVuOiBmYWxzZSxcbiAgICAgIGlzU291cmNlTWV0YURpYWxvZ09wZW46IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICBoYW5kbGVDU1ZVcmxDaGFuZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnRcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC50eXBlID09PSAnY2hlY2tib3gnID8gdGFyZ2V0LmNoZWNrZWQgOiB0YXJnZXQudmFsdWVcbiAgICBjb25zdCB7IG5hbWUgfSA9IHRhcmdldFxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBbbmFtZV06IHZhbHVlLFxuICAgIH0pXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcHJlZmVyZW5jZXNEaWFsb2dUaXRsZSxcbiAgICAgIHByZWZlcmVuY2VzRGlhbG9nQ29udGVudCxcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIGlzRGlhbG9nT3BlbiwgaXNTb3VyY2VNZXRhRGlhbG9nT3BlbiwgY3N2VXJsLCBzZWxlY3RlZEZpbGVzLCB1c2VybmFtZSxcbiAgICB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAge2lzRGlhbG9nT3BlbiAmJiAoXG4gICAgICAgICAgPFByZWZlcmVuY2VEaWFsb2dcbiAgICAgICAgICAgIGlubmVyUmVmPXt0aGlzLmhhbmRsZVByZWZlcmVuY2VEaWFsb2dSZWZ9XG4gICAgICAgICAgICBvbkNhbmNlbD17dGhpcy5oYW5kbGVDYW5jZWx9XG4gICAgICAgICAgICBvblNhdmU9e3RoaXMuaGFuZGxlU2F2ZX1cbiAgICAgICAgICAgIHRpdGxlPXtwcmVmZXJlbmNlc0RpYWxvZ1RpdGxlfVxuICAgICAgICAgICAgY29udGVudD17cHJlZmVyZW5jZXNEaWFsb2dDb250ZW50fVxuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlPXt0aGlzLmhhbmRsZUNTVlVybENoYW5nZX1cbiAgICAgICAgICAgIHVzZXJuYW1lPXt1c2VybmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7aXNTb3VyY2VNZXRhRGlhbG9nT3BlbiAmJiAoXG4gICAgICAgICAgPFNvdXJjZU1ldGFEaWFsb2dcbiAgICAgICAgICAgIGlubmVyUmVmPXt0aGlzLmhhbmRsZVNvdXJjZU1ldGFEaWFsb2dSZWZ9XG4gICAgICAgICAgICBvbkNhbmNlbD17dGhpcy5oYW5kbGVDYW5jZWx9XG4gICAgICAgICAgICBvblNhdmU9e3RoaXMuaGFuZGxlU291cmNlTWV0YVNhdmV9XG4gICAgICAgICAgICBjc3ZVcmw9e2NzdlVybH1cbiAgICAgICAgICAgIHNlbGVjdGVkRmlsZXM9e3NlbGVjdGVkRmlsZXN9XG4gICAgICAgICAgICB1c2VybmFtZT17dXNlcm5hbWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKVxuICB9XG59XG4iXX0=