Autoría | Ultima modificación | Ver Log |
import { useState } from 'react';import { useApi, useAlert } from '@shared/hooks';import { changePassword } from '@account-settings/services';export function usePasswordChange() {const { showSuccess, showError } = useAlert();const [passwordErrors, setPasswordErrors] = useState({isErrorPassword: false,isErrorConfirmation: false});const { loading: isUpdating, execute: executeUpdate } = useApi(changePassword, {onSuccess: (response) => {if (response.success) {showSuccess(response.data);clearErrors();} else {if (typeof response.data === 'string') {showError(response.data);} else {Object.entries(response.data).forEach(([key, value]) => {showError(`${key}: ${value}`);});}}},onError: (error) => {showError(error.message || 'Error al cambiar la contraseña');}});const clearErrors = () => {setPasswordErrors({isErrorPassword: false,isErrorConfirmation: false});};const setPasswordError = () => {setPasswordErrors((prev) => ({ ...prev, isErrorPassword: true }));setTimeout(() => {setPasswordErrors((prev) => ({ ...prev, isErrorPassword: false }));}, 10000);};const setConfirmationError = () => {setPasswordErrors((prev) => ({ ...prev, isErrorConfirmation: true }));setTimeout(() => {setPasswordErrors((prev) => ({ ...prev, isErrorConfirmation: false }));}, 10000);};const validateAndChangePassword = async (data) => {clearErrors();const validPassword = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$^x%x*-]).{6,16}$/;if (!validPassword.test(data.password)) {setPasswordError();showError('La contraseña debe tener entre 6 y 16 caracteres, al menos una mayúscula, una minúscula, un número y un carácter especial');return;}if (data.password !== data.confirm_password) {setConfirmationError();showError('Las contraseñas no coinciden');return;}await executeUpdate(data);};return {isUpdating,passwordErrors,validateAndChangePassword,clearErrors};}