UNPKG

4.62 kBPlain TextView Raw
1//
2// BranchUniversalObject+RNBranch.m
3// RNBranch
4//
5// Created by Jimmy Dee on 1/26/17.
6// Copyright © 2017 Branch Metrics. All rights reserved.
7//
8
9#import <React/RCTLog.h>
10
11#import "BranchUniversalObject+RNBranch.h"
12#import "BranchContentMetadata+RNBranch.h"
13#import "NSObject+RNBranch.h"
14#import "RNBranchProperty.h"
15
16@implementation BranchUniversalObject(RNBranch)
17
18+ (NSDictionary<NSString *,RNBranchProperty *> *)supportedProperties
19{
20 static NSDictionary<NSString *, RNBranchProperty *> *_universalObjectProperties;
21 static dispatch_once_t once = 0;
22 dispatch_once(&once, ^{
23 _universalObjectProperties =
24 @{
25 @"automaticallyListOnSpotlight": [RNBranchProperty propertyWithSetterSelector:@selector(setAutomaticallyListOnSpotlightWithNumber:) type:NSNumber.class],
26 @"canonicalUrl": [RNBranchProperty propertyWithSetterSelector:@selector(setCanonicalUrl:) type:NSString.class],
27 @"contentDescription": [RNBranchProperty propertyWithSetterSelector:@selector(setContentDescription:) type:NSString.class],
28 @"contentImageUrl": [RNBranchProperty propertyWithSetterSelector:@selector(setImageUrl:) type:NSString.class],
29 @"contentIndexingMode": [RNBranchProperty propertyWithSetterSelector:@selector(setContentIndexingMode:) type:NSString.class],
30 @"contentMetadata": [RNBranchProperty propertyWithSetterSelector:@selector(setContentMetadataWithMap:) type:NSDictionary.class],
31 @"currency": [RNBranchProperty propertyWithSetterSelector:@selector(setCurrency:) type:NSString.class],
32 @"expirationDate": [RNBranchProperty propertyWithSetterSelector:@selector(setExpirationDateWithString:) type:NSString.class],
33 @"keywords": [RNBranchProperty propertyWithSetterSelector:@selector(setKeywords:) type:NSArray.class],
34 @"locallyIndex": [RNBranchProperty propertyWithSetterSelector:@selector(setLocallyIndexWithNumber:) type:NSNumber.class],
35 @"metadata": [RNBranchProperty propertyWithSetterSelector:@selector(setMetadata:) type:NSDictionary.class],
36 @"price": [RNBranchProperty propertyWithSetterSelector:@selector(setPriceWithNumber:) type:NSNumber.class],
37 @"publiclyIndex": [RNBranchProperty propertyWithSetterSelector:@selector(setPubliclyIndexWithNumber:) type:NSNumber.class],
38 @"title": [RNBranchProperty propertyWithSetterSelector:@selector(setTitle:) type:NSString.class],
39 @"type": [RNBranchProperty propertyWithSetterSelector:@selector(setType:) type:NSString.class]
40 };
41 });
42
43 return _universalObjectProperties;
44}
45
46- (instancetype)initWithMap:(NSDictionary *)map
47{
48 NSString *canonicalIdentifier = map[@"canonicalIdentifier"];
49 NSMutableDictionary *mutableMap = map.mutableCopy;
50 [mutableMap removeObjectForKey:@"canonicalIdentifier"];
51
52 self = [self initWithCanonicalIdentifier:canonicalIdentifier];
53 if (self) {
54 [self setSupportedPropertiesWithMap:mutableMap];
55 }
56 return self;
57}
58
59#pragma clang diagnostic push
60#pragma clang diagnostic ignored "-Wdeprecated-declarations"
61- (void)setContentIndexingMode:(NSString *)contentIndexingMode
62{
63 if ([contentIndexingMode isEqualToString:@"private"]) {
64 self.contentIndexMode = BranchContentIndexModePrivate;
65 }
66 else if ([contentIndexingMode isEqualToString:@"public"]) {
67 self.contentIndexMode = BranchContentIndexModePublic;
68 }
69 else {
70 RCTLogWarn(@"Invalid value \"%@\" for \"contentIndexingMode\". Supported values are \"public\" and \"private\".", contentIndexingMode);
71 }
72}
73
74- (void)setPriceWithNumber:(NSNumber *)price
75{
76 self.price = price.floatValue;
77}
78
79- (void)setAutomaticallyListOnSpotlightWithNumber:(NSNumber *)flag
80{
81 self.automaticallyListOnSpotlight = flag.boolValue;
82}
83
84#pragma clang diagnostic pop
85
86- (void)setExpirationDateWithString:(NSString *)expirationDate
87{
88 struct tm expiration;
89 if (!strptime(expirationDate.UTF8String, "%Y-%m-%dT%H:%M:%S", &expiration)) {
90 RCTLogWarn(@"Invalid expiration date format. Valid format is YYYY-mm-ddTHH:MM:SS, e.g. 2017-02-01T00:00:00. All times UTC.");
91 return;
92 }
93
94 self.expirationDate = [NSDate dateWithTimeIntervalSince1970:timegm(&expiration)];
95}
96
97- (void)setLocallyIndexWithNumber:(NSNumber *)locallyIndex
98{
99 self.locallyIndex = locallyIndex.boolValue;
100}
101
102- (void)setPubliclyIndexWithNumber:(NSNumber *)publiclyIndex
103{
104 self.publiclyIndex = publiclyIndex.boolValue;
105}
106
107- (void)setContentMetadataWithMap:(NSDictionary *)map
108{
109 self.contentMetadata = [[BranchContentMetadata alloc] initWithMap:map];
110}
111
112@end