Skip to content

Commit

Permalink
[TextFieldAddons#980] Fix SwiftUI layering issue
Browse files Browse the repository at this point in the history
  • Loading branch information
LouisBorleeAdevinta committed May 30, 2024
1 parent c3c95d2 commit dff0a0d
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,14 @@ public struct TextFieldView<LeftView: View, RightView: View>: View {
TextFieldViewInternal(
titleKey: self.titleKey,
text: self.text,
viewModel: self.viewModel
.enabled(self.isEnabled)
.focused(self.isFocused),
viewModel: self.viewModel,
type: self.type,
leftView: self.leftView,
rightView: self.rightView)
.update(
isEnabled: self.isEnabled,
isFocused: self.isFocused
)
.focused($isFocused)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,12 @@ struct TextFieldViewInternal<LeftView: View, RightView: View>: View {
.foregroundStyle(self.viewModel.textColor.color)
.accessibilityIdentifier(TextFieldAccessibilityIdentifier.view)
}

func update(isEnabled: Bool, isFocused: Bool) -> some View {
DispatchQueue.main.async {
self.viewModel.isEnabled = isEnabled
self.viewModel.isFocused = isFocused
}
return self
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import UIKit
import SwiftUI
import Combine

class TextFieldViewModel: ObservableObject, Updateable {
class TextFieldViewModel: ObservableObject {

// Colors
@Published private(set) var textColor: any ColorToken
Expand Down Expand Up @@ -167,14 +167,4 @@ class TextFieldViewModel: ObservableObject, Updateable {
private func setFont() {
self.font = self.theme.typography.body1
}

func enabled(_ isEnabled: Bool) -> Self {
self.isEnabled = isEnabled
return self
}

func focused(_ isFocused: Bool) -> Self {
self.isFocused = isFocused
return self
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -619,64 +619,6 @@ final class TextFieldViewModelTests: XCTestCase {
XCTAssertFalse(self.publishers.font.sinkCalled, "$font should not have been called")
}

// MARK: - Enabled()
func test_enabled_false() {
// GIVEN - Inits from setUp()
self.resetUseCases() // Removes execute from init
self.publishers.reset() // Removes publishes from init

// WHEN
let viewModel = self.viewModel.enabled(false)

// THEN
XCTAssertIdentical(viewModel, self.viewModel, "Wrong returned viewModel")
XCTAssertFalse(viewModel.isEnabled, "isEnabled should be false")
}


func test_enabled_true() {
// GIVEN - Inits from setUp()
self.viewModel.isEnabled = false
self.resetUseCases() // Removes execute from init
self.publishers.reset() // Removes publishes from init

// WHEN
let viewModel = self.viewModel.enabled(true)

// THEN
XCTAssertIdentical(viewModel, self.viewModel, "Wrong returned viewModel")
XCTAssertTrue(viewModel.isEnabled, "isEnabled should be true")
}

// MARK: - Focused()
func test_focused_true() {
// GIVEN - Inits from setUp()
self.resetUseCases() // Removes execute from init
self.publishers.reset() // Removes publishes from init

// WHEN
let viewModel = self.viewModel.focused(true)

// THEN
XCTAssertIdentical(viewModel, self.viewModel, "Wrong returned viewModel")
XCTAssertTrue(viewModel.isFocused, "isFocused should be true")
}


func test_focused_false() {
// GIVEN - Inits from setUp()
self.viewModel.isFocused = true
self.resetUseCases() // Removes execute from init
self.publishers.reset() // Removes publishes from init

// WHEN
let viewModel = self.viewModel.focused(false)

// THEN
XCTAssertIdentical(viewModel, self.viewModel, "Wrong returned viewModel")
XCTAssertFalse(viewModel.isFocused, "isFocused should be false")
}

// MARK: - Utils
func setupPublishers() {
self.publishers = .init(
Expand Down

0 comments on commit dff0a0d

Please sign in to comment.