//
// useApi custom hook
//
import { useContext, useEffect, useState } from 'react'
import { ApiInterface } from '../../interfaces'
import { ApiContext } from '../../services/ApiManager'
/**
Custom Hook for retrieving a Spark API Interface
If you know the name and version of an API interface managed by
the API Manager, you can use this hook to get an instance of
that api interface.
```
import { useApi } from '@jcu/spark'
export default function MyComponent() {
// get version 1 of the vampire-information api interface
const vampireApi = useApi('vampires', '1')
// now you can call vampireApi.getInfo('dracula') to find out about Dracula.
}
```
@category Hooks
@module useApi
*/
export const useApi = function<T extends ApiInterface>(apiName: string, apiVersion: string): T {
const apiLibrary = useContext(ApiContext)
const [api, setApi] = useState<T>(undefined)
// re-fetch the API interface if the api library changes
useEffect( () => {
if (apiLibrary) {
setApi(apiLibrary.getApiInterface(apiName, apiVersion))
} else {
setApi(undefined)
}
}, [apiLibrary, apiName, apiVersion])
return api
}
Source