@@ -54,11 +64,19 @@ const CreateGroup = (props) => {
className="btn btn-primary"
onClick={() => {
createGroup(groupName)
- .then(
- updateGroups(0, limit)
- .then((data) => dispatchPageUpdate(data, 0))
- .then(history.push("/groups"))
- .catch((err) => console.log(err))
+ .then((data) =>
+ data.status < 300
+ ? updateGroups(0, limit)
+ .then((data) => dispatchPageUpdate(data, 0))
+ .then((data) => history.push("/groups"))
+ .catch((err) => console.log(err))
+ : setErrorAlert(
+ `[${data.status}] Failed to create group. ${
+ data.status == 409
+ ? "Group already exists."
+ : ""
+ }`
+ )
)
.catch((err) => console.log(err));
}}
diff --git a/jsx/yarn.lock b/jsx/yarn.lock
index 8bfd4a66..e958ff32 100644
--- a/jsx/yarn.lock
+++ b/jsx/yarn.lock
@@ -3073,6 +3073,18 @@ eslint-plugin-react@^7.22.0:
resolve "^1.18.1"
string.prototype.matchall "^4.0.2"
+eslint-plugin-unused-imports@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-1.1.1.tgz#a5433f8b394461201129a246d8d92d9613e69597"
+ integrity sha512-EApvRx9Q3XQI96Tg7xPPqY6OuOy95wWMXAtc8RrwdIRk9bv8vkJKwOVoE4HeWJOQhHeHcI8lUbOqmup/PxjfOw==
+ dependencies:
+ eslint-rule-composer "^0.3.0"
+
+eslint-rule-composer@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
+ integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
+
eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
diff --git a/share/jupyterhub/static/js/admin-react.js b/share/jupyterhub/static/js/admin-react.js
index 5c89bfbc..a02d04f2 100644
--- a/share/jupyterhub/static/js/admin-react.js
+++ b/share/jupyterhub/static/js/admin-react.js
@@ -64,7 +64,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 import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! redux */ \"./node_modules/redux/es/redux.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _Store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Store */ \"./src/Store.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _util_withAPI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util/withAPI */ \"./src/util/withAPI.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _components_ServerDashboard_ServerDashboard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/ServerDashboard/ServerDashboard */ \"./src/components/ServerDashboard/ServerDashboard.jsx\");\n/* harmony import */ var _components_Groups_Groups__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/Groups/Groups */ \"./src/components/Groups/Groups.jsx\");\n/* harmony import */ var _components_GroupEdit_GroupEdit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/GroupEdit/GroupEdit */ \"./src/components/GroupEdit/GroupEdit.jsx\");\n/* harmony import */ var _components_CreateGroup_CreateGroup__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/CreateGroup/CreateGroup */ \"./src/components/CreateGroup/CreateGroup.jsx\");\n/* harmony import */ var _components_AddUser_AddUser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/AddUser/AddUser */ \"./src/components/AddUser/AddUser.jsx\");\n/* harmony import */ var _components_EditUser_EditUser__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/EditUser/EditUser */ \"./src/components/EditUser/EditUser.jsx\");\n/* harmony import */ var _style_root_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style/root.css */ \"./src/style/root.css\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar store = (0,redux__WEBPACK_IMPORTED_MODULE_14__.createStore)(_Store__WEBPACK_IMPORTED_MODULE_4__.reducers, _Store__WEBPACK_IMPORTED_MODULE_4__.initialState);\n\nvar App = function App(props) {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var limit = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.limit,\n user_page = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.user_page,\n groups_page = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.groups_page;\n (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__.jhapiRequest)(\"/users?offset=\".concat(user_page * limit, \"&limit=\").concat(limit), \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return store.dispatch({\n type: \"USER_DATA\",\n value: data\n });\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__.jhapiRequest)(\"/groups?offset=\".concat(groups_page * limit, \"&limit=\").concat(limit), \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return store.dispatch({\n type: \"GROUPS_DATA\",\n value: data\n });\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"resets\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_redux__WEBPACK_IMPORTED_MODULE_2__.Provider, {\n store: store\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_15__.HashRouter, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Switch, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_ServerDashboard_ServerDashboard__WEBPACK_IMPORTED_MODULE_7__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/groups\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_Groups_Groups__WEBPACK_IMPORTED_MODULE_8__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/group-edit\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_GroupEdit_GroupEdit__WEBPACK_IMPORTED_MODULE_9__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/create-group\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_CreateGroup_CreateGroup__WEBPACK_IMPORTED_MODULE_10__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/add-users\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_AddUser_AddUser__WEBPACK_IMPORTED_MODULE_11__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/edit-user\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_EditUser_EditUser__WEBPACK_IMPORTED_MODULE_12__.default)\n })))));\n};\n\nreact_dom__WEBPACK_IMPORTED_MODULE_1__.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(App, null), document.getElementById(\"react-admin-hook\"));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/App.jsx?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! redux */ \"./node_modules/redux/es/redux.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var _Store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Store */ \"./src/Store.js\");\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _util_withAPI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util/withAPI */ \"./src/util/withAPI.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router/esm/react-router.js\");\n/* harmony import */ var _components_ServerDashboard_ServerDashboard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/ServerDashboard/ServerDashboard */ \"./src/components/ServerDashboard/ServerDashboard.jsx\");\n/* harmony import */ var _components_Groups_Groups__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/Groups/Groups */ \"./src/components/Groups/Groups.jsx\");\n/* harmony import */ var _components_GroupEdit_GroupEdit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/GroupEdit/GroupEdit */ \"./src/components/GroupEdit/GroupEdit.jsx\");\n/* harmony import */ var _components_CreateGroup_CreateGroup__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/CreateGroup/CreateGroup */ \"./src/components/CreateGroup/CreateGroup.jsx\");\n/* harmony import */ var _components_AddUser_AddUser__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/AddUser/AddUser */ \"./src/components/AddUser/AddUser.jsx\");\n/* harmony import */ var _components_EditUser_EditUser__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/EditUser/EditUser */ \"./src/components/EditUser/EditUser.jsx\");\n/* harmony import */ var _style_root_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style/root.css */ \"./src/style/root.css\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar store = (0,redux__WEBPACK_IMPORTED_MODULE_14__.createStore)(_Store__WEBPACK_IMPORTED_MODULE_4__.reducers, _Store__WEBPACK_IMPORTED_MODULE_4__.initialState);\n\nvar App = function App() {\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {\n var limit = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.limit,\n user_page = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.user_page,\n groups_page = _Store__WEBPACK_IMPORTED_MODULE_4__.initialState.groups_page;\n (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__.jhapiRequest)(\"/users?offset=\".concat(user_page * limit, \"&limit=\").concat(limit), \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return store.dispatch({\n type: \"USER_PAGE\",\n value: {\n data: data,\n page: 0\n }\n });\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_5__.jhapiRequest)(\"/groups?offset=\".concat(groups_page * limit, \"&limit=\").concat(limit), \"GET\").then(function (data) {\n return data.json();\n }).then(function (data) {\n return store.dispatch({\n type: \"GROUPS_PAGE\",\n value: {\n data: data,\n page: 0\n }\n });\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"resets\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_redux__WEBPACK_IMPORTED_MODULE_2__.Provider, {\n store: store\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_15__.HashRouter, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Switch, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_ServerDashboard_ServerDashboard__WEBPACK_IMPORTED_MODULE_7__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/groups\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_Groups_Groups__WEBPACK_IMPORTED_MODULE_8__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/group-edit\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_GroupEdit_GroupEdit__WEBPACK_IMPORTED_MODULE_9__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/create-group\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_CreateGroup_CreateGroup__WEBPACK_IMPORTED_MODULE_10__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/add-users\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_AddUser_AddUser__WEBPACK_IMPORTED_MODULE_11__.default)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_16__.Route, {\n exact: true,\n path: \"/edit-user\",\n component: (0,recompose__WEBPACK_IMPORTED_MODULE_3__.compose)(_util_withAPI__WEBPACK_IMPORTED_MODULE_6__.default)(_components_EditUser_EditUser__WEBPACK_IMPORTED_MODULE_12__.default)\n })))));\n};\n\nreact_dom__WEBPACK_IMPORTED_MODULE_1__.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(App, null), document.getElementById(\"react-admin-hook\"));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/App.jsx?");
/***/ }),
@@ -80,7 +80,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac
/***/ ((__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 */ \"initialState\": () => /* binding */ initialState,\n/* harmony export */ \"reducers\": () => /* binding */ reducers\n/* harmony export */ });\n\nvar initialState = {\n user_data: undefined,\n user_page: 0,\n groups_data: undefined,\n groups_page: 0,\n limit: 50\n};\nvar reducers = function reducers() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n // Updates the client user model data and stores the page\n case \"USER_PAGE\":\n return Object.assign({}, state, {\n user_page: action.value.page,\n user_data: action.value.data\n });\n // Deprecated - doesn't store pagination values\n\n case \"USER_DATA\":\n return Object.assign({}, state, {\n user_data: action.value\n });\n // Updates the client group model data and stores the page\n\n case \"GROUPS_PAGE\":\n return Object.assign({}, state, {\n groups_page: action.value.page,\n groups_data: action.value.data\n });\n // Deprecated - doesn't store pagination values\n\n case \"GROUPS_DATA\":\n return Object.assign({}, state, {\n groups_data: action.value\n });\n\n default:\n return state;\n }\n};\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/Store.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initialState\": () => /* binding */ initialState,\n/* harmony export */ \"reducers\": () => /* binding */ reducers\n/* harmony export */ });\n\nvar initialState = {\n user_data: undefined,\n user_page: 0,\n groups_data: undefined,\n groups_page: 0,\n limit: 50\n};\nvar reducers = function reducers() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n // Updates the client user model data and stores the page\n case \"USER_PAGE\":\n return Object.assign({}, state, {\n user_page: action.value.page,\n user_data: action.value.data\n });\n // Updates the client group model data and stores the page\n\n case \"GROUPS_PAGE\":\n return Object.assign({}, state, {\n groups_page: action.value.page,\n groups_data: action.value.data\n });\n\n default:\n return state;\n }\n};\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/Store.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__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\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\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 limit = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(function (state) {\n return state.limit;\n });\n\n var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n\n var dispatchPageChange = function dispatchPageChange(data, page) {\n dispatch({\n type: \"USER_PAGE\",\n value: {\n data: data,\n page: page\n }\n });\n };\n\n var addUsers = props.addUsers,\n failRegexEvent = props.failRegexEvent,\n updateUsers = props.updateUsers,\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 setAdmin(e.target.checked);\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_5__.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 updateUsers(0, limit).then(function (data) {\n return dispatchPageChange(data, 0);\n }).then(function () {\n return history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n });\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_3___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n updateUsers: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.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_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var recompose__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\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\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 _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState6 = _slicedToArray(_useState5, 2),\n errorAlert = _useState6[0],\n setErrorAlert = _useState6[1],\n limit = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(function (state) {\n return state.limit;\n });\n\n var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n\n var dispatchPageChange = function dispatchPageChange(data, page) {\n dispatch({\n type: \"USER_PAGE\",\n value: {\n data: data,\n page: page\n }\n });\n };\n\n var addUsers = props.addUsers,\n failRegexEvent = props.failRegexEvent,\n updateUsers = props.updateUsers,\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 }, errorAlert != null ? /*#__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: \"alert alert-danger\"\n }, errorAlert))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null), /*#__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 setAdmin(e.target.checked);\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_5__.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 (data) {\n return data.status < 300 ? updateUsers(0, limit).then(function (data) {\n return dispatchPageChange(data, 0);\n }).then(function () {\n return history.push(\"/\");\n })[\"catch\"](function (err) {\n return console.log(err);\n }) : setErrorAlert(\"[\".concat(data.status, \"] Failed to create user. \").concat(data.status == 409 ? \"User already exists.\" : \"\"));\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_3___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n updateUsers: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_3___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AddUser);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/AddUser/AddUser.jsx?");
/***/ }),
@@ -110,7 +110,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__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/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_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\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\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 limit = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(function (state) {\n return state.limit;\n });\n\n var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n\n var dispatchPageUpdate = function dispatchPageUpdate(data, page) {\n dispatch({\n type: \"GROUPS_DATA\",\n value: {\n data: data,\n page: page\n }\n });\n };\n\n var createGroup = props.createGroup,\n updateGroups = props.updateGroups,\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 id: \"group-name\",\n value: groupName,\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_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 createGroup(groupName).then(updateGroups(0, limit).then(function (data) {\n return dispatchPageUpdate(data, 0);\n }).then(history.push(\"/groups\"))[\"catch\"](function (err) {\n return console.log(err);\n }))[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Create\")))))));\n};\n\nCreateGroup.propTypes = {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n updateGroups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CreateGroup);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.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_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/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_2__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);\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\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 _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),\n _useState4 = _slicedToArray(_useState3, 2),\n errorAlert = _useState4[0],\n setErrorAlert = _useState4[1],\n limit = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(function (state) {\n return state.limit;\n });\n\n var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n\n var dispatchPageUpdate = function dispatchPageUpdate(data, page) {\n dispatch({\n type: \"GROUPS_PAGE\",\n value: {\n data: data,\n page: page\n }\n });\n };\n\n var createGroup = props.createGroup,\n updateGroups = props.updateGroups,\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 }, errorAlert != null ? /*#__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: \"alert alert-danger\"\n }, errorAlert))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null), /*#__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 id: \"group-name\",\n value: groupName,\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_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 createGroup(groupName).then(function (data) {\n return data.status < 300 ? updateGroups(0, limit).then(function (data) {\n return dispatchPageUpdate(data, 0);\n }).then(function (data) {\n return history.push(\"/groups\");\n })[\"catch\"](function (err) {\n return console.log(err);\n }) : setErrorAlert(\"[\".concat(data.status, \"] Failed to create group. \").concat(data.status == 409 ? \"Group already exists.\" : \"\"));\n })[\"catch\"](function (err) {\n return console.log(err);\n });\n }\n }, \"Create\")))))));\n};\n\nCreateGroup.propTypes = {\n createGroup: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n updateGroups: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n failRegexEvent: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func),\n history: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({\n push: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func)\n })\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CreateGroup);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/CreateGroup/CreateGroup.jsx?");
/***/ }),
@@ -3379,7 +3379,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
-/******/ __webpack_require__.h = () => "d06ae54567193c32db57"
+/******/ __webpack_require__.h = () => "019ee51ab6860db1a020"
/******/ })();
/******/
/******/ /* webpack/runtime/global */