MOBILE-3649 core: Always use IonRefresher directly
parent
cc121b3011
commit
7b8fbca73b
|
@ -8,7 +8,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!badgeLoaded" (ionRefresh)="refreshBadges($event)">
|
<ion-refresher slot="fixed" [disabled]="!badgeLoaded" (ionRefresh)="refreshBadges($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="badgeLoaded">
|
<core-loading [hideUntil]="badgeLoaded">
|
||||||
|
|
|
@ -101,7 +101,7 @@ export class AddonBadgesIssuedBadgePage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
async refreshBadges(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshBadges(refresher?: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(Promise.all([
|
await CoreUtils.ignoreErrors(Promise.all([
|
||||||
AddonBadges.invalidateUserBadges(this.courseId, this.userId),
|
AddonBadges.invalidateUserBadges(this.courseId, this.userId),
|
||||||
]));
|
]));
|
||||||
|
@ -110,7 +110,7 @@ export class AddonBadgesIssuedBadgePage implements OnInit {
|
||||||
this.fetchIssuedBadge(),
|
this.fetchIssuedBadge(),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded" class="core-loading-center">
|
<core-loading [hideUntil]="loaded" class="core-loading-center">
|
||||||
|
|
|
@ -250,7 +250,7 @@ export class AddonBlogEntriesPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher instance.
|
* @param refresher Refresher instance.
|
||||||
*/
|
*/
|
||||||
refresh(refresher?: CustomEvent<IonRefresher>): void {
|
refresh(refresher?: IonRefresher): void {
|
||||||
const promises = this.entries.map((entry) =>
|
const promises = this.entries.map((entry) =>
|
||||||
CoreComments.invalidateCommentsData('user', entry.userid, this.component, entry.id, 'format_blog'));
|
CoreComments.invalidateCommentsData('user', entry.userid, this.component, entry.id, 'format_blog'));
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ export class AddonBlogEntriesPage implements OnInit {
|
||||||
CoreUtils.allPromises(promises).finally(() => {
|
CoreUtils.allPromises(promises).finally(() => {
|
||||||
this.fetchEntries(true).finally(() => {
|
this.fetchEntries(true).finally(() => {
|
||||||
if (refresher) {
|
if (refresher) {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -431,13 +431,13 @@ export class AddonCalendarDayPage implements OnInit, OnDestroy {
|
||||||
* @param done Function to call when done.
|
* @param done Function to call when done.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void): Promise<void> {
|
||||||
if (!this.loaded) {
|
if (!this.loaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.refreshData(true).finally(() => {
|
await this.refreshData(true).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -363,7 +363,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshData(refresher?: CustomEvent<IonRefresher>): void {
|
refreshData(refresher?: IonRefresher): void {
|
||||||
const promises = [
|
const promises = [
|
||||||
AddonCalendar.invalidateAccessInformation(this.courseId),
|
AddonCalendar.invalidateAccessInformation(this.courseId),
|
||||||
AddonCalendar.invalidateAllowedEventTypes(this.courseId),
|
AddonCalendar.invalidateAllowedEventTypes(this.courseId),
|
||||||
|
@ -384,7 +384,7 @@ export class AddonCalendarEditEventPage implements OnInit, OnDestroy, CanLeave {
|
||||||
|
|
||||||
Promise.all(promises).finally(() => {
|
Promise.all(promises).finally(() => {
|
||||||
this.fetchData().finally(() => {
|
this.fetchData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!eventLoaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!eventLoaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="eventLoaded">
|
<core-loading [hideUntil]="eventLoaded">
|
||||||
|
|
|
@ -402,13 +402,13 @@ export class AddonCalendarEventPage implements OnInit, OnDestroy {
|
||||||
* @param showErrors Whether to show sync errors to the user.
|
* @param showErrors Whether to show sync errors to the user.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, showErrors= false): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors= false): Promise<void> {
|
||||||
if (!this.eventLoaded) {
|
if (!this.eventLoaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.refreshEvent(true, showErrors).finally(() => {
|
await this.refreshEvent(true, showErrors).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -265,13 +265,13 @@ export class AddonCalendarIndexPage implements OnInit, OnDestroy {
|
||||||
* @param showErrors Whether to show sync errors to the user.
|
* @param showErrors Whether to show sync errors to the user.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, showErrors?: boolean): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors?: boolean): Promise<void> {
|
||||||
if (!this.loaded) {
|
if (!this.loaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.refreshData(true, showErrors).finally(() => {
|
await this.refreshData(true, showErrors).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!eventsLoaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!eventsLoaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="eventsLoaded">
|
<core-loading [hideUntil]="eventsLoaded">
|
||||||
|
|
|
@ -549,13 +549,13 @@ export class AddonCalendarListPage implements OnInit, OnDestroy {
|
||||||
* @param showErrors Whether to show sync errors to the user.
|
* @param showErrors Whether to show sync errors to the user.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, showErrors?: boolean): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors?: boolean): Promise<void> {
|
||||||
if (!this.eventsLoaded) {
|
if (!this.eventsLoaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.refreshEvents(true, showErrors).finally(() => {
|
await this.refreshEvents(true, showErrors).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!devicesLoaded" (ionRefresh)="refreshDevices($event)">
|
<ion-refresher slot="fixed" [disabled]="!devicesLoaded" (ionRefresh)="refreshDevices($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="devicesLoaded">
|
<core-loading [hideUntil]="devicesLoaded">
|
||||||
|
|
|
@ -106,13 +106,13 @@ export class AddonMessageOutputAirnotifierDevicesPage implements OnInit, OnDestr
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
async refreshDevices(refresher: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshDevices(refresher: IonRefresher): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await CoreUtils.ignoreErrors(AddonMessageOutputAirnotifier.invalidateUserDevices());
|
await CoreUtils.ignoreErrors(AddonMessageOutputAirnotifier.invalidateUserDevices());
|
||||||
|
|
||||||
await this.fetchDevices();
|
await this.fetchDevices();
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ export class AddonMessagesConversationInfoComponent implements OnInit {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher?: IonRefresher): Promise<void> {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(AddonMessages.invalidateConversation(this.conversationId));
|
promises.push(AddonMessages.invalidateConversation(this.conversationId));
|
||||||
|
@ -131,7 +131,7 @@ export class AddonMessagesConversationInfoComponent implements OnInit {
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|
||||||
await this.fetchData().finally(() => {
|
await this.fetchData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ export class AddonMessagesContacts35Page implements OnInit, OnDestroy {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher?: IonRefresher): Promise<void> {
|
||||||
try {
|
try {
|
||||||
if (this.searchString) {
|
if (this.searchString) {
|
||||||
// User has searched, update the search.
|
// User has searched, update the search.
|
||||||
|
@ -139,7 +139,7 @@ export class AddonMessagesContacts35Page implements OnInit, OnDestroy {
|
||||||
await this.fetchData();
|
await this.fetchData();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<!-- Contacts tab. -->
|
<!-- Contacts tab. -->
|
||||||
<core-tab [title]="'addon.messages.contacts' | translate" (ionSelect)="selectTab('confirmed')">
|
<core-tab [title]="'addon.messages.contacts' | translate" (ionSelect)="selectTab('confirmed')">
|
||||||
<ng-template>
|
<ng-template>
|
||||||
<ion-refresher slot="fixed" [disabled]="!confirmedLoaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!confirmedLoaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="confirmedLoaded" class="core-loading-center">
|
<core-loading [hideUntil]="confirmedLoaded" class="core-loading-center">
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
<!-- Requests tab. -->
|
<!-- Requests tab. -->
|
||||||
<core-tab [title]="'addon.messages.requests' | translate" (ionSelect)="selectTab('requests')" [badge]="requestsBadge">
|
<core-tab [title]="'addon.messages.requests' | translate" (ionSelect)="selectTab('requests')" [badge]="requestsBadge">
|
||||||
<ng-template>
|
<ng-template>
|
||||||
<ion-refresher slot="fixed" [disabled]="!requestsLoaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!requestsLoaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="requestsLoaded" class="core-loading-center">
|
<core-loading [hideUntil]="requestsLoaded" class="core-loading-center">
|
||||||
|
|
|
@ -185,7 +185,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher?: IonRefresher): Promise<void> {
|
||||||
try {
|
try {
|
||||||
if (this.selected == 'confirmed') {
|
if (this.selected == 'confirmed') {
|
||||||
// No need to invalidate contacts, we always try to get the latest.
|
// No need to invalidate contacts, we always try to get the latest.
|
||||||
|
@ -198,7 +198,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy {
|
||||||
await this.requestsFetchData(true);
|
await this.requestsFetchData(true);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
|
||||||
* @param refreshUnreadCounts Whteher to refresh unread counts.
|
* @param refreshUnreadCounts Whteher to refresh unread counts.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>, refreshUnreadCounts: boolean = true): Promise<void> {
|
async refreshData(refresher?: IonRefresher, refreshUnreadCounts: boolean = true): Promise<void> {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
promises.push(AddonMessages.invalidateDiscussionsCache(this.siteId));
|
promises.push(AddonMessages.invalidateDiscussionsCache(this.siteId));
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
|
||||||
|
|
||||||
await CoreUtils.allPromises(promises).finally(() => this.fetchData().finally(() => {
|
await CoreUtils.allPromises(promises).finally(() => this.fetchData().finally(() => {
|
||||||
if (refresher) {
|
if (refresher) {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content class="core-expand-max">
|
<ion-content class="core-expand-max">
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded || !currentListEl" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded || !currentListEl" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -700,7 +700,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
* @param refreshUnreadCounts Whether to refresh unread counts.
|
* @param refreshUnreadCounts Whether to refresh unread counts.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>, refreshUnreadCounts: boolean = true): Promise<void> {
|
async refreshData(refresher?: IonRefresher, refreshUnreadCounts: boolean = true): Promise<void> {
|
||||||
// Don't invalidate conversations and so, they always try to get latest data.
|
// Don't invalidate conversations and so, they always try to get latest data.
|
||||||
try {
|
try {
|
||||||
await AddonMessages.invalidateContactRequestsCountCache(this.siteId);
|
await AddonMessages.invalidateContactRequestsCountCache(this.siteId);
|
||||||
|
@ -709,7 +709,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
await this.fetchData(refreshUnreadCounts);
|
await this.fetchData(refreshUnreadCounts);
|
||||||
} finally {
|
} finally {
|
||||||
if (refresher) {
|
if (refresher) {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!preferencesLoaded" (ionRefresh)="refreshPreferences($event)">
|
<ion-refresher slot="fixed" [disabled]="!preferencesLoaded" (ionRefresh)="refreshPreferences($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="preferencesLoaded">
|
<core-loading [hideUntil]="preferencesLoaded">
|
||||||
|
|
|
@ -251,10 +251,10 @@ export class AddonMessagesSettingsPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshPreferences(refresher?: CustomEvent<IonRefresher>): void {
|
refreshPreferences(refresher?: IonRefresher): void {
|
||||||
AddonMessages.invalidateMessagePreferences().finally(() => {
|
AddonMessages.invalidateMessagePreferences().finally(() => {
|
||||||
this.fetchPreferences().finally(() => {
|
this.fetchPreferences().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded || !submissions.loaded" (ionRefresh)="refreshList($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded || !submissions.loaded" (ionRefresh)="refreshList($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded && submissions.loaded">
|
<core-loading [hideUntil]="loaded && submissions.loaded">
|
||||||
|
|
|
@ -328,9 +328,9 @@ export class AddonModAssignSubmissionListPage implements AfterViewInit, OnDestro
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshList(refresher?: CustomEvent<IonRefresher>): void {
|
refreshList(refresher?: IonRefresher): void {
|
||||||
this.refreshAllData(true).finally(() => {
|
this.refreshAllData(true).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
|
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshSubmission($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshSubmission($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
|
@ -155,9 +155,9 @@ export class AddonModAssignSubmissionReviewPage implements OnInit, CanLeave {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshSubmission(refresher?: CustomEvent<IonRefresher>): void {
|
refreshSubmission(refresher?: IonRefresher): void {
|
||||||
this.refreshAllData().finally(() => {
|
this.refreshAllData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="subfolder || !activityComponent?.loaded"
|
<ion-refresher slot="fixed" [disabled]="subfolder || !activityComponent?.loaded"
|
||||||
(ionRefresh)="activityComponent?.doRefresh($event)">
|
(ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
<!-- Content. -->
|
<!-- Content. -->
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!discussions.loaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!discussions.loaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!discussionLoaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!discussionLoaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import { CoreRatingOffline } from '@features/rating/services/rating-offline';
|
||||||
import { CoreRatingSyncProvider } from '@features/rating/services/rating-sync';
|
import { CoreRatingSyncProvider } from '@features/rating/services/rating-sync';
|
||||||
import { CoreUser } from '@features/user/services/user';
|
import { CoreUser } from '@features/user/services/user';
|
||||||
import { CanLeave } from '@guards/can-leave';
|
import { CanLeave } from '@guards/can-leave';
|
||||||
import { IonContent } from '@ionic/angular';
|
import { IonContent, IonRefresher } from '@ionic/angular';
|
||||||
import { CoreApp } from '@services/app';
|
import { CoreApp } from '@services/app';
|
||||||
import { CoreNavigator } from '@services/navigator';
|
import { CoreNavigator } from '@services/navigator';
|
||||||
import { CoreScreen } from '@services/screen';
|
import { CoreScreen } from '@services/screen';
|
||||||
|
@ -612,10 +612,10 @@ export class AddonModForumDiscussionPage implements OnInit, AfterViewInit, OnDes
|
||||||
* @param showErrors If show errors to the user of hide them.
|
* @param showErrors If show errors to the user of hide them.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: any, done?: () => void, showErrors: boolean = false): Promise<void> {
|
async doRefresh(refresher?: IonRefresher | null, done?: () => void, showErrors: boolean = false): Promise<void> {
|
||||||
if (this.discussionLoaded) {
|
if (this.discussionLoaded) {
|
||||||
await this.refreshPosts(true, showErrors).finally(() => {
|
await this.refreshPosts(true, showErrors).finally(() => {
|
||||||
refresher && refresher.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -651,7 +651,7 @@ export class AddonModForumDiscussionPage implements OnInit, AfterViewInit, OnDes
|
||||||
* @param type Sort type.
|
* @param type Sort type.
|
||||||
* @return Promised resolved when done.
|
* @return Promised resolved when done.
|
||||||
*/
|
*/
|
||||||
changeSort(type: SortType): Promise<any> {
|
changeSort(type: SortType): Promise<void> {
|
||||||
this.discussionLoaded = false;
|
this.discussionLoaded = false;
|
||||||
this.sort = type;
|
this.sort = type;
|
||||||
CoreSites.getCurrentSite()!.setLocalSiteConfig('AddonModForumDiscussionSort', this.sort);
|
CoreSites.getCurrentSite()!.setLocalSiteConfig('AddonModForumDiscussionSort', this.sort);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -98,9 +98,9 @@ export class AddonModLessonUserRetakePage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
doRefresh(refresher: CustomEvent<IonRefresher>): void {
|
doRefresh(refresher: IonRefresher): void {
|
||||||
this.refreshData().finally(() => {
|
this.refreshData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed"
|
<ion-refresher slot="fixed"
|
||||||
[disabled]="!activityComponent?.loaded || activityComponent?.mode != 'external'"
|
[disabled]="!activityComponent?.loaded || activityComponent?.mode != 'external'"
|
||||||
(ionRefresh)="activityComponent?.doRefresh($event)">
|
(ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!notificationsLoaded" (ionRefresh)="refreshNotifications($event)">
|
<ion-refresher slot="fixed" [disabled]="!notificationsLoaded" (ionRefresh)="refreshNotifications($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="notificationsLoaded">
|
<core-loading [hideUntil]="notificationsLoaded">
|
||||||
|
|
|
@ -174,13 +174,13 @@ export class AddonNotificationsListPage implements OnInit, OnDestroy {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise<any> Promise resolved when done.
|
* @return Promise<any> Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshNotifications(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshNotifications(refresher?: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(AddonNotifications.invalidateNotificationsList());
|
await CoreUtils.ignoreErrors(AddonNotifications.invalidateNotificationsList());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.fetchNotifications(true);
|
await this.fetchNotifications(true);
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!preferencesLoaded || !notifPrefsEnabled" (ionRefresh)="refreshPreferences($event)">
|
<ion-refresher slot="fixed" [disabled]="!preferencesLoaded || !notifPrefsEnabled"
|
||||||
|
(ionRefresh)="refreshPreferences($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="preferencesLoaded">
|
<core-loading [hideUntil]="preferencesLoaded">
|
||||||
|
|
|
@ -179,13 +179,13 @@ export class AddonNotificationsSettingsPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
async refreshPreferences(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshPreferences(refresher?: IonRefresher): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await CoreUtils.ignoreErrors(AddonNotifications.invalidateNotificationPreferences());
|
await CoreUtils.ignoreErrors(AddonNotifications.invalidateNotificationPreferences());
|
||||||
|
|
||||||
await this.fetchPreferences();
|
await this.fetchPreferences();
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!filesLoaded || (!showPrivateFiles && !showSiteFiles)"
|
<ion-refresher slot="fixed" [disabled]="!filesLoaded || (!showPrivateFiles && !showSiteFiles)"
|
||||||
(ionRefresh)="refreshData($event)">
|
(ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,9 @@ export class AddonPrivateFilesIndexPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshData(event?: CustomEvent<IonRefresher>): void {
|
refreshData(event?: IonRefresher): void {
|
||||||
this.refreshFiles().finally(() => {
|
this.refreshFiles().finally(() => {
|
||||||
event?.detail.complete();
|
event?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,10 +71,10 @@ export abstract class CoreBlockBaseComponent implements OnInit {
|
||||||
* @param showErrors If show errors to the user of hide them.
|
* @param showErrors If show errors to the user of hide them.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, showErrors: boolean = false): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, showErrors: boolean = false): Promise<void> {
|
||||||
if (this.loaded) {
|
if (this.loaded) {
|
||||||
return this.refreshContent(showErrors).finally(() => {
|
return this.refreshContent(showErrors).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,7 +140,7 @@ export class CoreBlockComponent implements OnInit, OnDestroy, DoCheck {
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(
|
async doRefresh(
|
||||||
refresher?: CustomEvent<IonRefresher>,
|
refresher?: IonRefresher,
|
||||||
done?: () => void,
|
done?: () => void,
|
||||||
showErrors: boolean = false,
|
showErrors: boolean = false,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!commentsLoaded" (ionRefresh)="refreshComments(false, $event)">
|
<ion-refresher slot="fixed" [disabled]="!commentsLoaded" (ionRefresh)="refreshComments(false, $event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="commentsLoaded">
|
<core-loading [hideUntil]="commentsLoaded">
|
||||||
|
|
|
@ -205,7 +205,7 @@ export class CoreCommentsViewerPage implements OnInit, OnDestroy {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Resolved when done.
|
* @return Resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshComments(showErrors: boolean, refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshComments(showErrors: boolean, refresher?: IonRefresher): Promise<void> {
|
||||||
this.commentsLoaded = false;
|
this.commentsLoaded = false;
|
||||||
this.refreshIcon = CoreConstants.ICON_LOADING;
|
this.refreshIcon = CoreConstants.ICON_LOADING;
|
||||||
this.syncIcon = CoreConstants.ICON_LOADING;
|
this.syncIcon = CoreConstants.ICON_LOADING;
|
||||||
|
@ -219,7 +219,7 @@ export class CoreCommentsViewerPage implements OnInit, OnDestroy {
|
||||||
try {
|
try {
|
||||||
await this.fetchComments(true, showErrors);
|
await this.fetchComments(true, showErrors);
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@ export class CoreCourseModuleMainResourceComponent implements OnInit, OnDestroy,
|
||||||
* @param showErrors If show errors to the user of hide them.
|
* @param showErrors If show errors to the user of hide them.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher> | null, done?: () => void, showErrors: boolean = false): Promise<void> {
|
async doRefresh(refresher?: IonRefresher | null, done?: () => void, showErrors: boolean = false): Promise<void> {
|
||||||
if (!this.loaded || !this.module) {
|
if (!this.loaded || !this.module) {
|
||||||
// Module can be undefined if course format changes from single activity to weekly/topics.
|
// Module can be undefined if course format changes from single activity to weekly/topics.
|
||||||
return;
|
return;
|
||||||
|
@ -119,7 +119,7 @@ export class CoreCourseModuleMainResourceComponent implements OnInit, OnDestroy,
|
||||||
|
|
||||||
await CoreUtils.ignoreErrors(this.refreshContent(true, showErrors));
|
await CoreUtils.ignoreErrors(this.refreshContent(true, showErrors));
|
||||||
|
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -497,7 +497,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy {
|
||||||
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
||||||
const promises = this.dynamicComponents?.map(async (component) => {
|
const promises = this.dynamicComponents?.map(async (component) => {
|
||||||
await component.callComponentFunction('doRefresh', [refresher, done, afterCompletionChange]);
|
await component.callComponentFunction('doRefresh', [refresher, done, afterCompletionChange]);
|
||||||
}) || [];
|
}) || [];
|
||||||
|
@ -508,7 +508,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy {
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done?.();
|
done?.();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ export class CoreCourseFormatSingleActivityComponent implements OnChanges {
|
||||||
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
||||||
if (afterCompletionChange) {
|
if (afterCompletionChange) {
|
||||||
// Don't refresh the view after a completion change since completion isn't displayed.
|
// Don't refresh the view after a completion change since completion isn't displayed.
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!dataLoaded || !displayRefresher" (ionRefresh)="doRefresh($event)">
|
<ion-refresher slot="fixed" [disabled]="!dataLoaded || !displayRefresher" (ionRefresh)="doRefresh($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
@ -26,4 +26,4 @@
|
||||||
(completionChanged)="onCompletionChange($event)" class="core-course-format-{{course.format}}">
|
(completionChanged)="onCompletionChange($event)" class="core-course-format-{{course.format}}">
|
||||||
</core-course-format>
|
</core-course-format>
|
||||||
</core-loading>
|
</core-loading>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
|
|
|
@ -327,7 +327,7 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async doRefresh(refresher?: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(this.invalidateData());
|
await CoreUtils.ignoreErrors(this.invalidateData());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -339,7 +339,7 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy {
|
||||||
await CoreUtils.ignoreErrors(this.formatComponent.doRefresh(refresher));
|
await CoreUtils.ignoreErrors(this.formatComponent.doRefresh(refresher));
|
||||||
}
|
}
|
||||||
|
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
@ -25,4 +25,4 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
</core-loading>
|
</core-loading>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
|
|
|
@ -119,13 +119,13 @@ export class CoreCourseListModTypePage implements OnInit {
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(CoreCourse.invalidateSections(this.courseId || 0));
|
await CoreUtils.ignoreErrors(CoreCourse.invalidateSections(this.courseId || 0));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.fetchData();
|
await this.fetchData();
|
||||||
} finally {
|
} finally {
|
||||||
refresher.detail.complete();
|
refresher.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!dataLoaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!dataLoaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="dataLoaded">
|
<core-loading [hideUntil]="dataLoaded">
|
||||||
|
|
|
@ -379,7 +379,7 @@ export class CoreCoursePreviewPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher The refresher if this was triggered by a Pull To Refresh.
|
* @param refresher The refresher if this was triggered by a Pull To Refresh.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher?: IonRefresher): Promise<void> {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCourses.invalidateUserCourses());
|
promises.push(CoreCourses.invalidateUserCourses());
|
||||||
|
@ -394,7 +394,7 @@ export class CoreCoursePreviewPage implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(promises).finally(() => this.getCourse()).finally(() => {
|
await Promise.all(promises).finally(() => this.getCourse()).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@ export interface CoreCourseModuleMainComponent {
|
||||||
* @param done Function to call when done.
|
* @param done Function to call when done.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void): Promise<void>;
|
doRefresh(refresher?: IonRefresher, done?: () => void): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!coursesLoaded" (ionRefresh)="refreshCourses($event)">
|
<ion-refresher slot="fixed" [disabled]="!coursesLoaded" (ionRefresh)="refreshCourses($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="coursesLoaded">
|
<core-loading [hideUntil]="coursesLoaded">
|
||||||
|
|
|
@ -62,7 +62,7 @@ export class CoreCoursesAvailableCoursesPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshCourses(refresher: CustomEvent<IonRefresher>): void {
|
refreshCourses(refresher: IonRefresher): void {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCourses.invalidateUserCourses());
|
promises.push(CoreCourses.invalidateUserCourses());
|
||||||
|
@ -70,7 +70,7 @@ export class CoreCoursesAvailableCoursesPage implements OnInit {
|
||||||
|
|
||||||
Promise.all(promises).finally(() => {
|
Promise.all(promises).finally(() => {
|
||||||
this.loadCourses().finally(() => {
|
this.loadCourses().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!categoriesLoaded" (ionRefresh)="refreshCategories($event)">
|
<ion-refresher slot="fixed" [disabled]="!categoriesLoaded" (ionRefresh)="refreshCategories($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="categoriesLoaded">
|
<core-loading [hideUntil]="categoriesLoaded">
|
||||||
|
|
|
@ -102,7 +102,7 @@ export class CoreCoursesCategoriesPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshCategories(refresher?: CustomEvent<IonRefresher>): void {
|
refreshCategories(refresher?: IonRefresher): void {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCourses.invalidateUserCourses());
|
promises.push(CoreCourses.invalidateUserCourses());
|
||||||
|
@ -112,7 +112,7 @@ export class CoreCoursesCategoriesPage implements OnInit {
|
||||||
|
|
||||||
Promise.all(promises).finally(() => {
|
Promise.all(promises).finally(() => {
|
||||||
this.fetchCategories().finally(() => {
|
this.fetchCategories().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshDashboard($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshDashboard($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ export class CoreCoursesDashboardPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshDashboard(refresher: CustomEvent<IonRefresher>): void {
|
refreshDashboard(refresher: IonRefresher): void {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCoursesDashboard.invalidateDashboardBlocks());
|
promises.push(CoreCoursesDashboard.invalidateDashboardBlocks());
|
||||||
|
@ -133,7 +133,7 @@ export class CoreCoursesDashboardPage implements OnInit, OnDestroy {
|
||||||
|
|
||||||
Promise.all(promises).finally(() => {
|
Promise.all(promises).finally(() => {
|
||||||
this.loadContent().finally(() => {
|
this.loadContent().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!coursesLoaded" (ionRefresh)="refreshCourses($event)">
|
<ion-refresher slot="fixed" [disabled]="!coursesLoaded" (ionRefresh)="refreshCourses($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshCourses(refresher: CustomEvent<IonRefresher>): void {
|
refreshCourses(refresher: IonRefresher): void {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCourses.invalidateUserCourses());
|
promises.push(CoreCourses.invalidateUserCourses());
|
||||||
|
@ -133,7 +133,7 @@ export class CoreCoursesMyCoursesPage implements OnInit, OnDestroy {
|
||||||
|
|
||||||
Promise.all(promises).finally(() => {
|
Promise.all(promises).finally(() => {
|
||||||
this.fetchCourses().finally(() => {
|
this.fetchCourses().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!settingsLoaded || isMinor" (ionRefresh)="refreshSettings($event)">
|
<ion-refresher slot="fixed" [disabled]="!settingsLoaded || isMinor" (ionRefresh)="refreshSettings($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
|
|
@ -257,9 +257,9 @@ export class CoreLoginEmailSignupPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param event Event.
|
* @param event Event.
|
||||||
*/
|
*/
|
||||||
refreshSettings(event?: CustomEvent<IonRefresher>): void {
|
refreshSettings(event?: IonRefresher): void {
|
||||||
this.fetchData().finally(() => {
|
this.fetchData().finally(() => {
|
||||||
event?.detail.complete();
|
event?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!handlers.loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!handlers.loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="handlers.loaded">
|
<core-loading [hideUntil]="handlers.loaded">
|
||||||
|
|
|
@ -152,9 +152,9 @@ export class CoreSitePreferencesPage implements AfterViewInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshData(refresher?: CustomEvent<IonRefresher>): void {
|
refreshData(refresher?: IonRefresher): void {
|
||||||
this.fetchData().finally(() => {
|
this.fetchData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher [disabled]="!loaded" (ionRefresh)="refreshData($event)" slot="fixed">
|
<ion-refresher [disabled]="!loaded" (ionRefresh)="refreshData($event.target)" slot="fixed">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
|
@ -104,9 +104,9 @@ export class CoreSettingsSpaceUsagePage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param event Refresher event.
|
* @param event Refresher event.
|
||||||
*/
|
*/
|
||||||
refreshData(event?: CustomEvent<IonRefresher>): void {
|
refreshData(refresher?: IonRefresher): void {
|
||||||
this.loadSiteData().finally(() => {
|
this.loadSiteData().finally(() => {
|
||||||
event?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,7 @@
|
||||||
</core-context-menu>
|
</core-context-menu>
|
||||||
</core-navbar-buttons>
|
</core-navbar-buttons>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!dataLoaded"
|
<ion-refresher slot="fixed" [disabled]="!dataLoaded" (ionRefresh)="doRefresh($event.target)">
|
||||||
(ionRefresh)="doRefresh($event)">
|
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-block-course-blocks [courseId]="siteHomeId" [downloadEnabled]="downloadEnabled">
|
<core-block-course-blocks [courseId]="siteHomeId" [downloadEnabled]="downloadEnabled">
|
||||||
|
|
|
@ -154,7 +154,7 @@ export class CoreSiteHomeIndexPage implements OnInit, OnDestroy {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
doRefresh(refresher?: CustomEvent<IonRefresher>): void {
|
doRefresh(refresher?: IonRefresher): void {
|
||||||
const promises: Promise<unknown>[] = [];
|
const promises: Promise<unknown>[] = [];
|
||||||
|
|
||||||
promises.push(CoreCourse.invalidateSections(this.siteHomeId!));
|
promises.push(CoreCourse.invalidateSections(this.siteHomeId!));
|
||||||
|
@ -184,7 +184,7 @@ export class CoreSiteHomeIndexPage implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(p2).finally(() => {
|
await Promise.all(p2).finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ export class CoreSitePluginsCourseFormatComponent implements OnChanges {
|
||||||
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
* @param afterCompletionChange Whether the refresh is due to a completion change.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher>, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
async doRefresh(refresher?: IonRefresher, done?: () => void, afterCompletionChange?: boolean): Promise<void> {
|
||||||
await this.content?.refreshContent(afterCompletionChange);
|
await this.content?.refreshContent(afterCompletionChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,7 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C
|
||||||
* @param done Function to call when done.
|
* @param done Function to call when done.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async doRefresh(refresher?: CustomEvent<IonRefresher> | null, done?: () => void): Promise<void> {
|
async doRefresh(refresher?: IonRefresher | null, done?: () => void): Promise<void> {
|
||||||
if (this.content) {
|
if (this.content) {
|
||||||
this.refreshIcon = CoreConstants.ICON_LOADING;
|
this.refreshIcon = CoreConstants.ICON_LOADING;
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ export class CoreSitePluginsModuleIndexComponent implements OnInit, OnDestroy, C
|
||||||
try {
|
try {
|
||||||
await this.content?.refreshContent(false);
|
await this.content?.refreshContent(false);
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
done && done();
|
done && done();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import { Component, OnInit, Type } from '@angular/core';
|
import { Component, OnInit, Type } from '@angular/core';
|
||||||
import { IonInfiniteScroll, IonRefresher } from '@ionic/angular';
|
import { IonRefresher } from '@ionic/angular';
|
||||||
import { CoreDomUtils } from '@services/utils/dom';
|
import { CoreDomUtils } from '@services/utils/dom';
|
||||||
import { CoreTag } from '@features/tag/services/tag';
|
import { CoreTag } from '@features/tag/services/tag';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
|
@ -140,11 +140,11 @@ export class CoreTagIndexAreaPage implements OnInit {
|
||||||
* @param infiniteComplete Infinite scroll complete function.
|
* @param infiniteComplete Infinite scroll complete function.
|
||||||
* @return Resolved when done.
|
* @return Resolved when done.
|
||||||
*/
|
*/
|
||||||
async loadMore(infiniteComplete?: CustomEvent<IonInfiniteScroll>): Promise<void> {
|
async loadMore(infiniteComplete?: () => void): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await this.fetchData();
|
await this.fetchData();
|
||||||
} finally {
|
} finally {
|
||||||
infiniteComplete?.detail.complete();
|
infiniteComplete?.();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ export class CoreTagIndexAreaPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
async refreshData(refresher?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshData(refresher?: IonRefresher): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await CoreTag.invalidateTagIndexPerArea(
|
await CoreTag.invalidateTagIndexPerArea(
|
||||||
this.tagId,
|
this.tagId,
|
||||||
|
@ -168,7 +168,7 @@ export class CoreTagIndexAreaPage implements OnInit {
|
||||||
try {
|
try {
|
||||||
await this.fetchData(true);
|
await this.fetchData(true);
|
||||||
} finally {
|
} finally {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
|
@ -121,7 +121,7 @@ export class CoreTagIndexPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher.
|
* @param refresher Refresher.
|
||||||
*/
|
*/
|
||||||
refreshData(refresher?: CustomEvent<IonRefresher>): void {
|
refreshData(refresher?: IonRefresher): void {
|
||||||
CoreTag.invalidateTagIndexPerArea(
|
CoreTag.invalidateTagIndexPerArea(
|
||||||
this.tagId,
|
this.tagId,
|
||||||
this.tagName,
|
this.tagName,
|
||||||
|
@ -132,7 +132,7 @@ export class CoreTagIndexPage implements OnInit {
|
||||||
this.recursive,
|
this.recursive,
|
||||||
).finally(() => {
|
).finally(() => {
|
||||||
this.fetchData().finally(() => {
|
this.fetchData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event)">
|
<ion-refresher slot="fixed" [disabled]="!loaded" (ionRefresh)="refreshData($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<ion-grid class="safe-area-page">
|
<ion-grid class="safe-area-page">
|
||||||
|
|
|
@ -103,12 +103,12 @@ export class CoreTagSearchPage implements OnInit {
|
||||||
*
|
*
|
||||||
* @param refresher Refresher event.
|
* @param refresher Refresher event.
|
||||||
*/
|
*/
|
||||||
refreshData(refresher?: CustomEvent<IonRefresher>): void {
|
refreshData(refresher?: IonRefresher): void {
|
||||||
CoreUtils.allPromises([
|
CoreUtils.allPromises([
|
||||||
CoreTag.invalidateTagCollections(),
|
CoreTag.invalidateTagCollections(),
|
||||||
CoreTag.invalidateTagCloud(this.collectionId, undefined, undefined, this.query),
|
CoreTag.invalidateTagCloud(this.collectionId, undefined, undefined, this.query),
|
||||||
]).finally(() => this.fetchData().finally(() => {
|
]).finally(() => this.fetchData().finally(() => {
|
||||||
refresher?.detail.complete();
|
refresher?.complete();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!userLoaded" (ionRefresh)="refreshUser($event)">
|
<ion-refresher slot="fixed" [disabled]="!userLoaded" (ionRefresh)="refreshUser($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="userLoaded">
|
<core-loading [hideUntil]="userLoaded">
|
||||||
|
|
|
@ -94,12 +94,12 @@ export class CoreUserAboutPage implements OnInit {
|
||||||
* @param event Event.
|
* @param event Event.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshUser(event?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshUser(event?: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(CoreUser.invalidateUserCache(this.userId));
|
await CoreUtils.ignoreErrors(CoreUser.invalidateUserCache(this.userId));
|
||||||
|
|
||||||
await this.fetchUser();
|
await this.fetchUser();
|
||||||
|
|
||||||
event?.detail.complete();
|
event?.complete();
|
||||||
|
|
||||||
if (this.user) {
|
if (this.user) {
|
||||||
CoreEvents.trigger(CoreUserProvider.PROFILE_REFRESHED, {
|
CoreEvents.trigger(CoreUserProvider.PROFILE_REFRESHED, {
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
|
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-split-view>
|
<core-split-view>
|
||||||
<ion-refresher slot="fixed" [disabled]="!participants.loaded || searchInProgress" (ionRefresh)="refreshParticipants($event.target)">
|
<ion-refresher slot="fixed" [disabled]="!participants.loaded || searchInProgress"
|
||||||
|
(ionRefresh)="refreshParticipants($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
|
|
||||||
|
@ -17,16 +18,18 @@
|
||||||
</core-search-box>
|
</core-search-box>
|
||||||
|
|
||||||
<core-loading [hideUntil]="participants.loaded">
|
<core-loading [hideUntil]="participants.loaded">
|
||||||
<core-empty-box *ngIf="participants.empty && !searchInProgress && !searchQuery" icon="person" [message]="'core.user.noparticipants' | translate">
|
<core-empty-box *ngIf="participants.empty && !searchInProgress && !searchQuery" icon="person"
|
||||||
|
[message]="'core.user.noparticipants' | translate">
|
||||||
</core-empty-box>
|
</core-empty-box>
|
||||||
|
|
||||||
<core-empty-box *ngIf="participants.empty && !searchInProgress && searchQuery" icon="search" [message]="'core.noresults' | translate">
|
<core-empty-box *ngIf="participants.empty && !searchInProgress && searchQuery" icon="search"
|
||||||
|
[message]="'core.noresults' | translate">
|
||||||
</core-empty-box>
|
</core-empty-box>
|
||||||
|
|
||||||
<ion-list *ngIf="!participants.empty">
|
<ion-list *ngIf="!participants.empty">
|
||||||
<ion-item *ngFor="let participant of participants.items"
|
<ion-item *ngFor="let participant of participants.items"
|
||||||
class="ion-text-wrap" [class.core-selected-item]="participants.isSelected(participant)" [title]="participant.fullname"
|
class="ion-text-wrap" [class.core-selected-item]="participants.isSelected(participant)"
|
||||||
(click)="participants.select(participant)">
|
[title]="participant.fullname" (click)="participants.select(participant)">
|
||||||
|
|
||||||
<core-user-avatar [user]="participant" [linkProfile]="false" [checkOnline]="true" slot="start">
|
<core-user-avatar [user]="participant" [linkProfile]="false" [checkOnline]="true" slot="start">
|
||||||
</core-user-avatar>
|
</core-user-avatar>
|
||||||
|
@ -34,20 +37,28 @@
|
||||||
<ion-label>
|
<ion-label>
|
||||||
<ng-container *ngIf="!searchQuery">
|
<ng-container *ngIf="!searchQuery">
|
||||||
<h2>{{ participant.fullname }}</h2>
|
<h2>{{ participant.fullname }}</h2>
|
||||||
<p *ngIf="participant.lastcourseaccess"><strong>{{ 'core.lastaccess' | translate }}: </strong>{{ participant.lastcourseaccess | coreTimeAgo }}</p>
|
<p *ngIf="participant.lastcourseaccess">
|
||||||
<p *ngIf="!participant.lastcourseaccess && participant.lastaccess"><strong>{{ 'core.lastaccess' | translate }}: </strong>{{ participant.lastaccess | coreTimeAgo }}</p>
|
<strong>{{ 'core.lastaccess' | translate }}: </strong>
|
||||||
|
{{ participant.lastcourseaccess | coreTimeAgo }}
|
||||||
|
</p>
|
||||||
|
<p *ngIf="!participant.lastcourseaccess && participant.lastaccess">
|
||||||
|
<strong>{{ 'core.lastaccess' | translate }}: </strong>
|
||||||
|
{{ participant.lastaccess | coreTimeAgo }}
|
||||||
|
</p>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container *ngIf="searchQuery">
|
<ng-container *ngIf="searchQuery">
|
||||||
<h2>
|
<h2>
|
||||||
<core-format-text [text]="participant.fullname" [highlight]="searchQuery" [filter]="false"></core-format-text>
|
<core-format-text [text]="participant.fullname" [highlight]="searchQuery" [filter]="false">
|
||||||
|
</core-format-text>
|
||||||
</h2>
|
</h2>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</ion-label>
|
</ion-label>
|
||||||
|
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
<core-infinite-loading [enabled]="participants.loaded && !participants.completed" (action)="fetchMoreParticipants($event)" [error]="fetchMoreParticipantsFailed">
|
<core-infinite-loading [enabled]="participants.loaded && !participants.completed"
|
||||||
|
(action)="fetchMoreParticipants($event)" [error]="fetchMoreParticipantsFailed">
|
||||||
</core-infinite-loading>
|
</core-infinite-loading>
|
||||||
</core-loading>
|
</core-loading>
|
||||||
</core-split-view>
|
</core-split-view>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<ion-refresher slot="fixed" [disabled]="!userLoaded" (ionRefresh)="refreshUser($event)">
|
<ion-refresher slot="fixed" [disabled]="!userLoaded" (ionRefresh)="refreshUser($event.target)">
|
||||||
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
|
||||||
</ion-refresher>
|
</ion-refresher>
|
||||||
<core-loading [hideUntil]="userLoaded">
|
<core-loading [hideUntil]="userLoaded">
|
||||||
|
|
|
@ -235,7 +235,7 @@ export class CoreUserProfilePage implements OnInit, OnDestroy {
|
||||||
* @param event Event.
|
* @param event Event.
|
||||||
* @return Promise resolved when done.
|
* @return Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
async refreshUser(event?: CustomEvent<IonRefresher>): Promise<void> {
|
async refreshUser(event?: IonRefresher): Promise<void> {
|
||||||
await CoreUtils.ignoreErrors(Promise.all([
|
await CoreUtils.ignoreErrors(Promise.all([
|
||||||
CoreUser.invalidateUserCache(this.userId),
|
CoreUser.invalidateUserCache(this.userId),
|
||||||
CoreCourses.invalidateUserNavigationOptions(),
|
CoreCourses.invalidateUserNavigationOptions(),
|
||||||
|
@ -244,7 +244,7 @@ export class CoreUserProfilePage implements OnInit, OnDestroy {
|
||||||
|
|
||||||
await this.fetchUser();
|
await this.fetchUser();
|
||||||
|
|
||||||
event?.detail.complete();
|
event?.complete();
|
||||||
|
|
||||||
if (this.user) {
|
if (this.user) {
|
||||||
CoreEvents.trigger(CoreUserProvider.PROFILE_REFRESHED, {
|
CoreEvents.trigger(CoreUserProvider.PROFILE_REFRESHED, {
|
||||||
|
|
Loading…
Reference in New Issue