From 76461deca69ce178d7a8f4c078355b0084bf5ba2 Mon Sep 17 00:00:00 2001 From: Georges KABBOUCHI Date: Mon, 6 Sep 2021 01:32:36 +0300 Subject: [PATCH] infer input extra params on `defineStrategyComponent` --- core/strategies/helpers/index.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/core/strategies/helpers/index.ts b/core/strategies/helpers/index.ts index 4b39359..1c8bdc5 100644 --- a/core/strategies/helpers/index.ts +++ b/core/strategies/helpers/index.ts @@ -43,7 +43,7 @@ export enum StrategyComponentType { HEADING = "heading", VALUE = "value", - STATUS = "status", + STATUS = "status" } export type StrategyComponentParameterMap = { @@ -62,12 +62,14 @@ export type StrategyComponentParameterMap = { [StrategyComponentType.HEADING]: {}; [StrategyComponentType.VALUE]: {}; [StrategyComponentType.STATUS]: { - liquidation?: any, - status?: any, + liquidation?: any; + status?: any; }; }; -export interface IStrategyComponent { +export interface IStrategyComponent< + ComponentType extends StrategyComponentType +> { type: ComponentType; name: string; @@ -75,19 +77,22 @@ export interface IStrategyComponent placeholder?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => string; validate?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => string | void; defaults?: (context: Omit) => object; update?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => void; @@ -122,10 +127,14 @@ export interface IStrategy { submitText?: string; } -export function defineStrategyComponent( - component: IStrategyComponent +export function defineStrategyComponent< + ComponentType extends StrategyComponentType +>( + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType] ) { - return component as IStrategyComponent; + return component as IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } export function defineStrategy(strategy: IStrategy) {