@@ -51,9 +51,10 @@ export type ViewFnTypeForComp<ViewReturn, ChildrenCompMap> = ViewFnType<
5151 ViewReturn ,
5252 ToViewReturn < ChildrenCompMap >
5353> ;
54- export type PropertyViewFnTypeForComp < ChildrenCompMap > = (
54+ export type PropertyViewFnTypeForComp < ChildrenCompMap , ExtraProps = any > = (
5555 children : ChildrenCompMap ,
56- dispatch : ( action : CompAction ) => void
56+ dispatch : ( action : CompAction ) => void ,
57+ extraProps ?: ExtraProps
5758) => ReactNode ;
5859
5960export function parseChildrenFromValueAndChildrenMap <
@@ -83,10 +84,10 @@ export function parseChildrenFromValueAndChildrenMap<
8384 * Building comp this way can use typescript's type inference capabilities.
8485 * Using ChildrenCompMap as a generic is to retain the information of each class, such as not wanting StringControl to degenerate into Comp<string>
8586 */
86- export class MultiCompBuilder < ViewReturn , ChildrenCompMap extends Record < string , Comp < unknown > > > {
87+ export class MultiCompBuilder < ViewReturn , ChildrenCompMap extends Record < string , Comp < unknown > > , ExtraProps = any > {
8788 private childrenMap : ToConstructor < ChildrenCompMap > ;
8889 private viewFn : ViewFnTypeForComp < ViewReturn , ChildrenCompMap > ;
89- private propertyViewFn ?: PropertyViewFnTypeForComp < ChildrenCompMap > ;
90+ private propertyViewFn ?: PropertyViewFnTypeForComp < ChildrenCompMap , ExtraProps > ;
9091
9192 /**
9293 * If viewFn is not placed in the constructor, the type of ViewReturn cannot be inferred
@@ -99,7 +100,7 @@ export class MultiCompBuilder<ViewReturn, ChildrenCompMap extends Record<string,
99100 this . viewFn = viewFn ;
100101 }
101102
102- setPropertyViewFn ( propertyViewFn : PropertyViewFnTypeForComp < ChildrenCompMap > ) {
103+ setPropertyViewFn ( propertyViewFn : PropertyViewFnTypeForComp < ChildrenCompMap , ExtraProps > ) {
103104 this . propertyViewFn = propertyViewFn ;
104105 return this ;
105106 }
@@ -129,8 +130,8 @@ export class MultiCompBuilder<ViewReturn, ChildrenCompMap extends Record<string,
129130 ) ;
130131 }
131132
132- override getPropertyView ( ) : ReactNode {
133- return < PropertyView comp = { this } propertyViewFn = { builder . propertyViewFn } /> ;
133+ override getPropertyView ( extraProps ?: ExtraProps ) : ReactNode {
134+ return < PropertyView comp = { this } propertyViewFn = { builder . propertyViewFn } extraProps = { extraProps } /> ;
134135 }
135136 }
136137
@@ -141,12 +142,12 @@ export class MultiCompBuilder<ViewReturn, ChildrenCompMap extends Record<string,
141142/**
142143 * Guaranteed to be in a react component, so that react hooks can be used internally
143144 */
144- export function PropertyView ( props : { comp : any ; propertyViewFn : any } ) {
145+ export function PropertyView ( props : { comp : any ; propertyViewFn : any ; extraProps ?: any } ) {
145146 const comp = props . comp ;
146147 if ( ! props . propertyViewFn ) {
147148 return null ;
148149 }
149- return props . propertyViewFn ( comp . children , comp . dispatch ) ;
150+ return props . propertyViewFn ( comp . children , comp . dispatch , props . extraProps ) ;
150151}
151152
152153export function childrenToProps < ChildrenCompMap extends Record < string , Comp < unknown > > > (
0 commit comments