Spaces:
Paused
Paused
import axios from 'axios' | |
import { useEffect, useState } from 'react' | |
import { getStoredToken } from './protectedRouteHandler' | |
/** | |
* Custom hook for axios to fetch raw file content on component mount | |
* @param fetchUrl The URL pointing to the raw file content | |
* @param path The path of the file, used for determining whether path is protected | |
*/ | |
export default function useFileContent( | |
fetchUrl: string, | |
path: string | |
): { response: any; error: string; validating: boolean } { | |
const [response, setResponse] = useState('') | |
const [validating, setValidating] = useState(true) | |
const [error, setError] = useState('') | |
useEffect(() => { | |
const hashedToken = getStoredToken(path) | |
const url = fetchUrl + (hashedToken ? `&odpt=${hashedToken}` : '') | |
axios | |
// Using 'blob' as response type to get the response as a raw file blob, which is later parsed as a string. | |
// Axios defaults response parsing to JSON, which causes issues when parsing JSON files. | |
.get(url, { responseType: 'blob' }) | |
.then(async res => setResponse(await res.data.text())) | |
.catch(e => setError(e.message)) | |
.finally(() => setValidating(false)) | |
}, [fetchUrl, path]) | |
return { response, error, validating } | |
} | |