diff --git a/jsx/build/admin-react.js b/jsx/build/admin-react.js
index 55c5f6d7..2ffc1903 100644
--- a/jsx/build/admin-react.js
+++ b/jsx/build/admin-react.js
@@ -95,7 +95,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _AddUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AddUser.pre */ \"./src/components/AddUser/AddUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n addUsers: function addUsers(usernames, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"POST\", {\n usernames: usernames,\n admin: admin\n });\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_AddUser_pre__WEBPACK_IMPORTED_MODULE_3__.AddUser));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _AddUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AddUser.pre */ \"./src/components/AddUser/AddUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n addUsers: function addUsers(usernames, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"POST\", {\n usernames: usernames,\n admin: admin\n });\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_AddUser_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.js?");
/***/ }),
@@ -104,13 +104,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/AddUser/AddUser.pre.jsx ***!
\************************************************/
/*! namespace exports */
-/*! export AddUser [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AddUser\": () => /* binding */ AddUser\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar AddUser = /*#__PURE__*/function (_Component) {\n _inherits(AddUser, _Component);\n\n var _super = _createSuper(AddUser);\n\n _createClass(AddUser, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n addUsers: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n dispatch: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n };\n }\n }]);\n\n function AddUser(props) {\n var _this;\n\n _classCallCheck(this, AddUser);\n\n _this = _super.call(this, props);\n _this.state = {\n users: [],\n admin: false\n };\n return _this;\n }\n\n _createClass(AddUser, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n addUsers = _this$props.addUsers,\n failRegexEvent = _this$props.failRegexEvent,\n refreshUserData = _this$props.refreshUserData,\n dispatch = _this$props.dispatch;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Add Users\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"add-user-textarea\",\n rows: \"3\",\n placeholder: \"usernames separated by line\",\n onBlur: function onBlur(e) {\n var split_users = e.target.value.split(\"\\n\");\n\n _this2.setState(Object.assign({}, _this2.state, {\n users: split_users\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return _this2.setState(Object.assign({}, _this2.state, {\n admin: e.target.checked\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var filtered_users = _this2.state.users.filter(function (e) {\n return e.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(e) == false;\n });\n\n if (filtered_users.length < _this2.state.users.length) {\n var removed_users = _this2.state.users.filter(function (e) {\n return !filtered_users.includes(e);\n });\n\n _this2.setState(Object.assign({}, _this2.state, {\n users: filtered_users\n }));\n\n failRegexEvent();\n }\n\n addUsers(filtered_users, _this2.state.admin).then(function () {\n return refreshUserData();\n }).then(function () {\n return _this2.props.history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n }\n }]);\n\n return AddUser;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar AddUser = function AddUser(props) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n users = _useState2[0],\n setUsers = _useState2[1],\n _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n admin = _useState4[0],\n setAdmin = _useState4[1];\n\n var addUsers = props.addUsers,\n failRegexEvent = props.failRegexEvent,\n refreshUserData = props.refreshUserData,\n history = props.history;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Add Users\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"add-user-textarea\",\n rows: \"3\",\n placeholder: \"usernames separated by line\",\n onBlur: function onBlur(e) {\n var split_users = e.target.value.split(\"\\n\");\n setUsers(split_users);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return (// this.setState(\n // Object.assign({}, this.state, {\n // admin: e.target.checked,\n // })\n // )\n setAdmin(e.target.checked)\n );\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var filtered_users = users.filter(function (e) {\n return e.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(e) == false;\n });\n\n if (filtered_users.length < users.length) {\n var removed_users = users.filter(function (e) {\n return !filtered_users.includes(e);\n });\n setUsers(filtered_users);\n failRegexEvent();\n }\n\n addUsers(filtered_users, admin).then(function () {\n return refreshUserData();\n }).then(function () {\n return history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n};\n\nAddUser.propTypes = {\n addUsers: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.pre.jsx?");
/***/ }),
@@ -125,7 +125,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CreateGroup.pre */ \"./src/components/CreateGroup/CreateGroup.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n createGroup: function createGroup(groupName) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + groupName, \"POST\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshGroupsData: function refreshGroupsData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"GROUPS_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__.CreateGroup));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CreateGroup.pre */ \"./src/components/CreateGroup/CreateGroup.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n createGroup: function createGroup(groupName) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + groupName, \"POST\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshGroupsData: function refreshGroupsData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"GROUPS_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.js?");
/***/ }),
@@ -134,13 +134,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/CreateGroup/CreateGroup.pre.jsx ***!
\********************************************************/
/*! namespace exports */
-/*! export CreateGroup [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CreateGroup\": () => /* binding */ CreateGroup\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Multiselect_Multiselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Multiselect/Multiselect */ \"./src/components/Multiselect/Multiselect.jsx\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\nvar CreateGroup = /*#__PURE__*/function (_Component) {\n _inherits(CreateGroup, _Component);\n\n var _super = _createSuper(CreateGroup);\n\n _createClass(CreateGroup, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n };\n }\n }]);\n\n function CreateGroup(props) {\n var _this;\n\n _classCallCheck(this, CreateGroup);\n\n _this = _super.call(this, props);\n _this.state = {\n groupName: \"\"\n };\n return _this;\n }\n\n _createClass(CreateGroup, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n createGroup = _this$props.createGroup,\n refreshGroupsData = _this$props.refreshGroupsData;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Create Group\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"input-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"group-name-input\",\n type: \"text\",\n value: this.state.groupName,\n id: \"group-name\",\n placeholder: \"group name...\",\n onChange: function onChange(e) {\n _this2.setState({\n groupName: e.target.value\n });\n }\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var groupName = _this2.state.groupName;\n createGroup(groupName).then(refreshGroupsData()).then(_this2.props.history.push(\"/groups\"))[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n }\n }]);\n\n return CreateGroup;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar CreateGroup = function CreateGroup(props) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n groupName = _useState2[0],\n setGroupName = _useState2[1];\n\n var createGroup = props.createGroup,\n refreshGroupsData = props.refreshGroupsData,\n history = props.history;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Create Group\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"input-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"group-name-input\",\n type: \"text\",\n value: groupName,\n id: \"group-name\",\n placeholder: \"group name...\",\n onChange: function onChange(e) {\n setGroupName(e.target.value);\n }\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var groupName = groupName;\n createGroup(groupName).then(refreshGroupsData()).then(history.push(\"/groups\"))[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n};\n\nCreateGroup.propTypes = {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CreateGroup);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.pre.jsx?");
/***/ }),
@@ -155,7 +155,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _EditUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditUser.pre */ \"./src/components/EditUser/EditUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n editUser: function editUser(username, updated_username, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"PATCH\", {\n name: updated_username,\n admin: admin\n });\n },\n deleteUser: function deleteUser(username) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"DELETE\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_EditUser_pre__WEBPACK_IMPORTED_MODULE_3__.EditUser));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _EditUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditUser.pre */ \"./src/components/EditUser/EditUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n editUser: function editUser(username, updated_username, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"PATCH\", {\n name: updated_username,\n admin: admin\n });\n },\n deleteUser: function deleteUser(username) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"DELETE\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_EditUser_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.js?");
/***/ }),
@@ -164,13 +164,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/EditUser/EditUser.pre.jsx ***!
\**************************************************/
/*! namespace exports */
-/*! export EditUser [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EditUser\": () => /* binding */ EditUser\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar EditUser = /*#__PURE__*/function (_Component) {\n _inherits(EditUser, _Component);\n\n var _super = _createSuper(EditUser);\n\n _createClass(EditUser, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n location: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n state: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n username: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n has_admin: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool)\n })\n }),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n }),\n editUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n deleteUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n };\n }\n }]);\n\n function EditUser(props) {\n var _this;\n\n _classCallCheck(this, EditUser);\n\n _this = _super.call(this, props);\n _this.state = {\n updated_username: null,\n admin: null\n };\n return _this;\n }\n\n _createClass(EditUser, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n if (this.props.location.state == undefined) {\n this.props.history.push(\"/\");\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null);\n }\n\n var _this$props$location$ = this.props.location.state,\n username = _this$props$location$.username,\n has_admin = _this$props$location$.has_admin;\n var _this$props = this.props,\n editUser = _this$props.editUser,\n deleteUser = _this$props.deleteUser,\n failRegexEvent = _this$props.failRegexEvent,\n refreshUserData = _this$props.refreshUserData;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Editing user \", username)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"exampleFormControlTextarea1\",\n rows: \"3\",\n placeholder: \"updated username\",\n onKeyDown: function onKeyDown(e) {\n _this2.setState(Object.assign({}, _this2.state, {\n updated_username: e.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n checked: has_admin ? true : false,\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return _this2.setState(Object.assign({}, _this2.state, {\n admin: e.target.checked\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"delete-user\",\n className: \"btn btn-danger btn-sm\",\n onClick: function onClick() {\n deleteUser(username).then(function (data) {\n _this2.props.history.push(\"/\");\n\n refreshUserData();\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Delete user\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var updated_username = _this2.state.updated_username,\n admin = _this2.state.admin;\n if (updated_username == null && admin == null) return;\n\n if (updated_username.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(updated_username) == false) {\n editUser(username, updated_username != null ? updated_username : username, admin != null ? admin : has_admin).then(function (data) {\n _this2.props.history.push(\"/\");\n\n refreshUserData();\n })[\"catch\"](function (err) {});\n } else {\n _this2.setState(Object.assign({}, _this2.state, {\n updated_username: \"\"\n }));\n\n failRegexEvent();\n }\n }\n }, \"Apply\")))))));\n }\n }]);\n\n return EditUser;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar EditUser = function EditUser(props) {\n var editUser = props.editUser,\n deleteUser = props.deleteUser,\n failRegexEvent = props.failRegexEvent,\n refreshUserData = props.refreshUserData,\n history = props.history;\n\n if (props.location.state == undefined) {\n props.history.push(\"/\");\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null);\n }\n\n var _props$location$state = props.location.state,\n username = _props$location$state.username,\n has_admin = _props$location$state.has_admin;\n\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n updatedUsername = _useState2[0],\n setUpdatedUsername = _useState2[1],\n _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(has_admin),\n _useState4 = _slicedToArray(_useState3, 2),\n admin = _useState4[0],\n setAdmin = _useState4[1];\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Editing user \", username)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"exampleFormControlTextarea1\",\n rows: \"3\",\n placeholder: \"updated username\",\n onBlur: function onBlur(e) {\n setUpdatedUsername(e.target.value);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n checked: admin,\n type: \"checkbox\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return setAdmin(!admin);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"delete-user\",\n className: \"btn btn-danger btn-sm\",\n onClick: function onClick() {\n deleteUser(username).then(function (data) {\n history.push(\"/\");\n refreshUserData();\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Delete user\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n if (updatedUsername == \"\" && admin == has_admin) return;\n\n if (updatedUsername.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(updatedUsername) == false) {\n editUser(username, updatedUsername != \"\" ? updatedUsername : username, admin).then(function (data) {\n history.push(\"/\");\n refreshUserData();\n })[\"catch\"](function (err) {});\n } else {\n setUpdatedUsername(null);\n failRegexEvent();\n }\n }\n }, \"Apply\")))))));\n};\n\nEditUser.propTypes = {\n location: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n state: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n username: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n has_admin: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool)\n })\n }),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n }),\n editUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n deleteUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.pre.jsx?");
/***/ }),
@@ -365,7 +365,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! -!../../../node_modules/css-loader/dist/cjs.js!../../style/root.css */ \"./node_modules/css-loader/dist/cjs.js!./src/style/root.css\");\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});\n___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__.default);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".server-dashboard-container {\\n padding-right: 15px;\\n padding-left: 15px;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\n.server-dashboard-container .add-users-button {\\n border: 1px solid #ddd;\\n}\\n\\n.server-dashboard-container tbody {\\n color: #626262;\\n}\\n\\n.admin-table-head {\\n user-select: none;\\n}\\n\\n.sort-icon {\\n display: inline-block;\\n top: .125em;\\n position: relative;\\n user-select: none;\\n cursor: pointer;\\n}\\n\\ntr.noborder > td {\\n border: none !important;\\n width: auto\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/ServerDashboard/server-dashboard.css?./node_modules/css-loader/dist/cjs.js");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! -!../../../node_modules/css-loader/dist/cjs.js!../../style/root.css */ \"./node_modules/css-loader/dist/cjs.js!./src/style/root.css\");\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});\n___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__.default);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".server-dashboard-container {\\n padding-right: 15px;\\n padding-left: 15px;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\n.server-dashboard-container .add-users-button {\\n border: 1px solid #ddd;\\n}\\n\\n.server-dashboard-container tbody {\\n color: #626262;\\n}\\n\\n.admin-table-head {\\n user-select: none;\\n}\\n\\n.sort-icon {\\n display: inline-block;\\n top: .125em;\\n position: relative;\\n user-select: none;\\n cursor: pointer;\\n}\\n\\ntr.noborder > td {\\n border: none !important;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/ServerDashboard/server-dashboard.css?./node_modules/css-loader/dist/cjs.js");
/***/ }),
@@ -3416,7 +3416,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
-/******/ __webpack_require__.h = () => "e3ffa410672a689f4a87"
+/******/ __webpack_require__.h = () => "1a5ba23eaece8adaaacf"
/******/ })();
/******/
/******/ /* webpack/runtime/global */
diff --git a/jsx/src/App.jsx b/jsx/src/App.jsx
index cfe6b836..e5cf5c83 100644
--- a/jsx/src/App.jsx
+++ b/jsx/src/App.jsx
@@ -11,7 +11,7 @@ import { createBrowserHistory } from "history";
import ServerDashboard from "./components/ServerDashboard/ServerDashboard";
import Groups from "./components/Groups/Groups";
import GroupEdit from "./components/GroupEdit/GroupEdit";
-import CreateGroup from "./components/CreateGroup/CreateGroup"
+import CreateGroup from "./components/CreateGroup/CreateGroup";
import AddUser from "./components/AddUser/AddUser";
import EditUser from "./components/EditUser/EditUser";
diff --git a/jsx/src/components/AddUser/AddUser.js b/jsx/src/components/AddUser/AddUser.js
index 15762204..df75d9c1 100644
--- a/jsx/src/components/AddUser/AddUser.js
+++ b/jsx/src/components/AddUser/AddUser.js
@@ -1,7 +1,7 @@
import { connect } from "react-redux";
import { compose, withProps } from "recompose";
import { jhapiRequest } from "../../util/jhapiUtil";
-import { AddUser } from "./AddUser.pre";
+import AddUser from "./AddUser.pre";
const withUserAPI = withProps((props) => ({
addUsers: (usernames, admin) =>
diff --git a/jsx/src/components/AddUser/AddUser.pre.jsx b/jsx/src/components/AddUser/AddUser.pre.jsx
index b1ec9209..646080d1 100644
--- a/jsx/src/components/AddUser/AddUser.pre.jsx
+++ b/jsx/src/components/AddUser/AddUser.pre.jsx
@@ -1,116 +1,101 @@
-import React, { Component } from "react";
+import React, { Component, useState } from "react";
import { Link } from "react-router-dom";
import PropTypes from "prop-types";
-export class AddUser extends Component {
- static get propTypes() {
- return {
- addUsers: PropTypes.func,
- failRegexEvent: PropTypes.func,
- refreshUserData: PropTypes.func,
- dispatch: PropTypes.func,
- history: PropTypes.shape({
- push: PropTypes.func,
- }),
- };
- }
+const AddUser = (props) => {
+ var [users, setUsers] = useState([]),
+ [admin, setAdmin] = useState(false);
- constructor(props) {
- super(props);
- this.state = {
- users: [],
- admin: false,
- };
- }
+ var { addUsers, failRegexEvent, refreshUserData, history } = props;
- render() {
- var { addUsers, failRegexEvent, refreshUserData, dispatch } = this.props;
-
- return (
- <>
-
-
-
-
-
-
Add Users
-
-
-
-
-
-
+ >
+ );
+};
+
+AddUser.propTypes = {
+ addUsers: PropTypes.func,
+ failRegexEvent: PropTypes.func,
+ refreshUserData: PropTypes.func,
+ history: PropTypes.shape({
+ push: PropTypes.func,
+ }),
+};
+
+export default AddUser;
diff --git a/jsx/src/components/CreateGroup/CreateGroup.js b/jsx/src/components/CreateGroup/CreateGroup.js
index b70feee0..76818b9a 100644
--- a/jsx/src/components/CreateGroup/CreateGroup.js
+++ b/jsx/src/components/CreateGroup/CreateGroup.js
@@ -1,7 +1,7 @@
import { connect } from "react-redux";
import { compose, withProps } from "recompose";
import { jhapiRequest } from "../../util/jhapiUtil";
-import { CreateGroup } from "./CreateGroup.pre";
+import CreateGroup from "./CreateGroup.pre";
const withUserAPI = withProps((props) => ({
createGroup: (groupName) => jhapiRequest("/groups/" + groupName, "POST"),
diff --git a/jsx/src/components/CreateGroup/CreateGroup.pre.jsx b/jsx/src/components/CreateGroup/CreateGroup.pre.jsx
index 776a7ac8..931fa079 100644
--- a/jsx/src/components/CreateGroup/CreateGroup.pre.jsx
+++ b/jsx/src/components/CreateGroup/CreateGroup.pre.jsx
@@ -1,77 +1,69 @@
-import React, { Component } from "react";
+import React, { Component, useState } from "react";
import { Link } from "react-router-dom";
import PropTypes from "prop-types";
-import Multiselect from "../Multiselect/Multiselect";
-export class CreateGroup extends Component {
- static get propTypes() {
- return {
- createGroup: PropTypes.func,
- refreshGroupsData: PropTypes.func,
- failRegexEvent: PropTypes.func,
- history: PropTypes.shape({
- push: PropTypes.func,
- }),
- };
- }
+const CreateGroup = (props) => {
+ var [groupName, setGroupName] = useState("");
- constructor(props) {
- super(props);
- this.state = {
- groupName: "",
- };
- }
+ var { createGroup, refreshGroupsData, history } = props;
- render() {
- var { createGroup, refreshGroupsData } = this.props;
-
- return (
- <>
-
-
-
-
-
-
Create Group
-
-
-
- {
- this.setState({ groupName: e.target.value });
- }}
- >
-
-
-
-
- Back
-
-
-
{
- let groupName = this.state.groupName;
- createGroup(groupName)
- .then(refreshGroupsData())
- .then(this.props.history.push("/groups"))
- .catch((err) => console.log(err));
+ return (
+ <>
+
+
+
+
+
+
Create Group
+
+
+
+
+ Back
+
+
+ {
+ let groupName = groupName;
+ createGroup(groupName)
+ .then(refreshGroupsData())
+ .then(history.push("/groups"))
+ .catch((err) => console.log(err));
+ }}
+ >
+ Add Users
+
+
- >
- );
- }
-}
+
+ >
+ );
+};
+
+CreateGroup.propTypes = {
+ createGroup: PropTypes.func,
+ refreshGroupsData: PropTypes.func,
+ failRegexEvent: PropTypes.func,
+ history: PropTypes.shape({
+ push: PropTypes.func,
+ }),
+};
+
+export default CreateGroup;
diff --git a/jsx/src/components/EditUser/EditUser.js b/jsx/src/components/EditUser/EditUser.js
index 2fa72626..02068c33 100644
--- a/jsx/src/components/EditUser/EditUser.js
+++ b/jsx/src/components/EditUser/EditUser.js
@@ -1,7 +1,7 @@
import { connect } from "react-redux";
import { compose, withProps } from "recompose";
import { jhapiRequest } from "../../util/jhapiUtil";
-import { EditUser } from "./EditUser.pre";
+import EditUser from "./EditUser.pre";
const withUserAPI = withProps((props) => ({
editUser: (username, updated_username, admin) =>
diff --git a/jsx/src/components/EditUser/EditUser.pre.jsx b/jsx/src/components/EditUser/EditUser.pre.jsx
index 563abe12..c27abf09 100644
--- a/jsx/src/components/EditUser/EditUser.pre.jsx
+++ b/jsx/src/components/EditUser/EditUser.pre.jsx
@@ -1,152 +1,130 @@
-import React, { Component } from "react";
+import React, { Component, useState } from "react";
import { Link } from "react-router-dom";
import PropTypes from "prop-types";
-export class EditUser extends Component {
- static get propTypes() {
- return {
- location: PropTypes.shape({
- state: PropTypes.shape({
- username: PropTypes.string,
- has_admin: PropTypes.bool,
- }),
- }),
- history: PropTypes.shape({
- push: PropTypes.func,
- }),
- editUser: PropTypes.func,
- deleteUser: PropTypes.func,
- failRegexEvent: PropTypes.func,
- refreshUserData: PropTypes.func,
- };
+const EditUser = (props) => {
+ var {
+ editUser,
+ deleteUser,
+ failRegexEvent,
+ refreshUserData,
+ history,
+ } = props;
+
+ if (props.location.state == undefined) {
+ props.history.push("/");
+ return <>>;
}
- constructor(props) {
- super(props);
- this.state = {
- updated_username: null,
- admin: null,
- };
- }
+ var { username, has_admin } = props.location.state;
- render() {
- if (this.props.location.state == undefined) {
- this.props.history.push("/");
- return <>>;
- }
+ var [updatedUsername, setUpdatedUsername] = useState(""),
+ [admin, setAdmin] = useState(has_admin);
- var { username, has_admin } = this.props.location.state;
-
- var { editUser, deleteUser, failRegexEvent, refreshUserData } = this.props;
-
- return (
- <>
-
-
-
-
-
-
Editing user {username}
-
-
-
-
-
-
- Back
-
-
-
{
- let updated_username = this.state.updated_username,
- admin = this.state.admin;
-
- if (updated_username == null && admin == null) return;
- if (
- updated_username.length > 2 &&
- /[!@#$%^&*(),.?":{}|<>]/g.test(updated_username) ==
- false
- ) {
- editUser(
- username,
- updated_username != null
- ? updated_username
- : username,
- admin != null ? admin : has_admin
- )
+ return (
+ <>
+
+
+
+
+
+
Editing user {username}
+
+
+
+
+
+
+ Back
+
+
+ {
+ if (updatedUsername == "" && admin == has_admin) return;
+ if (
+ updatedUsername.length > 2 &&
+ /[!@#$%^&*(),.?":{}|<>]/g.test(updatedUsername) == false
+ ) {
+ editUser(
+ username,
+ updatedUsername != "" ? updatedUsername : username,
+ admin
+ )
+ .then((data) => {
+ history.push("/");
+ refreshUserData();
+ })
+ .catch((err) => {});
+ } else {
+ setUpdatedUsername(null);
+ failRegexEvent();
+ }
+ }}
+ >
+ Apply
+
- >
- );
- }
-}
+
+ >
+ );
+};
+
+EditUser.propTypes = {
+ location: PropTypes.shape({
+ state: PropTypes.shape({
+ username: PropTypes.string,
+ has_admin: PropTypes.bool,
+ }),
+ }),
+ history: PropTypes.shape({
+ push: PropTypes.func,
+ }),
+ editUser: PropTypes.func,
+ deleteUser: PropTypes.func,
+ failRegexEvent: PropTypes.func,
+ refreshUserData: PropTypes.func,
+};
+
+export default EditUser;
diff --git a/jsx/src/components/GroupEdit/GroupEdit.js b/jsx/src/components/GroupEdit/GroupEdit.js
index 22f13ff3..e2b0c2bb 100644
--- a/jsx/src/components/GroupEdit/GroupEdit.js
+++ b/jsx/src/components/GroupEdit/GroupEdit.js
@@ -8,8 +8,7 @@ const withGroupsAPI = withProps((props) => ({
jhapiRequest("/groups/" + groupname + "/users", "POST", { users }),
removeFromGroup: (users, groupname) =>
jhapiRequest("/groups/" + groupname + "/users", "DELETE", { users }),
- deleteGroup: (name) =>
- jhapiRequest("/groups/" + name, "DELETE"),
+ deleteGroup: (name) => jhapiRequest("/groups/" + name, "DELETE"),
refreshGroupsData: () =>
jhapiRequest("/groups", "GET")
.then((data) => data.json())
diff --git a/jsx/src/components/GroupEdit/GroupEdit.pre.jsx b/jsx/src/components/GroupEdit/GroupEdit.pre.jsx
index 1b9e88de..09001a39 100644
--- a/jsx/src/components/GroupEdit/GroupEdit.pre.jsx
+++ b/jsx/src/components/GroupEdit/GroupEdit.pre.jsx
@@ -18,7 +18,7 @@ export class GroupEdit extends Component {
}),
addToGroup: PropTypes.func,
removeFromGroup: PropTypes.func,
- deleteGroup: PropTypes.func
+ deleteGroup: PropTypes.func,
};
}
@@ -40,7 +40,12 @@ export class GroupEdit extends Component {
var { group_data, user_data, callback } = this.props.location.state;
- var { addToGroup, removeFromGroup, deleteGroup, refreshGroupsData } = this.props;
+ var {
+ addToGroup,
+ removeFromGroup,
+ deleteGroup,
+ refreshGroupsData,
+ } = this.props;
if (!(group_data && user_data)) return
;
@@ -104,13 +109,19 @@ export class GroupEdit extends Component {
>
Apply
-
{
- var groupName = group_data.name
- deleteGroup(groupName)
- .then(refreshGroupsData())
- .then(this.props.history.push("/groups"))
- .catch(err => console.log(err))
- }}>Delete Group
+
{
+ var groupName = group_data.name;
+ deleteGroup(groupName)
+ .then(refreshGroupsData())
+ .then(this.props.history.push("/groups"))
+ .catch((err) => console.log(err));
+ }}
+ >
+ Delete Group
+
diff --git a/jsx/src/components/Groups/Groups.js b/jsx/src/components/Groups/Groups.js
index cfdca8df..765d7f8e 100644
--- a/jsx/src/components/Groups/Groups.js
+++ b/jsx/src/components/Groups/Groups.js
@@ -21,7 +21,7 @@ const withGroupsAPI = withProps((props) => ({
jhapiRequest("/groups/" + name + "/users", "DELETE", {
body: { users: removed_users },
json: true,
- })
+ }),
}));
export default compose(
diff --git a/jsx/src/components/Groups/Groups.pre.jsx b/jsx/src/components/Groups/Groups.pre.jsx
index fa4cfaec..3e74f8a9 100644
--- a/jsx/src/components/Groups/Groups.pre.jsx
+++ b/jsx/src/components/Groups/Groups.pre.jsx
@@ -69,9 +69,12 @@ export class Groups extends Component {
Back
-
{
- this.props.history.push("/create-group")
- }}>
+ {
+ this.props.history.push("/create-group");
+ }}
+ >
New Group
diff --git a/jupyterhub-proxy.pid b/jupyterhub-proxy.pid
index 1a60c46d..ef089071 100644
--- a/jupyterhub-proxy.pid
+++ b/jupyterhub-proxy.pid
@@ -1 +1 @@
-16381
\ No newline at end of file
+17503
\ No newline at end of file
diff --git a/share/jupyterhub/static/js/admin-react.js b/share/jupyterhub/static/js/admin-react.js
index 55c5f6d7..2ffc1903 100644
--- a/share/jupyterhub/static/js/admin-react.js
+++ b/share/jupyterhub/static/js/admin-react.js
@@ -95,7 +95,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _AddUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AddUser.pre */ \"./src/components/AddUser/AddUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n addUsers: function addUsers(usernames, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"POST\", {\n usernames: usernames,\n admin: admin\n });\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_AddUser_pre__WEBPACK_IMPORTED_MODULE_3__.AddUser));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _AddUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AddUser.pre */ \"./src/components/AddUser/AddUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n addUsers: function addUsers(usernames, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"POST\", {\n usernames: usernames,\n admin: admin\n });\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_AddUser_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.js?");
/***/ }),
@@ -104,13 +104,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/AddUser/AddUser.pre.jsx ***!
\************************************************/
/*! namespace exports */
-/*! export AddUser [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AddUser\": () => /* binding */ AddUser\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar AddUser = /*#__PURE__*/function (_Component) {\n _inherits(AddUser, _Component);\n\n var _super = _createSuper(AddUser);\n\n _createClass(AddUser, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n addUsers: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n dispatch: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n };\n }\n }]);\n\n function AddUser(props) {\n var _this;\n\n _classCallCheck(this, AddUser);\n\n _this = _super.call(this, props);\n _this.state = {\n users: [],\n admin: false\n };\n return _this;\n }\n\n _createClass(AddUser, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n addUsers = _this$props.addUsers,\n failRegexEvent = _this$props.failRegexEvent,\n refreshUserData = _this$props.refreshUserData,\n dispatch = _this$props.dispatch;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Add Users\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"add-user-textarea\",\n rows: \"3\",\n placeholder: \"usernames separated by line\",\n onBlur: function onBlur(e) {\n var split_users = e.target.value.split(\"\\n\");\n\n _this2.setState(Object.assign({}, _this2.state, {\n users: split_users\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return _this2.setState(Object.assign({}, _this2.state, {\n admin: e.target.checked\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var filtered_users = _this2.state.users.filter(function (e) {\n return e.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(e) == false;\n });\n\n if (filtered_users.length < _this2.state.users.length) {\n var removed_users = _this2.state.users.filter(function (e) {\n return !filtered_users.includes(e);\n });\n\n _this2.setState(Object.assign({}, _this2.state, {\n users: filtered_users\n }));\n\n failRegexEvent();\n }\n\n addUsers(filtered_users, _this2.state.admin).then(function () {\n return refreshUserData();\n }).then(function () {\n return _this2.props.history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n }\n }]);\n\n return AddUser;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar AddUser = function AddUser(props) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n users = _useState2[0],\n setUsers = _useState2[1],\n _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),\n _useState4 = _slicedToArray(_useState3, 2),\n admin = _useState4[0],\n setAdmin = _useState4[1];\n\n var addUsers = props.addUsers,\n failRegexEvent = props.failRegexEvent,\n refreshUserData = props.refreshUserData,\n history = props.history;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Add Users\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"add-user-textarea\",\n rows: \"3\",\n placeholder: \"usernames separated by line\",\n onBlur: function onBlur(e) {\n var split_users = e.target.value.split(\"\\n\");\n setUsers(split_users);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return (// this.setState(\n // Object.assign({}, this.state, {\n // admin: e.target.checked,\n // })\n // )\n setAdmin(e.target.checked)\n );\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var filtered_users = users.filter(function (e) {\n return e.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(e) == false;\n });\n\n if (filtered_users.length < users.length) {\n var removed_users = users.filter(function (e) {\n return !filtered_users.includes(e);\n });\n setUsers(filtered_users);\n failRegexEvent();\n }\n\n addUsers(filtered_users, admin).then(function () {\n return refreshUserData();\n }).then(function () {\n return history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n};\n\nAddUser.propTypes = {\n addUsers: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.pre.jsx?");
/***/ }),
@@ -125,7 +125,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CreateGroup.pre */ \"./src/components/CreateGroup/CreateGroup.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n createGroup: function createGroup(groupName) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + groupName, \"POST\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshGroupsData: function refreshGroupsData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"GROUPS_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__.CreateGroup));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CreateGroup.pre */ \"./src/components/CreateGroup/CreateGroup.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n createGroup: function createGroup(groupName) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + groupName, \"POST\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshGroupsData: function refreshGroupsData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"GROUPS_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_CreateGroup_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.js?");
/***/ }),
@@ -134,13 +134,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/CreateGroup/CreateGroup.pre.jsx ***!
\********************************************************/
/*! namespace exports */
-/*! export CreateGroup [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CreateGroup\": () => /* binding */ CreateGroup\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Multiselect_Multiselect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Multiselect/Multiselect */ \"./src/components/Multiselect/Multiselect.jsx\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\nvar CreateGroup = /*#__PURE__*/function (_Component) {\n _inherits(CreateGroup, _Component);\n\n var _super = _createSuper(CreateGroup);\n\n _createClass(CreateGroup, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n };\n }\n }]);\n\n function CreateGroup(props) {\n var _this;\n\n _classCallCheck(this, CreateGroup);\n\n _this = _super.call(this, props);\n _this.state = {\n groupName: \"\"\n };\n return _this;\n }\n\n _createClass(CreateGroup, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n createGroup = _this$props.createGroup,\n refreshGroupsData = _this$props.refreshGroupsData;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Create Group\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"input-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"group-name-input\",\n type: \"text\",\n value: this.state.groupName,\n id: \"group-name\",\n placeholder: \"group name...\",\n onChange: function onChange(e) {\n _this2.setState({\n groupName: e.target.value\n });\n }\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_3__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var groupName = _this2.state.groupName;\n createGroup(groupName).then(refreshGroupsData()).then(_this2.props.history.push(\"/groups\"))[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n }\n }]);\n\n return CreateGroup;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar CreateGroup = function CreateGroup(props) {\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n groupName = _useState2[0],\n setGroupName = _useState2[1];\n\n var createGroup = props.createGroup,\n refreshGroupsData = props.refreshGroupsData,\n history = props.history;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Create Group\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"input-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"group-name-input\",\n type: \"text\",\n value: groupName,\n id: \"group-name\",\n placeholder: \"group name...\",\n onChange: function onChange(e) {\n setGroupName(e.target.value);\n }\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"return\",\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var groupName = groupName;\n createGroup(groupName).then(refreshGroupsData()).then(history.push(\"/groups\"))[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Add Users\")))))));\n};\n\nCreateGroup.propTypes = {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CreateGroup);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.pre.jsx?");
/***/ }),
@@ -155,7 +155,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _EditUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditUser.pre */ \"./src/components/EditUser/EditUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n editUser: function editUser(username, updated_username, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"PATCH\", {\n name: updated_username,\n admin: admin\n });\n },\n deleteUser: function deleteUser(username) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"DELETE\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_EditUser_pre__WEBPACK_IMPORTED_MODULE_3__.EditUser));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _EditUser_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditUser.pre */ \"./src/components/EditUser/EditUser.pre.jsx\");\n\n\n\n\nvar withUserAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_1__.withProps)(function (props) {\n return {\n editUser: function editUser(username, updated_username, admin) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"PATCH\", {\n name: updated_username,\n admin: admin\n });\n },\n deleteUser: function deleteUser(username) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users/\" + username, \"DELETE\");\n },\n failRegexEvent: function failRegexEvent() {\n return alert(\"Removed \" + JSON.stringify(removed_users) + \" for either containing special characters or being too short.\");\n },\n refreshUserData: function refreshUserData() {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/users\", \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return props.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_1__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_0__.connect)(), withUserAPI)(_EditUser_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.js?");
/***/ }),
@@ -164,13 +164,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
!*** ./src/components/EditUser/EditUser.pre.jsx ***!
\**************************************************/
/*! namespace exports */
-/*! export EditUser [provided] [no usage info] [missing usage info prevents renaming] */
+/*! export default [provided] [no usage info] [missing usage info prevents renaming] */
/*! other exports [not provided] [no usage info] */
-/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
+/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_exports__, __webpack_require__.r, __webpack_require__.d, __webpack_require__.* */
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EditUser\": () => /* binding */ EditUser\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar EditUser = /*#__PURE__*/function (_Component) {\n _inherits(EditUser, _Component);\n\n var _super = _createSuper(EditUser);\n\n _createClass(EditUser, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n location: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n state: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n username: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n has_admin: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool)\n })\n }),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n }),\n editUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n deleteUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n };\n }\n }]);\n\n function EditUser(props) {\n var _this;\n\n _classCallCheck(this, EditUser);\n\n _this = _super.call(this, props);\n _this.state = {\n updated_username: null,\n admin: null\n };\n return _this;\n }\n\n _createClass(EditUser, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n if (this.props.location.state == undefined) {\n this.props.history.push(\"/\");\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null);\n }\n\n var _this$props$location$ = this.props.location.state,\n username = _this$props$location$.username,\n has_admin = _this$props$location$.has_admin;\n var _this$props = this.props,\n editUser = _this$props.editUser,\n deleteUser = _this$props.deleteUser,\n failRegexEvent = _this$props.failRegexEvent,\n refreshUserData = _this$props.refreshUserData;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Editing user \", username)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"exampleFormControlTextarea1\",\n rows: \"3\",\n placeholder: \"updated username\",\n onKeyDown: function onKeyDown(e) {\n _this2.setState(Object.assign({}, _this2.state, {\n updated_username: e.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n checked: has_admin ? true : false,\n type: \"checkbox\",\n value: \"\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return _this2.setState(Object.assign({}, _this2.state, {\n admin: e.target.checked\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"delete-user\",\n className: \"btn btn-danger btn-sm\",\n onClick: function onClick() {\n deleteUser(username).then(function (data) {\n _this2.props.history.push(\"/\");\n\n refreshUserData();\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Delete user\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n var updated_username = _this2.state.updated_username,\n admin = _this2.state.admin;\n if (updated_username == null && admin == null) return;\n\n if (updated_username.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(updated_username) == false) {\n editUser(username, updated_username != null ? updated_username : username, admin != null ? admin : has_admin).then(function (data) {\n _this2.props.history.push(\"/\");\n\n refreshUserData();\n })[\"catch\"](function (err) {});\n } else {\n _this2.setState(Object.assign({}, _this2.state, {\n updated_username: \"\"\n }));\n\n failRegexEvent();\n }\n }\n }, \"Apply\")))))));\n }\n }]);\n\n return EditUser;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.pre.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar EditUser = function EditUser(props) {\n var editUser = props.editUser,\n deleteUser = props.deleteUser,\n failRegexEvent = props.failRegexEvent,\n refreshUserData = props.refreshUserData,\n history = props.history;\n\n if (props.location.state == undefined) {\n props.history.push(\"/\");\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null);\n }\n\n var _props$location$state = props.location.state,\n username = _props$location$state.username,\n has_admin = _props$location$state.has_admin;\n\n var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\"),\n _useState2 = _slicedToArray(_useState, 2),\n updatedUsername = _useState2[0],\n setUpdatedUsername = _useState2[1],\n _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(has_admin),\n _useState4 = _slicedToArray(_useState3, 2),\n admin = _useState4[0],\n setAdmin = _useState4[1];\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"container\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel panel-default\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-heading\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"Editing user \", username)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"textarea\", {\n className: \"form-control\",\n id: \"exampleFormControlTextarea1\",\n rows: \"3\",\n placeholder: \"updated username\",\n onBlur: function onBlur(e) {\n setUpdatedUsername(e.target.value);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"input\", {\n className: \"form-check-input\",\n checked: admin,\n type: \"checkbox\",\n id: \"admin-check\",\n onChange: function onChange(e) {\n return setAdmin(!admin);\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"label\", {\n className: \"form-check-label\"\n }, \"Admin\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"delete-user\",\n className: \"btn btn-danger btn-sm\",\n onClick: function onClick() {\n deleteUser(username).then(function (data) {\n history.push(\"/\");\n refreshUserData();\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Delete user\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-footer\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n className: \"btn btn-light\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: \"/\"\n }, \"Back\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"span\", null, \" \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n id: \"submit\",\n className: \"btn btn-primary\",\n onClick: function onClick() {\n if (updatedUsername == \"\" && admin == has_admin) return;\n\n if (updatedUsername.length > 2 && /[!@#$%^&*(),.?\":{}|<>]/g.test(updatedUsername) == false) {\n editUser(username, updatedUsername != \"\" ? updatedUsername : username, admin).then(function (data) {\n history.push(\"/\");\n refreshUserData();\n })[\"catch\"](function (err) {});\n } else {\n setUpdatedUsername(null);\n failRegexEvent();\n }\n }\n }, \"Apply\")))))));\n};\n\nEditUser.propTypes = {\n location: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n state: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n username: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),\n has_admin: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool)\n })\n }),\n history: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n }),\n editUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n deleteUser: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/EditUser/EditUser.pre.jsx?");
/***/ }),
@@ -365,7 +365,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! -!../../../node_modules/css-loader/dist/cjs.js!../../style/root.css */ \"./node_modules/css-loader/dist/cjs.js!./src/style/root.css\");\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});\n___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__.default);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".server-dashboard-container {\\n padding-right: 15px;\\n padding-left: 15px;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\n.server-dashboard-container .add-users-button {\\n border: 1px solid #ddd;\\n}\\n\\n.server-dashboard-container tbody {\\n color: #626262;\\n}\\n\\n.admin-table-head {\\n user-select: none;\\n}\\n\\n.sort-icon {\\n display: inline-block;\\n top: .125em;\\n position: relative;\\n user-select: none;\\n cursor: pointer;\\n}\\n\\ntr.noborder > td {\\n border: none !important;\\n width: auto\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/ServerDashboard/server-dashboard.css?./node_modules/css-loader/dist/cjs.js");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => __WEBPACK_DEFAULT_EXPORT__\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! -!../../../node_modules/css-loader/dist/cjs.js!../../style/root.css */ \"./node_modules/css-loader/dist/cjs.js!./src/style/root.css\");\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});\n___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_style_root_css__WEBPACK_IMPORTED_MODULE_1__.default);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".server-dashboard-container {\\n padding-right: 15px;\\n padding-left: 15px;\\n margin-right: auto;\\n margin-left: auto;\\n}\\n\\n.server-dashboard-container .add-users-button {\\n border: 1px solid #ddd;\\n}\\n\\n.server-dashboard-container tbody {\\n color: #626262;\\n}\\n\\n.admin-table-head {\\n user-select: none;\\n}\\n\\n.sort-icon {\\n display: inline-block;\\n top: .125em;\\n position: relative;\\n user-select: none;\\n cursor: pointer;\\n}\\n\\ntr.noborder > td {\\n border: none !important;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/ServerDashboard/server-dashboard.css?./node_modules/css-loader/dist/cjs.js");
/***/ }),
@@ -3416,7 +3416,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
-/******/ __webpack_require__.h = () => "e3ffa410672a689f4a87"
+/******/ __webpack_require__.h = () => "1a5ba23eaece8adaaacf"
/******/ })();
/******/
/******/ /* webpack/runtime/global */