UNPKG

@cognitive-class/jupyterlab-cde-plugin

Version:

Drop-in Cognos Dashboard Embedded plugin for Jupyterlab

232 lines (200 loc) 19.5 kB
import _extends from 'babel-runtime/helpers/extends'; import _regeneratorRuntime from 'babel-runtime/regenerator'; import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray'; import _asyncToGenerator from 'babel-runtime/helpers/asyncToGenerator'; import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of'; import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; import _createClass from 'babel-runtime/helpers/createClass'; import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; import _inherits from 'babel-runtime/helpers/inherits'; import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import Tree from 'antd/lib/tree'; import Spin from 'antd/lib/spin'; import Form from 'antd/lib/form'; import Input from 'antd/lib/input'; import Dialog from './dialog'; require('antd/lib/tree/style/index.css'); require('antd/lib/spin/style/index.css'); require('./preference-dialog.scss'); var TreeNode = Tree.TreeNode, DirectoryTree = Tree.DirectoryTree; var FormItem = Form.Item; var transformFileListToTreeData = function transformFileListToTreeData(fileList) { var treeData = []; fileList.forEach(function (_ref) { var type = _ref.type, name = _ref.name, path = _ref.path, mimetype = _ref.mimetype; if (type === 'file') { treeData.push({ title: name, key: path, mimetype: mimetype, isLeaf: true }); } else if (type === 'directory') { treeData.unshift({ title: name, key: path, mimetype: mimetype, isLeaf: false }); } }); return treeData; }; var PreferenceDialog = function (_PureComponent) { _inherits(PreferenceDialog, _PureComponent); function PreferenceDialog() { var _ref2, _this2 = this; var _temp, _this, _ret; _classCallCheck(this, PreferenceDialog); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = PreferenceDialog.__proto__ || _Object$getPrototypeOf(PreferenceDialog)).call.apply(_ref2, [this].concat(args))), _this), _this.state = { treeData: [], selectedFiles: [] }, _this.onLoadData = function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref4) { var _ref4$props = _ref4.props, dataRef = _ref4$props.dataRef, eventKey = _ref4$props.eventKey, children = _ref4$props.children; var resp, _ref5, content, treeData; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!children) { _context.next = 2; break; } return _context.abrupt('return'); case 2: _context.next = 4; return fetch('/user-redirect/api/contents/' + eventKey, { cache: 'no-cache', mode: 'cors', credentials: 'include' }); case 4: resp = _context.sent; _context.next = 7; return resp.json(); case 7: _ref5 = _context.sent; content = _ref5.content; // eslint-disable-next-line no-param-reassign dataRef.children = transformFileListToTreeData(content); treeData = _this.state.treeData; _this.setState({ treeData: [].concat(_toConsumableArray(treeData)) }); case 12: case 'end': return _context.stop(); } } }, _callee, _this2); })); return function (_x) { return _ref3.apply(this, arguments); }; }(), _this.handleSelect = function (selectedKeys, e) { var selectedNodes = e.selectedNodes; var selectedFiles = selectedNodes.filter(function (_ref6) { var _ref6$props$isLeaf = _ref6.props.isLeaf, isLeaf = _ref6$props$isLeaf === undefined ? false : _ref6$props$isLeaf; return isLeaf; }).map(function (_ref7) { var key = _ref7.key; return key; }); _this.setState({ selectedFiles: selectedFiles }); }, _this.handleSubmit = function (e) { e.preventDefault(); var selectedFiles = _this.state.selectedFiles; var onSave = _this.props.onSave; onSave(selectedFiles); }, _this.renderTreeNodes = function (data) { return data.map(function (item) { if (item.children) { return React.createElement( TreeNode, { title: item.title, key: item.key, dataRef: item, mimetype: item.mimetype, disabled: true }, _this.renderTreeNodes(item.children) ); } return React.createElement(TreeNode, _extends({}, item, { dataRef: item, mimetype: item.mimetype, selectable: item.mimetype === 'text/csv' })); }); }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(PreferenceDialog, [{ key: 'componentDidMount', value: function componentDidMount() { var _this3 = this; fetch('/user-redirect/api/contents', { cache: 'no-cache', mode: 'cors', credentials: 'include' }).then(function (resp) { return resp.json(); }).then(function (_ref8) { var content = _ref8.content; var treeData = transformFileListToTreeData(content); _this3.setState({ treeData: treeData }); }); } }, { key: 'render', value: function render() { var _props = this.props, innerRef = _props.innerRef, onCancel = _props.onCancel, title = _props.title, content = _props.content, handleChange = _props.handleChange, username = _props.username; var treeData = this.state.treeData; return React.createElement( Dialog, { innerRef: innerRef, title: title, onCancel: onCancel, onSubmit: this.handleSubmit, okText: 'Next' }, content, React.createElement( Form, { layout: 'horizontal' }, React.createElement( FormItem, { label: 'CSV File URL' }, React.createElement(Input, { placeholder: 'https://gist.github.com/username/file.csv', name: 'csvUrl', onChange: handleChange }) ), React.createElement( FormItem, { label: 'Or select a file from public folder below' }, React.createElement(Input, { placeholder: 'Your CC Labs Username', name: 'username', value: username, disabled: true }) ) ), treeData.length ? React.createElement( DirectoryTree, { onSelect: this.handleSelect, loadData: this.onLoadData }, this.renderTreeNodes(treeData) ) : React.createElement( 'div', { className: 'spin' }, React.createElement(Spin, null) ) ); } }]); return PreferenceDialog; }(PureComponent); PreferenceDialog.displayName = 'PreferenceDialog'; PreferenceDialog.propTypes = { innerRef: PropTypes.func.isRequired, onCancel: PropTypes.func.isRequired, onSave: PropTypes.func.isRequired, title: PropTypes.node.isRequired, content: PropTypes.node.isRequired, handleChange: PropTypes.func.isRequired }; export default PreferenceDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb3VyY2UtbWFuYWdlci9wcmVmZXJlbmNlLWRpYWxvZy5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJUcmVlIiwiU3BpbiIsIkZvcm0iLCJJbnB1dCIsIkRpYWxvZyIsInJlcXVpcmUiLCJUcmVlTm9kZSIsIkRpcmVjdG9yeVRyZWUiLCJGb3JtSXRlbSIsIkl0ZW0iLCJ0cmFuc2Zvcm1GaWxlTGlzdFRvVHJlZURhdGEiLCJmaWxlTGlzdCIsInRyZWVEYXRhIiwiZm9yRWFjaCIsInR5cGUiLCJuYW1lIiwicGF0aCIsIm1pbWV0eXBlIiwicHVzaCIsInRpdGxlIiwia2V5IiwiaXNMZWFmIiwidW5zaGlmdCIsIlByZWZlcmVuY2VEaWFsb2ciLCJzdGF0ZSIsInNlbGVjdGVkRmlsZXMiLCJvbkxvYWREYXRhIiwicHJvcHMiLCJkYXRhUmVmIiwiZXZlbnRLZXkiLCJjaGlsZHJlbiIsImZldGNoIiwiY2FjaGUiLCJtb2RlIiwiY3JlZGVudGlhbHMiLCJyZXNwIiwianNvbiIsImNvbnRlbnQiLCJzZXRTdGF0ZSIsImhhbmRsZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsImUiLCJzZWxlY3RlZE5vZGVzIiwiZmlsdGVyIiwibWFwIiwiaGFuZGxlU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJvblNhdmUiLCJyZW5kZXJUcmVlTm9kZXMiLCJkYXRhIiwiaXRlbSIsInRoZW4iLCJpbm5lclJlZiIsIm9uQ2FuY2VsIiwiaGFuZGxlQ2hhbmdlIiwidXNlcm5hbWUiLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBcUMsT0FBckM7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixlQUFqQjtBQUNBLE9BQU9DLElB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QUFRaEQsVUFBVTRELElBQVYsQ0FBZUMsVUFITjtBQUlqQnpDLFNBQU9wQixVQUFVOEQsSUFBVixDQUFlRCxVQUpMO0FBS2pCdkIsV0FBU3RDLFVBQVU4RCxJQUFWLENBQWVELFVBTFA7QUFNakJOLGdCQUFjdkQsVUFBVTRELElBQVYsQ0FBZUM7QUFOWixDO2VBSEFyQyxnQiIsImZpbGUiOiJwcmVmZXJlbmNlLWRpYWxvZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgVHJlZSBmcm9tICdhbnRkL2xpYi90cmVlJ1xuaW1wb3J0IFNwaW4gZnJvbSAnYW50ZC9saWIvc3BpbidcbmltcG9ydCBGb3JtIGZyb20gJ2FudGQvbGliL2Zvcm0nXG5pbXBvcnQgSW5wdXQgZnJvbSAnYW50ZC9saWIvaW5wdXQnXG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vZGlhbG9nJ1xuXG5yZXF1aXJlKCdhbnRkL2xpYi90cmVlL3N0eWxlL2luZGV4LmNzcycpXG5yZXF1aXJlKCdhbnRkL2xpYi9zcGluL3N0eWxlL2luZGV4LmNzcycpXG5yZXF1aXJlKCcuL3ByZWZlcmVuY2UtZGlhbG9nLnNjc3MnKVxuXG5jb25zdCB7IFRyZWVOb2RlLCBEaXJlY3RvcnlUcmVlIH0gPSBUcmVlXG5cbmNvbnN0IEZvcm1JdGVtID0gRm9ybS5JdGVtXG5cbmNvbnN0IHRyYW5zZm9ybUZpbGVMaXN0VG9UcmVlRGF0YSA9IChmaWxlTGlzdCkgPT4ge1xuICBjb25zdCB0cmVlRGF0YSA9IFtdXG4gIGZpbGVMaXN0LmZvckVhY2goKHtcbiAgICB0eXBlLCBuYW1lLCBwYXRoLCBtaW1ldHlwZSxcbiAgfSkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcbiAgICAgIHRyZWVEYXRhLnB1c2goe1xuICAgICAgICB0aXRsZTogbmFtZSwga2V5OiBwYXRoLCBtaW1ldHlwZSwgaXNMZWFmOiB0cnVlLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkaXJlY3RvcnknKSB7XG4gICAgICB0cmVlRGF0YS51bnNoaWZ0KHtcbiAgICAgICAgdGl0bGU6IG5hbWUsIGtleTogcGF0aCwgbWltZXR5cGUsIGlzTGVhZjogZmFsc2UsXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRyZWVEYXRhXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWZlcmVuY2VEaWFsb2cgZXh0ZW5kcyBQdXJlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRpc3BsYXlOYW1lID0gJ1ByZWZlcmVuY2VEaWFsb2cnXG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBpbm5lclJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNhbmNlbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblNhdmU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBoYW5kbGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIH1cblxuICBzdGF0ZSA9IHtcbiAgICB0cmVlRGF0YTogW10sXG4gICAgc2VsZWN0ZWRGaWxlczogW10sXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBmZXRjaCgnL3VzZXItcmVkaXJlY3QvYXBpL2NvbnRlbnRzJywgeyBjYWNoZTogJ25vLWNhY2hlJywgbW9kZTogJ2NvcnMnLCBjcmVkZW50aWFsczogJ2luY2x1ZGUnIH0pXG4gICAgICAudGhlbihyZXNwID0+IHJlc3AuanNvbigpKVxuICAgICAgLnRoZW4oKHsgY29udGVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdHJhbnNmb3JtRmlsZUxpc3RUb1RyZWVEYXRhKGNvbnRlbnQpXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0cmVlRGF0YSB9KVxuICAgICAgfSlcbiAgfVxuXG4gIG9uTG9hZERhdGEgPSBhc3luYyAoe1xuICAgIHByb3BzOiB7XG4gICAgICBkYXRhUmVmLCBldmVudEtleSwgY2hpbGRyZW4sXG4gICAgfSxcbiAgfSkgPT4ge1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBmZXRjaChgL3VzZXItcmVkaXJlY3QvYXBpL2NvbnRlbnRzLyR7ZXZlbnRLZXl9YCwgeyBjYWNoZTogJ25vLWNhY2hlJywgbW9kZTogJ2NvcnMnLCBjcmVkZW50aWFsczogJ2luY2x1ZGUnIH0pXG4gICAgY29uc3QgeyBjb250ZW50IH0gPSBhd2FpdCByZXNwLmpzb24oKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIGRhdGFSZWYuY2hpbGRyZW4gPSB0cmFuc2Zvcm1GaWxlTGlzdFRvVHJlZURhdGEoY29udGVudClcbiAgICBjb25zdCB7IHRyZWVEYXRhIH0gPSB0aGlzLnN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB0cmVlRGF0YTogWy4uLnRyZWVEYXRhXSxcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlU2VsZWN0ID0gKHNlbGVjdGVkS2V5cywgZSkgPT4ge1xuICAgIGNvbnN0IHsgc2VsZWN0ZWROb2RlcyB9ID0gZVxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZXMgPSBzZWxlY3RlZE5vZGVzLmZpbHRlcigoeyBwcm9wczogeyBpc0xlYWYgPSBmYWxzZSB9IH0pID0+IGlzTGVhZikubWFwKCh7IGtleSB9KSA9PiBrZXkpXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRmlsZXMgfSlcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBjb25zdCB7IHNlbGVjdGVkRmlsZXMgfSA9IHRoaXMuc3RhdGVcbiAgICBjb25zdCB7IG9uU2F2ZSB9ID0gdGhpcy5wcm9wc1xuICAgIG9uU2F2ZShzZWxlY3RlZEZpbGVzKVxuICB9XG5cbiAgcmVuZGVyVHJlZU5vZGVzID0gZGF0YSA9PiBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHJlZU5vZGUgdGl0bGU9e2l0ZW0udGl0bGV9IGtleT17aXRlbS5rZXl9IGRhdGFSZWY9e2l0ZW19IG1pbWV0eXBlPXtpdGVtLm1pbWV0eXBlfSBkaXNhYmxlZD5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJUcmVlTm9kZXMoaXRlbS5jaGlsZHJlbil9XG4gICAgICAgIDwvVHJlZU5vZGU+XG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiA8VHJlZU5vZGUgey4uLml0ZW19IGRhdGFSZWY9e2l0ZW19IG1pbWV0eXBlPXtpdGVtLm1pbWV0eXBlfSBzZWxlY3RhYmxlPXtpdGVtLm1pbWV0eXBlID09PSAndGV4dC9jc3YnfSAvPlxuICB9KVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBpbm5lclJlZixcbiAgICAgIG9uQ2FuY2VsLFxuICAgICAgdGl0bGUsXG4gICAgICBjb250ZW50LFxuICAgICAgaGFuZGxlQ2hhbmdlLFxuICAgICAgdXNlcm5hbWUsXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IHsgdHJlZURhdGEgfSA9IHRoaXMuc3RhdGVcblxuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nXG4gICAgICAgIGlubmVyUmVmPXtpbm5lclJlZn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgb2tUZXh0PVwiTmV4dFwiXG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICA8Rm9ybSBsYXlvdXQ9XCJob3Jpem9udGFsXCI+XG4gICAgICAgICAgPEZvcm1JdGVtIGxhYmVsPVwiQ1NWIEZpbGUgVVJMXCI+XG4gICAgICAgICAgICA8SW5wdXQgcGxhY2Vob2xkZXI9XCJodHRwczovL2dpc3QuZ2l0aHViLmNvbS91c2VybmFtZS9maWxlLmNzdlwiIG5hbWU9XCJjc3ZVcmxcIiBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSAvPlxuICAgICAgICAgIDwvRm9ybUl0ZW0+XG4gICAgICAgICAgPEZvcm1JdGVtIGxhYmVsPVwiT3Igc2VsZWN0IGEgZmlsZSBmcm9tIHB1YmxpYyBmb2xkZXIgYmVsb3dcIj5cbiAgICAgICAgICAgIDxJbnB1dCBwbGFjZWhvbGRlcj1cIllvdXIgQ0MgTGFicyBVc2VybmFtZVwiIG5hbWU9XCJ1c2VybmFtZVwiIHZhbHVlPXt1c2VybmFtZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgICA8L0Zvcm1JdGVtPlxuICAgICAgICA8L0Zvcm0+XG4gICAgICAgIHt0cmVlRGF0YS5sZW5ndGhcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgIDxEaXJlY3RvcnlUcmVlXG4gICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLmhhbmRsZVNlbGVjdH1cbiAgICAgICAgICAgICAgbG9hZERhdGE9e3RoaXMub25Mb2FkRGF0YX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyVHJlZU5vZGVzKHRyZWVEYXRhKX1cbiAgICAgICAgICAgIDwvRGlyZWN0b3J5VHJlZT4pXG4gICAgICAgICAgOiA8ZGl2IGNsYXNzTmFtZT1cInNwaW5cIj48U3BpbiAvPjwvZGl2Pn1cbiAgICAgIDwvRGlhbG9nPlxuICAgIClcbiAgfVxufVxuIl19