MOBILE-3320 forum: Fix ratings reactivity
parent
c1e2acf98a
commit
ea899125eb
|
@ -47,7 +47,7 @@ export class CoreRatingAggregateComponent implements OnChanges, OnDestroy {
|
||||||
disabled = false;
|
disabled = false;
|
||||||
labelKey = '';
|
labelKey = '';
|
||||||
|
|
||||||
protected aggregateObserver: CoreEventObserver;
|
protected aggregateObserver?: CoreEventObserver;
|
||||||
protected updateSiteObserver: CoreEventObserver;
|
protected updateSiteObserver: CoreEventObserver;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -57,27 +57,14 @@ export class CoreRatingAggregateComponent implements OnChanges, OnDestroy {
|
||||||
this.updateSiteObserver = CoreEvents.on(CoreEvents.SITE_UPDATED, () => {
|
this.updateSiteObserver = CoreEvents.on(CoreEvents.SITE_UPDATED, () => {
|
||||||
this.disabled = CoreRating.isRatingDisabledInSite();
|
this.disabled = CoreRating.isRatingDisabledInSite();
|
||||||
}, CoreSites.getCurrentSiteId());
|
}, CoreSites.getCurrentSiteId());
|
||||||
|
|
||||||
// Update aggrgate when the user adds or edits a rating.
|
|
||||||
this.aggregateObserver =
|
|
||||||
CoreEvents.on(CoreRatingProvider.AGGREGATE_CHANGED_EVENT, (data) => {
|
|
||||||
if (this.item &&
|
|
||||||
data.contextLevel == this.contextLevel &&
|
|
||||||
data.instanceId == this.instanceId &&
|
|
||||||
data.component == this.ratingInfo.component &&
|
|
||||||
data.ratingArea == this.ratingInfo.ratingarea &&
|
|
||||||
data.itemId == this.itemId) {
|
|
||||||
this.item.aggregatestr = data.aggregate;
|
|
||||||
this.item.count = data.count;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect changes on input properties.
|
* Detect changes on input properties.
|
||||||
*/
|
*/
|
||||||
ngOnChanges(): void {
|
ngOnChanges(): void {
|
||||||
this.aggregateObserver && this.aggregateObserver.off();
|
this.aggregateObserver?.off();
|
||||||
|
delete this.aggregateObserver;
|
||||||
|
|
||||||
this.item = (this.ratingInfo.ratings || []).find((rating) => rating.itemid == this.itemId);
|
this.item = (this.ratingInfo.ratings || []).find((rating) => rating.itemid == this.itemId);
|
||||||
if (!this.item) {
|
if (!this.item) {
|
||||||
|
@ -107,6 +94,20 @@ export class CoreRatingAggregateComponent implements OnChanges, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.showCount = (this.aggregateMethod != CoreRatingProvider.AGGREGATE_COUNT);
|
this.showCount = (this.aggregateMethod != CoreRatingProvider.AGGREGATE_COUNT);
|
||||||
|
|
||||||
|
// Update aggrgate when the user adds or edits a rating.
|
||||||
|
this.aggregateObserver =
|
||||||
|
CoreEvents.on(CoreRatingProvider.AGGREGATE_CHANGED_EVENT, (data) => {
|
||||||
|
if (this.item &&
|
||||||
|
data.contextLevel == this.contextLevel &&
|
||||||
|
data.instanceId == this.instanceId &&
|
||||||
|
data.component == this.ratingInfo.component &&
|
||||||
|
data.ratingArea == this.ratingInfo.ratingarea &&
|
||||||
|
data.itemId == this.itemId) {
|
||||||
|
this.item.aggregatestr = data.aggregate;
|
||||||
|
this.item.count = data.count;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,7 +136,7 @@ export class CoreRatingAggregateComponent implements OnChanges, OnDestroy {
|
||||||
* Component being destroyed.
|
* Component being destroyed.
|
||||||
*/
|
*/
|
||||||
ngOnDestroy(): void {
|
ngOnDestroy(): void {
|
||||||
this.aggregateObserver.off();
|
this.aggregateObserver?.off();
|
||||||
this.updateSiteObserver.off();
|
this.updateSiteObserver.off();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,8 @@ export class CoreRatingProvider {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await CoreRatingOffline.deleteRating(component, ratingArea, contextLevel, instanceId, itemId, siteId);
|
await CoreRatingOffline.deleteRating(component, ratingArea, contextLevel, instanceId, itemId, siteId);
|
||||||
this.addRatingOnline(
|
|
||||||
|
const response = await this.addRatingOnline(
|
||||||
component,
|
component,
|
||||||
ratingArea,
|
ratingArea,
|
||||||
contextLevel,
|
contextLevel,
|
||||||
|
@ -134,6 +135,8 @@ export class CoreRatingProvider {
|
||||||
aggregateMethod,
|
aggregateMethod,
|
||||||
siteId,
|
siteId,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return response;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (CoreUtils.isWebServiceError(error)) {
|
if (CoreUtils.isWebServiceError(error)) {
|
||||||
// The WebService has thrown an error or offline not supported, reject.
|
// The WebService has thrown an error or offline not supported, reject.
|
||||||
|
|
Loading…
Reference in New Issue