23008670f3
CI / Build & Quality Checks (push) Successful in 10m13s
- i18next 23->26 + react-i18next 15->17 - prettier 2->3, reformat all files - replace @fontsource/inter with @fontsource-variable/inter 5, update import path - domhandler 5->6 (aligns with transitive deps) - lint-staged 16->17
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { ReactNode, useCallback, useMemo } from 'react';
|
|
import { Capabilities, validateAuthMetadata, ValidatedAuthMetadata } from 'matrix-js-sdk';
|
|
import { AsyncStatus, useAsyncCallbackValue } from '../hooks/useAsyncCallback';
|
|
import { useMatrixClient } from '../hooks/useMatrixClient';
|
|
import { MediaConfig } from '../hooks/useMediaConfig';
|
|
import { promiseFulfilledResult } from '../utils/common';
|
|
|
|
export type ServerConfigs = {
|
|
capabilities?: Capabilities;
|
|
mediaConfig?: MediaConfig;
|
|
authMetadata?: ValidatedAuthMetadata;
|
|
};
|
|
|
|
type ServerConfigsLoaderProps = {
|
|
children: (configs: ServerConfigs) => ReactNode;
|
|
};
|
|
export function ServerConfigsLoader({ children }: ServerConfigsLoaderProps) {
|
|
const mx = useMatrixClient();
|
|
const fallbackConfigs = useMemo(() => ({}), []);
|
|
|
|
const [configsState] = useAsyncCallbackValue<ServerConfigs, unknown>(
|
|
useCallback(async () => {
|
|
const result = await Promise.allSettled([
|
|
mx.getCapabilities(),
|
|
mx.getMediaConfig(),
|
|
mx.getAuthMetadata(),
|
|
]);
|
|
|
|
const capabilities = promiseFulfilledResult(result[0]);
|
|
const mediaConfig = promiseFulfilledResult(result[1]);
|
|
const authMetadata = promiseFulfilledResult(result[2]);
|
|
let validatedAuthMetadata: ValidatedAuthMetadata | undefined;
|
|
|
|
try {
|
|
validatedAuthMetadata = validateAuthMetadata(authMetadata);
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
|
|
return {
|
|
capabilities,
|
|
mediaConfig,
|
|
authMetadata: validatedAuthMetadata,
|
|
};
|
|
}, [mx]),
|
|
);
|
|
|
|
const configs: ServerConfigs =
|
|
configsState.status === AsyncStatus.Success ? configsState.data : fallbackConfigs;
|
|
|
|
return children(configs);
|
|
}
|