import React, { useEffect, useState } from "react"; import { AlertVariant, PageSection, Tab, TabTitleText, } from "@patternfly/react-core"; import { useTranslation } from "react-i18next"; import { useForm } from "react-hook-form"; import { ViewHeader } from "../components/view-header/ViewHeader"; import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation"; import { UserForm } from "./UserForm"; import { useAlerts } from "../components/alert/Alerts"; import { useAdminClient } from "../context/auth/AdminClient"; import { useHistory, useParams } from "react-router-dom"; import { KeycloakTabs } from "../components/keycloak-tabs/KeycloakTabs"; import { UserGroups } from "./UserGroups"; import { UserConsents } from "./UserConsents"; import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation"; import { useRealm } from "../context/realm-context/RealmContext"; export const UsersTabs = () => { const { t } = useTranslation("roles"); const { addAlert } = useAlerts(); const history = useHistory(); const { realm } = useRealm(); const adminClient = useAdminClient(); const userForm = useForm({ mode: "onChange" }); const { id } = useParams<{ id: string }>(); const [user, setUser] = useState(""); const [addedGroups, setAddedGroups] = useState([]); useEffect(() => { const update = async () => { if (id) { const fetchedUser = await adminClient.users.findOne({ id }); setUser(fetchedUser.username!); } }; setTimeout(update, 100); }, []); const updateGroups = (groups: GroupRepresentation[]) => { setAddedGroups(groups); }; const save = async (user: UserRepresentation) => { try { if (id) { await adminClient.users.update({ id }, user); addAlert(t("users:userSaved"), AlertVariant.success); } else { const createdUser = await adminClient.users.create(user); addedGroups.forEach(async (group) => { await adminClient.users.addToGroup({ id: createdUser.id!, groupId: group.id!, }); }); addAlert(t("users:userCreated"), AlertVariant.success); history.push(`/${realm}/users/${createdUser.id}/settings`); } } catch (error) { addAlert( t("users:userCreateError", { error: error.response?.data?.errorMessage || error, }), AlertVariant.danger ); } }; return ( <> {id && ( {t("details")}} > {t("groups")}} > {t("users:consents")}} > )} {!id && ( )} ); };