import {useLogout} from "@/composables/auth"; import {UPDATE_USER} from "~/graphql/mutations/user"; import type {IUserUpdatingResponse} from "~/types"; import {useAppConfig} from "~/composables/config"; import {isGraphQLError} from "~/utils/error"; import {useNotification} from "~/composables/notification"; import {DEFAULT_LOCALE} from "~/config/constants"; import {useLocaleRedirect} from "~/composables/languages"; export function useUserUpdating() { const userStore = useUserStore(); const {t} = useI18n(); const { mutate, loading, error } = useMutation(UPDATE_USER); const { COOKIES_LOCALE_KEY } = useAppConfig(); const { checkAndRedirect } = useLocaleRedirect(); const { logout } = useLogout(); const cookieLocale = useCookie( COOKIES_LOCALE_KEY, { default: () => DEFAULT_LOCALE, path: '/' } ); const userUuid = computed(() => userStore.user?.uuid); const userEmail = computed(() => userStore.user?.email); async function updateUser( firstName: string, lastName: string, email: string, phoneNumber: string, password: string, confirmPassword: string ) { const fields = { uuid: userUuid.value, firstName, lastName, email, phoneNumber, password, confirmPassword }; const params = Object.fromEntries( Object.entries(fields).filter(([_, value]) => value !== undefined && value !== null && value !== '' ) ); // if (('password' in params && !('passwordConfirm' in params)) || // (!('password' in params) && 'passwordConfirm' in params)) { // ElNotification({ // title: t('popup.errors.main'), // message: t('popup.errors.noDataToUpdate'), // type: 'error' // }); // } if (Object.keys(params).length === 0) { useNotification({ message: t('popup.errors.noDataToUpdate'), type: 'error' }); } const result = await mutate(params); const data = result?.data?.updateUser; if (data) { if (userEmail.value !== email) { await logout(); useNotification({ message: t('popup.success.confirmEmail'), type: 'success' }); } else { userStore.setUser(data.user); useNotification({ message: t('popup.success.userUpdate'), type: 'success' }); if (data.user.language !== cookieLocale.value) { await checkAndRedirect(data.user.language); } } } } watch(error, (err) => { if (!err) return; console.error('useUserUpdating error:', err); let message = t('popup.errors.defaultError'); if (isGraphQLError(err)) { message = err.graphQLErrors?.[0]?.message || message; } else { message = err.message; } useNotification({ message, type: 'error', title: t('popup.errors.main') }); }); return { updateUser, loading }; }