Fix browser notification permission request logic (#13543)
* Add notification permission handling code * Request notification permission when enabling any notification setting * Add badge to notification settings when permissions insufficient * Disable alerts by default, requesting permission and enable them on onboarding
This commit is contained in:
		
					parent
					
						
							
								5e1364c448
							
						
					
				
			
			
				commit
				
					
						f54ca3d08e
					
				
			
		
					 14 changed files with 215 additions and 15 deletions
				
			
		
							
								
								
									
										29
									
								
								app/javascript/mastodon/utils/notifications.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								app/javascript/mastodon/utils/notifications.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
// Handles browser quirks, based on
 | 
			
		||||
// https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API
 | 
			
		||||
 | 
			
		||||
const checkNotificationPromise = () => {
 | 
			
		||||
  try {
 | 
			
		||||
    Notification.requestPermission().then();
 | 
			
		||||
  } catch(e) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const handlePermission = (permission, callback) => {
 | 
			
		||||
  // Whatever the user answers, we make sure Chrome stores the information
 | 
			
		||||
  if(!('permission' in Notification)) {
 | 
			
		||||
    Notification.permission = permission;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  callback(Notification.permission);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const requestNotificationPermission = (callback) => {
 | 
			
		||||
  if (checkNotificationPromise()) {
 | 
			
		||||
    Notification.requestPermission().then((permission) => handlePermission(permission, callback));
 | 
			
		||||
  } else {
 | 
			
		||||
    Notification.requestPermission((permission) => handlePermission(permission, callback));
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue