Skip to content

Commit a963cc3

Browse files
authored
Merge pull request #44 from AdaSupport/SUP-1173-metafields
Sup-1173: metafield types
2 parents c37b22e + e47ce5b commit a963cc3

File tree

5 files changed

+171
-33
lines changed

5 files changed

+171
-33
lines changed

AdaEmbedFramework.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |spec|
22

33
spec.name = "AdaEmbedFramework"
4-
spec.version = "1.3.11"
4+
spec.version = "1.4.0"
55
spec.summary = "Embed the Ada Support SDK in your app."
66
spec.description = "Use the Ada Support SDK to inject the Ada support experience into your app. Visit https://ada.support to learn more."
77
spec.homepage = "https://github.com/AdaSupport/ios-sdk"

EmbedFramework/AdaWebHost.swift

+139-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class AdaWebHost: NSObject {
2727

2828
/// Metafields can be passed in during init; use `setMetaFields()` and `setSensitiveMetafields()`
2929
/// 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] = [:]
3232

3333
public var openWebLinksInSafari = false
3434
public var appScheme = ""
@@ -71,8 +71,8 @@ public class AdaWebHost: NSObject {
7171
language: String = "",
7272
styles: String = "",
7373
greeting: String = "",
74-
metafields: [String: String] = [:],
75-
sensitiveMetafields: [String:String] = [:],
74+
metafields: [String: Any] = [:],
75+
sensitiveMetafields: [String:Any] = [:],
7676
openWebLinksInSafari: Bool = false,
7777
appScheme: String = "",
7878
zdChatterAuthCallback: (((@escaping (_ token: String) -> Void)) -> Void)? = nil,
@@ -142,6 +142,7 @@ public class AdaWebHost: NSObject {
142142
// MARK: - Public Methods
143143

144144
/// 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:)")
145146
public func setMetaFields(_ fields: [String: Any]) {
146147
guard let json = try? JSONSerialization.data(withJSONObject: fields, options: []),
147148
let jsonString = String(data: json, encoding: .utf8) else { return }
@@ -151,6 +152,7 @@ public class AdaWebHost: NSObject {
151152
}
152153

153154
/// 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:)")
154156
public func setSensitiveMetaFields(_ fields: [String: Any]) {
155157
guard let json = try? JSONSerialization.data(withJSONObject: fields, options: []),
156158
let jsonString = String(data: json, encoding: .utf8) else { return }
@@ -159,7 +161,28 @@ public class AdaWebHost: NSObject {
159161
self.evalJS(toRun)
160162
}
161163

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+
162183
/// 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
163186
public func reset(language: String? = nil, greeting: String? = nil, metaFields: [String: Any]? = nil, sensitiveMetaFields: [String: Any]? = nil, resetChatHistory: Bool? = true) {
164187

165188
let data: [String: Any?] = [
@@ -177,6 +200,71 @@ public class AdaWebHost: NSObject {
177200
self.evalJS(toRun)
178201
}
179202

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+
180268
/// Re-initialize chat and optionally reset history, language, meta data, etc
181269
public func deleteHistory() {
182270
let toRun = "adaEmbed.deleteHistory();"
@@ -465,3 +553,50 @@ extension AdaWebHost {
465553
}
466554
}
467555
}
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

Comments
 (0)