Skip to content

Commit f67e604

Browse files
committed
feat: eachChildAsync method
1 parent 07c36b3 commit f67e604

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

src/collectionview/index.android.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff 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) {

src/collectionview/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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

2627
export interface CollectionViewItemEventData extends EventData {

src/collectionview/index.ios.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff 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) {

0 commit comments

Comments
 (0)