UNPKG

@xsprtd/nuxt-api

Version:

Nuxt API Authentication and Http Client

66 lines (65 loc) 1.71 kB
import { ref } from "vue"; import { useCurrentUser } from "./useCurrentUser.js"; import { useApiOptions } from "./useApiOptions.js"; export const useErrorBag = () => { const message = ref(null); const errors = ref(null); const { errorMessages } = useApiOptions(); const get = (key, defaultValue) => { const payload = errors.value?.[key]; return payload ? payload[0] : defaultValue; }; const has = (key) => { return !!errors.value?.[key]; }; const byStatusCode = (error) => { switch (error?.response?.status) { case 422: unprocessable(error); break; case 419: csrf(error); break; case 401: unauthenticated(); break; default: general(error); break; } }; const general = (error) => { console.warn(message.value = error.message || errorMessages.default, error); }; const unprocessable = (error) => { const { message: m, errors: e } = error?.response?._data; message.value = m || errorMessages.default; errors.value = e || null; }; const csrf = (error) => { console.warn(message.value = errorMessages.csrf, error); }; const unauthenticated = () => { const user = useCurrentUser(); if (user.value !== null) { user.value = null; } console.warn(message.value = errorMessages.unauthenticated); }; const reset = () => { message.value = null; errors.value = null; }; const handle = (error) => { if (!error) { return; } const { response } = error; if (response?.status) { byStatusCode(error); } else { general(error); } }; return { message, errors, handle, reset, has, get }; };