Skip to content

Commit 5ed73cd

Browse files
authored
fix(refresher): refresher correctly detects native refresher when shown asynchronously (#22623)
resolves #22616
1 parent 0be79fe commit 5ed73cd

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

core/src/components/refresher/refresher.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ export class Refresher implements ComponentInterface {
124124
*/
125125
@Event() ionStart!: EventEmitter<void>;
126126

127-
private checkNativeRefresher() {
128-
const useNativeRefresher = shouldUseNativeRefresher(this.el, getIonMode(this));
127+
private async checkNativeRefresher() {
128+
const useNativeRefresher = await shouldUseNativeRefresher(this.el, getIonMode(this));
129129
if (useNativeRefresher && !this.nativeRefresher) {
130130
const contentEl = this.el.closest('ion-content');
131131
this.setupNativeRefresher(contentEl);
@@ -411,7 +411,7 @@ export class Refresher implements ComponentInterface {
411411
this.scrollEl = await contentEl.getScrollElement();
412412
this.backgroundContentEl = getElementRoot(contentEl).querySelector('#background-content') as HTMLElement;
413413

414-
if (shouldUseNativeRefresher(this.el, getIonMode(this))) {
414+
if (await shouldUseNativeRefresher(this.el, getIonMode(this))) {
415415
this.setupNativeRefresher(contentEl);
416416
} else {
417417
this.gesture = (await import('../../utils/gesture')).createGesture({

core/src/components/refresher/refresher.utils.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,14 @@ export const translateElement = (el?: HTMLElement, value?: string) => {
166166
// Utils
167167
// -----------------------------
168168

169-
export const shouldUseNativeRefresher = (referenceEl: HTMLIonRefresherElement, mode: string) => {
170-
const pullingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-pulling ion-spinner');
171-
const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
169+
export const shouldUseNativeRefresher = async (referenceEl: HTMLIonRefresherElement, mode: string) => {
170+
const refresherContent = referenceEl.querySelector('ion-refresher-content');
171+
if (!refresherContent) { return Promise.resolve(false); }
172+
173+
await refresherContent.componentOnReady();
174+
175+
const pullingSpinner = refresherContent.querySelector('.refresher-pulling ion-spinner');
176+
const refreshingSpinner = refresherContent.querySelector('.refresher-refreshing ion-spinner');
172177

173178
return (
174179
pullingSpinner !== null &&

0 commit comments

Comments
 (0)