@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
92 lines • 5.96 kB
JavaScript
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