import React, { useContext, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { FormGroup, TextInput, Form, Switch, TextArea, PageSection, ActionGroup, Button, AlertVariant, SelectOption, ButtonVariant, } from "@patternfly/react-core"; import { useParams } from "react-router-dom"; import { Controller, useForm } from "react-hook-form"; import { ScrollForm } from "../components/scroll-form/ScrollForm"; import { ClientDescription } from "./ClientDescription"; import { CapabilityConfig } from "./add/CapabilityConfig"; import { RealmContext } from "../context/realm-context/RealmContext"; import { HttpClientContext } from "../context/http-service/HttpClientContext"; import { ClientRepresentation } from "../realm/models/Realm"; import { convertToMultiline, MultiLineInput, toValue, } from "../components/multi-line-input/MultiLineInput"; import { useAlerts } from "../components/alert/Alerts"; import { ViewHeader } from "../components/view-header/ViewHeader"; import { exportClient } from "../util"; import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog"; export const ClientSettings = () => { const { t } = useTranslation("clients"); const httpClient = useContext(HttpClientContext)!; const { realm } = useContext(RealmContext); const { addAlert } = useAlerts(); const { id } = useParams<{ id: string }>(); const [name, setName] = useState(""); const form = useForm(); const url = `/admin/realms/${realm}/clients/${id}`; useEffect(() => { (async () => { const fetchedClient = await httpClient.doGet(url); if (fetchedClient.data) { setName(fetchedClient.data.clientId); Object.entries(fetchedClient.data).map((entry) => { if (entry[0] !== "redirectUris") { form.setValue(entry[0], entry[1]); } else if (entry[1] && entry[1].length > 0) { form.setValue(entry[0], convertToMultiline(entry[1])); } }); } })(); }, []); const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({ titleKey: "clients:clientDeleteConfirmTitle", messageKey: "clients:clientDeleteConfirm", continueButtonLabel: "common:delete", continueButtonVariant: ButtonVariant.danger, onConfirm: () => { try { httpClient.doDelete(`/admin/realms/${realm}/clients/${id}`); addAlert(t("clientDeletedSuccess"), AlertVariant.success); } catch (error) { addAlert(`${t("clientDeleteError")} ${error}`, AlertVariant.danger); } }, }); const save = async () => { if (await form.trigger()) { const redirectUris = toValue(form.getValues()["redirectUris"]); try { httpClient.doPut(url, { ...form.getValues(), redirectUris }); addAlert(t("clientSaveSuccess"), AlertVariant.success); } catch (error) { addAlert(`${t("clientSaveError")} '${error}'`, AlertVariant.danger); } } }; return ( <> { const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({ titleKey: "clients:disableConfirmTitle", messageKey: "clients:disableConfirm", continueButtonLabel: "common:disable", onConfirm: () => { onChange(!value); save(); }, }); return ( <> {t("common:export")} , {t("common:delete")} , ]} isEnabled={value} onToggle={(value) => { if (!value) { toggleDisableDialog(); } else { onChange(value); save(); } }} onSelect={(value) => { if (value === "export") { exportClient(form.getValues()); } else if (value === "delete") { toggleDeleteDialog(); } }} /> ); }} />
( )} /> ( )} />