import React from "react"; import { ActionGroup, AlertVariant, Button, ButtonVariant, DropdownItem, Form, PageSection, } from "@patternfly/react-core"; import { KerberosSettingsRequired } from "./kerberos/KerberosSettingsRequired"; import { SettingsCache } from "./shared/SettingsCache"; import { useRealm } from "../context/realm-context/RealmContext"; import { convertToFormValues } from "../util"; import type ComponentRepresentation from "@keycloak/keycloak-admin-client/lib/defs/componentRepresentation"; import { Controller, useForm } from "react-hook-form"; import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog"; import { useAdminClient, useFetch } from "../context/auth/AdminClient"; import { useAlerts } from "../components/alert/Alerts"; import { useTranslation } from "react-i18next"; import { ViewHeader } from "../components/view-header/ViewHeader"; import { useHistory, useParams } from "react-router-dom"; type KerberosSettingsHeaderProps = { onChange: (value: string) => void; value: string; save: () => void; toggleDeleteDialog: () => void; }; const KerberosSettingsHeader = ({ onChange, value, save, toggleDeleteDialog, }: KerberosSettingsHeaderProps) => { const { t } = useTranslation("user-federation"); const { id } = useParams<{ id?: string }>(); const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({ titleKey: "user-federation:userFedDisableConfirmTitle", messageKey: "user-federation:userFedDisableConfirm", continueButtonLabel: "common:disable", onConfirm: () => { onChange("false"); save(); }, }); return ( <> {!id ? ( ) : ( toggleDeleteDialog()} data-testid="delete-kerberos-cmd" > {t("deleteProvider")} , ]} isEnabled={value === "true"} onToggle={(value) => { if (!value) { toggleDisableDialog(); } else { onChange(value.toString()); save(); } }} /> )} ); }; export default function UserFederationKerberosSettings() { const { t } = useTranslation("user-federation"); const form = useForm({ mode: "onChange" }); const history = useHistory(); const adminClient = useAdminClient(); const { realm } = useRealm(); const { id } = useParams<{ id?: string }>(); const { addAlert, addError } = useAlerts(); useFetch( async () => { if (id) { return adminClient.components.findOne({ id }); } }, (fetchedComponent) => { if (fetchedComponent) { setupForm(fetchedComponent); } else if (id) { throw new Error(t("common:notFound")); } }, [] ); const setupForm = (component: ComponentRepresentation) => { Object.entries(component).map((entry) => { form.setValue( "config.allowPasswordAuthentication", component.config?.allowPasswordAuthentication ); if (entry[0] === "config") { convertToFormValues(entry[1], "config", form.setValue); } form.setValue(entry[0], entry[1]); }); }; const save = async (component: ComponentRepresentation) => { try { if (!id) { await adminClient.components.create(component); history.push(`/${realm}/user-federation`); } else { await adminClient.components.update({ id }, component); } setupForm(component as ComponentRepresentation); addAlert(t(!id ? "createSuccess" : "saveSuccess"), AlertVariant.success); } catch (error) { addError(`user-federation:${!id ? "createError" : "saveError"}`, error); } }; const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({ titleKey: "user-federation:userFedDeleteConfirmTitle", messageKey: "user-federation:userFedDeleteConfirm", continueButtonLabel: "common:delete", continueButtonVariant: ButtonVariant.danger, onConfirm: async () => { try { await adminClient.components.del({ id: id! }); addAlert(t("userFedDeletedSuccess"), AlertVariant.success); history.replace(`/${realm}/user-federation`); } catch (error: any) { addAlert("user-federation:userFedDeleteError", error); } }, }); return ( <> ( save(form.getValues())} toggleDeleteDialog={toggleDeleteDialog} /> )} />
); }