// Copyright 2018-present 650 Industries. All rights reserved. #import "EXScopedNotificationSchedulerModule.h" #import "EXScopedNotificationsUtils.h" #import "EXScopedNotificationSerializer.h" #import "EXScopedNotificationsUtils.h" @interface EXScopedNotificationSchedulerModule () @property (nonatomic, strong) NSString *scopeKey; @end @implementation EXScopedNotificationSchedulerModule - (instancetype)initWithScopeKey:(NSString *)scopeKey { if (self = [super init]) { _scopeKey = scopeKey; } return self; } - (UNNotificationRequest *)buildNotificationRequestWithIdentifier:(NSString *)identifier content:(NSDictionary *)contentInput trigger:(NSDictionary *)triggerInput { NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier forExperience:_scopeKey]; return [super buildNotificationRequestWithIdentifier:scopedIdentifier content:contentInput trigger:triggerInput]; } - (NSArray * _Nonnull)serializeNotificationRequests:(NSArray * _Nonnull) requests; { NSMutableArray *serializedRequests = [NSMutableArray new]; for (UNNotificationRequest *request in requests) { if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:_scopeKey]) { [serializedRequests addObject:[EXScopedNotificationSerializer serializedNotificationRequest:request]]; } } return serializedRequests; } - (void)cancelNotification:(NSString *)identifier resolve:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject { NSString *scopedIdentifier = [EXScopedNotificationsUtils scopedIdentifierFromId:identifier forExperience:_scopeKey]; [super cancelNotification:scopedIdentifier resolve:resolve rejecting:reject]; } - (void)cancelAllNotificationsWithResolver:(EXPromiseResolveBlock)resolve rejecting:(EXPromiseRejectBlock)reject { __block NSString *scopeKey = _scopeKey; [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray * _Nonnull requests) { NSMutableArray *toRemove = [NSMutableArray new]; for (UNNotificationRequest *request in requests) { if ([EXScopedNotificationsUtils isId:request.identifier scopedByExperience:scopeKey]) { [toRemove addObject:request.identifier]; } } [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:toRemove]; resolve(nil); }]; } @end