diff --git a/jsx/build/admin-react.js b/jsx/build/admin-react.js index e106fc6b..fa2b0580 100644 --- a/jsx/build/admin-react.js +++ b/jsx/build/admin-react.js @@ -215,7 +215,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 recompose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.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 _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _Groups_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Groups.pre */ \"./src/components/Groups/Groups.pre.jsx\");\n\n\n\n\nvar withGroupsAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_0__.withProps)(function (props) {\n return {\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 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 addUsersToGroup: function addUsersToGroup(name, new_users) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + name + \"/users\", \"POST\", {\n body: {\n users: new_users\n },\n json: true\n });\n },\n removeUsersFromGroup: function removeUsersFromGroup(name, removed_users) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + name + \"/users\", \"DELETE\", {\n body: {\n users: removed_users\n },\n json: true\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_0__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_1__.connect)(function (state) {\n return {\n user_data: state.user_data,\n groups_data: state.groups_data\n };\n}), withGroupsAPI)(_Groups_pre__WEBPACK_IMPORTED_MODULE_3__.Groups));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/Groups/Groups.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 recompose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! recompose */ \"./node_modules/recompose/dist/Recompose.esm.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 _util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/jhapiUtil */ \"./src/util/jhapiUtil.js\");\n/* harmony import */ var _Groups_pre__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Groups.pre */ \"./src/components/Groups/Groups.pre.jsx\");\n\n\n\n\nvar withGroupsAPI = (0,recompose__WEBPACK_IMPORTED_MODULE_0__.withProps)(function (props) {\n return {\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 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 addUsersToGroup: function addUsersToGroup(name, new_users) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + name + \"/users\", \"POST\", {\n body: {\n users: new_users\n },\n json: true\n });\n },\n removeUsersFromGroup: function removeUsersFromGroup(name, removed_users) {\n return (0,_util_jhapiUtil__WEBPACK_IMPORTED_MODULE_2__.jhapiRequest)(\"/groups/\" + name + \"/users\", \"DELETE\", {\n body: {\n users: removed_users\n },\n json: true\n });\n }\n };\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,recompose__WEBPACK_IMPORTED_MODULE_0__.compose)((0,react_redux__WEBPACK_IMPORTED_MODULE_1__.connect)(function (state) {\n return {\n user_data: state.user_data,\n groups_data: state.groups_data\n };\n}), withGroupsAPI)(_Groups_pre__WEBPACK_IMPORTED_MODULE_3__.default));\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/Groups/Groups.js?"); /***/ }), @@ -224,13 +224,13 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac !*** ./src/components/Groups/Groups.pre.jsx ***! \**********************************************/ /*! namespace exports */ -/*! export Groups [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 */ \"Groups\": () => /* binding */ Groups\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 Groups = /*#__PURE__*/function (_Component) {\n _inherits(Groups, _Component);\n\n var _super = _createSuper(Groups);\n\n _createClass(Groups, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n user_data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n groups_data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n };\n }\n }]);\n\n function Groups(props) {\n _classCallCheck(this, Groups);\n\n return _super.call(this, props);\n }\n\n _createClass(Groups, [{\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var _this$props = this.props,\n user_data = _this$props.user_data,\n groups_data = _this$props.groups_data,\n refreshGroupsData = _this$props.refreshGroupsData,\n refreshUserData = _this$props.refreshUserData;\n\n if (!groups_data || !user_data) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n }\n\n return /*#__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-12 col-lg-10 col-lg-offset-1\"\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, \"Groups\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, groups_data.length > 0 ? groups_data.map(function (e, i) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n key: \"group-edit\" + i,\n className: \"group-edit-link\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: {\n pathname: \"/group-edit\",\n state: {\n group_data: e,\n user_data: user_data,\n callback: function callback() {\n refreshGroupsData();\n refreshUserData();\n }\n }\n }\n }, e.name)));\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"no groups created...\"))), /*#__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 adjacent-span-spacing\"\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(\"button\", {\n className: \"btn btn-primary adjacent-span-spacing\",\n onClick: function onClick() {\n _this.props.history.push(\"/create-group\");\n }\n }, \"New Group\"))))));\n }\n }]);\n\n return Groups;\n}(react__WEBPACK_IMPORTED_MODULE_0__.Component);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/Groups/Groups.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__);\n\n\n\n\nvar Groups = function Groups(props) {\n var user_data = props.user_data,\n groups_data = props.groups_data,\n refreshGroupsData = props.refreshGroupsData,\n refreshUserData = props.refreshUserData,\n history = props.history;\n\n if (!groups_data || !user_data) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null);\n }\n\n return /*#__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-12 col-lg-10 col-lg-offset-1\"\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, \"Groups\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"panel-body\"\n }, groups_data.length > 0 ? groups_data.map(function (e, i) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n key: \"group-edit\" + i,\n className: \"group-edit-link\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Link, {\n to: {\n pathname: \"/group-edit\",\n state: {\n group_data: e,\n user_data: user_data,\n callback: function callback() {\n refreshGroupsData();\n refreshUserData();\n }\n }\n }\n }, e.name)));\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"h4\", null, \"no groups created...\"))), /*#__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 adjacent-span-spacing\"\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(\"button\", {\n className: \"btn btn-primary adjacent-span-spacing\",\n onClick: function onClick() {\n history.push(\"/create-group\");\n }\n }, \"New Group\"))))));\n};\n\nGroups.propTypes = {\n user_data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n groups_data: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array),\n refreshUserData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),\n refreshGroupsData: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Groups);\n\n//# sourceURL=webpack://jupyterhub-admin-react/./src/components/Groups/Groups.pre.jsx?"); /***/ }), @@ -3416,7 +3416,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => "f8d18512a8d9a3983d76" +/******/ __webpack_require__.h = () => "a11516d72050dbe126e7" /******/ })(); /******/ /******/ /* webpack/runtime/global */ diff --git a/jsx/src/components/Groups/Groups.js b/jsx/src/components/Groups/Groups.js index 765d7f8e..74e883fe 100644 --- a/jsx/src/components/Groups/Groups.js +++ b/jsx/src/components/Groups/Groups.js @@ -1,7 +1,7 @@ import { compose, withProps } from "recompose"; import { connect } from "react-redux"; import { jhapiRequest } from "../../util/jhapiUtil"; -import { Groups } from "./Groups.pre"; +import Groups from "./Groups.pre"; const withGroupsAPI = withProps((props) => ({ refreshGroupsData: () => diff --git a/jsx/src/components/Groups/Groups.pre.jsx b/jsx/src/components/Groups/Groups.pre.jsx index 3e74f8a9..7fe7c231 100644 --- a/jsx/src/components/Groups/Groups.pre.jsx +++ b/jsx/src/components/Groups/Groups.pre.jsx @@ -2,86 +2,81 @@ import React, { Component } from "react"; import { Link } from "react-router-dom"; import PropTypes from "prop-types"; -export class Groups extends Component { - static get propTypes() { - return { - user_data: PropTypes.array, - groups_data: PropTypes.array, - refreshUserData: PropTypes.func, - refreshGroupsData: PropTypes.func, - }; +const Groups = (props) => { + var { + user_data, + groups_data, + refreshGroupsData, + refreshUserData, + history + } = props; + + if (!groups_data || !user_data) { + return
; } - constructor(props) { - super(props); - } - - render() { - var { - user_data, - groups_data, - refreshGroupsData, - refreshUserData, - } = this.props; - - if (!groups_data || !user_data) { - return ; - } - - return ( -