import { useContext, useMemo } from 'react' import { ChatContext } from '../contexts/chat_context' import { Uri } from '../utils' import { Client } from '../utils/client' export type App = 'chat' | 'groups' | 'services' | 'people' const apps: App[] = ['chat', 'groups', 'services', 'people'] export type ApiClient = { [_K in App]: Client } export const useApiClient = () => { const { session, onUnauthorizedResponse } = useContext(ChatContext) const uri = useMemo(() => new Uri({ session }), [session]) const api = useMemo( () => apps.reduce((acc, app) => { acc[app] = new Client({ root: uri.api(`/${app}/v2`), defaultHeaders: uri.headers, version: '2018-11-01', onUnauthorizedResponse, }) return acc }, {} as ApiClient), [uri, onUnauthorizedResponse] ) return api }