Jelajahi Sumber

Refactored based on PR review comments

Stefan Gula 1 tahun lalu
induk
melakukan
68fa55c71f
1 mengubah file dengan 18 tambahan dan 22 penghapusan
  1. 18 22
      nicegui/elements/mixins/validation_element.py

+ 18 - 22
nicegui/elements/mixins/validation_element.py

@@ -1,13 +1,13 @@
-from typing import Any, Callable, Dict, List, Optional, Tuple, Union
+from typing import Any, Callable, Dict, Optional, Union
 
 from .value_element import ValueElement
 
 
 class ValidationElement(ValueElement):
 
-    def __init__(self, validation: Union[List[Callable[..., Tuple[bool, str]]], Dict[str, Callable[..., bool]]], **kwargs: Any) -> None:
+    def __init__(self, validation: Union[Callable[..., Optional[str]], Dict[str, Callable[..., bool]]], **kwargs: Any) -> None:
         super().__init__(**kwargs)
-        self.validation = validation
+        self.validation = validation if validation is not None else {}
         self._error: Optional[str] = None
 
     @property
@@ -15,36 +15,32 @@ class ValidationElement(ValueElement):
         """The latest error message from the validation functions."""
         return self._error
 
-    def set_error_message(self, message: str) -> None:
+    @error.setter
+    def set_error(self, error: Optional[str]) -> None:
         """Sets the error message.
 
-        :param message: The error message
+        :param error: The optional error message
         """
-        message = message.replace('\\', '\\\\')
-        message = message.replace('\n', '<br>')
-        message = message.replace('"', '\\"')
-        self._error = message
-        self.props(f'error error-message="{message}"')
-
-    def clear_error_message(self) -> None:
-        """Clears the error message."""
-        self._error = None
-        self.props(remove='error')
+        self._error = error
+        if self._error is None:
+            self.props(remove='error')
+        else:
+            self._props['error-message'] = self._error
+            self.props('error')
 
     def validate(self) -> bool:
         """Validate the current value and set the error message if necessary."""
         if isinstance(self.validation, dict):
             for message, check in self.validation.items():
                 if not check(self.value):
-                    self.set_error_message(message)
+                    self.set_error(message)
                     return False
         else:
-            for check_ in self.validation:
-                ret, message = check_(self.value)
-                if not ret:
-                    self.set_error_message(message)
-                    return False
-        self.clear_error_message()
+            message = self.validation(self.value)
+            if message is not None:
+                self.set_error(message)
+                return False
+        self.set_error(None)
         return True
 
     def _handle_value_change(self, value: Any) -> None: