1// Copyright 2018-present 650 Industries. All rights reserved. 2 3#import "EXScopedNotificationSchedulerModule.h" 4#import "EXScopedNotificationsUtils.h" 5#import "EXScopedNotificationSerializer.h" 6#import "EXScopedNotificationsUtils.h" 7 8@interface EXScopedNotificationSchedulerModule () 9 10@property (nonatomic, strong) NSString *experienceId; 11 12@end 13 14@implementation EXScopedNotificationSchedulerModule 15 16- (instancetype)initWithExperienceId:(NSString *)experienceId 17{ 18 if (self = [super init]) { 19 _experienceId = experienceId; 20 } 21 22 return self; 23} 24 25- (UNNotificationRequest *)buildNotificationRequestWithIdentifier:(NSString *)identifier 26 content:(NSDictionary *)contentInput 27 trigger:(NSDictionary *)triggerInput 28{ 29 NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier 30 forExperience:_experienceId]; 31 return [super buildNotificationRequestWithIdentifier:scopedIdentifier content:contentInput trigger:triggerInput]; 32} 33 34- (NSArray * _Nonnull)serializeNotificationRequests:(NSArray<UNNotificationRequest *> * _Nonnull) requests; 35{ 36 NSMutableArray *serializedRequests = [NSMutableArray new]; 37 for (UNNotificationRequest *request in requests) { 38 if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:_experienceId]) { 39 [serializedRequests addObject:[EXScopedNotificationSerializer serializedNotificationRequest:request]]; 40 } 41 } 42 return serializedRequests; 43} 44 45 46- (void)cancelNotification:(NSString *)identifier resolve:(UMPromiseResolveBlock)resolve rejecting:(UMPromiseRejectBlock)reject 47{ 48 NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier 49 forExperience:_experienceId]; 50 [super cancelNotification:scopedIdentifier resolve:resolve rejecting:reject]; 51} 52 53- (void)cancelAllNotificationsWithResolver:(UMPromiseResolveBlock)resolve rejecting:(UMPromiseRejectBlock)reject 54{ 55 __block NSString *experienceId = _experienceId; 56 [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray<UNNotificationRequest *> * _Nonnull requests) { 57 NSMutableArray<NSString *> *toRemove = [NSMutableArray new]; 58 for (UNNotificationRequest *request in requests) { 59 if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:experienceId]) { 60 [toRemove addObject:request.identifier]; 61 } 62 } 63 [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:toRemove]; 64 resolve(nil); 65 }]; 66} 67 68@end 69