add capabilities context and loader

This commit is contained in:
Ajay Bura 2024-01-28 15:21:45 +05:30
parent e4e6601a6b
commit 3c8e244a00
2 changed files with 31 additions and 0 deletions

View file

@ -0,0 +1,19 @@
import { ReactNode, useCallback, useEffect } from 'react';
import { Capabilities } from 'matrix-js-sdk';
import { AsyncStatus, useAsyncCallback } from '../hooks/useAsyncCallback';
import { useMatrixClient } from '../hooks/useMatrixClient';
type CapabilitiesLoaderProps = {
children: (capabilities: Capabilities | undefined) => ReactNode;
};
export function CapabilitiesLoader({ children }: CapabilitiesLoaderProps) {
const mx = useMatrixClient();
const [state, load] = useAsyncCallback(useCallback(() => mx.getCapabilities(true), [mx]));
useEffect(() => {
load();
}, [load]);
return children(state.status === AsyncStatus.Success ? state.data : undefined);
}

View file

@ -0,0 +1,12 @@
import { Capabilities } from 'matrix-js-sdk';
import { createContext, useContext } from 'react';
const CapabilitiesContext = createContext<Capabilities | null>(null);
export const CapabilitiesProvider = CapabilitiesContext.Provider;
export function useCapabilities(): Capabilities {
const capabilities = useContext(CapabilitiesContext);
if (!capabilities) throw new Error('Capabilities are not not provided!');
return capabilities;
}