import { ref, UnwrapRef } from 'vue'; import { AxiosResponse } from 'axios'; import { HttpResponse } from '@/api/interceptor'; import useLoading from './loading'; // use to fetch list // Don't use async function. It doesn't work in async function. // Use the bind function to add parameters // example: useRequest(api.bind(null, {})) export default function useRequest( api: () => Promise>, defaultValue = [] as unknown as T, isLoading = true ) { const { loading, setLoading } = useLoading(isLoading); const response = ref(defaultValue); api() .then((res) => { response.value = res.data as unknown as UnwrapRef; }) .finally(() => { setLoading(false); }); return { loading, response }; }