MOBILE-3507 notifications: Support view rich text when clicked
This commit is contained in:
		
							parent
							
								
									5d3e75e220
								
							
						
					
					
						commit
						06ce5e765c
					
				| @ -14,6 +14,7 @@ | ||||
| 
 | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { CoreEventsProvider } from '@providers/events'; | ||||
| import { CoreTextUtils } from '@providers/utils/text'; | ||||
| import { CoreUtilsProvider } from '@providers/utils/utils'; | ||||
| import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; | ||||
| import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; | ||||
| @ -60,38 +61,35 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications | ||||
|      * @param notification The notification to check. | ||||
|      * @return Promise resolved when done. | ||||
|      */ | ||||
|     handleClick(notification: any): Promise<any> { | ||||
|         let promise; | ||||
|     async handleClick(notification: any): Promise<void> { | ||||
| 
 | ||||
|         if (notification.customdata.extendedtext) { | ||||
|             // Display the text in a modal.
 | ||||
|             return CoreTextUtils.instance.viewText(notification.title, notification.customdata.extendedtext, { | ||||
|                 displayCopyButton: true, | ||||
|                 modalOptions: { cssClass: 'core-modal-fullscreen' }, | ||||
|             }); | ||||
|         } | ||||
| 
 | ||||
|         // Try to handle the appurl first.
 | ||||
|         if (notification.customdata && notification.customdata.appurl) { | ||||
|             promise = this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true); | ||||
|         } else { | ||||
|             promise = Promise.resolve(false); | ||||
|             if (this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true)) { | ||||
|                 // Link treated, stop.
 | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return promise.then((treated) => { | ||||
| 
 | ||||
|             if (!treated) { | ||||
|                 // No link or cannot be handled by the app. Try to handle the contexturl now.
 | ||||
|                 if (notification.contexturl) { | ||||
|                     return this.linkHelper.handleLink(notification.contexturl); | ||||
|                 } else { | ||||
|                     return false; | ||||
|                 } | ||||
|         // No appurl or cannot be handled by the app. Try to handle the contexturl now.
 | ||||
|         if (notification.contexturl) { | ||||
|             if (this.linkHelper.handleLink(notification.contexturl)) { | ||||
|                 // Link treated, stop.
 | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|             return true; | ||||
|         }).then((treated) => { | ||||
|         // No contexturl or cannot be handled by the app. Open the notifications page.
 | ||||
|         await this.utils.ignoreErrors(this.notificationsProvider.invalidateNotificationsList(notification.site)); | ||||
| 
 | ||||
|             if (!treated) { | ||||
|                 // No link or cannot be handled by the app. Open the notifications page.
 | ||||
|                 return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => { | ||||
|                     // Ignore errors.
 | ||||
|                 }).then(() => { | ||||
|                     return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); | ||||
|                 }); | ||||
|             } | ||||
|         }); | ||||
|         await this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -14,7 +14,7 @@ | ||||
| 
 | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; | ||||
| import { ModalController } from 'ionic-angular'; | ||||
| import { ModalController, ModalOptions } from 'ionic-angular'; | ||||
| import { TranslateService } from '@ngx-translate/core'; | ||||
| import { CoreLangProvider } from '../lang'; | ||||
| import { makeSingleton } from '@singletons/core.singletons'; | ||||
| @ -1163,7 +1163,7 @@ export class CoreTextUtilsProvider { | ||||
| 
 | ||||
|             Object.assign(params, options); | ||||
| 
 | ||||
|             const modal = this.modalCtrl.create('CoreViewerTextPage', params); | ||||
|             const modal = this.modalCtrl.create('CoreViewerTextPage', params, options.modalOptions); | ||||
|             modal.present(); | ||||
|         } | ||||
|     } | ||||
| @ -1181,6 +1181,7 @@ export type CoreTextUtilsViewTextOptions = { | ||||
|     instanceId?: number; // The instance ID related to the context.
 | ||||
|     courseId?: number; // Course ID the text belongs to. It can be used to improve performance with filters.
 | ||||
|     displayCopyButton?: boolean; // Whether to display a button to copy the text.
 | ||||
|     modalOptions?: ModalOptions; // Modal options.
 | ||||
| }; | ||||
| 
 | ||||
| export class CoreTextUtils extends makeSingleton(CoreTextUtilsProvider) {} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user