Skip to content

Commit c664570

Browse files
authored
Merge pull request #5487 from anas-p/issue/5110-autofocus-text-field-when-editing-order-note
2 parents d5f40e6 + c41212d commit c664570

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import SwiftUI
2+
3+
/// Autofocus for `TextField` and `TextEditor` in iOS 15 and later
4+
///
5+
struct AutofocusTextModifier: ViewModifier {
6+
7+
@available(iOS 15.0, *)
8+
@FocusState private var textFieldIsFocused: Bool
9+
10+
func body(content: Content) -> some View {
11+
if #available(iOS 15.0, *) {
12+
content
13+
.focused($textFieldIsFocused)
14+
.onAppear {
15+
// Without delay '.focused' will not work. This might fix in later releases.
16+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
17+
textFieldIsFocused = true
18+
}
19+
}
20+
}
21+
else {
22+
content
23+
}
24+
}
25+
}
26+
27+
28+
// MARK: View extension
29+
30+
extension View {
31+
32+
/// Autofocus in `TextField` and `TextEditor` is available only for iOS15+
33+
///
34+
func focused() -> some View {
35+
self.modifier(AutofocusTextModifier())
36+
}
37+
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Notes Section/Customer Note/EditCustomerNote.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ struct EditCustomerNote<ViewModel: EditCustomerNoteViewModelProtocol>: View {
8282
var body: some View {
8383
NavigationView {
8484
TextEditor(text: $viewModel.newNote)
85+
.focused()
8586
.padding()
8687
.navigationTitle(Localization.title)
8788
.navigationBarTitleDisplayMode(.inline)

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,7 @@
802802
57EBC92024EEE61800C1D45B /* WooAnalyticsEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57EBC91F24EEE61800C1D45B /* WooAnalyticsEvent.swift */; };
803803
57F2C6CD246DECC10074063B /* SummaryTableViewCellViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F2C6CC246DECC10074063B /* SummaryTableViewCellViewModelTests.swift */; };
804804
57F42E40253768D600EA87F7 /* TitleAndEditableValueTableViewCellViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F42E3F253768D600EA87F7 /* TitleAndEditableValueTableViewCellViewModelTests.swift */; };
805+
581D5052274AA2480089B6AD /* View+AutofocusTextModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581D5051274AA2480089B6AD /* View+AutofocusTextModifier.swift */; };
805806
6832C7CA26DA5C4500BA4088 /* LabeledTextViewTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6832C7C926DA5C4500BA4088 /* LabeledTextViewTableViewCell.swift */; };
806807
6832C7CC26DA5FDF00BA4088 /* LabeledTextViewTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6832C7CB26DA5FDE00BA4088 /* LabeledTextViewTableViewCell.xib */; };
807808
6856D2A5C2076F5BF14F2C11 /* KeyboardStateProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6856DCE1638958DA296D690F /* KeyboardStateProviderTests.swift */; };
@@ -2254,6 +2255,7 @@
22542255
57EBC91F24EEE61800C1D45B /* WooAnalyticsEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooAnalyticsEvent.swift; sourceTree = "<group>"; };
22552256
57F2C6CC246DECC10074063B /* SummaryTableViewCellViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryTableViewCellViewModelTests.swift; sourceTree = "<group>"; };
22562257
57F42E3F253768D600EA87F7 /* TitleAndEditableValueTableViewCellViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleAndEditableValueTableViewCellViewModelTests.swift; sourceTree = "<group>"; };
2258+
581D5051274AA2480089B6AD /* View+AutofocusTextModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+AutofocusTextModifier.swift"; sourceTree = "<group>"; };
22572259
6832C7C926DA5C4500BA4088 /* LabeledTextViewTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabeledTextViewTableViewCell.swift; sourceTree = "<group>"; };
22582260
6832C7CB26DA5FDE00BA4088 /* LabeledTextViewTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LabeledTextViewTableViewCell.xib; sourceTree = "<group>"; };
22592261
6856D02484A69911F2B91714 /* KeyboardStateProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardStateProvider.swift; sourceTree = "<group>"; };
@@ -3953,6 +3955,7 @@
39533955
2664210226F40FB1001FC5B4 /* View+ScrollModifiers.swift */,
39543956
26E0AE12263359F900A5EB3B /* View+Conditionals.swift */,
39553957
DE4B3B5526A68DD000EEF2D8 /* View+InsetPaddings.swift */,
3958+
581D5051274AA2480089B6AD /* View+AutofocusTextModifier.swift */,
39563959
);
39573960
path = "View Modifiers";
39583961
sourceTree = "<group>";
@@ -7934,6 +7937,7 @@
79347937
B57C744A20F5649300EEFC87 /* EmptyStoresTableViewCell.swift in Sources */,
79357938
45DB70602614C7E80064A6CF /* ShippingLabelPackageDetailsResultsControllers.swift in Sources */,
79367939
027D67D1245ADDF40036B8DB /* FilterTypeViewModel+Helpers.swift in Sources */,
7940+
581D5052274AA2480089B6AD /* View+AutofocusTextModifier.swift in Sources */,
79377941
E15FC74126BC1CED00CF83E6 /* AttributedText.swift in Sources */,
79387942
D8815AFB26384A1F00EDAD62 /* CardPresentModalReaderIsReady.swift in Sources */,
79397943
31316F9C25CB20FD00D9F129 /* OrderStatusListViewModel.swift in Sources */,

0 commit comments

Comments
 (0)