/
PresentedSurveyView.swift
60 lines (51 loc) · 1.85 KB
/
PresentedSurveyView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//
// PresentedSurveyView.swift
// MyDataHelpsKit-Example
//
// Created by CareEvolution on 3/10/23.
//
import SwiftUI
import UIKit
import MyDataHelpsKit
extension SurveyPresentation: Identifiable {
/// SurveyPresentation must be Identifiable for use in SwiftUI `.sheet` presentation.
public var id: String { surveyName }
}
/// SwiftUI wrapper for MyDataHelpsKit.SurveyViewController.
struct PresentedSurveyView: UIViewControllerRepresentable {
@EnvironmentObject private var messageBanner: MessageBannerModel
let presentation: Binding<SurveyPresentation?>
func makeUIViewController(context: Context) -> UIViewController {
return makeSurveyViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
private func makeSurveyViewController() -> UIViewController {
guard let model = presentation.wrappedValue else {
// Should never happen.
return UIViewController()
}
let viewController = SurveyViewController(presentation: model) { vc, result in
defer {
NotificationCenter.default.post(name: ParticipantSession.participantDidUpdateNotification, object: nil)
}
self.presentation.wrappedValue = nil
let message: String
switch result {
case let .success(reason):
switch reason {
case .completed:
message = "Completed"
case .discarded:
message = "Discarded"
case .saved:
message = "Saved Progress"
}
case let .failure(error):
message = error.localizedDescription
}
messageBanner(message)
}
return viewController
}
}