@@ -404,6 +404,66 @@ function Do(a: ChainableComponent<any>, ...fns: Function[]): ChainableComponent<
404404 return doIt ( a . map ( a2 => [ a2 ] ) , fns ) ;
405405}
406406
407+ function DoRender < T1 , Z > (
408+ c : ChainableComponent < T1 > ,
409+ f1 : ( t1 : T1 ) => React . ReactNode ,
410+ ) : React . ReactNode
411+
412+ function DoRender < T1 , T2 , Z > (
413+ c : ChainableComponent < T1 > ,
414+ f1 : ( t1 : T1 ) => ChainableComponent < T2 > ,
415+ z : ( t2 : T2 , t1 : T1 ) => React . ReactNode
416+ ) : React . ReactNode
417+
418+ function DoRender < T1 , T2 , T3 , Z > (
419+ c : ChainableComponent < T1 > ,
420+ f1 : ( t1 : T1 ) => ChainableComponent < T2 > ,
421+ f2 : ( t2 : T2 , t1 : T1 ) => ChainableComponent < T3 > ,
422+ z : ( t3 : T3 , t2 : T2 , t1 : T1 ) => React . ReactNode
423+ ) : React . ReactNode
424+
425+ function DoRender < T1 , T2 , T3 , T4 , Z > (
426+ c : ChainableComponent < T1 > ,
427+ f1 : ( t1 : T1 ) => ChainableComponent < T2 > ,
428+ f2 : ( t2 : T2 , t1 : T1 ) => ChainableComponent < T3 > ,
429+ f3 : ( t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T4 > ,
430+ z : ( t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => React . ReactNode
431+ ) : React . ReactNode
432+
433+ function DoRender < T1 , T2 , T3 , T4 , T5 , Z > (
434+ c : ChainableComponent < T1 > ,
435+ f1 : ( t1 : T1 ) => ChainableComponent < T2 > ,
436+ f2 : ( t2 : T2 , t1 : T1 ) => ChainableComponent < T3 > ,
437+ f3 : ( t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T4 > ,
438+ f4 : ( t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T5 > ,
439+ z : ( t5 : T5 , t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => React . ReactNode
440+ ) : React . ReactNode
441+
442+ function DoRender < T1 , T2 , T3 , T4 , T5 , T6 , Z > (
443+ c : ChainableComponent < T1 > ,
444+ f1 : ( t1 : T1 ) => ChainableComponent < T2 > ,
445+ f2 : ( t2 : T2 , t1 : T1 ) => ChainableComponent < T3 > ,
446+ f3 : ( t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T4 > ,
447+ f4 : ( t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T5 > ,
448+ f5 : ( t5 : T5 , t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => ChainableComponent < T6 > ,
449+ z : ( t6 : T6 , t5 : T5 , t4 : T4 , t3 : T3 , t2 : T2 , t1 : T1 ) => React . ReactNode
450+ ) : React . ReactNode
451+
452+ function DoRender ( a : ChainableComponent < any > , ...fns : Function [ ] ) : React . ReactNode {
453+ function doIt ( as : ChainableComponent < any [ ] > , fns : Function [ ] ) : any {
454+ const [ fn , ...rest ] = fns ;
455+ if ( rest . length === 0 ) {
456+ return as . render ( a2s => fn . apply ( null , a2s ) ) ;
457+ } else {
458+ return as . render ( a2s => {
459+ const aPrime = fn . apply ( null , a2s ) ;
460+ return doIt ( aPrime . map ( ( aP : any ) => [ aP , ...a2s ] ) , rest ) ;
461+ } ) ;
462+ }
463+ }
464+ return doIt ( a . map ( a2 => [ a2 ] ) , fns ) ;
465+ }
466+
407467const isChainableComponent = ( a : any ) => {
408468 return typeof a . chain === 'function' &&
409469 typeof a . map === 'function' &&
@@ -424,4 +484,5 @@ export const ChainableComponent = {
424484 'fantasy-land/of' : of ,
425485 all,
426486 Do,
487+ DoRender
427488} ;
0 commit comments