@@ -3,9 +3,11 @@ import { Html } from '../core/html';
33import { Component } from './component' ;
44import { validationErrorComponent } from './validation-error-component' ;
55
6- export interface DynamicListComponent < TItem > extends Component {
6+ export interface DynamicListComponent < TItem , TItemComponent extends DynamicListItemComponent < TItem > = DynamicListItemComponent < TItem > >
7+ extends Component {
78 onChanged : SimpleEvent < TItem [ ] > ;
89 add ( item : TItem ) : void ;
10+ forEach ( callback : ( component : TItemComponent ) => void ) : void ;
911}
1012
1113export interface DynamicListComponentConfiguration < TItem > {
@@ -19,12 +21,12 @@ export interface DynamicListItemComponent<TItem> extends Component {
1921 validate ( error : string | null ) : void ;
2022}
2123
22- export function dynamicListComponent < TItem > (
24+ export function dynamicListComponent < TItem , TItemComponent extends DynamicListItemComponent < TItem > = DynamicListItemComponent < TItem > > (
2325 initialItems : TItem [ ] ,
24- itemComponentFactory : ( item : TItem ) => DynamicListItemComponent < TItem > ,
26+ itemComponentFactory : ( item : TItem ) => TItemComponent ,
2527 context : ValueContext ,
2628 configuration ?: DynamicListComponentConfiguration < TItem >
27- ) : DynamicListComponent < TItem > {
29+ ) : DynamicListComponent < TItem , TItemComponent > {
2830 const onChanged = new SimpleEvent < TItem [ ] > ( ) ;
2931 const items = [ ...initialItems ] ;
3032
@@ -58,6 +60,10 @@ export function dynamicListComponent<TItem>(
5860 reloadList ( ) ;
5961 }
6062
63+ function forEach ( callback : ( component : TItemComponent ) => void ) {
64+ components . forEach ( callback ) ;
65+ }
66+
6167 function reloadList ( ) {
6268 if ( emptyRow ) {
6369 view . removeChild ( emptyRow ) ;
@@ -99,13 +105,14 @@ export function dynamicListComponent<TItem>(
99105 const validation = validationErrorComponent ( ) ;
100106 view . appendChild ( validation . view ) ;
101107
102- const components : DynamicListItemComponent < TItem > [ ] = [ ] ;
108+ const components : TItemComponent [ ] = [ ] ;
103109
104110 reloadList ( ) ;
105111
106112 return {
107113 onChanged,
108114 view,
109- add
115+ add,
116+ forEach
110117 } ;
111118}
0 commit comments