Allow to pass generic variables to callable curtains / subapps and improve type check.
This commit is contained in:
parent
2b4965a2ee
commit
f949f3e191
1 changed files with 21 additions and 4 deletions
|
@ -50,21 +50,38 @@ export function useCurtains(): CurtainsContextState
|
|||
return useContext(CurtainsContext);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Curtain callable.
|
||||
* A generic callable curtain element.
|
||||
*/
|
||||
export type CallableCurtainElement = (...args: any) => React.ReactNode;
|
||||
|
||||
/**
|
||||
* A callable curtain function with typed parameters.
|
||||
*/
|
||||
export type CallableCurtain<F extends CallableCurtainElement> = (...args: Parameters<F>) => CurtainUuidType;
|
||||
|
||||
/**
|
||||
* Callable curtain function generator.
|
||||
* @param curtains The curtains context state.
|
||||
* @param curtainElement The curtain element to open when called.
|
||||
*/
|
||||
export function callableCurtain(curtains: CurtainsContextState, curtainElement: React.ReactNode): () => CurtainUuidType
|
||||
export function callableCurtain<F extends CallableCurtainElement>(curtains: CurtainsContextState, curtainElement: React.ReactNode|F): CallableCurtain<F>
|
||||
{
|
||||
return () => curtains.open(curtainElement);
|
||||
if (typeof curtainElement == "function")
|
||||
// It's a callable curtain element, the callable curtain should be called with the same parameters.
|
||||
return (...args: Parameters<F>) => curtains.open(curtainElement(...args));
|
||||
else
|
||||
// It's a simple element, just open it.
|
||||
return () => curtains.open(curtainElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook to create a simple curtain.
|
||||
* @param curtainElement Content of the curtain to open.
|
||||
*/
|
||||
export function useCallableCurtain(curtainElement: React.ReactNode): () => CurtainUuidType
|
||||
export function useCallableCurtain<F extends CallableCurtainElement>(curtainElement: React.ReactNode|F): CallableCurtain<F>
|
||||
{
|
||||
// Get curtains context state.
|
||||
const curtains = useCurtains();
|
||||
|
|
Loading…
Reference in a new issue