2026-03-09 21:39:58 +11:00
|
|
|
import React, { ReactNode, useCallback, useMemo } from 'react';
|
|
|
|
|
import { AutoDiscoveryInfoProvider } from '../../hooks/useAutoDiscoveryInfo';
|
|
|
|
|
import { AsyncStatus, useAsyncCallbackValue } from '../../hooks/useAsyncCallback';
|
|
|
|
|
import { autoDiscovery, AutoDiscoveryInfo } from '../../cs-api';
|
|
|
|
|
import { getMxIdServer } from '../../utils/matrix';
|
|
|
|
|
|
|
|
|
|
type AutoDiscoveryProps = {
|
|
|
|
|
userId: string;
|
|
|
|
|
baseUrl: string;
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
};
|
|
|
|
|
export function AutoDiscovery({ userId, baseUrl, children }: AutoDiscoveryProps) {
|
|
|
|
|
const [state] = useAsyncCallbackValue(
|
|
|
|
|
useCallback(async () => {
|
|
|
|
|
const server = getMxIdServer(userId);
|
|
|
|
|
return autoDiscovery(fetch, server ?? userId);
|
2026-05-21 23:30:50 -04:00
|
|
|
}, [userId]),
|
2026-03-09 21:39:58 +11:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const [, info] = state.status === AsyncStatus.Success ? state.data : [];
|
|
|
|
|
|
|
|
|
|
const fallback: AutoDiscoveryInfo = useMemo(
|
|
|
|
|
() => ({
|
|
|
|
|
'm.homeserver': {
|
|
|
|
|
base_url: baseUrl,
|
|
|
|
|
},
|
|
|
|
|
}),
|
2026-05-21 23:30:50 -04:00
|
|
|
[baseUrl],
|
2026-03-09 21:39:58 +11:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return <AutoDiscoveryInfoProvider value={info ?? fallback}>{children}</AutoDiscoveryInfoProvider>;
|
|
|
|
|
}
|