mirror of
https://github.com/DustinBrett/daedalOS.git
synced 2025-12-06 00:20:05 +01:00
38 lines
913 B
TypeScript
38 lines
913 B
TypeScript
import { createContext, useContext } from "react";
|
|
|
|
type ProcessProviderProps = {
|
|
children: React.ReactNode;
|
|
};
|
|
|
|
type ContextFactory = <T>(
|
|
initialContextState: T,
|
|
useContextState: () => T,
|
|
ContextComponent?: React.ComponentType
|
|
) => {
|
|
Consumer: React.Consumer<T>;
|
|
Provider: (props: ProcessProviderProps) => JSX.Element;
|
|
useContext: () => T;
|
|
};
|
|
|
|
const contextFactory: ContextFactory = (
|
|
initialContextState,
|
|
useContextState,
|
|
ContextComponent
|
|
) => {
|
|
const Context = createContext(initialContextState);
|
|
const ProcessProvider = ({ children }: ProcessProviderProps): JSX.Element => (
|
|
<Context.Provider value={useContextState()}>
|
|
{children}
|
|
{ContextComponent ? <ContextComponent /> : <></>}
|
|
</Context.Provider>
|
|
);
|
|
|
|
return {
|
|
Consumer: Context.Consumer,
|
|
Provider: ProcessProvider,
|
|
useContext: () => useContext(Context),
|
|
};
|
|
};
|
|
|
|
export default contextFactory;
|