import { REFRESH } from '@/graphql/mutations/auth'; import { useAppConfig } from '~/composables/config'; import { useLocaleRedirect } from '~/composables/languages'; import { useWishlist } from '~/composables/wishlist'; import { usePendingOrder } from '~/composables/orders'; import { useUserStore } from '~/stores/user'; import { isGraphQLError } from '~/utils/error'; import {DEFAULT_LOCALE} from "~/config/constants"; export function useRefresh() { const { t } = useI18n(); const userStore = useUserStore(); const { COOKIES_REFRESH_TOKEN_KEY, COOKIES_LOCALE_KEY } = useAppConfig(); const { checkAndRedirect } = useLocaleRedirect(); const { mutate, loading, error } = useMutation(REFRESH); async function refresh() { const cookieRefresh = useCookie( COOKIES_REFRESH_TOKEN_KEY, { default: () => '', path: '/' } ); const cookieLocale = useCookie( COOKIES_LOCALE_KEY, { default: () => DEFAULT_LOCALE, path: '/' } ); if (!cookieRefresh.value) { return; } const result = await mutate({ refreshToken: cookieRefresh.value }); const data = result?.data?.refreshJwtToken; if (!data) { return; } userStore.setUser(data.user); if (data.user.language !== cookieLocale.value) { await checkAndRedirect(data.user.language); } cookieRefresh.value = data.refreshToken await useWishlist(); await usePendingOrder(data.user.email); } watch(error, (err) => { if (!err) return; console.error('useRefresh error:', err); let message = t('popup.errors.defaultError'); if (isGraphQLError(err)) { message = err.graphQLErrors?.[0]?.message || message; } else { message = err.message; } ElNotification({ title: t('popup.errors.main'), message, type: 'error' }); }) return { refresh, loading }; }