Skip to content

Commit 20050e4

Browse files
committed
Apply max shared title width for fields in EditOrderAddressForm
1 parent c7b660a commit 20050e4

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/EditOrderAddressForm.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,31 +194,51 @@ struct SingleAddressForm: View {
194194
///
195195
@State private var showStateSelector = false
196196

197+
/// Stores shared value derived from max title width among all the fields.
198+
///
199+
@State private var titleWidth: CGFloat? = nil
200+
197201
var body: some View {
202+
content
203+
.onPreferenceChange(MaxWidthPreferenceKey.self) { value in
204+
if let value = value {
205+
titleWidth = value
206+
}
207+
}
208+
}
209+
210+
@ViewBuilder
211+
var content: some View {
198212
ListHeaderView(text: Localization.detailsSection, alignment: .left)
199213
.padding(.horizontal, insets: safeAreaInsets)
200214
.accessibility(addTraits: .isHeader)
201215
VStack(spacing: 0) {
202216
TitleAndTextFieldRow(title: Localization.firstNameField,
217+
titleWidth: $titleWidth,
203218
placeholder: "",
204219
text: $fields.firstName,
205220
symbol: nil,
221+
fieldAlignment: .leading,
206222
keyboardType: .default)
207223
Divider()
208224
.padding(.leading, Constants.dividerPadding)
209225
TitleAndTextFieldRow(title: Localization.lastNameField,
226+
titleWidth: $titleWidth,
210227
placeholder: "",
211228
text: $fields.lastName,
212229
symbol: nil,
230+
fieldAlignment: .leading,
213231
keyboardType: .default)
214232
Divider()
215233
.padding(.leading, Constants.dividerPadding)
216234

217235
if showEmailField {
218236
TitleAndTextFieldRow(title: Localization.emailField,
237+
titleWidth: $titleWidth,
219238
placeholder: "",
220239
text: $fields.email,
221240
symbol: nil,
241+
fieldAlignment: .leading,
222242
keyboardType: .emailAddress)
223243
.autocapitalization(.none)
224244
Divider()
@@ -227,9 +247,11 @@ struct SingleAddressForm: View {
227247
}
228248

229249
TitleAndTextFieldRow(title: Localization.phoneField,
250+
titleWidth: $titleWidth,
230251
placeholder: "",
231252
text: $fields.phone,
232253
symbol: nil,
254+
fieldAlignment: .leading,
233255
keyboardType: .phonePad)
234256
}
235257
.padding(.horizontal, insets: safeAreaInsets)
@@ -242,37 +264,47 @@ struct SingleAddressForm: View {
242264
VStack(spacing: 0) {
243265
Group {
244266
TitleAndTextFieldRow(title: Localization.companyField,
267+
titleWidth: $titleWidth,
245268
placeholder: Localization.placeholderOptional,
246269
text: $fields.company,
247270
symbol: nil,
271+
fieldAlignment: .leading,
248272
keyboardType: .default)
249273
Divider()
250274
.padding(.leading, Constants.dividerPadding)
251275
TitleAndTextFieldRow(title: Localization.address1Field,
276+
titleWidth: $titleWidth,
252277
placeholder: "",
253278
text: $fields.address1,
254279
symbol: nil,
280+
fieldAlignment: .leading,
255281
keyboardType: .default)
256282
Divider()
257283
.padding(.leading, Constants.dividerPadding)
258284
TitleAndTextFieldRow(title: Localization.address2Field,
285+
titleWidth: $titleWidth,
259286
placeholder: Localization.placeholderOptional,
260287
text: $fields.address2,
261288
symbol: nil,
289+
fieldAlignment: .leading,
262290
keyboardType: .default)
263291
Divider()
264292
.padding(.leading, Constants.dividerPadding)
265293
TitleAndTextFieldRow(title: Localization.cityField,
294+
titleWidth: $titleWidth,
266295
placeholder: "",
267296
text: $fields.city,
268297
symbol: nil,
298+
fieldAlignment: .leading,
269299
keyboardType: .default)
270300
Divider()
271301
.padding(.leading, Constants.dividerPadding)
272302
TitleAndTextFieldRow(title: Localization.postcodeField,
303+
titleWidth: $titleWidth,
273304
placeholder: "",
274305
text: $fields.postcode,
275306
symbol: nil,
307+
fieldAlignment: .leading,
276308
keyboardType: .default)
277309
Divider()
278310
.padding(.leading, Constants.dividerPadding)
@@ -326,9 +358,11 @@ struct SingleAddressForm: View {
326358
}
327359
} else {
328360
TitleAndTextFieldRow(title: Localization.stateField,
361+
titleWidth: $titleWidth,
329362
placeholder: "",
330363
text: $fields.state,
331364
symbol: nil,
365+
fieldAlignment: .leading,
332366
keyboardType: .default)
333367
}
334368
}

WooCommerce/Classes/ViewRelated/ReusableViews/SwiftUI Components/TitleAndTextFieldRow.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ struct TitleAndTextFieldRow: View {
1313

1414
@Binding private var text: String
1515

16+
@Binding private var titleWidth: CGFloat?
17+
1618
init(title: String,
19+
titleWidth: Binding<CGFloat?> = .constant(nil),
1720
placeholder: String,
1821
text: Binding<String>,
1922
symbol: String? = nil,
@@ -22,6 +25,7 @@ struct TitleAndTextFieldRow: View {
2225
keyboardType: UIKeyboardType = .default,
2326
onEditingChanged: ((Bool) -> Void)? = nil) {
2427
self.title = title
28+
self._titleWidth = titleWidth
2529
self.placeholder = placeholder
2630
self._text = text
2731
self.symbol = symbol
@@ -32,11 +36,12 @@ struct TitleAndTextFieldRow: View {
3236
}
3337

3438
var body: some View {
35-
AdaptiveStack(horizontalAlignment: .leading) {
39+
AdaptiveStack(horizontalAlignment: .leading, spacing: Constants.spacing) {
3640
Text(title)
3741
.bodyStyle()
3842
.lineLimit(1)
3943
.fixedSize()
44+
.frame(width: titleWidth, alignment: .leading)
4045
.modifier(MaxWidthModifier())
4146
HStack {
4247
TextField(placeholder, text: $text, onEditingChanged: onEditingChanged ?? { _ in })
@@ -59,6 +64,7 @@ private extension TitleAndTextFieldRow {
5964
enum Constants {
6065
static let height: CGFloat = 44
6166
static let padding: CGFloat = 16
67+
static let spacing: CGFloat = 20
6268
}
6369
}
6470

0 commit comments

Comments
 (0)