Skip to content

Commit

Permalink
fix: logic to merge the externalId in identify call
Browse files Browse the repository at this point in the history
  • Loading branch information
1abhishekpandey committed Mar 8, 2024
1 parent fd8bf6b commit 9e22dbb
Showing 1 changed file with 21 additions and 18 deletions.
39 changes: 21 additions & 18 deletions Sources/Classes/RSContext.m
Original file line number Diff line number Diff line change
Expand Up @@ -184,31 +184,34 @@ - (void)putAdvertisementId:(NSString *_Nonnull)idfa {
});
}

- (void)updateExternalIds:(NSMutableArray *)externalIds {
- (void)updateExternalIds:(NSMutableArray *)newExternalIds {
dispatch_sync(queue, ^{
if(self->_externalIds == nil)
{
if(self->_externalIds == nil){
self->_externalIds = [[NSMutableArray alloc] init];
}

NSMutableArray *newExternalIds = [externalIds mutableCopy];
if (self->_externalIds.count > 0) {
NSMutableArray *repeatingExternalIds = [[NSMutableArray alloc] init];
for (NSMutableDictionary *newExternalId in newExternalIds) {
for (NSMutableDictionary *externalId in self->_externalIds) {
if ([externalId[@"type"] isEqualToString:newExternalId[@"type"]]){
externalId[@"id"] = newExternalId[@"id"];
[repeatingExternalIds addObject:newExternalId];
break;
}
}
}
[newExternalIds removeObjectsInArray:repeatingExternalIds];
NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSObject *> *> *mergedValues = [NSMutableDictionary dictionary];

for (NSMutableDictionary<NSString *, NSObject *> *externalId in self.externalIds) {
NSString *type = [NSString stringWithFormat:@"%@", externalId[@"type"]];
mergedValues[type] = [externalId mutableCopy];
}

if ([newExternalIds count]) {
[self->_externalIds addObjectsFromArray: newExternalIds];
// Merge new externalIds into the existing merged values
for (NSMutableDictionary<NSString *, NSObject *> *newExternalId in newExternalIds) {
NSString *type = [NSString stringWithFormat:@"%@", newExternalId[@"type"]];
NSMutableDictionary<NSString *, NSObject *> *existingMergedValue = mergedValues[type];

if (existingMergedValue) {
// Merge values for the same "type"
[existingMergedValue addEntriesFromDictionary:newExternalId];
} else {
// No existing merged value for this "type," add a copy of the newExternalId
mergedValues[type] = [newExternalId mutableCopy];
}
}

self.externalIds = [[mergedValues allValues] mutableCopy];
});
}

Expand Down

0 comments on commit 9e22dbb

Please sign in to comment.