Browse Source

fix(core): properly emit events with object payload, closes #5482 (#5492)

Lucas Fernandes Nogueira 2 năm trước cách đây
mục cha
commit
79dd6e16a7

+ 5 - 0
.changes/fix-event-payload.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch
+---
+
+Properly emit events with object payload.

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
core/tauri/scripts/bundle.global.js


+ 16 - 3
core/tauri/src/endpoints/event.rs

@@ -14,6 +14,7 @@ use crate::{
   Manager, Runtime,
 };
 use serde::{de::Deserializer, Deserialize};
+use serde_json::Value as JsonValue;
 use tauri_macros::{command_enum, CommandModule};
 
 pub struct EventId(String);
@@ -73,7 +74,7 @@ pub enum Cmd {
   Emit {
     event: EventId,
     window_label: Option<WindowLabel>,
-    payload: Option<String>,
+    payload: Option<JsonValue>,
   },
 }
 
@@ -127,10 +128,22 @@ impl Cmd {
     context: InvokeContext<R>,
     event: EventId,
     window_label: Option<WindowLabel>,
-    payload: Option<String>,
+    payload: Option<JsonValue>,
   ) -> super::Result<()> {
     // dispatch the event to Rust listeners
-    context.window.trigger(&event.0, payload.clone());
+    context.window.trigger(
+      &event.0,
+      // TODO: dispatch any serializable value instead of a string in v2
+      payload.as_ref().and_then(|p| {
+        serde_json::to_string(&p)
+          .map_err(|e| {
+            #[cfg(debug_assertions)]
+            eprintln!("{}", e);
+            e
+          })
+          .ok()
+      }),
+    );
 
     if let Some(target) = window_label {
       context

+ 1 - 1
tooling/api/src/helpers/event.ts

@@ -60,7 +60,7 @@ async function emit(
       cmd: 'emit',
       event,
       windowLabel,
-      payload: typeof payload === 'string' ? payload : JSON.stringify(payload)
+      payload
     }
   })
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác