diff --git a/admin/server/controllers/systems.js b/admin/server/controllers/systems.js index 9a13f4f..4e665ef 100644 --- a/admin/server/controllers/systems.js +++ b/admin/server/controllers/systems.js @@ -266,14 +266,15 @@ exports.updateSystem = async function (req, res, next) { res.locals.system.showScreenName = res.locals.showScreenName; res.locals.system.ignoreUnknownTalkgroup = res.locals.ignoreUnknownTalkgroup; - res.locals.system.save(function (err) { - if (err) { + + await res.locals.system.save().catch( err => { + res.status(500); res.json({ success: false, message: err }); return; - } else { + }); var returnSys = (({ name, shortName, @@ -305,8 +306,8 @@ exports.updateSystem = async function (req, res, next) { res.json(returnSys); return; } - }); -} + + // ------------------------------------------- diff --git a/admin/src/App/App.js b/admin/src/App/App.js index b35a3d9..2fbaefe 100644 --- a/admin/src/App/App.js +++ b/admin/src/App/App.js @@ -7,7 +7,7 @@ import Restricted from "./Restricted" import About from "../Components/About" import System from "../System/System" import ListSystems from "../System/ListSystems" -import UpdateSystemContainer from "../System/UpdateSystemContainer" +import UpdateSystem from "../System/UpdateSystem" import CreateSystem from "../System/CreateSystem" @@ -19,7 +19,7 @@ const App = (params) => { } /> } /> - + } /> } /> } /> } /> diff --git a/admin/src/System/CreateSystem.js b/admin/src/System/CreateSystem.js index 9470973..c8dc5e5 100644 --- a/admin/src/System/CreateSystem.js +++ b/admin/src/System/CreateSystem.js @@ -39,8 +39,6 @@ const CreateSystem = (props) => { console.log(message); setRequestMessage(message); } - - } return ( diff --git a/admin/src/System/UpdateSystem.js b/admin/src/System/UpdateSystem.js index 3aa1054..ea85b04 100644 --- a/admin/src/System/UpdateSystem.js +++ b/admin/src/System/UpdateSystem.js @@ -1,47 +1,47 @@ -import React, { Component } from "react" +import React, { useEffect, useLayoutEffect, useState, useRef, useCallback, useMemo } from "react"; import SystemForm from "./SystemForm"; import { Container, Header } from "semantic-ui-react"; +import { useUpdateSystemMutation, useGetSystemsQuery, } from '../features/api/apiSlice' +import { useSelector, useDispatch } from 'react-redux' +import { useLocation, useNavigate, useParams } from 'react-router-dom'; -class UpdateSystem extends Component { - constructor(props) { - super(props); - this.handleSystemSubmit = this.handleSystemSubmit.bind(this); +const UpdateSystem = (props) => { + + const { screenName } = useSelector((state) => state.user); + const { shortName } = useParams(); + const { data: systemsData, isSuccess: isSystemsSuccess } = useGetSystemsQuery(); + const [updateSystem, { error }] = useUpdateSystemMutation(); + const [requestMessage, setRequestMessage] = useState(""); + + const navigate = useNavigate(); + let system = false; + if (isSystemsSuccess) { + system = systemsData.systems.find(sys => sys.shortName == shortName); } - state = { - requestMessage: "" + + const handleSystemSubmit = async (system) => { + try { + const originalPromiseResult = await updateSystem(system).unwrap(); + navigate("/system/" + shortName) + } catch (error) { + const message = error.data.message; + console.log(message); + setRequestMessage(message); + } } - componentDidMount() { - this.props.fetchSystems() - } - handleSystemSubmit(system) { - this.props - .updateSystem(system) - .then(requestMessage => { - if (requestMessage) { - // report to the user is there was a problem during registration - this.setState({ - requestMessage - }); - } else { - this.props.changeUrl("/system/"+system.shortName) - } - }); - } + return ( + +
Update System
+ +
+ ) - render() { - return( - -
Update System
- -
- ) - } } export default UpdateSystem diff --git a/admin/src/features/api/apiSlice.js b/admin/src/features/api/apiSlice.js index 217c0bc..83a5542 100644 --- a/admin/src/features/api/apiSlice.js +++ b/admin/src/features/api/apiSlice.js @@ -145,9 +145,27 @@ export const apiSlice = createApi({ } catch {} }, }), - + updateSystem: builder.mutation({ + query: (system) => ({ + url: `/systems/${system.shortName}`, + method: 'POST', + credentials: "include", + body: system, + }), + async onQueryStarted(system, { dispatch, queryFulfilled }) { + try { + const { data: updatedSystem } = await queryFulfilled + const patchResult = dispatch( + apiSlice.util.updateQueryData('getSystems', system.shortName, (systems) => { + const systemIndex = systems.findIndex((obj => obj.shortName == updatedSystem.shortName)); + systems[systemIndex] = updatedSystem; + }) + ) + } catch {} + }, + }), }) }) // Export the auto-generated hook for the `getPosts` query endpoint -export const { useGetGroupsQuery, useGetSystemsQuery, useGetTalkgroupsQuery, useGetErrorsQuery, useDeleteGroupMutation, useCreateGroupMutation, useCreateSystemMutation, useSaveGroupOrderMutation, useUpdateGroupMutation, useImportTalkgroupsMutation } = apiSlice +export const { useGetGroupsQuery, useGetSystemsQuery, useGetTalkgroupsQuery, useGetErrorsQuery, useDeleteGroupMutation, useCreateGroupMutation, useCreateSystemMutation, useUpdateSystemMutation, useSaveGroupOrderMutation, useUpdateGroupMutation, useImportTalkgroupsMutation } = apiSlice