Skip to content

Commit 5fea7cb

Browse files
committed
Add action callback for status selection
1 parent c136ce4 commit 5fea7cb

File tree

2 files changed

+65
-46
lines changed

2 files changed

+65
-46
lines changed

WooCommerce/Classes/ViewRelated/Bookings/Booking Details/BookingDetailsView.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ struct BookingDetailsView: View {
7272
}
7373
}
7474
.sheet(isPresented: $showingStatusSheet) {
75-
UpdateAttendanceStatusView()
76-
.padding(.top)
77-
.presentationDetents([.medium])
78-
.presentationDragIndicator(.visible)
75+
UpdateAttendanceStatusView { selectedStatus in
76+
print("Selected status: \(selectedStatus)")
77+
}
78+
.padding(.top)
79+
.presentationDetents([.medium])
80+
.presentationDragIndicator(.visible)
7981
}
8082
}
8183
}

WooCommerce/Classes/ViewRelated/Bookings/Booking Details/UpdateAttendanceStatusView.swift

Lines changed: 59 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import SwiftUI
22

33
struct 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+
3490
private 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
119134
struct 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

Comments
 (0)