UNPKG

@cognitive-class/jupyterlab-cde-plugin

Version:

Drop-in Cognos Dashboard Embedded plugin for Jupyterlab

273 lines (217 loc) 21.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); 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); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _papaparse = require('papaparse'); var _papaparse2 = _interopRequireDefault(_papaparse); var _spin = require('antd/lib/spin'); var _spin2 = _interopRequireDefault(_spin); var _notification = require('antd/lib/notification'); var _notification2 = _interopRequireDefault(_notification); var _dialog = require('./dialog'); var _dialog2 = _interopRequireDefault(_dialog); var _sourceMetaForm = require('./source-meta-form'); var _sourceMetaForm2 = _interopRequireDefault(_sourceMetaForm); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } require('antd/lib/spin/style/index.css'); require('antd/lib/notification/style/index.css'); var SourceMetaDialog = function (_PureComponent) { (0, _inherits3.default)(SourceMetaDialog, _PureComponent); function SourceMetaDialog() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, SourceMetaDialog); 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 = SourceMetaDialog.__proto__ || (0, _getPrototypeOf2.default)(SourceMetaDialog)).call.apply(_ref, [this].concat(args))), _this), _this.formRef = _react2.default.createRef(), _this.state = { data: null, previewData: null, toggleAdvanceOption: false, previewColumns: null }, _this.handleToggle = function () { var toggleAdvanceOption = _this.state.toggleAdvanceOption; _this.setState({ toggleAdvanceOption: !toggleAdvanceOption }); }, _this.handleSubmit = function (e) { e.preventDefault(); var onSave = _this.props.onSave; var values = _this.formRef.current.state.values; values.table.column.forEach(function (each, index) { values.table.column[index].label = each.name; }); window.currentDashboard.addSources([{ module: values, name: values.table.name, id: values.source.id }]); onSave(); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(SourceMetaDialog, [{ key: 'componentDidMount', value: function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { var _props, selectedFiles, username, csvUrl, onCancel, requestUrl, fileContent, sourcePlaceholder, sourceId, previewData, previewColumns; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _props = this.props, selectedFiles = _props.selectedFiles, username = _props.username, csvUrl = _props.csvUrl, onCancel = _props.onCancel; requestUrl = csvUrl || 'https://labs-api.cognitiveclass.ai/users/' + username + '/files/' + selectedFiles[0]; _context.next = 4; return fetch('/user-redirect/cognos/filePreview?url=' + requestUrl, { credentials: 'include' }).then(function (resp) { return resp.text(); }).then(function (data) { return _papaparse2.default.parse(data); }); case 4: fileContent = _context.sent; if (!(fileContent.errors.length > 0)) { _context.next = 9; break; } _notification2.default.error({ message: 'File Does Not Exists' }); onCancel(); return _context.abrupt('return'); case 9: sourcePlaceholder = []; sourceId = (Date.now().toString(36) + Math.random().toString(36).substr(2, 5)).toUpperCase(); // eslint-disable-next-line no-return-assign fileContent.data[0].forEach(function (item, index) { return sourcePlaceholder[index] = { name: item, datatype: 'Text', description: '', label: item, usage: 'attribute', regularAggregate: 'none', taxonomyFamily: 'cNone' }; }); // fileContent.data[1].forEach((item, index) => { // // eslint-disable-next-line no-restricted-globals // if (!isNaN(item)) { // sourcePlaceholder[index].datatype = 'NUMERIC' // } // }) previewData = []; fileContent.data.forEach(function (row, index) { var obj = {}; obj.key = index; obj.width = 150; row.forEach(function (item, innerIndex) { obj['column_' + innerIndex] = item; }); previewData.push(obj); }); previewColumns = fileContent.data[0].map(function (item, index) { return { title: 'Column ' + (index + 1), dataIndex: 'column_' + index, key: 'column_' + index }; }); this.setState({ previewData: previewData, previewColumns: previewColumns, data: (0, _extends3.default)({}, this.state.data, { xsd: 'https://ibm.com/daas/module/1.0/module.xsd', source: { id: sourceId, srcUrl: { sourceUrl: requestUrl, mimeType: 'text/csv' } }, table: { name: 'table_' + sourceId, column: sourcePlaceholder }, label: 'Module Name', identifier: 'moduleId' }) }); case 16: case 'end': return _context.stop(); } } }, _callee, this); })); function componentDidMount() { return _ref2.apply(this, arguments); } return componentDidMount; }() }, { key: 'render', value: function render() { var _props2 = this.props, content = _props2.content, onCancel = _props2.onCancel, innerRef = _props2.innerRef; var _state = this.state, data = _state.data, previewData = _state.previewData, previewColumns = _state.previewColumns, toggleAdvanceOption = _state.toggleAdvanceOption; return _react2.default.createElement( _dialog2.default, { innerRef: innerRef, title: 'Edit source metadata', onCancel: onCancel, onSubmit: this.handleSubmit, okText: 'Ok', width: '60vw' }, content, data ? _react2.default.createElement(_sourceMetaForm2.default, { isToggled: toggleAdvanceOption, handleToggle: this.handleToggle, data: data, formRef: this.formRef, previewColumns: previewColumns, previewData: previewData }) : _react2.default.createElement( 'div', { style: { textAlign: 'center' } }, _react2.default.createElement(_spin2.default, { size: 'large' }) ) ); } }]); return SourceMetaDialog; }(_react.PureComponent); SourceMetaDialog.displayName = 'SourceMetaDialog'; SourceMetaDialog.propTypes = { innerRef: _propTypes2.default.func.isRequired, onCancel: _propTypes2.default.func.isRequired, onSave: _propTypes2.default.func.isRequired, content: _propTypes2.default.node.isRequired // selectedFiles: PropTypes.arrayOf(PropTypes.string).isRequired, }; exports.default = SourceMetaDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb3VyY2UtbWFuYWdlci9zb3VyY2UtbWV0YS1kaWFsb2cuanMiXSwibmFtZXMiOlsicmVxdWlyZSIsIlNvdXJjZU1ldGFEaWFsb2ciLCJmb3JtUmVmIiwiUmVhY3QiLCJjcmVhdGVSZWYiLCJzdGF0ZSIsImRhdGEiLCJwcmV2aWV3RGF0YSIsInRvZ2dsZUFkdmFuY2VPcHRpb24iLCJwcmV2aWV3Q29sdW1ucyIsImhhbmRsZVRvZ2dsZSIsInNldFN0YXRlIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0Iiwib25TYXZlIiwicHJvcHMiLCJ2YWx1ZXMiLCJjdXJyZW50IiwidGFibGUiLCJjb2x1bW4iLCJmb3JFYWNoIiwiZWFjaCIsImluZGV4IiwibGFiZWwiLCJuYW1lIiwid2luZG93IiwiY3VycmVudERhc2hib2FyZCIsImFkZFNvdXJjZXMiLCJtb2R1bGUiLCJpZCIsInNvdXJjZSIsInNlbGVjdGVkRmlsZXMiLCJ1c2VybmFtZSIsImNzdlVybCIsIm9uQ2FuY2VsIiwicmVxdWVzdFVybCIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJ0aGVuIiwicmVzcCIsInRleHQiLCJQYXBhIiwicGFyc2UiLCJmaWxlQ29udGVudCIsImVycm9ycyIsImxlbmd0aCIsIm5vdGlmaWNhdGlvbiIsImVycm9yIiwibWVzc2FnZSIsInNvdXJjZVBsYWNlaG9sZGVyIiwic291cmNlSWQiLCJEYXRlIiwibm93IiwidG9TdHJpbmciLCJNYXRoIiwicmFuZG9tIiwic3Vic3RyIiwidG9VcHBlckNhc2UiLCJpdGVtIiwiZGF0YXR5cGUiLCJkZXNjcmlwdGlvbiIsInVzYWdlIiwicmVndWxhckFnZ3JlZ2F0ZSIsInRheG9ub215RmFtaWx5Iiwicm93Iiwib2JqIiwia2V5Iiwid2lkdGgiLCJpbm5lckluZGV4IiwicHVzaCIsIm1hcCIsInRpdGxlIiwiZGF0YUluZGV4IiwieHNkIiwic3JjVXJsIiwic291cmNlVXJsIiwibWltZVR5cGUiLCJpZGVudGlmaWVyIiwiY29udGVudCIsImlubmVyUmVmIiwidGV4dEFsaWduIiwiUHVyZUNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJub2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQUEsUUFBUSwrQkFBUjtBQUNBQSxRQUFRLHVDQUFSOztJQUVxQkMsZ0I7Ozs7Ozs7Ozs7Ozs7O2dPQUNuQkMsTyxHQUFVQyxnQkFBTUMsU0FBTixFLFFBWVZDLEssR0FBUTtBQUNOQyxZQUFNLElBREE7QUFFTkMsbUJBQWEsSUFGUDtBQUdOQywyQkFBcUIsS0FIZjtBQUlOQyxzQkFBZ0I7QUFKVixLLFFBaUZSQyxZLEdBQWUsWUFBTTtBQUFBLFVBQ1hGLG1CQURXLEdBQ2EsTUFBS0gsS0FEbEIsQ0FDWEcsbUJBRFc7O0FBRW5CLFlBQUtHLFFBQUwsQ0FBYyxFQUFFSCxxQkFBcUIsQ0FBQ0EsbUJBQXhCLEVBQWQ7QUFDRCxLLFFBRURJLFksR0FBZSxVQUFDQyxDQUFELEVBQU87QUFDcEJBLFFBQUVDLGNBQUY7QUFEb0IsVUFFWkMsTUFGWSxHQUVELE1BQUtDLEtBRkosQ0FFWkQsTUFGWTtBQUFBLFVBR1pFLE1BSFksR0FHRCxNQUFLZixPQUFMLENBQWFnQixPQUFiLENBQXFCYixLQUhwQixDQUdaWSxNQUhZOztBQUlwQkEsYUFBT0UsS0FBUCxDQUFhQyxNQUFiLENBQW9CQyxPQUFwQixDQUE0QixVQUFDQyxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFDM0NOLGVBQU9FLEtBQVAsQ0FBYUMsTUFBYixDQUFvQkcsS0FBcEIsRUFBMkJDLEtBQTNCLEdBQW1DRixLQUFLRyxJQUF4QztBQUNELE9BRkQ7QUFHQUMsYUFBT0MsZ0JBQVAsQ0FBd0JDLFVBQXhCLENBQW1DLENBQUM7QUFDbENDLGdCQUFR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RDtBQUN4QjtBQUxpQixDO2tCQUxBdEYsZ0IiLCJmaWxlIjoic291cmNlLW1ldGEtZGlhbG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBQYXBhIGZyb20gJ3BhcGFwYXJzZSdcbmltcG9ydCBTcGluIGZyb20gJ2FudGQvbGliL3NwaW4nXG5pbXBvcnQgbm90aWZpY2F0aW9uIGZyb20gJ2FudGQvbGliL25vdGlmaWNhdGlvbidcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi9kaWFsb2cnXG5pbXBvcnQgU291cmNlTWV0YUZvcm0gZnJvbSAnLi9zb3VyY2UtbWV0YS1mb3JtJ1xuXG5yZXF1aXJlKCdhbnRkL2xpYi9zcGluL3N0eWxlL2luZGV4LmNzcycpXG5yZXF1aXJlKCdhbnRkL2xpYi9ub3RpZmljYXRpb24vc3R5bGUvaW5kZXguY3NzJylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291cmNlTWV0YURpYWxvZyBleHRlbmRzIFB1cmVDb21wb25lbnQge1xuICBmb3JtUmVmID0gUmVhY3QuY3JlYXRlUmVmKClcblxuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnU291cmNlTWV0YURpYWxvZydcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGlubmVyUmVmOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uU2F2ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIC8vIHNlbGVjdGVkRmlsZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLmlzUmVxdWlyZWQsXG4gIH1cblxuICBzdGF0ZSA9IHtcbiAgICBkYXRhOiBudWxsLFxuICAgIHByZXZpZXdEYXRhOiBudWxsLFxuICAgIHRvZ2dsZUFkdmFuY2VPcHRpb246IGZhbHNlLFxuICAgIHByZXZpZXdDb2x1bW5zOiBudWxsLFxuICB9XG5cbiAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWRGaWxlcywgdXNlcm5hbWUsIGNzdlVybCwgb25DYW5jZWwsXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBjc3ZVcmwgfHwgYGh0dHBzOi8vbGFicy1hcGkuY29nbml0aXZlY2xhc3MuYWkvdXNlcnMvJHt1c2VybmFtZX0vZmlsZXMvJHtzZWxlY3RlZEZpbGVzWzBdfWBcblxuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZmV0Y2goYC91c2VyLXJlZGlyZWN0L2NvZ25vcy9maWxlUHJldmlldz91cmw9JHtyZXF1ZXN0VXJsfWAsIHsgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyB9KS50aGVuKHJlc3AgPT4gcmVzcC50ZXh0KCkpLnRoZW4oZGF0YSA9PiBQYXBhLnBhcnNlKGRhdGEpKVxuXG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vdGlmaWNhdGlvbi5lcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6ICdGaWxlIERvZXMgTm90IEV4aXN0cycsXG4gICAgICB9KVxuICAgICAgb25DYW5jZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlUGxhY2Vob2xkZXIgPSBbXVxuICAgIGNvbnN0IHNvdXJjZUlkID0gKERhdGUubm93KCkudG9TdHJpbmcoMzYpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDUpKS50b1VwcGVyQ2FzZSgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cbiAgICBmaWxlQ29udGVudC5kYXRhWzBdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBzb3VyY2VQbGFjZWhvbGRlcltpbmRleF0gPSB7XG4gICAgICBuYW1lOiBpdGVtLFxuICAgICAgZGF0YXR5cGU6ICdUZXh0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGxhYmVsOiBpdGVtLFxuICAgICAgdXNhZ2U6ICdhdHRyaWJ1dGUnLFxuICAgICAgcmVndWxhckFnZ3JlZ2F0ZTogJ25vbmUnLFxuICAgICAgdGF4b25vbXlGYW1pbHk6ICdjTm9uZScsXG4gICAgfSlcbiAgICAvLyBmaWxlQ29udGVudC5kYXRhWzFdLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgLy8gICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgLy8gICBpZiAoIWlzTmFOKGl0ZW0pKSB7XG4gICAgLy8gICAgIHNvdXJjZVBsYWNlaG9sZGVyW2luZGV4XS5kYXRhdHlwZSA9ICdOVU1FUklDJ1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgY29uc3QgcHJldmlld0RhdGEgPSBbXVxuICAgIGZpbGVDb250ZW50LmRhdGEuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge31cbiAgICAgIG9iai5rZXkgPSBpbmRleFxuICAgICAgb2JqLndpZHRoID0gMTUwXG4gICAgICByb3cuZm9yRWFjaCgoaXRlbSwgaW5uZXJJbmRleCkgPT4ge1xuICAgICAgICBvYmpbYGNvbHVtbl8ke2lubmVySW5kZXh9YF0gPSBpdGVtXG4gICAgICB9KVxuICAgICAgcHJldmlld0RhdGEucHVzaChvYmopXG4gICAgfSlcbiAgICBjb25zdCBwcmV2aWV3Q29sdW1ucyA9IGZpbGVDb250ZW50LmRhdGFbMF0ubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIHRpdGxlOiBgQ29sdW1uICR7aW5kZXggKyAxfWAsXG4gICAgICBkYXRhSW5kZXg6IGBjb2x1bW5fJHtpbmRleH1gLFxuICAgICAga2V5OiBgY29sdW1uXyR7aW5kZXh9YCxcbiAgICB9KSlcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHByZXZpZXdEYXRhLFxuICAgICAgcHJldmlld0NvbHVtbnMsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgeHNkOiAnaHR0cHM6Ly9pYm0uY29tL2RhYXMvbW9kdWxlLzEuMC9tb2R1bGUueHNkJyxcbiAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgaWQ6IHNvdXJjZUlkLFxuICAgICAgICAgIHNyY1VybDoge1xuICAgICAgICAgICAgc291cmNlVXJsOiByZXF1ZXN0VXJsLFxuICAgICAgICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzdicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICBuYW1lOiBgdGFibGVfJHtzb3VyY2VJZH1gLFxuICAgICAgICAgIGNvbHVtbjogc291cmNlUGxhY2Vob2xkZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsOiAnTW9kdWxlIE5hbWUnLFxuICAgICAgICBpZGVudGlmaWVyOiAnbW9kdWxlSWQnLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgdG9nZ2xlQWR2YW5jZU9wdGlvbiB9ID0gdGhpcy5zdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoeyB0b2dnbGVBZHZhbmNlT3B0aW9uOiAhdG9nZ2xlQWR2YW5jZU9wdGlvbiB9KVxuICB9XG5cbiAgaGFuZGxlU3VibWl0ID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBjb25zdCB7IG9uU2F2ZSB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHsgdmFsdWVzIH0gPSB0aGlzLmZvcm1SZWYuY3VycmVudC5zdGF0ZVxuICAgIHZhbHVlcy50YWJsZS5jb2x1bW4uZm9yRWFjaCgoZWFjaCwgaW5kZXgpID0+IHtcbiAgICAgIHZhbHVlcy50YWJsZS5jb2x1bW5baW5kZXhdLmxhYmVsID0gZWFjaC5uYW1lXG4gICAgfSlcbiAgICB3aW5kb3cuY3VycmVudERhc2hib2FyZC5hZGRTb3VyY2VzKFt7XG4gICAgICBtb2R1bGU6IHZhbHVlcyxcbiAgICAgIG5hbWU6IHZhbHVlcy50YWJsZS5uYW1lLFxuICAgICAgaWQ6IHZhbHVlcy5zb3VyY2UuaWQsXG4gICAgfV0pXG4gICAgb25TYXZlKClcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZW50LFxuICAgICAgb25DYW5jZWwsXG4gICAgICBpbm5lclJlZixcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgY29uc3Qge1xuICAgICAgZGF0YSwgcHJldmlld0RhdGEsIHByZXZpZXdDb2x1bW5zLCB0b2dnbGVBZHZhbmNlT3B0aW9uLFxuICAgIH0gPSB0aGlzLnN0YXRlXG5cbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ1xuICAgICAgICBpbm5lclJlZj17aW5uZXJSZWZ9XG4gICAgICAgIHRpdGxlPVwiRWRpdCBzb3VyY2UgbWV0YWRhdGFcIlxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgb2tUZXh0PVwiT2tcIlxuICAgICAgICB3aWR0aD1cIjYwdndcIlxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgICAge2RhdGFcbiAgICAgICAgICA/IChcbiAgICAgICAgICAgIDxTb3VyY2VNZXRhRm9ybVxuICAgICAgICAgICAgICBpc1RvZ2dsZWQ9e3RvZ2dsZUFkdmFuY2VPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZT17dGhpcy5oYW5kbGVUb2dnbGV9XG4gICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgIGZvcm1SZWY9e3RoaXMuZm9ybVJlZn1cbiAgICAgICAgICAgICAgcHJldmlld0NvbHVtbnM9e3ByZXZpZXdDb2x1bW5zfVxuICAgICAgICAgICAgICBwcmV2aWV3RGF0YT17cHJldmlld0RhdGF9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgICA6IDxkaXYgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJyB9fT48U3BpbiBzaXplPVwibGFyZ2VcIiAvPjwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L0RpYWxvZz5cbiAgICApXG4gIH1cbn1cbiJdfQ==