10f9680e4SŁukasz Kosmaty// Copyright 2018-present 650 Industries. All rights reserved. 20f9680e4SŁukasz Kosmaty 30f9680e4SŁukasz Kosmaty#import "EXScopedNotificationSchedulerModule.h" 40f9680e4SŁukasz Kosmaty#import "EXScopedNotificationsUtils.h" 5f6562485SCharlie Cruzan#import "EXScopedNotificationSerializer.h" 6d044143fSCharlie Cruzan#import "EXScopedNotificationsUtils.h" 70f9680e4SŁukasz Kosmaty 80f9680e4SŁukasz Kosmaty@interface EXScopedNotificationSchedulerModule () 90f9680e4SŁukasz Kosmaty 10167fd314SWill Schurman@property (nonatomic, strong) NSString *scopeKey; 110f9680e4SŁukasz Kosmaty 120f9680e4SŁukasz Kosmaty@end 130f9680e4SŁukasz Kosmaty 140f9680e4SŁukasz Kosmaty@implementation EXScopedNotificationSchedulerModule 150f9680e4SŁukasz Kosmaty 16167fd314SWill Schurman- (instancetype)initWithScopeKey:(NSString *)scopeKey 170f9680e4SŁukasz Kosmaty{ 180f9680e4SŁukasz Kosmaty if (self = [super init]) { 19167fd314SWill Schurman _scopeKey = scopeKey; 200f9680e4SŁukasz Kosmaty } 210f9680e4SŁukasz Kosmaty 220f9680e4SŁukasz Kosmaty return self; 230f9680e4SŁukasz Kosmaty} 240f9680e4SŁukasz Kosmaty 25d044143fSCharlie Cruzan- (UNNotificationRequest *)buildNotificationRequestWithIdentifier:(NSString *)identifier 26d044143fSCharlie Cruzan content:(NSDictionary *)contentInput 27d044143fSCharlie Cruzan trigger:(NSDictionary *)triggerInput 28d044143fSCharlie Cruzan{ 29d044143fSCharlie Cruzan NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier 30167fd314SWill Schurman forExperience:_scopeKey]; 31d044143fSCharlie Cruzan return [super buildNotificationRequestWithIdentifier:scopedIdentifier content:contentInput trigger:triggerInput]; 32d044143fSCharlie Cruzan} 33d044143fSCharlie Cruzan 340f9680e4SŁukasz Kosmaty- (NSArray * _Nonnull)serializeNotificationRequests:(NSArray<UNNotificationRequest *> * _Nonnull) requests; 350f9680e4SŁukasz Kosmaty{ 360f9680e4SŁukasz Kosmaty NSMutableArray *serializedRequests = [NSMutableArray new]; 370f9680e4SŁukasz Kosmaty for (UNNotificationRequest *request in requests) { 38167fd314SWill Schurman if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:_scopeKey]) { 39f6562485SCharlie Cruzan [serializedRequests addObject:[EXScopedNotificationSerializer serializedNotificationRequest:request]]; 400f9680e4SŁukasz Kosmaty } 410f9680e4SŁukasz Kosmaty } 420f9680e4SŁukasz Kosmaty return serializedRequests; 430f9680e4SŁukasz Kosmaty} 440f9680e4SŁukasz Kosmaty 45d044143fSCharlie Cruzan 46*efd75decSTomasz Sapeta- (void)cancelNotification:(NSString *)identifier resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject 470f9680e4SŁukasz Kosmaty{ 48d044143fSCharlie Cruzan NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier 49167fd314SWill Schurman forExperience:_scopeKey]; 50d044143fSCharlie Cruzan [super cancelNotification:scopedIdentifier resolve:resolve rejecting:reject]; 510f9680e4SŁukasz Kosmaty} 520f9680e4SŁukasz Kosmaty 53*efd75decSTomasz Sapeta- (void)cancelAllNotificationsWithResolver:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject 540f9680e4SŁukasz Kosmaty{ 55167fd314SWill Schurman __block NSString *scopeKey = _scopeKey; 560f9680e4SŁukasz Kosmaty [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray<UNNotificationRequest *> * _Nonnull requests) { 570f9680e4SŁukasz Kosmaty NSMutableArray<NSString *> *toRemove = [NSMutableArray new]; 580f9680e4SŁukasz Kosmaty for (UNNotificationRequest *request in requests) { 59167fd314SWill Schurman if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:scopeKey]) { 600f9680e4SŁukasz Kosmaty [toRemove addObject:request.identifier]; 610f9680e4SŁukasz Kosmaty } 620f9680e4SŁukasz Kosmaty } 630f9680e4SŁukasz Kosmaty [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:toRemove]; 640f9680e4SŁukasz Kosmaty resolve(nil); 650f9680e4SŁukasz Kosmaty }]; 660f9680e4SŁukasz Kosmaty} 670f9680e4SŁukasz Kosmaty 680f9680e4SŁukasz Kosmaty@end 69