mobile-ios/CovidSafe/Feedback/Sources/FeedbackSettings.swift

74 lines
2.8 KiB
Swift
Raw Normal View History

2020-05-08 07:49:14 +00:00
// Copyright © 2020 Australian Government All rights reserved.
import CoreGraphics
import Foundation
public var defaultFeedbackSettings: FeedbackSettings?
public struct FeedbackSettings {
let JIRATarget: JMCTarget
let issueType: String
let issueComponents: [String]
let customFields: [String: AnyObject]
let reporterAvatarImage: CGImage?
var reporterUsernameOrEmail: String?
let getReporterInfoAsynchronously: ((@escaping (String?, URL?) -> Void) -> Void)?
let navigationBarStyle: NavigationBarStyle
public init(
JIRATarget: JMCTarget,
issueType: String? = nil,
issueComponents: [String]? = nil,
customFields: [String: AnyObject]? = nil,
navigationBarStyle: NavigationBarStyle,
reporterAvatarImage: CGImage? = nil,
reporterUsernameOrEmail: String? = nil,
getReporterInfoAsynchronously: ((@escaping (_ usernameOrEmail: String?, _ avatarImageURL: URL?) -> Void) -> Void)? = nil
) {
let defaultIssueType = JIRAIssueType.support.rawValue
let defaultIssueComponents = ["iOS"]
let defaultCustomFields = [String: AnyObject]()
self.JIRATarget = JIRATarget
self.issueType = (issueType ?? defaultFeedbackSettings?.issueType) ?? defaultIssueType
self.issueComponents = (issueComponents ?? defaultFeedbackSettings?.issueComponents) ?? defaultIssueComponents
self.customFields = (customFields ?? defaultFeedbackSettings?.customFields) ?? defaultCustomFields
self.reporterAvatarImage = reporterAvatarImage ?? defaultFeedbackSettings?.reporterAvatarImage
self.reporterUsernameOrEmail = reporterUsernameOrEmail ?? defaultFeedbackSettings?.reporterUsernameOrEmail
self.getReporterInfoAsynchronously = getReporterInfoAsynchronously ?? defaultFeedbackSettings?.getReporterInfoAsynchronously
self.navigationBarStyle = navigationBarStyle
}
public init(
issueType: String? = nil,
issueComponents: [String]? = nil,
customFields: [String: AnyObject]? = nil,
navigationBarStyle: NavigationBarStyle = .defaultStyle,
reporterAvatarImage: CGImage? = nil,
reporterUsernameOrEmail: String? = nil,
getReporterInfoAsynchronously: ((@escaping (_ usernameOrEmail: String?, _ avatarImageURL: URL?) -> Void) -> Void)? = nil
) throws {
let target = try defaultFeedbackSettings?.JIRATarget ?? JMCTarget.createTargetFromJSONOnDisk()
2020-05-08 07:49:14 +00:00
self.init(
JIRATarget: target,
issueType: issueType,
issueComponents: issueComponents,
customFields: customFields,
navigationBarStyle: navigationBarStyle,
reporterAvatarImage: reporterAvatarImage,
reporterUsernameOrEmail: reporterUsernameOrEmail,
getReporterInfoAsynchronously: getReporterInfoAsynchronously
)
}
}
public enum JIRAIssueType: String {
case support = "Support"
case bug = "Bug"
case task = "Task"
case improvement = "Improvement"
case story = "Story"
case epic = "Epic"
}