Skip to content

Commit e082b1c

Browse files
committed
Add support for Global Fields in Contentstack SDK
1 parent 2940121 commit e082b1c

File tree

12 files changed

+1511
-3
lines changed

12 files changed

+1511
-3
lines changed

.talismanrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ fileignoreconfig:
2626
checksum: c439f6d268ae2ea0af023daeffdff2af5928d0610f90fa14c9e6e6ce7e4b3fad
2727
- filename: ContentstackSwift.xcodeproj/project.pbxproj
2828
checksum: dfabf06aeff3576c9347e52b3c494635477d81c7d121d8f1435d79f28829f4d1
29+
- filename: ContentstackSwift.xcodeproj/project.pbxproj
30+
checksum: 8937f832171f26061a209adcd808683f7bdfb739e7fc49aecd853d5055466251
2931
version: ""
3032

3133

ContentstackSwift.xcodeproj/project.pbxproj

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,24 @@
270270
67EE21E02DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
271271
67EE21E12DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
272272
67EE21E22DDB4013005AC119 /* CSURLSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */; };
273+
67EE222C2DE48695005AC119 /* GlobalField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE222B2DE4868F005AC119 /* GlobalField.swift */; };
274+
67EE222D2DE48695005AC119 /* GlobalField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE222B2DE4868F005AC119 /* GlobalField.swift */; };
275+
67EE222E2DE48695005AC119 /* GlobalField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE222B2DE4868F005AC119 /* GlobalField.swift */; };
276+
67EE222F2DE48695005AC119 /* GlobalField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE222B2DE4868F005AC119 /* GlobalField.swift */; };
277+
67EE22312DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */; };
278+
67EE22322DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */; };
279+
67EE22332DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */; };
280+
67EE22342DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */; };
281+
67EE22362DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */; };
282+
67EE22372DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */; };
283+
67EE22382DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */; };
284+
67EE22632DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
285+
67EE22642DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
286+
67EE22652DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
287+
67EE22662DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
288+
67EE22672DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
289+
67EE22682DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
290+
67EE22692DE719B6005AC119 /* GlobalField.json in Resources */ = {isa = PBXBuildFile; fileRef = 67EE22622DE719B6005AC119 /* GlobalField.json */; };
273291
/* End PBXBuildFile section */
274292

275293
/* Begin PBXContainerItemProxy section */
@@ -399,6 +417,10 @@
399417
47B4DC612C232A8200370CFC /* TaxonomyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaxonomyTest.swift; sourceTree = "<group>"; };
400418
47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Taxonomy.swift; sourceTree = "<group>"; };
401419
67EE21DE2DDB3FFE005AC119 /* CSURLSessionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CSURLSessionDelegate.swift; sourceTree = "<group>"; };
420+
67EE222B2DE4868F005AC119 /* GlobalField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalField.swift; sourceTree = "<group>"; };
421+
67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalFieldModel.swift; sourceTree = "<group>"; };
422+
67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalFieldAPITest.swift; sourceTree = "<group>"; };
423+
67EE22622DE719B6005AC119 /* GlobalField.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = GlobalField.json; sourceTree = "<group>"; };
402424
OBJ_17 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
403425
OBJ_18 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
404426
OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
@@ -483,6 +505,7 @@
483505
0FFA5D7E241F7060003B3AF5 /* SystemFields.swift */,
484506
0F4A245B24224D3100159C24 /* ContentstackResponse.swift */,
485507
0F1DCC7F243DCF2500EED404 /* EntryModel.swift */,
508+
67EE22302DE58B51005AC119 /* GlobalFieldModel.swift */,
486509
0F1DCC84243DD01900EED404 /* AssetModel.swift */,
487510
0F1DCC89243DD20E00EED404 /* ContentTypeModel.swift */,
488511
470253922C0C612A009BDF8B /* TaxonomyModel.swift */,
@@ -515,6 +538,7 @@
515538
isa = PBXGroup;
516539
children = (
517540
0F796C512449EA8700EA04D5 /* Entry.json */,
541+
67EE22622DE719B6005AC119 /* GlobalField.json */,
518542
0F50EA15244ED7F500E5D705 /* QueryOn.json */,
519543
0FFBB4462446F9A4000D2795 /* Asset.json */,
520544
0F244F9C244062B4003C3F26 /* ContentType.json */,
@@ -642,6 +666,7 @@
642666
0FFA5D9D241F8F9B003B3AF5 /* APITests */ = {
643667
isa = PBXGroup;
644668
children = (
669+
67EE22352DE5BAF2005AC119 /* GlobalFieldAPITest.swift */,
645670
0F50EA1C244ED88C00E5D705 /* StackCacheAPITest.swift */,
646671
470657532B5E785C00BBFF88 /* ContentTypeQueryAPITest.swift */,
647672
470657572B5E788400BBFF88 /* EntryAPITest.swift */,
@@ -724,6 +749,7 @@
724749
0F4A762B241BB0D200E3A024 /* Contentstack.swift */,
725750
0FFA5D56241F5085003B3AF5 /* ContentstackConfig.swift */,
726751
47C6EFC12C0B5B9400F0D5CF /* Taxonomy.swift */,
752+
67EE222B2DE4868F005AC119 /* GlobalField.swift */,
727753
);
728754
path = Sources;
729755
sourceTree = SOURCE_ROOT;
@@ -983,6 +1009,7 @@
9831009
isa = PBXResourcesBuildPhase;
9841010
buildActionMask = 2147483647;
9851011
files = (
1012+
67EE22662DE719B6005AC119 /* GlobalField.json in Resources */,
9861013
);
9871014
runOnlyForDeploymentPostprocessing = 0;
9881015
};
@@ -995,6 +1022,7 @@
9951022
0F359994257BE2EE00B3DB89 /* QueryOn.json in Resources */,
9961023
0F359991257BE29B00B3DB89 /* Asset.json in Resources */,
9971024
0F359992257BE2A700B3DB89 /* ContentType.json in Resources */,
1025+
67EE22692DE719B6005AC119 /* GlobalField.json in Resources */,
9981026
0F4C0A87243C6990006604B7 /* config.json in Resources */,
9991027
0F5794C2266A37120082815C /* Paragraph.Json in Resources */,
10001028
);
@@ -1004,6 +1032,7 @@
10041032
isa = PBXResourcesBuildPhase;
10051033
buildActionMask = 2147483647;
10061034
files = (
1035+
67EE22682DE719B6005AC119 /* GlobalField.json in Resources */,
10071036
);
10081037
runOnlyForDeploymentPostprocessing = 0;
10091038
};
@@ -1016,6 +1045,7 @@
10161045
0FFBB4482446F9A4000D2795 /* Asset.json in Resources */,
10171046
0F50EA17244ED7F500E5D705 /* QueryOn.json in Resources */,
10181047
0F796C532449EA8700EA04D5 /* Entry.json in Resources */,
1048+
67EE22652DE719B6005AC119 /* GlobalField.json in Resources */,
10191049
0F4C0A88243C6990006604B7 /* config.json in Resources */,
10201050
0F5794C3266A37120082815C /* Paragraph.Json in Resources */,
10211051
);
@@ -1025,6 +1055,7 @@
10251055
isa = PBXResourcesBuildPhase;
10261056
buildActionMask = 2147483647;
10271057
files = (
1058+
67EE22642DE719B6005AC119 /* GlobalField.json in Resources */,
10281059
);
10291060
runOnlyForDeploymentPostprocessing = 0;
10301061
};
@@ -1037,6 +1068,7 @@
10371068
0FFBB4492446F9A4000D2795 /* Asset.json in Resources */,
10381069
0F50EA18244ED7F500E5D705 /* QueryOn.json in Resources */,
10391070
0F796C542449EA8700EA04D5 /* Entry.json in Resources */,
1071+
67EE22672DE719B6005AC119 /* GlobalField.json in Resources */,
10401072
0F4C0A89243C6990006604B7 /* config.json in Resources */,
10411073
0F5794C4266A37120082815C /* Paragraph.Json in Resources */,
10421074
);
@@ -1046,6 +1078,7 @@
10461078
isa = PBXResourcesBuildPhase;
10471079
buildActionMask = 2147483647;
10481080
files = (
1081+
67EE22632DE719B6005AC119 /* GlobalField.json in Resources */,
10491082
);
10501083
runOnlyForDeploymentPostprocessing = 0;
10511084
};
@@ -1057,12 +1090,14 @@
10571090
buildActionMask = 2147483647;
10581091
files = (
10591092
0F7138D12424E98D00B314B0 /* ParameterEncoding.swift in Sources */,
1093+
67EE22342DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */,
10601094
0FFA5D98241F8EB2003B3AF5 /* Entry.swift in Sources */,
10611095
0F02466F243210E200F72181 /* ImageParameter.swift in Sources */,
10621096
0FFA5D63241F5575003B3AF5 /* CSDefinitions.swift in Sources */,
10631097
47C6EFC22C0B5B9400F0D5CF /* Taxonomy.swift in Sources */,
10641098
0FFA5D7A241F7033003B3AF5 /* ContentType.swift in Sources */,
10651099
0F0246662431F37300F72181 /* ImageTransform.swift in Sources */,
1100+
67EE222C2DE48695005AC119 /* GlobalField.swift in Sources */,
10661101
0F4FBCA42420B5F4007B8CAE /* Utils.swift in Sources */,
10671102
0F4C0A7C243C4579006604B7 /* Error.swift in Sources */,
10681103
0F4C0A81243C470F006604B7 /* ContentstackLogger.swift in Sources */,
@@ -1107,6 +1142,7 @@
11071142
0FFA5DBC241F9A6C003B3AF5 /* XCTestCase+Extension.swift in Sources */,
11081143
0F4FBCA02420B0E4007B8CAE /* DateTest.swift in Sources */,
11091144
0FFA5D4A241F4DED003B3AF5 /* ContentstackConfigTest.swift in Sources */,
1145+
67EE22382DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */,
11101146
47B4DC622C232A8200370CFC /* TaxonomyTest.swift in Sources */,
11111147
0F50EA1D244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
11121148
470657582B5E788400BBFF88 /* EntryAPITest.swift in Sources */,
@@ -1136,12 +1172,14 @@
11361172
buildActionMask = 2147483647;
11371173
files = (
11381174
0F7138D22424E98D00B314B0 /* ParameterEncoding.swift in Sources */,
1175+
67EE22332DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */,
11391176
0FFA5D99241F8EB2003B3AF5 /* Entry.swift in Sources */,
11401177
0F024670243210E200F72181 /* ImageParameter.swift in Sources */,
11411178
0FFA5D64241F5575003B3AF5 /* CSDefinitions.swift in Sources */,
11421179
47C6EFC32C0B5B9400F0D5CF /* Taxonomy.swift in Sources */,
11431180
0FFA5D7B241F7033003B3AF5 /* ContentType.swift in Sources */,
11441181
0F0246672431F37300F72181 /* ImageTransform.swift in Sources */,
1182+
67EE222F2DE48695005AC119 /* GlobalField.swift in Sources */,
11451183
0F4FBCA52420B5F4007B8CAE /* Utils.swift in Sources */,
11461184
0F4C0A7D243C4584006604B7 /* Error.swift in Sources */,
11471185
0F4C0A82243C470F006604B7 /* ContentstackLogger.swift in Sources */,
@@ -1186,6 +1224,7 @@
11861224
47AAE0912B60420E0098655A /* SyncAPITest.swift in Sources */,
11871225
0FFA5DBD241F9A6C003B3AF5 /* XCTestCase+Extension.swift in Sources */,
11881226
0F4FBCA12420B0E4007B8CAE /* DateTest.swift in Sources */,
1227+
67EE22362DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */,
11891228
47B4DC632C232A8200370CFC /* TaxonomyTest.swift in Sources */,
11901229
0FFA5D90241F8126003B3AF5 /* ContentstackConfigTest.swift in Sources */,
11911230
0F50EA1E244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
@@ -1215,12 +1254,14 @@
12151254
buildActionMask = 2147483647;
12161255
files = (
12171256
0F7138D32424E98D00B314B0 /* ParameterEncoding.swift in Sources */,
1257+
67EE22322DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */,
12181258
0FFA5D9A241F8EB2003B3AF5 /* Entry.swift in Sources */,
12191259
0F024671243210E200F72181 /* ImageParameter.swift in Sources */,
12201260
0FFA5D65241F5575003B3AF5 /* CSDefinitions.swift in Sources */,
12211261
47C6EFC42C0B5B9400F0D5CF /* Taxonomy.swift in Sources */,
12221262
0FFA5D7C241F7033003B3AF5 /* ContentType.swift in Sources */,
12231263
0F0246682431F37300F72181 /* ImageTransform.swift in Sources */,
1264+
67EE222D2DE48695005AC119 /* GlobalField.swift in Sources */,
12241265
0F4FBCA62420B5F4007B8CAE /* Utils.swift in Sources */,
12251266
0F4C0A7E243C4585006604B7 /* Error.swift in Sources */,
12261267
0F4C0A83243C470F006604B7 /* ContentstackLogger.swift in Sources */,
@@ -1265,6 +1306,7 @@
12651306
47AAE0922B60420E0098655A /* SyncAPITest.swift in Sources */,
12661307
0FFA5DBE241F9A6C003B3AF5 /* XCTestCase+Extension.swift in Sources */,
12671308
0F4FBCA22420B0E4007B8CAE /* DateTest.swift in Sources */,
1309+
67EE22372DE5BAFE005AC119 /* GlobalFieldAPITest.swift in Sources */,
12681310
47B4DC642C232A8200370CFC /* TaxonomyTest.swift in Sources */,
12691311
0FFA5D91241F8127003B3AF5 /* ContentstackConfigTest.swift in Sources */,
12701312
0F50EA1F244ED88C00E5D705 /* StackCacheAPITest.swift in Sources */,
@@ -1294,12 +1336,14 @@
12941336
buildActionMask = 2147483647;
12951337
files = (
12961338
0F7138D42424E98D00B314B0 /* ParameterEncoding.swift in Sources */,
1339+
67EE22312DE58B5E005AC119 /* GlobalFieldModel.swift in Sources */,
12971340
0FFA5D9B241F8EB2003B3AF5 /* Entry.swift in Sources */,
12981341
0F024672243210E200F72181 /* ImageParameter.swift in Sources */,
12991342
0FFA5D66241F5575003B3AF5 /* CSDefinitions.swift in Sources */,
13001343
47C6EFC52C0B5B9400F0D5CF /* Taxonomy.swift in Sources */,
13011344
0FFA5D7D241F7033003B3AF5 /* ContentType.swift in Sources */,
13021345
0F0246692431F37300F72181 /* ImageTransform.swift in Sources */,
1346+
67EE222E2DE48695005AC119 /* GlobalField.swift in Sources */,
13031347
0F4FBCA72420B5F4007B8CAE /* Utils.swift in Sources */,
13041348
0F4C0A7F243C4586006604B7 /* Error.swift in Sources */,
13051349
0F4C0A84243C470F006604B7 /* ContentstackLogger.swift in Sources */,

Sources/ContentstackResponse.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ private protocol HomogeneousResponse: ResponseParams {
1919
}
2020

2121
internal enum ResponseCodingKeys: String, CodingKey {
22-
case entries, entry, assets, asset, skip, limit, errors, count
22+
case entries, entry, assets, asset, skip, limit, errors, count, globalFields, globalField
2323
case contentTypes = "content_types", contentType = "content_type"
2424
}
2525

@@ -90,6 +90,23 @@ where ItemType: EndpointAccessible & Decodable {
9090
}
9191
self.items = taxonomies
9292
}
93+
case .globalfields:
94+
// Decode entire response as [String: AnyDecodable] using singleValueContainer
95+
let fullResponseContainer = try decoder.singleValueContainer()
96+
let fullResponse = try fullResponseContainer.decode([String: AnyDecodable].self)
97+
98+
if let globalFieldsArray = fullResponse["global_fields"]?.value as? [[String: Any]] {
99+
for item in globalFieldsArray {
100+
let data = try JSONSerialization.data(withJSONObject: item, options: [])
101+
let model = try JSONDecoder().decode(ItemType.self, from: data)
102+
self.items.append(model)
103+
}
104+
} else if let globalField = fullResponse["global_field"]?.value as? [String: Any] {
105+
let data = try JSONSerialization.data(withJSONObject: globalField, options: [])
106+
let model = try JSONDecoder().decode(ItemType.self, from: data)
107+
self.items = [model]
108+
}
109+
93110
default:
94111
print("sync")
95112
}

Sources/EndPoint.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public enum Endpoint: String {
2222
case sync = "stacks/sync"
2323

2424
case taxnomies = "taxonomies"
25+
26+
case globalfields = "global_fields"
2527
/// The path component string for the current endpoint.
2628
public var pathComponent: String {
2729
return rawValue

Sources/GlobalField.swift

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//
2+
// GlobalField.swift
3+
// ContentstackSwift
4+
//
5+
// Created by Reeshika Hosmani on 26/05/25.
6+
//
7+
8+
import Foundation
9+
10+
public class GlobalField: CachePolicyAccessible{
11+
12+
public var cachePolicy: CachePolicy = .networkOnly
13+
/// URI Parameters
14+
internal var parameters: Parameters = [:]
15+
internal var headers: [String: String] = [:]
16+
internal var stack: Stack
17+
/// Unique ID of the global_field of which you wish to retrieve the details.
18+
internal var uid: String?
19+
/// Query Parameters
20+
public var queryParameter: [String: Any] = [:]
21+
22+
internal required init(stack: Stack) {
23+
self.stack = stack
24+
}
25+
internal required init(_ uid: String?, stack: Stack) {
26+
self.uid = uid
27+
self.stack = stack
28+
}
29+
30+
public func includeBranch() -> GlobalField {
31+
self.parameters[QueryParameter.includeBranch] = true
32+
return self
33+
}
34+
35+
public func includeGlobalFieldSchema() -> GlobalField {
36+
self.parameters[QueryParameter.includeGlobalFieldSchema] = true
37+
return self
38+
}
39+
40+
}
41+
42+
extension GlobalField: ResourceQueryable {
43+
/// This call fetches the latest version of a specific `Global Field` of a particular stack.
44+
/// - Parameters:
45+
/// - completion: A handler which will be called on completion of the operation.
46+
///
47+
/// Example usage:
48+
/// ```
49+
/// let stack = Contentstack.stack(apiKey: apiKey,
50+
/// deliveryToken: deliveryToken,
51+
/// environment: environment)
52+
///
53+
/// stack.globalField
54+
/// .fetch { (result: Result<GlobalFieldModel, Error>, response: ResponseType) in
55+
/// switch result {
56+
/// case .success(let model):
57+
/// //Model retrive from API
58+
/// case .failure(let error):
59+
/// //Error Message
60+
/// }
61+
/// }
62+
/// ```
63+
public func fetch<ResourceType>(_ completion: @escaping (Result<ResourceType, Error>, ResponseType) -> Void)
64+
where ResourceType: EndpointAccessible & Decodable {
65+
guard let uid = self.uid else { fatalError("Please provide Global Field uid") }
66+
self.stack.fetch(endpoint: ResourceType.endpoint,
67+
cachePolicy: self.cachePolicy,
68+
parameters: parameters + [QueryParameter.uid: uid],
69+
headers: headers,
70+
then: { (result: Result<ContentstackResponse<ResourceType>, Error>, response: ResponseType) in
71+
switch result {
72+
case .success(let contentStackResponse):
73+
if let resource = contentStackResponse.items.first {
74+
completion(.success(resource), response)
75+
} else {
76+
completion(.failure(SDKError.invalidUID(string: uid)), response)
77+
}
78+
case .failure(let error):
79+
completion(.failure(error), response)
80+
}
81+
})
82+
}
83+
}
84+
85+
extension GlobalField : Queryable{
86+
public func find<ResourceType>(_ completion: @escaping ResultsHandler<ContentstackResponse<ResourceType>>) where ResourceType :Decodable & EndpointAccessible {
87+
if self.queryParameter.count > 0,
88+
let query = self.queryParameter.jsonString {
89+
self.parameters[QueryParameter.query] = query
90+
}
91+
self.stack.fetch(endpoint: ResourceType.endpoint,
92+
cachePolicy: self.cachePolicy, parameters: parameters, headers: headers, then: completion)
93+
}
94+
95+
}

0 commit comments

Comments
 (0)