Procházet zdrojové kódy

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

Lucas Fernandes Nogueira před 2 roky
rodič
revize
79dd6e16a7

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

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

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 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
     }
   })
 }

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů