Files
cinny/src/app/hooks/useMatrixEventRenderer.ts
T

32 lines
888 B
TypeScript
Raw Normal View History

2023-10-06 13:44:06 +11:00
import { ReactNode } from 'react';
export type EventRenderer<T extends unknown[]> = (...args: T) => ReactNode;
2023-10-06 13:44:06 +11:00
export type EventRendererOpts<T extends unknown[]> = Record<string, EventRenderer<T>>;
2023-10-06 13:44:06 +11:00
export type RenderMatrixEvent<T extends unknown[]> = (
eventType: string,
isStateEvent: boolean,
2023-10-06 13:44:06 +11:00
...args: T
) => ReactNode;
export const useMatrixEventRenderer =
<T extends unknown[]>(
typeToRenderer: EventRendererOpts<T>,
renderStateEvent?: EventRenderer<T>,
renderEvent?: EventRenderer<T>
): RenderMatrixEvent<T> =>
(eventType, isStateEvent, ...args) => {
const renderer = typeToRenderer[eventType];
if (typeToRenderer[eventType]) return renderer(...args);
2023-10-06 13:44:06 +11:00
if (isStateEvent && renderStateEvent) {
return renderStateEvent(...args);
2023-10-06 13:44:06 +11:00
}
if (!isStateEvent && renderEvent) {
return renderEvent(...args);
2023-10-06 13:44:06 +11:00
}
return null;
};