11import SwiftUI
22
33struct UpdateAttendanceStatusView : View {
4+ @Environment ( \. dismiss) private var dismiss
45 private let statuses = AttendanceStatus . allCases
6+ private let onStatusSelected : ( AttendanceStatus ) -> Void
7+
8+ init ( onStatusSelected: @escaping ( AttendanceStatus ) -> Void ) {
9+ self . onStatusSelected = onStatusSelected
10+ }
511
612 var body : some View {
713 VStack ( alignment: . leading, spacing: 24 ) {
@@ -24,13 +30,63 @@ struct UpdateAttendanceStatusView: View {
2430 }
2531 }
2632 . padding ( . horizontal)
33+ . contentShape ( Rectangle ( ) )
34+ . tappable {
35+ onStatusSelected ( status)
36+ dismiss ( )
37+ }
2738 }
2839 Spacer ( )
2940 }
3041 . padding ( . top)
3142 }
3243}
3344
45+ extension UpdateAttendanceStatusView {
46+ enum AttendanceStatus : CaseIterable , Identifiable {
47+ case booked
48+ case checkedIn
49+ case noShow
50+
51+ var id : Self { self }
52+ }
53+ }
54+
55+ private extension UpdateAttendanceStatusView . AttendanceStatus {
56+ var title : String {
57+ switch self {
58+ case . booked:
59+ return UpdateAttendanceStatusView . Localization. bookedTitle
60+ case . checkedIn:
61+ return UpdateAttendanceStatusView . Localization. checkedInTitle
62+ case . noShow:
63+ return UpdateAttendanceStatusView . Localization. noShowTitle
64+ }
65+ }
66+
67+ var description : String {
68+ switch self {
69+ case . booked:
70+ return UpdateAttendanceStatusView . Localization. bookedDescription
71+ case . checkedIn:
72+ return UpdateAttendanceStatusView . Localization. checkedInDescription
73+ case . noShow:
74+ return UpdateAttendanceStatusView . Localization. noShowDescription
75+ }
76+ }
77+
78+ var iconName : String {
79+ switch self {
80+ case . booked:
81+ return " calendar.badge.checkmark "
82+ case . checkedIn:
83+ return " calendar.and.person "
84+ case . noShow:
85+ return " calendar.badge.exclamationmark "
86+ }
87+ }
88+ }
89+
3490private extension UpdateAttendanceStatusView {
3591 enum Localization {
3692 static let title = NSLocalizedString (
@@ -74,51 +130,12 @@ private extension UpdateAttendanceStatusView {
74130 }
75131}
76132
77- private enum AttendanceStatus : CaseIterable , Identifiable {
78- case booked
79- case checkedIn
80- case noShow
81-
82- var id : Self { self }
83-
84- var title : String {
85- switch self {
86- case . booked:
87- return UpdateAttendanceStatusView . Localization. bookedTitle
88- case . checkedIn:
89- return UpdateAttendanceStatusView . Localization. checkedInTitle
90- case . noShow:
91- return UpdateAttendanceStatusView . Localization. noShowTitle
92- }
93- }
94-
95- var description : String {
96- switch self {
97- case . booked:
98- return UpdateAttendanceStatusView . Localization. bookedDescription
99- case . checkedIn:
100- return UpdateAttendanceStatusView . Localization. checkedInDescription
101- case . noShow:
102- return UpdateAttendanceStatusView . Localization. noShowDescription
103- }
104- }
105-
106- var iconName : String {
107- switch self {
108- case . booked:
109- return " calendar.badge.checkmark "
110- case . checkedIn:
111- return " calendar.and.person "
112- case . noShow:
113- return " calendar.badge.exclamationmark "
114- }
115- }
116- }
117-
118133#if DEBUG
119134struct UpdateAttendanceStatusView_Previews : PreviewProvider {
120135 static var previews : some View {
121- UpdateAttendanceStatusView ( )
136+ UpdateAttendanceStatusView { selectedStatus in
137+ print ( " Selected status: \( selectedStatus) " )
138+ }
122139 }
123140}
124141#endif
0 commit comments