GT2/GT2-iOS/node_modules/react-native-branch/ios/BranchUniversalObject+RNBra...

90 lines
3.6 KiB
Objective-C

//
// BranchUniversalObject+RNBranch.m
// RNBranch
//
// Created by Jimmy Dee on 1/26/17.
// Copyright © 2017 Branch Metrics. All rights reserved.
//
#import <React/RCTLog.h>
#import "BranchUniversalObject+RNBranch.h"
#import "NSObject+RNBranch.h"
#import "RNBranchProperty.h"
@implementation BranchUniversalObject(RNBranch)
+ (NSDictionary<NSString *,RNBranchProperty *> *)supportedProperties
{
static NSDictionary<NSString *, RNBranchProperty *> *_universalObjectProperties;
static dispatch_once_t once = 0;
dispatch_once(&once, ^{
_universalObjectProperties =
@{
@"automaticallyListOnSpotlight": [RNBranchProperty propertyWithSetterSelector:@selector(setAutomaticallyListOnSpotlightWithNumber:) type:NSNumber.class],
@"canonicalUrl": [RNBranchProperty propertyWithSetterSelector:@selector(setCanonicalUrl:) type:NSString.class],
@"contentDescription": [RNBranchProperty propertyWithSetterSelector:@selector(setContentDescription:) type:NSString.class],
@"contentImageUrl": [RNBranchProperty propertyWithSetterSelector:@selector(setImageUrl:) type:NSString.class],
@"contentIndexingMode": [RNBranchProperty propertyWithSetterSelector:@selector(setContentIndexingMode:) type:NSString.class],
@"currency": [RNBranchProperty propertyWithSetterSelector:@selector(setCurrency:) type:NSString.class],
@"expirationDate": [RNBranchProperty propertyWithSetterSelector:@selector(setExpirationDateWithString:) type:NSString.class],
@"keywords": [RNBranchProperty propertyWithSetterSelector:@selector(setKeywords:) type:NSArray.class],
@"metadata": [RNBranchProperty propertyWithSetterSelector:@selector(setMetadata:) type:NSDictionary.class],
@"price": [RNBranchProperty propertyWithSetterSelector:@selector(setPriceWithNumber:) type:NSNumber.class],
@"title": [RNBranchProperty propertyWithSetterSelector:@selector(setTitle:) type:NSString.class],
@"type": [RNBranchProperty propertyWithSetterSelector:@selector(setType:) type:NSString.class]
};
});
return _universalObjectProperties;
}
- (instancetype)initWithMap:(NSDictionary *)map
{
NSString *canonicalIdentifier = map[@"canonicalIdentifier"];
NSMutableDictionary *mutableMap = map.mutableCopy;
[mutableMap removeObjectForKey:@"canonicalIdentifier"];
self = [self initWithCanonicalIdentifier:canonicalIdentifier];
if (self) {
[self setSupportedPropertiesWithMap:mutableMap];
}
return self;
}
- (void)setContentIndexingMode:(NSString *)contentIndexingMode
{
if ([contentIndexingMode isEqualToString:@"private"]) {
self.contentIndexMode = ContentIndexModePrivate;
}
else if ([contentIndexingMode isEqualToString:@"public"]) {
self.contentIndexMode = ContentIndexModePublic;
}
else {
RCTLogWarn(@"Invalid value \"%@\" for \"contentIndexingMode\". Supported values are \"public\" and \"private\".", contentIndexingMode);
}
}
- (void)setPriceWithNumber:(NSNumber *)price
{
self.price = price.floatValue;
}
- (void)setAutomaticallyListOnSpotlightWithNumber:(NSNumber *)flag
{
self.automaticallyListOnSpotlight = flag.boolValue;
}
- (void)setExpirationDateWithString:(NSString *)expirationDate
{
struct tm expiration;
if (!strptime(expirationDate.UTF8String, "%Y-%m-%dT%H:%M:%S", &expiration)) {
RCTLogWarn(@"Invalid expiration date format. Valid format is YYYY-mm-ddTHH:MM:SS, e.g. 2017-02-01T00:00:00. All times UTC.");
return;
}
self.expirationDate = [NSDate dateWithTimeIntervalSince1970:timegm(&expiration)];
}
@end