@@ -8,7 +8,12 @@ import {
88 components as ReactSelectComponents , mergeStyles as mergeReactSelectStyles ,
99} from "react-select" ;
1010import type {
11- ClassNamesConfig as ReactSelectClassNamesConfig , SelectComponentsConfig as ReactSelectComponentsConfig , Props as ReactSelectCustomizationProps , StylesConfig as ReactSelectStylesConfig , Theme as ReactSelectTheme ,
11+ ClassNamesConfig as ReactSelectClassNamesConfig ,
12+ GroupBase ,
13+ Props as ReactSelectCustomizationProps ,
14+ SelectComponentsConfig as ReactSelectComponentsConfig ,
15+ StylesConfig as ReactSelectStylesConfig ,
16+ Theme as ReactSelectTheme ,
1217} from "react-select" ;
1318import type { ConfigurableProp } from "@pipedream/sdk" ;
1419import {
@@ -41,15 +46,16 @@ export type ReactSelectComponents = {
4146 controlSelect : typeof ControlSelect ;
4247} ;
4348
44- export type CustomComponents = {
49+ export type CustomComponents < Option , IsMulti extends boolean , Group extends GroupBase < Option > > = {
4550 [ K in keyof typeof defaultComponents ] : typeof defaultComponents [ K ]
4651} & {
47- [ K in keyof ReactSelectComponents ] : ReactSelectComponentsConfig < any , any , any >
52+ [ K in keyof ReactSelectComponents ] : ReactSelectComponentsConfig < Option , IsMulti , Group >
4853} ;
4954
5055export type ComponentLibrary = typeof defaultComponents ;
51- export type CustomComponentsConfig = Partial < CustomComponents > ;
56+ export type CustomComponentsConfig < T , U extends boolean , V extends GroupBase < T > > = Partial < CustomComponents < T , U , V > > ;
5257
58+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5359export type CustomizationOpts < P extends ComponentProps < JSXElementConstructor < any > > > = P & {
5460 theme : Theme ;
5561} ;
@@ -86,16 +92,16 @@ export type CustomStylesConfig = {
8692 [ K in keyof ReactSelectComponents ] ?: ReactSelectStylesConfig
8793} ;
8894
89- export type CustomizationConfig = {
95+ export type CustomizationConfig < Option , IsMulti extends boolean , Group extends GroupBase < Option > > = {
9096 classNames ?: CustomClassNamesConfig ;
9197 classNamePrefix ?: string ;
92- components ?: CustomComponentsConfig ;
98+ components ?: CustomComponentsConfig < Option , IsMulti , Group > ;
9399 styles ?: CustomStylesConfig ;
94100 theme ?: CustomThemeConfig ;
95101 unstyled ?: boolean ;
96102} ;
97103
98- export const CustomizationContext = createContext < CustomizationConfig > ( {
104+ export const CustomizationContext = createContext < CustomizationConfig < any , any , any > > ( { // eslint-disable-line @typescript-eslint/no-explicit-any
99105 classNames : { } ,
100106 classNamePrefix : "" ,
101107 components : { } ,
@@ -108,11 +114,12 @@ export type CustomizationProps = {
108114 className : string ;
109115 style : CSSProperties ;
110116} ;
111- export type BaseReactSelectProps = {
112- components ?: ReactSelectComponentsConfig < any , any , any > ;
117+ export type BaseReactSelectProps < Option , IsMulti extends boolean , Group extends GroupBase < Option > > = {
118+ components ?: ReactSelectComponentsConfig < Option , IsMulti , Group > ;
113119 styles ?: ReactSelectStylesConfig ;
114120} ;
115121
122+ // XXX refactor generics in this file to fix relationship between Key and other generics, etc.
116123export type Customization = {
117124 getClassNames : < Key extends keyof CustomizableProps > ( name : Key , props : CustomizableProps [ Key ] ) => string ;
118125 getComponents : ( ) => ComponentLibrary ;
@@ -122,9 +129,11 @@ export type Customization = {
122129 select : {
123130 getClassNamePrefix : < Key extends keyof ReactSelectComponents > ( name : Key ) => string ;
124131 getClassNames : < Key extends keyof ReactSelectComponents > ( name : Key ) => ReactSelectClassNamesConfig ;
132+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
125133 getComponents : < Key extends keyof ReactSelectComponents > ( name : Key , baseComponents ?: ReactSelectComponentsConfig < any , any , any > ) => ReactSelectComponentsConfig < any , any , any > ;
126134 getStyles : < Key extends keyof ReactSelectComponents > ( name : Key , baseStyles ?: ReactSelectStylesConfig ) => ReactSelectStylesConfig ;
127- getProps : < Key extends keyof ReactSelectComponents > ( name : Key , baseProps ?: BaseReactSelectProps ) => ReactSelectCustomizationProps ;
135+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136+ getProps : < Key extends keyof ReactSelectComponents > ( name : Key , baseProps ?: BaseReactSelectProps < any , any , any > ) => ReactSelectCustomizationProps ;
128137 theme : ReactSelectTheme ;
129138 } ;
130139} ;
@@ -152,6 +161,7 @@ function createSelectCustomization(): Customization["select"] {
152161 return classNames ;
153162 }
154163
164+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
155165 function getComponents < Key extends keyof ReactSelectComponents > ( name : Key , baseComponents ?: ReactSelectComponentsConfig < any , any , any > ) : ReactSelectComponentsConfig < any , any , any > {
156166 return {
157167 ...ReactSelectComponents ,
@@ -164,7 +174,8 @@ function createSelectCustomization(): Customization["select"] {
164174 return mergeReactSelectStyles ( context . styles ?. [ name ] ?? { } , baseStyles ?? { } ) ;
165175 }
166176
167- function getProps < Key extends keyof ReactSelectComponents > ( name : Key , baseProps ?: BaseReactSelectProps ) : ReactSelectCustomizationProps {
177+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
178+ function getProps < Key extends keyof ReactSelectComponents > ( name : Key , baseProps ?: BaseReactSelectProps < any , any , any > ) : ReactSelectCustomizationProps {
168179 return {
169180 classNamePrefix : getClassNamePrefix ( ) ,
170181 classNames : getClassNames ( name ) ,
0 commit comments