Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
use static and dispatch_once
  • Loading branch information
DT-1236 committed Jul 25, 2019
commit b40b975f1fb459cf4d05faae1390f797d7540749
85 changes: 46 additions & 39 deletions ios/RCTContacts/RCTContacts.m
Original file line number Diff line number Diff line change
Expand Up @@ -75,51 +75,58 @@ -(void) getContactsFromAddressBook:(CNContactStore *)store
matchingString:(NSString *)searchString
callback:(RCTResponseSenderBlock)callback
{
NSMutableArray<CNContact*> *contacts = [[NSMutableArray alloc] init];
NSError *contactError = nil;

NSArray *nameKeys = @[
CNContactFamilyNameKey,
CNContactGivenNameKey,
CNContactMiddleNameKey,
CNContactNamePrefixKey,
CNContactNameSuffixKey,
CNContactPreviousFamilyNameKey,
CNContactNicknameKey,
CNContactPhoneticGivenNameKey,
CNContactPhoneticMiddleNameKey,
CNContactPhoneticFamilyNameKey
];

NSArray *keys = [nameKeys arrayByAddingObjectsFromArray:@[
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactPostalAddressesKey,
CNContactOrganizationNameKey,
CNContactJobTitleKey,
CNContactImageDataAvailableKey,
CNContactThumbnailImageDataKey,
CNContactNoteKey,
CNContactUrlAddressesKey,
CNContactBirthdayKey
]];

CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];
[fetchRequest setUnifyResults:YES];

NSError *regExError = nil;
NSRegularExpression *wordRegex = [NSRegularExpression regularExpressionWithPattern:@"\\w+"
options:0
error:&regExError];
NSRegularExpression *nonNumberRegex = [NSRegularExpression regularExpressionWithPattern:@"\\D"
options:0
error:&regExError];
static NSArray *nameKeys;
static NSArray *allKeys;
static CNContactFetchRequest *fetchRequest;
static NSRegularExpression *wordRegex;
static NSRegularExpression *nonNumberRegex;
static dispatch_once_t runOnce;
dispatch_once(&runOnce, ^{
nameKeys = @[
CNContactFamilyNameKey,
CNContactGivenNameKey,
CNContactMiddleNameKey,
CNContactNamePrefixKey,
CNContactNameSuffixKey,
CNContactPreviousFamilyNameKey,
CNContactNicknameKey,
CNContactPhoneticGivenNameKey,
CNContactPhoneticMiddleNameKey,
CNContactPhoneticFamilyNameKey
];

allKeys = [nameKeys arrayByAddingObjectsFromArray:@[
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactPostalAddressesKey,
CNContactOrganizationNameKey,
CNContactJobTitleKey,
CNContactImageDataAvailableKey,
CNContactThumbnailImageDataKey,
CNContactNoteKey,
CNContactUrlAddressesKey,
CNContactBirthdayKey
]];

fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:allKeys];
[fetchRequest setUnifyResults:YES];

NSError *regexError = nil;
wordRegex = [NSRegularExpression regularExpressionWithPattern:@"\\w+"
options:0
error:&regexError];
nonNumberRegex = [NSRegularExpression regularExpressionWithPattern:@"\\D"
options:0
error:&regexError];
});

NSMutableArray<CNContact*> *contacts = [[NSMutableArray alloc] init];
NSMutableArray<NSString*> *searchTerms = [[NSMutableArray alloc]init];
for (NSTextCheckingResult *match in [wordRegex matchesInString:searchString options:0 range:NSMakeRange(0, [searchString length])]) {
[searchTerms addObject:[searchString substringWithRange:[match range]]];
};

NSError *contactError = nil;
[store enumerateContactsWithFetchRequest:fetchRequest
error:&contactError
usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop) {
Expand Down