pleroma/packages/pl-fe/src/actions/instance.ts

54 lines
1.3 KiB
TypeScript
Raw Normal View History

import { getAuthUserUrl, getMeUrl } from 'pl-fe/utils/auth';
2022-03-18 14:04:08 -07:00
import { getClient } from '../api';
import type { Instance } from 'pl-api';
import type { AppDispatch, RootState } from 'pl-fe/store';
const INSTANCE_FETCH_SUCCESS = 'INSTANCE_FETCH_SUCCESS' as const;
const INSTANCE_FETCH_FAIL = 'INSTANCE_FETCH_FAIL' as const;
/** Figure out the appropriate instance to fetch depending on the state */
const getHost = (state: RootState) => {
const accountUrl = getMeUrl(state) || getAuthUserUrl(state) as string;
try {
return new URL(accountUrl).host;
} catch {
return null;
}
};
interface InstanceFetchSuccessAction {
type: typeof INSTANCE_FETCH_SUCCESS;
instance: Instance;
}
interface InstanceFetchFailAction {
type: typeof INSTANCE_FETCH_FAIL;
error: any;
}
const fetchInstance = () => async (dispatch: AppDispatch, getState: () => RootState) => {
try {
const instance = await getClient(getState).instance.getInstance();
const action: InstanceFetchSuccessAction = { type: INSTANCE_FETCH_SUCCESS, instance };
dispatch(action);
} catch (error) {
dispatch({ type: INSTANCE_FETCH_FAIL, error });
}
};
type InstanceAction =
InstanceFetchSuccessAction
| InstanceFetchFailAction
export {
INSTANCE_FETCH_SUCCESS,
INSTANCE_FETCH_FAIL,
getHost,
fetchInstance,
type InstanceAction,
};