Add instance fetching hooks
This commit is contained in:
parent
c3655d085c
commit
158392c627
|
@ -0,0 +1,20 @@
|
|||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'soapbox/hooks';
|
||||
import { InstanceV1, instanceV1Schema } from 'soapbox/schemas/instance';
|
||||
|
||||
/** Get the Instance for the current backend. */
|
||||
export function useInstanceV1() {
|
||||
const api = useApi();
|
||||
|
||||
const { data: instance, ...rest } = useQuery<InstanceV1>({
|
||||
queryKey: ['instance', api.baseUrl, 'v1'],
|
||||
queryFn: async () => {
|
||||
const response = await api.get('/api/v1/instance');
|
||||
const data = await response.json();
|
||||
return instanceV1Schema.parse(data);
|
||||
},
|
||||
});
|
||||
|
||||
return { instance, ...rest };
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import { useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi, useFeatures } from 'soapbox/hooks';
|
||||
import { Instance, instanceSchema } from 'soapbox/schemas/instance';
|
||||
|
||||
/** Get the Instance for the current backend. */
|
||||
export function useInstanceV2() {
|
||||
const api = useApi();
|
||||
const features = useFeatures();
|
||||
|
||||
const { data: instance, ...rest } = useQuery<Instance>({
|
||||
queryKey: ['instance', api.baseUrl, 'v2'],
|
||||
queryFn: async () => {
|
||||
const response = await api.get('/api/v2/instance');
|
||||
const data = await response.json();
|
||||
return instanceSchema.parse(data);
|
||||
},
|
||||
enabled: features.instanceV2,
|
||||
});
|
||||
|
||||
return { instance, ...rest };
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
import { useMemo } from 'react';
|
||||
|
||||
import { MastodonClient } from 'soapbox/api/MastodonClient';
|
||||
|
||||
import { useAppSelector } from './useAppSelector';
|
||||
|
@ -8,5 +10,7 @@ export function useApi(): MastodonClient {
|
|||
const accessToken = useAppSelector((state) => account ? state.auth.users.get(account.url)?.access_token : undefined);
|
||||
const baseUrl = account ? new URL(account.url).origin : location.origin;
|
||||
|
||||
return new MastodonClient(baseUrl, accessToken);
|
||||
return useMemo(() => {
|
||||
return new MastodonClient(baseUrl, accessToken);
|
||||
}, [baseUrl, accessToken]);
|
||||
}
|
|
@ -305,5 +305,6 @@ const instanceSchema = z.preprocess((data: any) => {
|
|||
}));
|
||||
|
||||
type Instance = z.infer<typeof instanceSchema>;
|
||||
type InstanceV1 = z.infer<typeof instanceV1Schema>;
|
||||
|
||||
export { instanceSchema, Instance };
|
||||
export { instanceSchema, Instance, instanceV1Schema, InstanceV1 };
|
||||
|
|
Loading…
Reference in New Issue