|
3 | 3 | // SPDX-License-Identifier: MIT
|
4 | 4 | use serde::{Deserialize, Deserializer};
|
5 | 5 | use serde_json::Value as JsonValue;
|
| 6 | +use serialize_to_javascript::{default_template, DefaultTemplate, Template}; |
6 | 7 | use tauri_runtime::window::is_label_valid;
|
7 | 8 |
|
8 | 9 | use crate::plugin::{Builder, TauriPlugin};
|
9 | 10 | use crate::{command, ipc::CallbackFn, EventId, Result, Runtime};
|
10 |
| -use crate::{AppHandle, Emitter, Webview}; |
| 11 | +use crate::{AppHandle, Emitter, Manager, Webview}; |
11 | 12 |
|
12 | 13 | use super::EventName;
|
13 | 14 | use super::EventTarget;
|
@@ -75,11 +76,33 @@ async fn emit_to<R: Runtime>(
|
75 | 76 | }
|
76 | 77 |
|
77 | 78 | /// Initializes the event plugin.
|
78 |
| -pub(crate) fn init<R: Runtime>() -> TauriPlugin<R> { |
| 79 | +pub(crate) fn init<R: Runtime, M: Manager<R>>(manager: &M) -> TauriPlugin<R> { |
| 80 | + let listeners = manager.manager().listeners(); |
| 81 | + |
| 82 | + #[derive(Template)] |
| 83 | + #[default_template("./init.js")] |
| 84 | + struct InitJavascript { |
| 85 | + #[raw] |
| 86 | + unregister_listener_function: String, |
| 87 | + } |
| 88 | + |
| 89 | + let init_script = InitJavascript { |
| 90 | + unregister_listener_function: format!( |
| 91 | + "(event, eventId) => {}", |
| 92 | + crate::event::unlisten_js_script(listeners.listeners_object_name(), "event", "eventId") |
| 93 | + ), |
| 94 | + }; |
| 95 | + |
79 | 96 | Builder::new("event")
|
80 | 97 | .invoke_handler(crate::generate_handler![
|
81 | 98 | #![plugin(event)]
|
82 | 99 | listen, unlisten, emit, emit_to
|
83 | 100 | ])
|
| 101 | + .js_init_script( |
| 102 | + init_script |
| 103 | + .render_default(&Default::default()) |
| 104 | + .unwrap() |
| 105 | + .to_string(), |
| 106 | + ) |
84 | 107 | .build()
|
85 | 108 | }
|
0 commit comments