From 0045100200ccce65fd620d68542a5a997c634b6d Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 28 Aug 2023 10:11:53 +1000 Subject: [PATCH] polish text input error showing --- SessionUIKit/Components/SessionTextField.swift | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/SessionUIKit/Components/SessionTextField.swift b/SessionUIKit/Components/SessionTextField.swift index a364ad89c..9fd96129d 100644 --- a/SessionUIKit/Components/SessionTextField.swift +++ b/SessionUIKit/Components/SessionTextField.swift @@ -6,8 +6,17 @@ import Combine public struct SessionTextField: View { @Binding var text: String @Binding var error: String? + @State var previousError: String = "" let placeholder: String + var textThemeColor: ThemeValue { + (error?.isEmpty == false) ? .danger : .textPrimary + } + var isErrorMode: Bool { + guard previousError.isEmpty else { return true } + if error?.isEmpty == false { return true } + return false + } static let height: CGFloat = isIPhone5OrSmaller ? CGFloat(48) : CGFloat(80) static let cornerRadius: CGFloat = 13 @@ -27,19 +36,20 @@ public struct SessionTextField: View { if text.isEmpty { Text(placeholder) .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: (error?.isEmpty == false) ? .danger : .textSecondary) + .foregroundColor(themeColor: isErrorMode ? .danger : .textSecondary) } SwiftUI.TextField( "", text: $text.onChange{ value in if error?.isEmpty == false && text != value { + previousError = error! error = nil } } ) .font(.system(size: Values.smallFontSize)) - .foregroundColor(themeColor: (error?.isEmpty == false) ? .danger : .textPrimary) + .foregroundColor(themeColor: textThemeColor) } .padding(.horizontal, Values.largeSpacing) .frame(maxWidth: .infinity) @@ -51,11 +61,11 @@ public struct SessionTextField: View { height: Self.cornerRadius ) ) - .stroke(themeColor: (error?.isEmpty == false) ? .danger : .borderSeparator) + .stroke(themeColor: isErrorMode ? .danger : .borderSeparator) ) ZStack { - Text(error ?? "") + Text(error ?? previousError) .bold() .font(.system(size: Values.smallFontSize)) .foregroundColor(themeColor: .danger)