@@ -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