mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-02-27 07:33:06 +01:00
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
|
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 () => {
|
||
|
const result = await Promise.allSettled([mx.getCapabilities(true), mx.getMediaConfig()]);
|
||
|
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);
|
||
|
}
|