From b5443952dae57ca81c01a9544aa49a57f806dd49 Mon Sep 17 00:00:00 2001 From: Cesar N <11819101+cesnietor@users.noreply.github.com> Date: Thu, 18 Jan 2024 15:02:11 -0800 Subject: [PATCH] Use swagger api for IDP configuration details (#3200) --- api/embedded_spec.go | 6 + swagger.yml | 2 + web-app/src/api/consoleApi.ts | 1 + .../Console/IDP/IDPConfigurationDetails.tsx | 104 +++++++++--------- 4 files changed, 63 insertions(+), 50 deletions(-) diff --git a/api/embedded_spec.go b/api/embedded_spec.go index 06b2c8ef4..94ca01aea 100644 --- a/api/embedded_spec.go +++ b/api/embedded_spec.go @@ -3005,6 +3005,9 @@ func init() { } }, "put": { + "consumes": [ + "application/json" + ], "tags": [ "idp" ], @@ -12177,6 +12180,9 @@ func init() { } }, "put": { + "consumes": [ + "application/json" + ], "tags": [ "idp" ], diff --git a/swagger.yml b/swagger.yml index 33d78794c..d28c57081 100644 --- a/swagger.yml +++ b/swagger.yml @@ -3395,6 +3395,8 @@ paths: put: summary: Update IDP Configuration operationId: UpdateConfiguration + consumes: + - application/json parameters: - name: body in: body diff --git a/web-app/src/api/consoleApi.ts b/web-app/src/api/consoleApi.ts index fa05b794a..3a6166c04 100644 --- a/web-app/src/api/consoleApi.ts +++ b/web-app/src/api/consoleApi.ts @@ -5177,6 +5177,7 @@ export class Api< method: "PUT", body: body, secure: true, + type: ContentType.Json, format: "json", ...params, }), diff --git a/web-app/src/screens/Console/IDP/IDPConfigurationDetails.tsx b/web-app/src/screens/Console/IDP/IDPConfigurationDetails.tsx index f944091c7..086bb13a0 100644 --- a/web-app/src/screens/Console/IDP/IDPConfigurationDetails.tsx +++ b/web-app/src/screens/Console/IDP/IDPConfigurationDetails.tsx @@ -37,18 +37,23 @@ import { } from "mds"; import { useNavigate, useParams } from "react-router-dom"; import { modalStyleUtils } from "../Common/FormComponents/common/styleLibrary"; -import { ErrorResponseHandler } from "../../../common/types"; import { useAppDispatch } from "../../../store"; import { setErrorSnackMessage, setHelpName, setServerNeedsRestart, } from "../../../systemSlice"; -import api from "../../../common/api"; -import useApi from "../Common/Hooks/useApi"; import DeleteIDPConfigurationModal from "./DeleteIDPConfigurationModal"; import PageHeaderWrapper from "../Common/PageHeaderWrapper/PageHeaderWrapper"; import HelpMenu from "../HelpMenu"; +import { api } from "api"; +import { + ApiError, + HttpResponse, + IdpServerConfiguration, + SetIDPResponse, +} from "api/consoleApi"; +import { errorToHandler } from "api/errors"; type IDPConfigurationDetailsProps = { formFields: object; @@ -75,7 +80,9 @@ const IDPConfigurationDetails = ({ const configurationName = params.idpName; - const [loading, setLoading] = useState(true); + const [loadingDetails, setLoadingDetails] = useState(true); + const [loadingSave, setLoadingSave] = useState(false); + const [loadingEnabledSave, setLoadingEnabledSave] = useState(false); const [isEnabled, setIsEnabled] = useState(false); const [fields, setFields] = useState({}); const [overrideFields, setOverrideFields] = useState({}); @@ -85,29 +92,6 @@ const IDPConfigurationDetails = ({ const [deleteOpen, setDeleteOpen] = useState(false); const [envOverride, setEnvOverride] = useState(false); - const onSuccess = (res: any) => { - dispatch(setServerNeedsRestart(res.restart === true)); - }; - - const onError = (err: ErrorResponseHandler) => - dispatch(setErrorSnackMessage(err)); - - const [loadingSave, invokeApi] = useApi(onSuccess, onError); - - const onEnabledSuccess = (res: any) => { - setIsEnabled(!isEnabled); - dispatch(setServerNeedsRestart(res.restart === true)); - }; - - const onEnabledError = (err: ErrorResponseHandler) => { - dispatch(setErrorSnackMessage(err)); - }; - - const [loadingEnabledSave, invokeEnabledApi] = useApi( - onEnabledSuccess, - onEnabledError, - ); - const parseFields = useCallback( (record: any) => { let fields: any = {}; @@ -158,32 +142,27 @@ const IDPConfigurationDetails = ({ setOriginalFields(fields); }; - useEffect(() => { - setLoading(true); - }, []); - useEffect(() => { const loadRecord = () => { - api - .invoke("GET", `${endpoint}${configurationName}`) - .then((result: any) => { - if (result) { - setRecord(result); - parseFields(result); - parseOriginalFields(result); + api.idp + .getConfiguration(configurationName || "", "openid") + .then((res: HttpResponse) => { + if (res.data) { + setRecord(res.data); + parseFields(res.data); + parseOriginalFields(res.data); } - setLoading(false); }) - .catch((err: ErrorResponseHandler) => { - dispatch(setErrorSnackMessage(err)); - setLoading(false); - }); + .catch((res: HttpResponse) => { + dispatch(setErrorSnackMessage(errorToHandler(res.error))); + }) + .finally(() => setLoadingDetails(false)); }; - if (loading) { + if (loadingDetails) { loadRecord(); } - }, [dispatch, loading, configurationName, endpoint, parseFields]); + }, [dispatch, loadingDetails, configurationName, endpoint, parseFields]); const validSave = () => { for (const [key, value] of Object.entries(formFields)) { @@ -206,6 +185,7 @@ const IDPConfigurationDetails = ({ }; const saveRecord = (event: React.FormEvent) => { + setLoadingSave(true); event.preventDefault(); let input = ""; for (const key of Object.keys(formFields)) { @@ -213,8 +193,19 @@ const IDPConfigurationDetails = ({ input += `${key}=${fields[key]} `; } } - invokeApi("PUT", `${endpoint}${configurationName}`, { input }); - setEditMode(false); + + api.idp + .updateConfiguration(configurationName || "", "openid", { input }) + .then((res: HttpResponse) => { + if (res.data) { + dispatch(setServerNeedsRestart(res.data.restart === true)); + setEditMode(false); + } + }) + .catch(async (res: HttpResponse) => { + dispatch(setErrorSnackMessage(errorToHandler(res.error))); + }) + .finally(() => setLoadingSave(false)); }; const closeDeleteModalAndRefresh = async (refresh: boolean) => { @@ -226,8 +217,21 @@ const IDPConfigurationDetails = ({ }; const toggleConfiguration = (value: boolean) => { + setLoadingEnabledSave(true); const input = `enable=${value ? "on" : "off"}`; - invokeEnabledApi("PUT", `${endpoint}${configurationName}`, { input }); + + api.idp + .updateConfiguration(configurationName || "", "openid", { input: input }) + .then((res: HttpResponse) => { + if (res.data) { + setIsEnabled(!isEnabled); + dispatch(setServerNeedsRestart(res.data.restart === true)); + } + }) + .catch((res: HttpResponse) => { + dispatch(setErrorSnackMessage(errorToHandler(res.error))); + }) + .finally(() => setLoadingEnabledSave(false)); }; const renderFormField = (key: string, value: any) => { @@ -331,7 +335,7 @@ const IDPConfigurationDetails = ({ type="submit" variant="callAction" color="primary" - disabled={loading || loadingSave || !validSave()} + disabled={loadingDetails || loadingSave || !validSave()} label={"Save"} /> )} @@ -498,7 +502,7 @@ const IDPConfigurationDetails = ({