2024-05-31 19:49:46 +05:30
|
|
|
import { ReactNode, useCallback, useEffect } from 'react';
|
|
|
|
|
import { Capabilities } from 'matrix-js-sdk';
|
|
|
|
|
import { AsyncStatus, useAsyncCallback } from '../hooks/useAsyncCallback';
|
|
|
|
|
import { useMatrixClient } from '../hooks/useMatrixClient';
|
|
|
|
|
import { MediaConfig } from '../hooks/useMediaConfig';
|
|
|
|
|
import { promiseFulfilledResult } from '../utils/common';
|
|
|
|
|
|
|
|
|
|
type CapabilitiesAndMediaConfigLoaderProps = {
|
|
|
|
|
children: (capabilities?: Capabilities, mediaConfig?: MediaConfig) => ReactNode;
|
|
|
|
|
};
|
|
|
|
|
export function CapabilitiesAndMediaConfigLoader({
|
|
|
|
|
children,
|
|
|
|
|
}: CapabilitiesAndMediaConfigLoaderProps) {
|
|
|
|
|
const mx = useMatrixClient();
|
|
|
|
|
|
|
|
|
|
const [state, load] = useAsyncCallback<
|
|
|
|
|
[Capabilities | undefined, MediaConfig | undefined],
|
|
|
|
|
unknown,
|
|
|
|
|
[]
|
|
|
|
|
>(
|
|
|
|
|
useCallback(async () => {
|
2025-02-10 16:49:47 +11:00
|
|
|
const result = await Promise.allSettled([mx.getCapabilities(), mx.getMediaConfig()]);
|
2024-05-31 19:49:46 +05:30
|
|
|
const capabilities = promiseFulfilledResult(result[0]);
|
|
|
|
|
const mediaConfig = promiseFulfilledResult(result[1]);
|
|
|
|
|
return [capabilities, mediaConfig];
|
|
|
|
|
}, [mx])
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
load();
|
|
|
|
|
}, [load]);
|
|
|
|
|
|
|
|
|
|
const [capabilities, mediaConfig] =
|
|
|
|
|
state.status === AsyncStatus.Success ? state.data : [undefined, undefined];
|
|
|
|
|
return children(capabilities, mediaConfig);
|
|
|
|
|
}
|