mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-02-23 13:43:07 +01:00
add capabilities context and loader
This commit is contained in:
parent
e4e6601a6b
commit
3c8e244a00
2 changed files with 31 additions and 0 deletions
19
src/app/components/CapabilitiesLoader.tsx
Normal file
19
src/app/components/CapabilitiesLoader.tsx
Normal 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);
|
||||
}
|
12
src/app/hooks/useCapabilities.ts
Normal file
12
src/app/hooks/useCapabilities.ts
Normal 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;
|
||||
}
|
Loading…
Reference in a new issue