diff --git a/app/Http/Controllers/MonitorsController.php b/app/Http/Controllers/MonitorsController.php index 4823e95..96a057d 100644 --- a/app/Http/Controllers/MonitorsController.php +++ b/app/Http/Controllers/MonitorsController.php @@ -80,7 +80,7 @@ public function store(MonitorRequest $request) 'group_id' => $validated['monitorGroupId'], ]); - if ($monitor) { + if ($monitor && $monitor->domain_check_enabled) { DomainService::addDomainExpiration($monitor); } diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php new file mode 100644 index 0000000..dab8358 --- /dev/null +++ b/app/Http/Controllers/UsersController.php @@ -0,0 +1,66 @@ +middleware('auth'); + } + + public function index() + { + return Inertia::render('Users/Index', [ + 'users' => User::orderBy('name')->get(), + ]); + } + + public function create() + { + return Inertia::render('Users/Create', []); + } + + public function store(UserRequest $request) + { + $validated = $request->validated(); + $user = User::create([ + 'name' => $validated['name'], + 'email' => $validated['email'], + 'password' => bcrypt($validated['password']), + ]); + + return redirect()->route('users.index'); + } + + public function edit(User $user) + { + return Inertia::render('Users/Edit', [ + 'user' => $user, + ]); + } + + public function update(UserRequest $request, User $user) + { + $validated = $request->validated(); + $user->update([ + 'name' => $validated['name'], + 'email' => $validated['email'], + // Only update password if provided + 'password' => $validated['password'] ? bcrypt($validated['password']) : $user->password, + ]); + + return redirect()->route('users.index'); + } + + public function destroy(User $user) + { + $user->delete(); + + return redirect()->route('users.index'); + } +} diff --git a/app/Http/Requests/UserRequest.php b/app/Http/Requests/UserRequest.php new file mode 100644 index 0000000..9f75a74 --- /dev/null +++ b/app/Http/Requests/UserRequest.php @@ -0,0 +1,28 @@ + 'required|string', + 'email' => 'required|email|unique:users,email'.($this->user ? ','.$this->user->id : ''), + ]; + if ($this->isMethod('post')) { + $rules['password'] = 'required|string|min:6'; + } elseif ($this->isMethod('put') || $this->isMethod('patch')) { + $rules['password'] = 'nullable|string|min:6'; + } + + return $rules; + } +} diff --git a/public/js/app.js b/public/js/app.js index 45f55a8..cdf0f77 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -2936,16 +2936,23 @@ function Authenticated(_ref) { className: "hidden space-x-8 sm:-my-px sm:ml-10 sm:flex", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Components_NavLink__WEBPACK_IMPORTED_MODULE_3__["default"], { href: route('monitors.index'), - active: route().current('monitors.index'), + active: route().current('monitors.*'), children: "Monitors" }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { className: "hidden space-x-8 sm:-my-px sm:ml-10 sm:flex", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Components_NavLink__WEBPACK_IMPORTED_MODULE_3__["default"], { href: route('groups.index'), - active: route().current('groups.index'), + active: route().current('groups.*'), children: "Groups" }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { + className: "hidden space-x-8 sm:-my-px sm:ml-10 sm:flex", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Components_NavLink__WEBPACK_IMPORTED_MODULE_3__["default"], { + href: route('users.index'), + active: route().current('users.*'), + children: "Users" + }) })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { className: "hidden sm:flex sm:items-center sm:ml-6", @@ -3749,7 +3756,7 @@ function Create(props) { }; var handleSubmit = function handleSubmit(e) { e.preventDefault(); - _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.post('/groups', form); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.post(route('groups.store'), form); }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { auth: props.auth, @@ -3856,7 +3863,7 @@ function Edit(props) { }; var handleSubmit = function handleSubmit(e) { e.preventDefault(); - _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.put("/groups/".concat(group.id), form); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.put(route('groups.update', group.id), form); }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { auth: props.auth, @@ -3936,7 +3943,7 @@ function Index(props) { className: "font-bold text-xl text-purple-600 leading-tight uppercase", children: "Groups" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Link, { - href: "groups/create", + href: route('groups.create'), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_Components_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__["default"], { className: "h-4 w-4 mr-1" @@ -4107,7 +4114,7 @@ function Create(props) { }; var handleSubmit = function handleSubmit(e) { e.preventDefault(); - _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.post('/monitors', form); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.post(route('monitors.store'), form); }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { auth: props.auth, @@ -4317,7 +4324,7 @@ function Edit(props) { }; var handleSubmit = function handleSubmit(e) { e.preventDefault(); - _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.put("/monitors/".concat(monitor.id), form); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.put(route('monitors.update', monitor.id), form); }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { auth: props.auth, @@ -4492,7 +4499,7 @@ function Index(props) { className: "font-bold text-xl text-purple-600 leading-tight uppercase", children: "Monitors" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Link, { - href: "monitors/create", + href: route('monitors.create'), children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_Components_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__["default"], { className: "h-4 w-4 mr-1" @@ -4526,6 +4533,321 @@ function Index(props) { /***/ }), +/***/ "./resources/js/Pages/Users/Create.js": +/*!********************************************!*\ + !*** ./resources/js/Pages/Users/Create.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Create) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/react */ "./node_modules/@inertiajs/react/dist/index.esm.js"); +/* harmony import */ var _components_PageHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/PageHeader */ "./resources/js/components/PageHeader.js"); +/* harmony import */ var _Components_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Components/Button */ "./resources/js/Components/Button.js"); +/* harmony import */ var _Components_Label__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Components/Label */ "./resources/js/Components/Label.js"); +/* harmony import */ var _Components_Input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/Components/Input */ "./resources/js/Components/Input.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _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."); } +function _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); } +function _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; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + +function Create(props) { + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ + name: "", + email: "", + password: "" + }), + _useState2 = _slicedToArray(_useState, 2), + form = _useState2[0], + setForm = _useState2[1]; + var handleChange = function handleChange(e) { + var _e$target = e.target, + name = _e$target.name, + value = _e$target.value, + type = _e$target.type, + checked = _e$target.checked; + setForm(function (prevState) { + return _objectSpread(_objectSpread({}, prevState), {}, _defineProperty({}, name, type === "checkbox" ? checked : value)); + }); + }; + var handleSubmit = function handleSubmit(e) { + e.preventDefault(); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.post(route('users.store'), form); + }; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { + auth: props.auth, + errors: props.errors, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Head, { + title: "Create User" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_PageHeader__WEBPACK_IMPORTED_MODULE_3__["default"], { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("h2", { + className: "font-bold text-xl text-purple-600 leading-tight uppercase", + children: "Create User" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "mx-auto py-12 w-1/2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("form", { + onSubmit: handleSubmit, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "name", + children: "Name" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "name", + value: form.name, + required: true, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "email", + children: "Email" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "email", + type: "email", + value: form.email, + required: true, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "password", + children: "Password" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "password", + type: "password", + value: form.password, + required: true, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Button__WEBPACK_IMPORTED_MODULE_4__["default"], { + children: "Create" + }) + })] + }) + })] + }); +} + +/***/ }), + +/***/ "./resources/js/Pages/Users/Edit.js": +/*!******************************************!*\ + !*** ./resources/js/Pages/Users/Edit.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Edit) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/react */ "./node_modules/@inertiajs/react/dist/index.esm.js"); +/* harmony import */ var _components_PageHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/PageHeader */ "./resources/js/components/PageHeader.js"); +/* harmony import */ var _Components_Button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Components/Button */ "./resources/js/Components/Button.js"); +/* harmony import */ var _Components_Label__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Components/Label */ "./resources/js/Components/Label.js"); +/* harmony import */ var _Components_Input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/Components/Input */ "./resources/js/Components/Input.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _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."); } +function _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); } +function _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; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + +function Edit(props) { + var user = (0,_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.usePage)().props.user; + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({ + name: user.name, + email: user.email, + password: "" + }), + _useState2 = _slicedToArray(_useState, 2), + form = _useState2[0], + setForm = _useState2[1]; + var handleChange = function handleChange(e) { + var _e$target = e.target, + name = _e$target.name, + value = _e$target.value, + type = _e$target.type, + checked = _e$target.checked; + setForm(function (prevState) { + return _objectSpread(_objectSpread({}, prevState), {}, _defineProperty({}, name, type === "checkbox" ? checked : value)); + }); + }; + var handleSubmit = function handleSubmit(e) { + e.preventDefault(); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.router.put(route('users.update', user.id), form); + }; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { + auth: props.auth, + errors: props.errors, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Head, { + title: "Edit User" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_PageHeader__WEBPACK_IMPORTED_MODULE_3__["default"], { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("h2", { + className: "font-bold text-xl text-purple-600 leading-tight uppercase", + children: "Edit User" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "mx-auto py-12 w-1/2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("form", { + onSubmit: handleSubmit, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "name", + children: "Name" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "name", + value: form.name, + required: true, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "email", + children: "Email" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "email", + type: "email", + value: form.email, + required: true, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Label__WEBPACK_IMPORTED_MODULE_5__["default"], { + forInput: "password", + children: "Password (leave blank to keep current)" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Input__WEBPACK_IMPORTED_MODULE_6__["default"], { + name: "password", + type: "password", + value: form.password, + handleChange: handleChange + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Button__WEBPACK_IMPORTED_MODULE_4__["default"], { + children: "Update" + }) + })] + }) + })] + }); +} + +/***/ }), + +/***/ "./resources/js/Pages/Users/Index.js": +/*!*******************************************!*\ + !*** ./resources/js/Pages/Users/Index.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Index) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _inertiajs_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/react */ "./node_modules/@inertiajs/react/dist/index.esm.js"); +/* harmony import */ var _components_UserCard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/UserCard */ "./resources/js/components/UserCard.js"); +/* harmony import */ var _components_PageHeader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/PageHeader */ "./resources/js/components/PageHeader.js"); +/* harmony import */ var _Components_Button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Components/Button */ "./resources/js/Components/Button.js"); +/* harmony import */ var _heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/24/solid */ "./node_modules/@heroicons/react/24/solid/esm/PlusIcon.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + + + + + + + + +function Index(props) { + var users = (0,_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.usePage)().props.users; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { + auth: props.auth, + errors: props.errors, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Head, { + title: "Users" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_PageHeader__WEBPACK_IMPORTED_MODULE_4__["default"], { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { + className: "flex justify-between items-center", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("h2", { + className: "font-bold text-xl text-purple-600 leading-tight uppercase", + children: "Users" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_2__.Link, { + href: route('users.create'), + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_Components_Button__WEBPACK_IMPORTED_MODULE_5__["default"], { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_heroicons_react_24_solid__WEBPACK_IMPORTED_MODULE_7__["default"], { + className: "h-4 w-4 mr-1" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { + children: "Create" + })] + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { + className: "py-12", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { + className: "flex flex-wrap max-w-7xl mx-auto sm:px-6 lg:px-8", + children: users.map(function (user, index) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_components_UserCard__WEBPACK_IMPORTED_MODULE_3__["default"], { + user: user + }, index); + }) + }) + })] + }); +} + +/***/ }), + /***/ "./resources/js/app.js": /*!*****************************!*\ !*** ./resources/js/app.js ***! @@ -4679,7 +5001,7 @@ function GroupCard(_ref) { e.preventDefault(); if (monitorsCount) return; if (confirm("Are you sure you want to remove the group ".concat(group.name, "?"))) { - _inertiajs_react__WEBPACK_IMPORTED_MODULE_1__.router["delete"]("/groups/".concat(group.id)); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_1__.router["delete"](route('groups.destroy', group.id)); } }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { @@ -4703,7 +5025,7 @@ function GroupCard(_ref) { }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { className: "flex items-center", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_1__.Link, { - href: "groups/".concat(group.id, "/edit"), + href: route('groups.edit', group.id), className: "flex items-center rounded-full px-1.5 py-1.5 text-gray-500 hover:bg-purple-200 hover:text-purple-600", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_3__["default"], { className: "h-4 w-4" @@ -4760,7 +5082,7 @@ function MonitorCard(_ref) { var handleDelete = function handleDelete(e) { e.preventDefault(); if (confirm("Are you sure you want to remove ".concat(monitor.name, " (").concat(monitor.raw_url, ") from monitoring?"))) { - _inertiajs_react__WEBPACK_IMPORTED_MODULE_4__.router["delete"]("/monitors/".concat(monitor.id)); + _inertiajs_react__WEBPACK_IMPORTED_MODULE_4__.router["delete"](route('monitors.destroy', monitor.id)); } }; return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { @@ -4806,7 +5128,7 @@ function MonitorCard(_ref) { }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { className: "flex", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_4__.Link, { - href: "monitors/".concat(monitor.id, "/edit"), + href: route('monitors.edit', monitor.id), className: "flex items-center rounded-full px-1.5 py-1.5 text-gray-500 hover:bg-purple-200 hover:text-purple-600", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_7__["default"], { className: "h-4 w-4" @@ -5049,6 +5371,75 @@ function PageHeader(_ref) { /***/ }), +/***/ "./resources/js/components/UserCard.js": +/*!*********************************************!*\ + !*** ./resources/js/components/UserCard.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ UserCard) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var _inertiajs_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/react */ "./node_modules/@inertiajs/react/dist/index.esm.js"); +/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @heroicons/react/24/outline */ "./node_modules/@heroicons/react/24/outline/esm/PencilIcon.js"); +/* harmony import */ var _heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @heroicons/react/24/outline */ "./node_modules/@heroicons/react/24/outline/esm/TrashIcon.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + + + + +function UserCard(_ref) { + var user = _ref.user; + var handleDelete = function handleDelete(e) { + e.preventDefault(); + if (confirm("Are you sure you want to remove the user ".concat(user.name, "?"))) { + _inertiajs_react__WEBPACK_IMPORTED_MODULE_1__.router["delete"](route('users.destroy', user.id)); + } + }; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { + className: "w-full md:w-1/2 lg:w-1/3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { + className: "p-5 bg-white overflow-hidden shadow-sm rounded-lg mb-3 mx-3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { + className: "flex justify-between", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { + className: "flex flex-col", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { + className: "flex items-center", + children: user.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { + className: "flex items-center mb-2 text-sm", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span", { + className: "text-gray-500", + children: user.email + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div", { + className: "flex items-center", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_inertiajs_react__WEBPACK_IMPORTED_MODULE_1__.Link, { + href: route('users.edit', user.id), + className: "flex items-center rounded-full px-1.5 py-1.5 text-gray-500 hover:bg-purple-200 hover:text-purple-600", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_3__["default"], { + className: "h-4 w-4" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { + className: "flex items-center rounded-full px-1.5 py-1.5 hover:bg-red-200 text-gray-500 hover:text-red-600 cursor-pointer", + onClick: handleDelete, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_heroicons_react_24_outline__WEBPACK_IMPORTED_MODULE_4__["default"], { + className: "h-4 w-4" + }) + })] + })] + }) + }) + }); +} + +/***/ }), + /***/ "./node_modules/base64-js/index.js": /*!*****************************************!*\ !*** ./node_modules/base64-js/index.js ***! @@ -78513,7 +78904,13 @@ var map = { "./Monitors/Edit": "./resources/js/Pages/Monitors/Edit.js", "./Monitors/Edit.js": "./resources/js/Pages/Monitors/Edit.js", "./Monitors/Index": "./resources/js/Pages/Monitors/Index.js", - "./Monitors/Index.js": "./resources/js/Pages/Monitors/Index.js" + "./Monitors/Index.js": "./resources/js/Pages/Monitors/Index.js", + "./Users/Create": "./resources/js/Pages/Users/Create.js", + "./Users/Create.js": "./resources/js/Pages/Users/Create.js", + "./Users/Edit": "./resources/js/Pages/Users/Edit.js", + "./Users/Edit.js": "./resources/js/Pages/Users/Edit.js", + "./Users/Index": "./resources/js/Pages/Users/Index.js", + "./Users/Index.js": "./resources/js/Pages/Users/Index.js" }; diff --git a/resources/js/Layouts/Authenticated.js b/resources/js/Layouts/Authenticated.js index b187d2e..349d872 100644 --- a/resources/js/Layouts/Authenticated.js +++ b/resources/js/Layouts/Authenticated.js @@ -21,15 +21,20 @@ export default function Authenticated({ auth, children }) {