UNPKG

@keycloakify/keycloak-admin-ui

Version:
92 lines 5.96 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { RequiredActionAlias } from "@keycloak/keycloak-admin-client/lib/defs/requiredActionProviderRepresentation"; import { AlertVariant, ButtonVariant, Form, FormGroup, } from "@patternfly/react-core"; import { FormProvider, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { FormErrorText, PasswordInput } from "../../ui-shared"; import { useAdminClient } from "../../admin-client"; import { DefaultSwitchControl } from "../../components/SwitchControl"; import { useAlerts } from "../../ui-shared"; import { ConfirmDialogModal, useConfirmDialog, } from "../../components/confirm-dialog/ConfirmDialog"; import useToggle from "../../utils/useToggle"; const credFormDefaultValues = { password: "", passwordConfirmation: "", temporaryPassword: true, }; export const ResetPasswordDialog = ({ user, isResetPassword, onAddRequiredActions, refresh, onClose, }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const form = useForm({ defaultValues: credFormDefaultValues, mode: "onChange", }); const { register, formState: { isValid, errors }, watch, handleSubmit, clearErrors, setError, } = form; const [confirm, toggle] = useToggle(true); const password = watch("password", ""); const passwordConfirmation = watch("passwordConfirmation", ""); const { addAlert, addError } = useAlerts(); const [toggleConfirmSaveModal, ConfirmSaveModal] = useConfirmDialog({ titleKey: isResetPassword ? "resetPasswordConfirm" : "setPasswordConfirm", messageKey: isResetPassword ? t("resetPasswordConfirmText", { username: user.username }) : t("setPasswordConfirmText", { username: user.username }), continueButtonLabel: isResetPassword ? "resetPassword" : "savePassword", continueButtonVariant: ButtonVariant.danger, onConfirm: () => handleSubmit(saveUserPassword)(), }); const saveUserPassword = async ({ password, temporaryPassword, }) => { try { await adminClient.users.resetPassword({ id: user.id, credential: { temporary: temporaryPassword, type: "password", value: password, }, }); if (temporaryPassword) { onAddRequiredActions === null || onAddRequiredActions === void 0 ? void 0 : onAddRequiredActions([RequiredActionAlias.UPDATE_PASSWORD]); } const credentials = await adminClient.users.getCredentials({ id: user.id, }); const credentialLabel = credentials.find((c) => c.type === "password"); if (credentialLabel) { await adminClient.users.updateCredentialLabel({ id: user.id, credentialId: credentialLabel.id, }, t("defaultPasswordLabel")); } addAlert(isResetPassword ? t("resetCredentialsSuccess") : t("savePasswordSuccess"), AlertVariant.success); refresh(); } catch (error) { addError(isResetPassword ? "resetPasswordError" : "savePasswordError", error); } onClose(); }; const { onChange, ...rest } = register("password", { required: true }); return (_jsxs(_Fragment, { children: [_jsx(ConfirmSaveModal, {}), _jsx(ConfirmDialogModal, { titleKey: isResetPassword ? t("resetPasswordFor", { username: user.username }) : t("setPasswordFor", { username: user.username }), open: confirm, onCancel: onClose, toggleDialog: toggle, onConfirm: toggleConfirmSaveModal, confirmButtonDisabled: !isValid, continueButtonLabel: "save", children: _jsxs(Form, { id: "userCredentials-form", isHorizontal: true, className: "keycloak__user-credentials__reset-form", children: [_jsxs(FormGroup, { name: "password", label: t("password"), fieldId: "password", isRequired: true, children: [_jsx(PasswordInput, { "data-testid": "passwordField", id: "password", onChange: (e) => { onChange(e); if (passwordConfirmation !== e.currentTarget.value) { setError("passwordConfirmation", { message: t("confirmPasswordDoesNotMatch").toString(), }); } else { clearErrors("passwordConfirmation"); } }, ...rest }), errors.password && _jsx(FormErrorText, { message: t("required") })] }), _jsxs(FormGroup, { name: "passwordConfirmation", label: isResetPassword ? t("resetPasswordConfirmation") : t("passwordConfirmation"), fieldId: "passwordConfirmation", isRequired: true, children: [_jsx(PasswordInput, { "data-testid": "passwordConfirmationField", id: "passwordConfirmation", ...register("passwordConfirmation", { required: true, validate: (value) => value === password || t("confirmPasswordDoesNotMatch").toString(), }) }), errors.passwordConfirmation && (_jsx(FormErrorText, { message: errors.passwordConfirmation.message }))] }), _jsx(FormProvider, { ...form, children: _jsx(DefaultSwitchControl, { name: "temporaryPassword", label: t("temporaryPassword"), labelIcon: t("temporaryPasswordHelpText"), defaultValue: "true" }) })] }) })] })); }; //# sourceMappingURL=ResetPasswordDialog.js.map