Skip to content

Commit 4fc86e3

Browse files
[Bookings] Booking details part 7 (#16234)
2 parents 3df60ab + 9a8dfa5 commit 4fc86e3

File tree

3 files changed

+53
-8
lines changed

3 files changed

+53
-8
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ extension BookingDetailsViewModel {
1515
let rows: [Row]
1616

1717
init(_ booking: Booking) {
18-
let appointmentDate = booking.startDate.formatted(date: .numeric, time: .omitted)
18+
let appointmentDate = booking.startDate.toString(dateStyle: .short, timeStyle: .none, timeZone: BookingListTab.utcTimeZone)
1919
let appointmentTimeFrame = [
20-
booking.startDate.formatted(date: .omitted, time: .shortened),
21-
booking.endDate.formatted(date: .omitted, time: .shortened)
20+
booking.startDate.toString(dateStyle: .none, timeStyle: .short, timeZone: BookingListTab.utcTimeZone),
21+
booking.endDate.toString(dateStyle: .none, timeStyle: .short, timeZone: BookingListTab.utcTimeZone)
2222
].joined(separator: " - ")
2323

2424
rows = [

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ extension BookingDetailsViewModel {
1010
@Published var serviceAndCustomerLine: String
1111

1212
init(_ booking: Booking, customerName: String? = nil) {
13-
bookingDate = booking.startDate.formatted(
14-
date: .numeric,
15-
time: .shortened
13+
bookingDate = booking.startDate.toString(
14+
dateStyle: .short,
15+
timeStyle: .short,
16+
timeZone: BookingListTab.utcTimeZone
1617
)
1718

1819
/// Temporary hardcode for service name

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ extension BookingDetailsView {
55
struct CustomerDetailsView: View {
66
@ObservedObject var content: BookingDetailsViewModel.CustomerContent
77
let showNotice: (Notice) -> Void
8+
@State private var showingPhoneOptions = false
9+
@State private var selectedPhoneNumber: String?
810

911
private enum Row: Hashable {
1012
case name(String)
@@ -77,7 +79,7 @@ extension BookingDetailsView {
7779
}
7880
.padding(.vertical, Layout.rowTextVerticalPadding)
7981
.tappable {
80-
emailText.sendToPasteboard()
82+
emailText.sendToPasteboard(includeTrailingNewline: false)
8183
showNotice(
8284
Notice(
8385
title: Localization.emailCopiedMessage,
@@ -98,7 +100,25 @@ extension BookingDetailsView {
98100
}
99101
.padding(.vertical, Layout.rowTextVerticalPadding)
100102
.tappable {
101-
print("On phone ellipsis")
103+
selectedPhoneNumber = phoneText
104+
showingPhoneOptions = true
105+
}
106+
.confirmationDialog(
107+
selectedPhoneNumber ?? "",
108+
isPresented: $showingPhoneOptions,
109+
titleVisibility: .visible
110+
) {
111+
Button(Localization.callActionTitle) {
112+
guard let phoneNumber = selectedPhoneNumber else { return }
113+
if PhoneHelper.callPhoneNumber(phone: phoneNumber) == false {
114+
showNotice(Notice(title: Localization.phoneNumberErrorNotice, feedbackType: .error))
115+
}
116+
}
117+
Button(Localization.copyActionTitle) {
118+
guard let phoneNumber = selectedPhoneNumber else { return }
119+
phoneNumber.sendToPasteboard(includeTrailingNewline: false)
120+
showNotice(Notice(title: Localization.phoneNumberCopied, feedbackType: .success))
121+
}
102122
}
103123
}
104124

@@ -127,6 +147,30 @@ private extension BookingDetailsView.CustomerDetailsView {
127147
comment: "Toast message shown when the user copies the customer's email address."
128148
)
129149

150+
static let callActionTitle = NSLocalizedString(
151+
"BookingDetailsView.phoneNumberOptions.call",
152+
value: "Call",
153+
comment: "Action to call the phone number."
154+
)
155+
156+
static let copyActionTitle = NSLocalizedString(
157+
"BookingDetailsView.phoneNumberOptions.copy",
158+
value: "Copy",
159+
comment: "Action to copy the phone number."
160+
)
161+
162+
static let phoneNumberCopied = NSLocalizedString(
163+
"BookingDetailsView.phoneNumberOptions.copied",
164+
value: "Phone number copied",
165+
comment: "Notice message shown when the phone number is copied."
166+
)
167+
168+
static let phoneNumberErrorNotice = NSLocalizedString(
169+
"BookingDetailsView.phoneNumberOptions.error",
170+
value: "Could not place a call to this number.",
171+
comment: "Notice message shown when a phone call cannot be initiated."
172+
)
173+
130174
/// Customer section
131175
static let billingAddressRowTitle = NSLocalizedString(
132176
"BookingDetailsView.customer.billingAddress.title",

0 commit comments

Comments
 (0)