File tree Expand file tree Collapse file tree 3 files changed +47
-0
lines changed
Expand file tree Collapse file tree 3 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -635,6 +635,19 @@ export class CollectionView extends CollectionViewBase {
635635 }
636636 return result ;
637637 }
638+ private async enumerateViewHoldersAsync < T = any > ( cb : ( v : CollectionViewCellHolder ) => Promise < T > ) {
639+ let result : T , v : CollectionViewCellHolder ;
640+ for ( let it = this . _viewHolders . values ( ) , cellItemView : CollectionViewCellHolder = null ; ( cellItemView = it . next ( ) . value ) ; ) {
641+ if ( cellItemView [ 'position' ] === undefined ) {
642+ continue ;
643+ }
644+ result = await cb ( cellItemView ) ;
645+ if ( result ) {
646+ return result ;
647+ }
648+ }
649+ return result ;
650+ }
638651 public startDragging ( index : number ) {
639652 if ( this . reorderEnabled && this . _itemTouchHelper ) {
640653 // let viewHolder: CollectionViewCellHolder;
@@ -906,6 +919,22 @@ export class CollectionView extends CollectionViewBase {
906919 }
907920 } ) ;
908921 }
922+
923+ async eachChildAsync ( callback ) {
924+ return this . enumerateViewHoldersAsync ( async ( v ) => {
925+ const view = v . view ;
926+ if ( view ) {
927+ if ( view . parent instanceof CollectionView ) {
928+ await callback ( view ) ;
929+ } else {
930+ // in some cases (like item is unloaded from another place (like angular) view.parent becomes undefined)
931+ if ( view . parent ) {
932+ await callback ( view . parent ) ;
933+ }
934+ }
935+ }
936+ } ) ;
937+ }
909938 refreshVisibleItems ( ) {
910939 const view = this . nativeViewProtected ;
911940 if ( ! view ) {
Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ export class CollectionView extends CollectionViewBase {
2121 // if you use a drag "handle" just pass the touch event main pointer
2222 // to delta the dragging to be good
2323 startDragging ( index : number , pointer ?: Pointer ) ;
24+ async eachChildAsync ( callback ) ;
2425}
2526
2627export interface CollectionViewItemEventData extends EventData {
Original file line number Diff line number Diff line change @@ -179,6 +179,23 @@ export class CollectionView extends CollectionViewBase {
179179 }
180180 } ) ;
181181 }
182+
183+ async eachChildAsync ( callback ) {
184+ // used for css updates (like theme change)
185+ const children = Object . values ( this . _map ) ;
186+ for ( let index = 0 ; index < children . length ; index ++ ) {
187+ const view = children [ index ] ;
188+ if ( view . parent instanceof CollectionView ) {
189+ await callback ( view ) ;
190+ }
191+ else {
192+ // in some cases (like item is unloaded from another place (like angular) view.parent becomes undefined)
193+ if ( view . parent ) {
194+ await callback ( view . parent ) ;
195+ }
196+ }
197+ }
198+ }
182199 public getViewForItemAtIndex ( index : number ) : View {
183200 let result : View ;
184201 if ( this . nativeViewProtected ) {
You can’t perform that action at this time.
0 commit comments