@@ -16,7 +16,7 @@ import { Component, OnDestroy, OnInit } from '@angular/core';
1616import { CoreTimeUtils } from '@services/utils/time' ;
1717import { CoreDomUtils } from '@services/utils/dom' ;
1818import { CoreSites } from '@services/sites' ;
19- import { CoreUser , CoreUserProfile } from '@features/user/services/user' ;
19+ import { CoreUser } from '@features/user/services/user' ;
2020import { AddonBadges , AddonBadgesUserBadge } from '../../services/badges' ;
2121import { CoreUtils } from '@services/utils/utils' ;
2222import { CoreCourses , CoreEnrolledCourseData } from '@features/courses/services/courses' ;
@@ -27,13 +27,18 @@ import { AddonBadgesUserBadgesSource } from '@addons/badges/classes/user-badges-
2727import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/routed-items-manager-sources-tracker' ;
2828import { CoreAnalytics , CoreAnalyticsEventType } from '@services/analytics' ;
2929import { CoreTime } from '@singletons/time' ;
30+ import { CoreSharedModule } from '@/core/shared.module' ;
3031
3132/**
3233 * Page that displays the list of calendar events.
3334 */
3435@Component ( {
3536 selector : 'page-addon-badges-issued-badge' ,
3637 templateUrl : 'issued-badge.html' ,
38+ standalone : true ,
39+ imports : [
40+ CoreSharedModule ,
41+ ] ,
3742} )
3843export class AddonBadgesIssuedBadgePage implements OnInit , OnDestroy {
3944
@@ -42,10 +47,9 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy {
4247 protected logView : ( badge : AddonBadgesUserBadge ) => void ;
4348
4449 courseId = 0 ;
45- user ?: CoreUserProfile ;
4650 course ?: CoreEnrolledCourseData ;
4751 badge ?: AddonBadgesUserBadge ;
48- badges : CoreSwipeNavigationItemsManager ;
52+ badges ? : CoreSwipeNavigationItemsManager ;
4953 badgeLoaded = false ;
5054 currentTime = 0 ;
5155
@@ -54,12 +58,15 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy {
5458 this . userId = CoreNavigator . getRouteNumberParam ( 'userId' ) || CoreSites . getRequiredCurrentSite ( ) . getUserId ( ) ;
5559 this . badgeHash = CoreNavigator . getRouteParam ( 'badgeHash' ) || '' ;
5660
57- const source = CoreRoutedItemsManagerSourcesTracker . getOrCreateSource (
58- AddonBadgesUserBadgesSource ,
59- [ this . courseId , this . userId ] ,
60- ) ;
61+ const routeData = CoreNavigator . getRouteData ( this . route ) ;
62+ if ( routeData . usesSwipeNavigation ) {
63+ const source = CoreRoutedItemsManagerSourcesTracker . getOrCreateSource (
64+ AddonBadgesUserBadgesSource ,
65+ [ this . courseId , this . userId ] ,
66+ ) ;
6167
62- this . badges = new CoreSwipeNavigationItemsManager ( source ) ;
68+ this . badges = new CoreSwipeNavigationItemsManager ( source ) ;
69+ }
6370
6471 this . logView = CoreTime . once ( ( badge ) => {
6572 CoreAnalytics . logEvent ( {
@@ -80,14 +87,14 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy {
8087 this . badgeLoaded = true ;
8188 } ) ;
8289
83- this . badges . start ( ) ;
90+ this . badges ? .start ( ) ;
8491 }
8592
8693 /**
8794 * @inheritdoc
8895 */
8996 ngOnDestroy ( ) : void {
90- this . badges . destroy ( ) ;
97+ this . badges ? .destroy ( ) ;
9198 }
9299
93100 /**
@@ -96,16 +103,29 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy {
96103 * @returns Promise resolved when done.
97104 */
98105 async fetchIssuedBadge ( ) : Promise < void > {
106+ const site = CoreSites . getRequiredCurrentSite ( ) ;
99107 this . currentTime = CoreTimeUtils . timestamp ( ) ;
100108
101- this . user = await CoreUser . getProfile ( this . userId , this . courseId , true ) ;
102-
103109 try {
110+ // Search the badge in the user badges.
104111 const badges = await AddonBadges . getUserBadges ( this . courseId , this . userId ) ;
105- const badge = badges . find ( ( badge ) => this . badgeHash == badge . uniquehash ) ;
112+ let badge = badges . find ( ( badge ) => this . badgeHash == badge . uniquehash ) ;
106113
107- if ( ! badge ) {
108- return ;
114+ if ( badge ) {
115+ if ( ! site . isVersionGreaterEqualThan ( '4.5' ) ) {
116+ // Web service does not return the name of the recipient.
117+ const user = await CoreUser . getProfile ( this . userId , this . courseId , true ) ;
118+ badge . recipientfullname = user . fullname ;
119+ }
120+ } else {
121+ // The badge is awarded to another user, try to fetch the badge by hash.
122+ if ( site . isVersionGreaterEqualThan ( '4.5' ) ) {
123+ badge = await AddonBadges . getUserBadgeByHash ( this . badgeHash ) ;
124+ }
125+ if ( ! badge ) {
126+ // Should never happen. The app opens the badge in the browser if it can't be fetched.
127+ throw new Error ( 'Error getting badge data.' ) ;
128+ }
109129 }
110130
111131 this . badge = badge ;
@@ -130,9 +150,10 @@ export class AddonBadgesIssuedBadgePage implements OnInit, OnDestroy {
130150 * @param refresher Refresher.
131151 */
132152 async refreshBadges ( refresher ?: HTMLIonRefresherElement ) : Promise < void > {
133- await CoreUtils . ignoreErrors ( Promise . all ( [
153+ await CoreUtils . allPromisesIgnoringErrors ( [
134154 AddonBadges . invalidateUserBadges ( this . courseId , this . userId ) ,
135- ] ) ) ;
155+ AddonBadges . invalidateUserBadgeByHash ( this . badgeHash ) ,
156+ ] ) ;
136157
137158 await CoreUtils . ignoreErrors ( Promise . all ( [
138159 this . fetchIssuedBadge ( ) ,
0 commit comments