@@ -27,8 +27,8 @@ public class AdaWebHost: NSObject {
27
27
28
28
/// Metafields can be passed in during init; use `setMetaFields()` and `setSensitiveMetafields()`
29
29
/// to send values in at runtime
30
- private var metafields : [ String : String ] = [ : ]
31
- private var sensitiveMetafields : [ String : String ] = [ : ]
30
+ private var metafields : [ String : Any ] = [ : ]
31
+ private var sensitiveMetafields : [ String : Any ] = [ : ]
32
32
33
33
public var openWebLinksInSafari = false
34
34
public var appScheme = " "
@@ -71,8 +71,8 @@ public class AdaWebHost: NSObject {
71
71
language: String = " " ,
72
72
styles: String = " " ,
73
73
greeting: String = " " ,
74
- metafields: [ String : String ] = [ : ] ,
75
- sensitiveMetafields: [ String : String ] = [ : ] ,
74
+ metafields: [ String : Any ] = [ : ] ,
75
+ sensitiveMetafields: [ String : Any ] = [ : ] ,
76
76
openWebLinksInSafari: Bool = false ,
77
77
appScheme: String = " " ,
78
78
zdChatterAuthCallback: ( ( ( @escaping ( _ token: String ) -> Void ) ) -> Void ) ? = nil ,
@@ -142,6 +142,7 @@ public class AdaWebHost: NSObject {
142
142
// MARK: - Public Methods
143
143
144
144
/// Push a dictionary of fields to the server
145
+ @available ( * , deprecated, message: " This method will be deprecated in the future, please upgrade to MetaFields.Builder. " , renamed: " setMetaFields(builder:) " )
145
146
public func setMetaFields( _ fields: [ String : Any ] ) {
146
147
guard let json = try ? JSONSerialization . data ( withJSONObject: fields, options: [ ] ) ,
147
148
let jsonString = String ( data: json, encoding: . utf8) else { return }
@@ -151,6 +152,7 @@ public class AdaWebHost: NSObject {
151
152
}
152
153
153
154
/// Push a dictionary of fields to the server
155
+ @available ( * , deprecated, message: " This method will be deprecated in the future, please upgrade to MetaFields.Builder. " , renamed: " setSensitiveMetaFields(builder:) " )
154
156
public func setSensitiveMetaFields( _ fields: [ String : Any ] ) {
155
157
guard let json = try ? JSONSerialization . data ( withJSONObject: fields, options: [ ] ) ,
156
158
let jsonString = String ( data: json, encoding: . utf8) else { return }
@@ -159,7 +161,28 @@ public class AdaWebHost: NSObject {
159
161
self . evalJS ( toRun)
160
162
}
161
163
164
+ /// Override method using builder class
165
+ public func setMetaFields( builder: MetaFields . Builder ) {
166
+ let metaFields = builder. build ( ) . metaFields
167
+ guard let json = try ? JSONSerialization . data ( withJSONObject: metaFields, options: [ ] ) ,
168
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
169
+ let toRun = " adaEmbed.setMetaFields( \( jsonString) ); "
170
+
171
+ self . evalJS ( toRun)
172
+ }
173
+
174
+ public func setSensitiveMetaFields( builder: MetaFields . Builder ) {
175
+ let metaFields = builder. build ( ) . metaFields
176
+ guard let json = try ? JSONSerialization . data ( withJSONObject: metaFields, options: [ ] ) ,
177
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
178
+ let toRun = " adaEmbed.setSensitiveMetaFields( \( jsonString) ); "
179
+
180
+ self . evalJS ( toRun)
181
+ }
182
+
162
183
/// Re-initialize chat and optionally reset history, language, meta data, etc
184
+ @available ( * , deprecated, message: " This method will be deprecated in the future, please upgrade to MetaFields.Builder. " , renamed: " reset(metaFields:sensitiveMetaFields:) " )
185
+ /// When this method is depreciated, the 4 override reset methods should be replaced
163
186
public func reset( language: String ? = nil , greeting: String ? = nil , metaFields: [ String : Any ] ? = nil , sensitiveMetaFields: [ String : Any ] ? = nil , resetChatHistory: Bool ? = true ) {
164
187
165
188
let data : [ String : Any ? ] = [
@@ -177,6 +200,71 @@ public class AdaWebHost: NSObject {
177
200
self . evalJS ( toRun)
178
201
}
179
202
203
+ public func reset( language: String ? = nil , greeting: String ? = nil , metaFields: MetaFields . Builder , resetChatHistory: Bool ? = true ) {
204
+
205
+ let data : [ String : Any ? ] = [
206
+ " language " : language,
207
+ " greeting " : greeting,
208
+ " metaFields " : metaFields. build ( ) . metaFields,
209
+ " sensitiveMetaFields " : nil ,
210
+ " resetChatHistory " : resetChatHistory
211
+ ]
212
+ guard let json = try ? JSONSerialization . data ( withJSONObject: data, options: . fragmentsAllowed) ,
213
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
214
+ let toRun = " adaEmbed.reset( \( jsonString) ); "
215
+
216
+ self . evalJS ( toRun)
217
+ }
218
+
219
+ public func reset( language: String ? = nil , greeting: String ? = nil , sensitiveMetaFields: MetaFields . Builder , resetChatHistory: Bool ? = true ) {
220
+
221
+ let data : [ String : Any ? ] = [
222
+ " language " : language,
223
+ " greeting " : greeting,
224
+ " metaFields " : nil ,
225
+ " sensitiveMetaFields " : sensitiveMetaFields. build ( ) . metaFields,
226
+ " resetChatHistory " : resetChatHistory
227
+ ]
228
+ guard let json = try ? JSONSerialization . data ( withJSONObject: data, options: . fragmentsAllowed) ,
229
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
230
+
231
+ let toRun = " adaEmbed.reset( \( jsonString) ); "
232
+
233
+ self . evalJS ( toRun)
234
+ }
235
+
236
+ public func reset( language: String ? = nil , greeting: String ? = nil , metaFields: MetaFields . Builder , sensitiveMetaFields: MetaFields . Builder , resetChatHistory: Bool ? = true ) {
237
+
238
+ let data : [ String : Any ? ] = [
239
+ " language " : language,
240
+ " greeting " : greeting,
241
+ " metaFields " : metaFields. build ( ) . metaFields,
242
+ " sensitiveMetaFields " : sensitiveMetaFields. build ( ) . metaFields,
243
+ " resetChatHistory " : resetChatHistory
244
+ ]
245
+ guard let json = try ? JSONSerialization . data ( withJSONObject: data, options: . fragmentsAllowed) ,
246
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
247
+ let toRun = " adaEmbed.reset( \( jsonString) ); "
248
+
249
+ self . evalJS ( toRun)
250
+ }
251
+
252
+ public func reset( language: String ? = nil , greeting: String ? = nil , resetChatHistory: Bool ? = true ) {
253
+
254
+ let data : [ String : Any ? ] = [
255
+ " language " : language,
256
+ " greeting " : greeting,
257
+ " metaFields " : nil ,
258
+ " sensitiveMetaFields " : nil ,
259
+ " resetChatHistory " : resetChatHistory
260
+ ]
261
+ guard let json = try ? JSONSerialization . data ( withJSONObject: data, options: . fragmentsAllowed) ,
262
+ let jsonString = String ( data: json, encoding: . utf8) else { return }
263
+ let toRun = " adaEmbed.reset( \( jsonString) ); "
264
+
265
+ self . evalJS ( toRun)
266
+ }
267
+
180
268
/// Re-initialize chat and optionally reset history, language, meta data, etc
181
269
public func deleteHistory( ) {
182
270
let toRun = " adaEmbed.deleteHistory(); "
@@ -465,3 +553,50 @@ extension AdaWebHost {
465
553
}
466
554
}
467
555
}
556
+
557
+ public class MetaFields {
558
+
559
+ internal var metaFields : [ String : Any ] = [ : ]
560
+
561
+ init ( metaFields: [ String : Any ] ) {
562
+ self . metaFields = metaFields
563
+ }
564
+
565
+ public class Builder {
566
+
567
+ private var metaFields : [ String : Any ] = [ : ]
568
+
569
+ public init ( ) {
570
+ self . metaFields = [ : ]
571
+ }
572
+
573
+ public func setField( key: String , value: String ) -> MetaFields . Builder {
574
+ self . metaFields [ key] = value
575
+ return self
576
+ }
577
+
578
+ public func setField( key: String , value: Bool ) -> MetaFields . Builder {
579
+ self . metaFields [ key] = value
580
+ return self
581
+ }
582
+
583
+ public func setField( key: String , value: Int ) -> MetaFields . Builder {
584
+ self . metaFields [ key] = value
585
+ return self
586
+ }
587
+
588
+ public func setField( key: String , value: Float ) -> MetaFields . Builder {
589
+ self . metaFields [ key] = value
590
+ return self
591
+ }
592
+
593
+ public func setField( key: String , value: Double ) -> MetaFields . Builder {
594
+ self . metaFields [ key] = value
595
+ return self
596
+ }
597
+
598
+ internal func build( ) -> MetaFields {
599
+ return MetaFields ( metaFields: self . metaFields)
600
+ }
601
+ }
602
+ }
0 commit comments