import {useNotification} from "~/composables/notification"; import type {IFeedbackActionResponse} from "~/types"; import {MANAGE_FEEDBACK} from "~/graphql/mutations/feedbacks"; import {isGraphQLError} from "~/utils/error"; interface IFeedbackActionArguments { action: string, orderProductUuid: string, comment?: string, rating?: number } export function useFeedbackAction() { const {t} = useI18n(); const userStore = useUserStore(); const isAuthenticated = computed(() => userStore.isAuthenticated); const { mutate, loading, error } = useMutation(MANAGE_FEEDBACK); async function manageFeedback( args: IFeedbackActionArguments ) { if (isAuthenticated.value) { const variables: Record = { action: args.action, orderProductUuid: args.orderProductUuid, }; if (args.comment) { variables.comment = args.comment; } if (args.rating) { variables.rating = args.rating; } const result = await mutate(variables); if (result?.data?.feedback) { useNotification({ message: t('popup.success.addFeedback'), type: 'success' }); } } else { useNotification({ message: t('popup.errors.loginFirst'), type: 'error' }); } } watch(error, (err) => { if (!err) return; console.error('useFeedbackAction 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{ loading, manageFeedback }; }