Przeglądaj źródła

add event types to suneditor (#4209)

Khaleel Al-Adhami 7 miesięcy temu
rodzic
commit
3ab750fecd

+ 40 - 16
reflex/components/suneditor/editor.py

@@ -3,11 +3,11 @@
 from __future__ import annotations
 
 import enum
-from typing import Dict, List, Literal, Optional, Union
+from typing import Dict, List, Literal, Optional, Tuple, Union
 
 from reflex.base import Base
 from reflex.components.component import Component, NoSSRComponent
-from reflex.event import EventHandler
+from reflex.event import EventHandler, empty_event, identity_event
 from reflex.utils.format import to_camel_case
 from reflex.utils.imports import ImportDict, ImportVar
 from reflex.vars.base import Var
@@ -68,6 +68,35 @@ class EditorOptions(Base):
     button_list: Optional[List[Union[List[str], str]]]
 
 
+def on_blur_spec(e: Var, content: Var[str]) -> Tuple[Var[str]]:
+    """A helper function to specify the on_blur event handler.
+
+    Args:
+        e: The event.
+        content: The content of the editor.
+
+    Returns:
+        A tuple containing the content of the editor.
+    """
+    return (content,)
+
+
+def on_paste_spec(
+    e: Var, clean_data: Var[str], max_char_count: Var[bool]
+) -> Tuple[Var[str], Var[bool]]:
+    """A helper function to specify the on_paste event handler.
+
+    Args:
+        e: The event.
+        clean_data: The clean data.
+        max_char_count: The maximum character count.
+
+    Returns:
+        A tuple containing the clean data and the maximum character count.
+    """
+    return (clean_data, max_char_count)
+
+
 class Editor(NoSSRComponent):
     """A Rich Text Editor component based on SunEditor.
     Not every JS prop is listed here (some are not easily usable from python),
@@ -178,36 +207,31 @@ class Editor(NoSSRComponent):
     disable_toolbar: Var[bool]
 
     # Fired when the editor content changes.
-    on_change: EventHandler[lambda content: [content]]
+    on_change: EventHandler[identity_event(str)]
 
     # Fired when the something is inputted in the editor.
-    on_input: EventHandler[lambda e: [e]]
+    on_input: EventHandler[empty_event]
 
     # Fired when the editor loses focus.
-    on_blur: EventHandler[lambda e, content: [content]]
+    on_blur: EventHandler[on_blur_spec]
 
     # Fired when the editor is loaded.
-    on_load: EventHandler[lambda reload: [reload]]
-
-    # Fired when the editor is resized.
-    on_resize_editor: EventHandler[lambda height, prev_height: [height, prev_height]]
+    on_load: EventHandler[identity_event(bool)]
 
     # Fired when the editor content is copied.
-    on_copy: EventHandler[lambda e, clipboard_data: [clipboard_data]]
+    on_copy: EventHandler[empty_event]
 
     # Fired when the editor content is cut.
-    on_cut: EventHandler[lambda e, clipboard_data: [clipboard_data]]
+    on_cut: EventHandler[empty_event]
 
     # Fired when the editor content is pasted.
-    on_paste: EventHandler[
-        lambda e, clean_data, max_char_count: [clean_data, max_char_count]
-    ]
+    on_paste: EventHandler[on_paste_spec]
 
     # Fired when the code view is toggled.
-    toggle_code_view: EventHandler[lambda is_code_view: [is_code_view]]
+    toggle_code_view: EventHandler[identity_event(bool)]
 
     # Fired when the full screen mode is toggled.
-    toggle_full_screen: EventHandler[lambda is_full_screen: [is_full_screen]]
+    toggle_full_screen: EventHandler[identity_event(bool)]
 
     def add_imports(self) -> ImportDict:
         """Add imports for the Editor component.

+ 11 - 7
reflex/components/suneditor/editor.pyi

@@ -4,7 +4,7 @@
 # This file was generated by `reflex/utils/pyi_generator.py`!
 # ------------------------------------------------------
 import enum
-from typing import Any, Dict, List, Literal, Optional, Union, overload
+from typing import Any, Dict, List, Literal, Optional, Tuple, Union, overload
 
 from reflex.base import Base
 from reflex.components.component import NoSSRComponent
@@ -44,6 +44,11 @@ class EditorOptions(Base):
     rtl: Optional[bool]
     button_list: Optional[List[Union[List[str], str]]]
 
+def on_blur_spec(e: Var, content: Var[str]) -> Tuple[Var[str]]: ...
+def on_paste_spec(
+    e: Var, clean_data: Var[str], max_char_count: Var[bool]
+) -> Tuple[Var[str], Var[bool]]: ...
+
 class Editor(NoSSRComponent):
     def add_imports(self) -> ImportDict: ...
     @overload
@@ -122,15 +127,15 @@ class Editor(NoSSRComponent):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType] = None,
+        on_blur: Optional[EventType[str]] = None,
         on_change: Optional[EventType] = None,
         on_click: Optional[EventType[[]]] = None,
         on_context_menu: Optional[EventType[[]]] = None,
-        on_copy: Optional[EventType] = None,
-        on_cut: Optional[EventType] = None,
+        on_copy: Optional[EventType[[]]] = None,
+        on_cut: Optional[EventType[[]]] = None,
         on_double_click: Optional[EventType[[]]] = None,
         on_focus: Optional[EventType[[]]] = None,
-        on_input: Optional[EventType] = None,
+        on_input: Optional[EventType[[]]] = None,
         on_load: Optional[EventType] = None,
         on_mount: Optional[EventType[[]]] = None,
         on_mouse_down: Optional[EventType[[]]] = None,
@@ -140,8 +145,7 @@ class Editor(NoSSRComponent):
         on_mouse_out: Optional[EventType[[]]] = None,
         on_mouse_over: Optional[EventType[[]]] = None,
         on_mouse_up: Optional[EventType[[]]] = None,
-        on_paste: Optional[EventType] = None,
-        on_resize_editor: Optional[EventType] = None,
+        on_paste: Optional[EventType[str, bool]] = None,
         on_scroll: Optional[EventType[[]]] = None,
         on_unmount: Optional[EventType[[]]] = None,
         toggle_code_view: Optional[EventType] = None,