commit
						9892a17849
					
				| @ -4,10 +4,10 @@ | |||||||
|     </ion-navbar> |     </ion-navbar> | ||||||
| </ion-header> | </ion-header> | ||||||
| <ion-content> | <ion-content> | ||||||
|     <ion-refresher [enabled]="entryLoaded" (ionRefresh)="refreshDatabase($event)"> |     <ion-refresher [enabled]="entryLoaded && (isPullingToRefresh || !renderingEntry && !loadingRating && !loadingComments)" (ionRefresh)="refreshDatabase($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-loading [hideUntil]="entryLoaded"> |     <core-loading [hideUntil]="entryLoaded && (isPullingToRefresh || !renderingEntry && !loadingRating && !loadingComments)"> | ||||||
|         <!-- Database entries found to be synchronized --> |         <!-- Database entries found to be synchronized --> | ||||||
|         <div class="core-warning-card" icon-start *ngIf="hasOffline"> |         <div class="core-warning-card" icon-start *ngIf="hasOffline"> | ||||||
|             <ion-icon name="warning"></ion-icon> |             <ion-icon name="warning"></ion-icon> | ||||||
| @ -25,14 +25,14 @@ | |||||||
|         <div class="addon-data-contents addon-data-entries-{{data.id}}" *ngIf="entry"> |         <div class="addon-data-contents addon-data-entries-{{data.id}}" *ngIf="entry"> | ||||||
|             <core-style [css]="data.csstemplate" prefix=".addon-data-entries-{{data.id}}"></core-style> |             <core-style [css]="data.csstemplate" prefix=".addon-data-entries-{{data.id}}"></core-style> | ||||||
| 
 | 
 | ||||||
|             <core-compile-html [text]="entryRendered" [jsData]="jsData" [extraImports]="extraImports"></core-compile-html> |             <core-compile-html [text]="entryHtml" [jsData]="jsData" [extraImports]="extraImports" (compiling)="setRenderingEntry($event)"></core-compile-html> | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|         <core-rating-rate *ngIf="data && entry && ratingInfo && (!data.approval || entry.approved)" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [itemSetId]="0" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale" [userId]="entry.userid" (onUpdate)="ratingUpdated()"></core-rating-rate> |         <core-rating-rate *ngIf="data && entry && ratingInfo && (!data.approval || entry.approved)" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [itemSetId]="0" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale" [userId]="entry.userid" (onLoading)="setLoadingRating($event)" (onUpdate)="ratingUpdated()"></core-rating-rate> | ||||||
|         <core-rating-aggregate *ngIf="data && entry && ratingInfo" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale"></core-rating-aggregate> |         <core-rating-aggregate *ngIf="data && entry && ratingInfo" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale"></core-rating-aggregate> | ||||||
| 
 | 
 | ||||||
|         <ion-item *ngIf="data && entry"> |         <ion-item *ngIf="data && entry"> | ||||||
|             <core-comments contextLevel="module" [instanceId]="data.coursemodule" component="mod_data" [itemId]="entry.id" area="database_entry"></core-comments> |             <core-comments contextLevel="module" [instanceId]="data.coursemodule" component="mod_data" [itemId]="entry.id" area="database_entry" [displaySpinner]="false" (onLoading)="setLoadingComments($event)"></core-comments> | ||||||
|         </ion-item> |         </ion-item> | ||||||
| 
 | 
 | ||||||
|         <ion-grid *ngIf="previousOffset != null || nextOffset != null"> |         <ion-grid *ngIf="previousOffset != null || nextOffset != null"> | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ | |||||||
| // See the License for the specific language governing permissions and
 | // See the License for the specific language governing permissions and
 | ||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| 
 | 
 | ||||||
| import { Component, ViewChild, OnDestroy } from '@angular/core'; | import { ChangeDetectorRef, Component, ViewChild, OnDestroy } from '@angular/core'; | ||||||
| import { Content, IonicPage, NavParams, NavController } from 'ionic-angular'; | import { Content, IonicPage, NavParams, NavController } from 'ionic-angular'; | ||||||
| import { CoreUtilsProvider } from '@providers/utils/utils'; | import { CoreUtilsProvider } from '@providers/utils/utils'; | ||||||
| import { CoreDomUtilsProvider } from '@providers/utils/dom'; | import { CoreDomUtilsProvider } from '@providers/utils/dom'; | ||||||
| @ -51,6 +51,9 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|     moduleName = 'data'; |     moduleName = 'data'; | ||||||
|     component = AddonModDataProvider.COMPONENT; |     component = AddonModDataProvider.COMPONENT; | ||||||
|     entryLoaded = false; |     entryLoaded = false; | ||||||
|  |     renderingEntry = false; | ||||||
|  |     loadingComments = false; | ||||||
|  |     loadingRating = false; | ||||||
|     selectedGroup = 0; |     selectedGroup = 0; | ||||||
|     entry: any; |     entry: any; | ||||||
|     offlineActions = []; |     offlineActions = []; | ||||||
| @ -61,18 +64,19 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|     data: any; |     data: any; | ||||||
|     groupInfo: any; |     groupInfo: any; | ||||||
|     showComments: any; |     showComments: any; | ||||||
|     entryRendered = ''; |     entryHtml = ''; | ||||||
|     siteId: string; |     siteId: string; | ||||||
|     extraImports = [AddonModDataComponentsModule]; |     extraImports = [AddonModDataComponentsModule]; | ||||||
|     jsData; |     jsData; | ||||||
|     ratingInfo: CoreRatingInfo; |     ratingInfo: CoreRatingInfo; | ||||||
|  |     isPullingToRefresh = false; // Whether the last fetching of data was started by a pull-to-refresh action
 | ||||||
| 
 | 
 | ||||||
|     constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider, |     constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider, | ||||||
|             protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate, |             protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate, | ||||||
|             protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider, |             protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider, | ||||||
|             protected dataOffline: AddonModDataOfflineProvider, protected dataHelper: AddonModDataHelperProvider, |             protected dataOffline: AddonModDataOfflineProvider, protected dataHelper: AddonModDataHelperProvider, | ||||||
|             sitesProvider: CoreSitesProvider, protected navCtrl: NavController, |             sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider, | ||||||
|             protected eventsProvider: CoreEventsProvider) { |             private cdr: ChangeDetectorRef) { | ||||||
|         this.module = params.get('module') || {}; |         this.module = params.get('module') || {}; | ||||||
|         this.entryId = params.get('entryId') || null; |         this.entryId = params.get('entryId') || null; | ||||||
|         this.courseId = params.get('courseId'); |         this.courseId = params.get('courseId'); | ||||||
| @ -122,12 +126,15 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|     /** |     /** | ||||||
|      * Fetch the entry data. |      * Fetch the entry data. | ||||||
|      * |      * | ||||||
|      * @param  {boolean}      refresh If refresh the current data or not. |      * @param  {boolean} [refresh] Whether to refresh the current data or not. | ||||||
|  |      * @param  {boolean} [isPtr] Whether is a pull to refresh action. | ||||||
|      * @return {Promise<any>} Resolved when done. |      * @return {Promise<any>} Resolved when done. | ||||||
|      */ |      */ | ||||||
|     protected fetchEntryData(refresh?: boolean): Promise<any> { |     protected fetchEntryData(refresh?: boolean, isPtr?: boolean): Promise<any> { | ||||||
|         let fieldsArray; |         let fieldsArray; | ||||||
| 
 | 
 | ||||||
|  |         this.isPullingToRefresh = isPtr; | ||||||
|  | 
 | ||||||
|         return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { |         return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { | ||||||
|             this.title = data.name || this.title; |             this.title = data.name || this.title; | ||||||
|             this.data = data; |             this.data = data; | ||||||
| @ -176,7 +183,7 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|             const actions = this.dataHelper.getActions(this.data, this.access, this.entry); |             const actions = this.dataHelper.getActions(this.data, this.access, this.entry); | ||||||
| 
 | 
 | ||||||
|             const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', fieldsArray); |             const templte = this.data.singletemplate || this.dataHelper.getDefaultTemplate('single', fieldsArray); | ||||||
|             this.entryRendered = this.dataHelper.displayShowFields(templte, fieldsArray, this.entry, this.offset, 'show', actions); |             this.entryHtml = this.dataHelper.displayShowFields(templte, fieldsArray, this.entry, this.offset, 'show', actions); | ||||||
|             this.showComments = actions.comments; |             this.showComments = actions.comments; | ||||||
| 
 | 
 | ||||||
|             const entries = {}; |             const entries = {}; | ||||||
| @ -191,7 +198,7 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|         }).catch((message) => { |         }).catch((message) => { | ||||||
|             if (!refresh) { |             if (!refresh) { | ||||||
|                 // Some call failed, retry without using cache since it might be a new activity.
 |                 // Some call failed, retry without using cache since it might be a new activity.
 | ||||||
|                 return this.refreshAllData(); |                 return this.refreshAllData(isPtr); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             this.domUtils.showErrorModalDefault(message, 'core.course.errorgetmodule', true); |             this.domUtils.showErrorModalDefault(message, 'core.course.errorgetmodule', true); | ||||||
| @ -219,9 +226,10 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|     /** |     /** | ||||||
|      * Refresh all the data. |      * Refresh all the data. | ||||||
|      * |      * | ||||||
|  |      * @param  {boolean} [isPtr] Whether is a pull to refresh action. | ||||||
|      * @return {Promise<any>} Promise resolved when done. |      * @return {Promise<any>} Promise resolved when done. | ||||||
|      */ |      */ | ||||||
|     protected refreshAllData(): Promise<any> { |     protected refreshAllData(isPtr?: boolean): Promise<any> { | ||||||
|         const promises = []; |         const promises = []; | ||||||
| 
 | 
 | ||||||
|         promises.push(this.dataProvider.invalidateDatabaseData(this.courseId)); |         promises.push(this.dataProvider.invalidateDatabaseData(this.courseId)); | ||||||
| @ -232,7 +240,7 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return Promise.all(promises).finally(() => { |         return Promise.all(promises).finally(() => { | ||||||
|             return this.fetchEntryData(true); |             return this.fetchEntryData(true, isPtr); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -244,7 +252,7 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|      */ |      */ | ||||||
|     refreshDatabase(refresher?: any): Promise<any> { |     refreshDatabase(refresher?: any): Promise<any> { | ||||||
|         if (this.entryLoaded) { |         if (this.entryLoaded) { | ||||||
|             return this.refreshAllData().finally(() => { |             return this.refreshAllData(true).finally(() => { | ||||||
|                 refresher && refresher.complete(); |                 refresher && refresher.complete(); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| @ -310,6 +318,30 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Function called when entry is being rendered. | ||||||
|  |      */ | ||||||
|  |     setRenderingEntry(rendering: boolean): void { | ||||||
|  |         this.renderingEntry = rendering; | ||||||
|  |         this.cdr.detectChanges(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Function called when comments component is loading data. | ||||||
|  |      */ | ||||||
|  |     setLoadingComments(loading: boolean): void { | ||||||
|  |         this.loadingComments = loading; | ||||||
|  |         this.cdr.detectChanges(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Function called when rate component is loading data. | ||||||
|  |      */ | ||||||
|  |     setLoadingRating(loading: boolean): void { | ||||||
|  |         this.loadingRating = loading; | ||||||
|  |         this.cdr.detectChanges(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Function called when rating is updated online. |      * Function called when rating is updated online. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -12,8 +12,8 @@ | |||||||
| // See the License for the specific language governing permissions and
 | // See the License for the specific language governing permissions and
 | ||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| 
 | 
 | ||||||
| import { Component, Input, OnChanges, SimpleChange } from '@angular/core'; | import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange } from '@angular/core'; | ||||||
| import { NavParams, NavController } from 'ionic-angular'; | import { NavController } from 'ionic-angular'; | ||||||
| import { CoreCommentsProvider } from '../../providers/comments'; | import { CoreCommentsProvider } from '../../providers/comments'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -31,11 +31,15 @@ export class CoreCommentsCommentsComponent implements OnChanges { | |||||||
|     @Input() area = ''; |     @Input() area = ''; | ||||||
|     @Input() page = 0; |     @Input() page = 0; | ||||||
|     @Input() title?: string; |     @Input() title?: string; | ||||||
|  |     @Input() displaySpinner = true; // Whether to display the loading spinner.
 | ||||||
|  |     @Output() onLoading: EventEmitter<boolean>; // Eevent that indicates whether the component is loading data.
 | ||||||
| 
 | 
 | ||||||
|     commentsLoaded = false; |     commentsLoaded = false; | ||||||
|     commentsCount: number; |     commentsCount: number; | ||||||
| 
 | 
 | ||||||
|     constructor(navParams: NavParams, private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) {} |     constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) { | ||||||
|  |         this.onLoading = new EventEmitter<boolean>(); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * View loaded. |      * View loaded. | ||||||
| @ -56,6 +60,7 @@ export class CoreCommentsCommentsComponent implements OnChanges { | |||||||
| 
 | 
 | ||||||
|     protected fetchData(): void { |     protected fetchData(): void { | ||||||
|         this.commentsLoaded = false; |         this.commentsLoaded = false; | ||||||
|  |         this.onLoading.emit(true); | ||||||
| 
 | 
 | ||||||
|         this.commentsProvider.getComments(this.contextLevel, this.instanceId, this.component, this.itemId, this.area, this.page) |         this.commentsProvider.getComments(this.contextLevel, this.instanceId, this.component, this.itemId, this.area, this.page) | ||||||
|             .then((comments) => { |             .then((comments) => { | ||||||
| @ -64,6 +69,7 @@ export class CoreCommentsCommentsComponent implements OnChanges { | |||||||
|                 this.commentsCount = -1; |                 this.commentsCount = -1; | ||||||
|             }).finally(() => { |             }).finally(() => { | ||||||
|                 this.commentsLoaded = true; |                 this.commentsLoaded = true; | ||||||
|  |                 this.onLoading.emit(false); | ||||||
|             }); |             }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| <core-loading [hideUntil]="commentsLoaded"> | <core-loading [hideUntil]="commentsLoaded || !displaySpinner"> | ||||||
|     <div (click)="openComments()" *ngIf="commentsCount >= 0"> |     <div (click)="openComments()" *ngIf="commentsCount >= 0"> | ||||||
|         {{ 'core.commentscount' | translate : {'$a': commentsCount} }} |         {{ 'core.commentscount' | translate : {'$a': commentsCount} }} | ||||||
|     </div> |     </div> | ||||||
|  | |||||||
| @ -48,6 +48,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { | |||||||
|     @Input() extraProviders: any[] = []; // Extra providers.
 |     @Input() extraProviders: any[] = []; // Extra providers.
 | ||||||
|     @Input() forceCompile: string | boolean; // Set it to true to force compile even if the text/javascript hasn't changed.
 |     @Input() forceCompile: string | boolean; // Set it to true to force compile even if the text/javascript hasn't changed.
 | ||||||
|     @Output() created: EventEmitter<any> = new EventEmitter(); // Will emit an event when the component is instantiated.
 |     @Output() created: EventEmitter<any> = new EventEmitter(); // Will emit an event when the component is instantiated.
 | ||||||
|  |     @Output() compiling: EventEmitter<boolean> = new EventEmitter(); // Event that indicates whether the template is being compiled.
 | ||||||
| 
 | 
 | ||||||
|     // Get the container where to put the content.
 |     // Get the container where to put the content.
 | ||||||
|     @ViewChild('dynamicComponent', { read: ViewContainerRef }) container: ViewContainerRef; |     @ViewChild('dynamicComponent', { read: ViewContainerRef }) container: ViewContainerRef; | ||||||
| @ -58,6 +59,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { | |||||||
|     protected componentRef: ComponentRef<any>; |     protected componentRef: ComponentRef<any>; | ||||||
|     protected element; |     protected element; | ||||||
|     protected differ: any; // To detect changes in the jsData input.
 |     protected differ: any; // To detect changes in the jsData input.
 | ||||||
|  |     protected creatingComponent = false; | ||||||
| 
 | 
 | ||||||
|     constructor(protected compileProvider: CoreCompileProvider, protected cdr: ChangeDetectorRef, element: ElementRef, |     constructor(protected compileProvider: CoreCompileProvider, protected cdr: ChangeDetectorRef, element: ElementRef, | ||||||
|             @Optional() protected navCtrl: NavController, differs: KeyValueDiffers, protected domUtils: CoreDomUtilsProvider, |             @Optional() protected navCtrl: NavController, differs: KeyValueDiffers, protected domUtils: CoreDomUtilsProvider, | ||||||
| @ -70,7 +72,7 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { | |||||||
|      * Detect and act upon changes that Angular can’t or won’t detect on its own (objects and arrays). |      * Detect and act upon changes that Angular can’t or won’t detect on its own (objects and arrays). | ||||||
|      */ |      */ | ||||||
|     ngDoCheck(): void { |     ngDoCheck(): void { | ||||||
|         if (this.componentInstance) { |         if (this.componentInstance && !this.creatingComponent) { | ||||||
|             // Check if there's any change in the jsData object.
 |             // Check if there's any change in the jsData object.
 | ||||||
|             const changes = this.differ.diff(this.jsData); |             const changes = this.differ.diff(this.jsData); | ||||||
|             if (changes) { |             if (changes) { | ||||||
| @ -91,6 +93,8 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { | |||||||
|                 this.text) { |                 this.text) { | ||||||
| 
 | 
 | ||||||
|             // Create a new component and a new module.
 |             // Create a new component and a new module.
 | ||||||
|  |             this.creatingComponent = true; | ||||||
|  |             this.compiling.emit(true); | ||||||
|             this.compileProvider.createAndCompileComponent(this.text, this.getComponentClass(), this.extraImports) |             this.compileProvider.createAndCompileComponent(this.text, this.getComponentClass(), this.extraImports) | ||||||
|                     .then((factory) => { |                     .then((factory) => { | ||||||
|                 // Destroy previous components.
 |                 // Destroy previous components.
 | ||||||
| @ -107,6 +111,9 @@ export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck { | |||||||
|                 this.domUtils.showErrorModal(error); |                 this.domUtils.showErrorModal(error); | ||||||
| 
 | 
 | ||||||
|                 this.loaded = true; |                 this.loaded = true; | ||||||
|  |             }).finally(() => { | ||||||
|  |                 this.creatingComponent = false; | ||||||
|  |                 this.compiling.emit(false); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ export class CoreRatingRateComponent implements OnChanges { | |||||||
|     @Input() aggregateMethod: number; |     @Input() aggregateMethod: number; | ||||||
|     @Input() scaleId: number; |     @Input() scaleId: number; | ||||||
|     @Input() userId: number; |     @Input() userId: number; | ||||||
|  |     @Output() onLoading: EventEmitter<boolean>; // Eevent that indicates whether the component is loading data.
 | ||||||
|     @Output() onUpdate: EventEmitter<void>; // Event emitted when the rating is updated online.
 |     @Output() onUpdate: EventEmitter<void>; // Event emitted when the rating is updated online.
 | ||||||
| 
 | 
 | ||||||
|     item: CoreRatingInfoItem; |     item: CoreRatingInfoItem; | ||||||
| @ -43,6 +44,7 @@ export class CoreRatingRateComponent implements OnChanges { | |||||||
| 
 | 
 | ||||||
|     constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, |     constructor(private domUtils: CoreDomUtilsProvider, private translate: TranslateService, | ||||||
|             private ratingProvider: CoreRatingProvider, private ratingOffline: CoreRatingOfflineProvider) { |             private ratingProvider: CoreRatingProvider, private ratingOffline: CoreRatingOfflineProvider) { | ||||||
|  |         this.onLoading = new EventEmitter<boolean>(); | ||||||
|         this.onUpdate = new EventEmitter<void>(); |         this.onUpdate = new EventEmitter<void>(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -77,6 +79,7 @@ export class CoreRatingRateComponent implements OnChanges { | |||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         this.onLoading.emit(true); | ||||||
|         this.ratingOffline.getRating(this.contextLevel, this.instanceId, this.ratingInfo.component, this.ratingInfo.ratingarea, |         this.ratingOffline.getRating(this.contextLevel, this.instanceId, this.ratingInfo.component, this.ratingInfo.ratingarea, | ||||||
|                 this.itemId).then((rating) => { |                 this.itemId).then((rating) => { | ||||||
|             this.rating = rating.rating; |             this.rating = rating.rating; | ||||||
| @ -86,6 +89,8 @@ export class CoreRatingRateComponent implements OnChanges { | |||||||
|             } else { |             } else { | ||||||
|                 this.rating = CoreRatingProvider.UNSET_RATING; |                 this.rating = CoreRatingProvider.UNSET_RATING; | ||||||
|             } |             } | ||||||
|  |         }).finally(() => { | ||||||
|  |             this.onLoading.emit(false); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user