Skip to content

Commit f1c7635

Browse files
committed
Split new model extensions by separate files
1 parent bd89c5b commit f1c7635

File tree

8 files changed

+175
-249
lines changed

8 files changed

+175
-249
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import Foundation
2+
import struct Networking.Booking
3+
4+
extension BookingDetailsViewModel {
5+
struct AppointmentDetailsContent {
6+
static let appointmentDateFormatter = {
7+
let dateFormatter = DateFormatter()
8+
dateFormatter.dateFormat = "EEEE, dd MMMM yyyy"
9+
return dateFormatter
10+
}()
11+
12+
static let appointmentTimeFrameFormatter = {
13+
let dateFormatter = DateFormatter()
14+
dateFormatter.dateFormat = "hh:mm a"
15+
return dateFormatter
16+
}()
17+
18+
struct Row: Identifiable {
19+
let title: String
20+
let value: String
21+
22+
var id: String {
23+
return title
24+
}
25+
}
26+
27+
let rows: [Row]
28+
29+
init(_ booking: Booking) {
30+
let durationMinutes = Int(booking.endDate.timeIntervalSince(booking.startDate) / 60)
31+
let appointmentDate = Self.appointmentDateFormatter.string(from: booking.startDate)
32+
let appointmentTimeFrame = [
33+
Self.appointmentTimeFrameFormatter.string(from: booking.startDate),
34+
Self.appointmentTimeFrameFormatter.string(from: booking.endDate)
35+
].joined(separator: " - ")
36+
37+
rows = [
38+
Row(title: "Date", value: appointmentDate),
39+
Row(title: "Time", value: appointmentTimeFrame),
40+
Row(title: "Service", value: "Women's Haircut"),
41+
Row(title: "Quantity", value: "1"),
42+
Row(title: "Duration", value: String(durationMinutes)),
43+
Row(title: "Cost", value: booking.cost)
44+
]
45+
}
46+
}
47+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Foundation
2+
3+
extension BookingDetailsViewModel {
4+
struct Section: Identifiable {
5+
var id: String {
6+
return content.id
7+
}
8+
9+
let headerText: String?
10+
let footerText: String?
11+
let content: SectionContent
12+
13+
init(
14+
headerText: String? = nil,
15+
footerText: String? = nil,
16+
content: SectionContent
17+
) {
18+
self.headerText = headerText
19+
self.footerText = footerText
20+
self.content = content
21+
}
22+
}
23+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Foundation
2+
3+
extension BookingDetailsViewModel {
4+
enum SectionContent {
5+
case header(HeaderContent)
6+
case appointmentDetails(AppointmentDetailsContent)
7+
case attendance(AttendanceContent)
8+
case payment(PaymentContent)
9+
case customer(CustomerContent)
10+
case teamMember(TeamMemberContent)
11+
}
12+
}
13+
14+
extension BookingDetailsViewModel.SectionContent: Identifiable {
15+
var id: String {
16+
switch self {
17+
case .header:
18+
return "header"
19+
case .appointmentDetails:
20+
return "appointmentDetails"
21+
case .attendance:
22+
return "ttendance"
23+
case .payment:
24+
return "payment"
25+
case .customer:
26+
return "customer"
27+
case .teamMember:
28+
return "teamMember"
29+
}
30+
}
31+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import Foundation
2+
import SwiftUI
3+
4+
extension BookingDetailsViewModel {
5+
enum Status {
6+
case booked, paid
7+
}
8+
}
9+
10+
extension BookingDetailsViewModel.Status {
11+
var labelText: String {
12+
switch self {
13+
case .booked:
14+
return "Booked"
15+
case .paid:
16+
return "Paid"
17+
}
18+
}
19+
20+
var labelColor: Color {
21+
switch self {
22+
case .booked:
23+
return Color(UIColor.systemGray6)
24+
case .paid:
25+
return Color(UIColor.systemGray6)
26+
}
27+
}
28+
}

WooCommerce/Classes/ViewModels/Booking Details/BookingDetailsViewModel.swift

Lines changed: 0 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -3,156 +3,20 @@ import WooFoundation
33
import struct Networking.Booking
44

55
extension BookingDetailsViewModel {
6-
enum Status {
7-
case booked, paid
8-
}
9-
}
10-
11-
extension BookingDetailsViewModel {
12-
struct Section: Identifiable {
13-
var id: String {
14-
return content.id
15-
}
16-
17-
let headerText: String?
18-
let footerText: String?
19-
let content: SectionContent
20-
21-
init(
22-
headerText: String? = nil,
23-
footerText: String? = nil,
24-
content: SectionContent
25-
) {
26-
self.headerText = headerText
27-
self.footerText = footerText
28-
self.content = content
29-
}
30-
}
31-
32-
enum SectionContent: Identifiable {
33-
var id: String {
34-
switch self {
35-
case .header:
36-
return "header"
37-
case .appointmentDetails:
38-
return "appointmentDetails"
39-
}
40-
}
41-
42-
case header(HeaderContent)
43-
case appointmentDetails(AppointmentDetailsContent)
44-
// case attendance(AttendanceContent)
45-
// case payment(PaymentContent)
46-
// case customer(CustomerContent)
47-
// case teamMember(TeamMemberContent)
48-
}
49-
}
50-
51-
extension BookingDetailsViewModel {
52-
struct HeaderContent: Hashable {
53-
static let dateFormatter = {
54-
let dateFormatter = DateFormatter()
55-
dateFormatter.dateFormat = "dd/MM/yyyy, hh:mm a"
56-
return dateFormatter
57-
}()
58-
59-
let bookingDate: String
60-
let serviceName: String
61-
let customerName: String
62-
let status: [Status]
63-
64-
init(_ booking: Booking) {
65-
bookingDate = Self.dateFormatter.string(from: booking.startDate)
66-
serviceName = "Women's Haircut"
67-
customerName = "Margarita Nikolaevna"
68-
status = [.paid, .booked]
69-
}
70-
}
71-
72-
struct AppointmentDetailsContent {
73-
static let appointmentDateFormatter = {
74-
let dateFormatter = DateFormatter()
75-
dateFormatter.dateFormat = "EEEE, dd MMMM yyyy"
76-
return dateFormatter
77-
}()
78-
79-
static let appointmentTimeFrameFormatter = {
80-
let dateFormatter = DateFormatter()
81-
dateFormatter.dateFormat = "hh:mm a"
82-
return dateFormatter
83-
}()
84-
85-
let rows: [Row]
86-
87-
struct Row: Identifiable {
88-
let title: String
89-
let value: String
90-
91-
var id: String {
92-
return title
93-
}
94-
}
95-
96-
init(_ booking: Booking) {
97-
let durationMinutes = Int(booking.endDate.timeIntervalSince(booking.startDate) / 60)
98-
let appointmentDate = Self.appointmentDateFormatter.string(from: booking.startDate)
99-
let appointmentTimeFrame = [
100-
Self.appointmentTimeFrameFormatter.string(from: booking.startDate),
101-
Self.appointmentTimeFrameFormatter.string(from: booking.endDate)
102-
].joined(separator: " - ")
103-
104-
rows = [
105-
Row(title: "Date", value: appointmentDate),
106-
Row(title: "Time", value: appointmentTimeFrame),
107-
Row(title: "Service", value: "Women's Haircut"),
108-
Row(title: "Quantity", value: "1"),
109-
Row(title: "Duration", value: String(durationMinutes)),
110-
Row(title: "Cost", value: booking.cost)
111-
]
112-
}
113-
}
114-
1156
struct AttendanceContent {
116-
1177
}
1188

1199
struct PaymentContent {
120-
12110
}
12211

12312
struct CustomerContent {
124-
12513
}
12614

12715
struct TeamMemberContent {
128-
12916
}
13017
}
13118

132-
13319
final class BookingDetailsViewModel: ObservableObject {
134-
// // MARK: - Payment Details
135-
// let servicesCost: String
136-
// let tax: String
137-
// let total: String
138-
// let paid: String
139-
//
140-
// // MARK: - Customer Details
141-
// var customerEmail: String {
142-
// // This will be fetched from the customer details later
143-
// return "[email protected]"
144-
// }
145-
//
146-
// var customerPhone: String {
147-
// // This will be fetched from the customer details later
148-
// return "+1742582943798"
149-
// }
150-
//
151-
// var billingAddress: String {
152-
// // This will be fetched from the customer details later
153-
// return "238 Willow Creek Drive\nMontgomery\nAL 36109"
154-
// }
155-
15620
let sections: [Section]
15721

15822
init(booking: Booking) {
@@ -169,11 +33,5 @@ final class BookingDetailsViewModel: ObservableObject {
16933
headerSection,
17034
appointmentDetailsSection
17135
]
172-
173-
// This will be assigned later
174-
// servicesCost = "$62.68"
175-
// tax = "$7.32"
176-
// total = booking.cost
177-
// paid = booking.cost
17836
}
17937
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Foundation
2+
import struct Networking.Booking
3+
4+
extension BookingDetailsViewModel {
5+
struct HeaderContent: Hashable {
6+
static let dateFormatter = {
7+
let dateFormatter = DateFormatter()
8+
dateFormatter.dateFormat = "dd/MM/yyyy, hh:mm a"
9+
return dateFormatter
10+
}()
11+
12+
let bookingDate: String
13+
let serviceName: String
14+
let customerName: String
15+
let status: [Status]
16+
17+
init(_ booking: Booking) {
18+
bookingDate = Self.dateFormatter.string(from: booking.startDate)
19+
serviceName = "Women's Haircut"
20+
customerName = "Margarita Nikolaevna"
21+
status = [.paid, .booked]
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)