Fix merge conflicts with new event system
This commit is contained in:
3 files changed
+32
-27
No files matched your search
+31
-11
@@ -11,7 +11,10 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use crossbeam_channel::Receiver;
|
use crossbeam_channel::Receiver;
|
||||||
use dioxus_core::{Component, ElementId, VirtualDom};
|
use dioxus_core::{Component, ElementId, VirtualDom};
|
||||||
use dioxus_html::{native_bind::NativeFileEngine, FormData, HtmlEvent, MountedData};
|
use dioxus_html::{
|
||||||
|
native_bind::NativeFileEngine, FileEngine, FormData, HasFormData, HtmlEvent, MountedData,
|
||||||
|
PlatformEventData, SerializedHtmlEventConverter,
|
||||||
|
};
|
||||||
use std::{
|
use std::{
|
||||||
cell::{Cell, RefCell},
|
cell::{Cell, RefCell},
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
@@ -76,6 +79,12 @@ impl<P: 'static> App<P> {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Copy over any assets we find
|
||||||
|
crate::collect_assets::copy_assets();
|
||||||
|
|
||||||
|
// Set the event converter
|
||||||
|
dioxus_html::set_event_converter(Box::new(SerializedHtmlEventConverter));
|
||||||
|
|
||||||
#[cfg(all(feature = "hot-reload", debug_assertions))]
|
#[cfg(all(feature = "hot-reload", debug_assertions))]
|
||||||
app.connect_hotreload();
|
app.connect_hotreload();
|
||||||
|
|
||||||
@@ -229,14 +238,14 @@ impl<P: 'static> App<P> {
|
|||||||
} = evt;
|
} = evt;
|
||||||
|
|
||||||
let view = self.webviews.get_mut(&id).unwrap();
|
let view = self.webviews.get_mut(&id).unwrap();
|
||||||
|
let query = view.desktop_context.query.clone();
|
||||||
|
|
||||||
// check for a mounted event placeholder and replace it with a desktop specific element
|
// check for a mounted event placeholder and replace it with a desktop specific element
|
||||||
let as_any = match data {
|
let as_any = match data {
|
||||||
dioxus_html::EventData::Mounted => Rc::new(MountedData::new(DesktopElement::new(
|
dioxus_html::EventData::Mounted => {
|
||||||
element,
|
let element = DesktopElement::new(element, view.desktop_context.clone(), query);
|
||||||
view.desktop_context.clone(),
|
Rc::new(PlatformEventData::new(Box::new(MountedData::new(element))))
|
||||||
view.desktop_context.query.clone(),
|
}
|
||||||
))),
|
|
||||||
_ => data.into_any(),
|
_ => data.into_any(),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -263,17 +272,28 @@ impl<P: 'static> App<P> {
|
|||||||
let Ok(file_dialog) = serde_json::from_value::<FileDialogRequest>(msg.params()) else {
|
let Ok(file_dialog) = serde_json::from_value::<FileDialogRequest>(msg.params()) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
struct DesktopFileUploadForm {
|
||||||
|
files: Arc<NativeFileEngine>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HasFormData for DesktopFileUploadForm {
|
||||||
|
fn files(&self) -> Option<Arc<dyn FileEngine>> {
|
||||||
|
Some(self.files.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn as_any(&self) -> &dyn std::any::Any {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let id = ElementId(file_dialog.target);
|
let id = ElementId(file_dialog.target);
|
||||||
let event_name = &file_dialog.event;
|
let event_name = &file_dialog.event;
|
||||||
let event_bubbles = file_dialog.bubbles;
|
let event_bubbles = file_dialog.bubbles;
|
||||||
let files = file_dialog.get_file_event();
|
let files = file_dialog.get_file_event();
|
||||||
|
|
||||||
let data = Rc::new(FormData {
|
let data = Rc::new(PlatformEventData::new(Box::new(DesktopFileUploadForm {
|
||||||
value: Default::default(),
|
files: Arc::new(NativeFileEngine::new(files)),
|
||||||
values: Default::default(),
|
})));
|
||||||
files: Some(Arc::new(NativeFileEngine::new(files))),
|
|
||||||
});
|
|
||||||
|
|
||||||
let view = self.webviews.get_mut(&window).unwrap();
|
let view = self.webviews.get_mut(&window).unwrap();
|
||||||
|
|
||||||
|
|||||||
@@ -5,22 +5,6 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use crate::element::DesktopElement;
|
use crate::element::DesktopElement;
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Debug, Clone)]
|
|
||||||
pub struct IpcMessage {
|
|
||||||
method: String,
|
|
||||||
params: serde_json::Value,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IpcMessage {
|
|
||||||
pub(crate) fn method(&self) -> &str {
|
|
||||||
self.method.as_str()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn params(self) -> serde_json::Value {
|
|
||||||
self.params
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) struct SerializedHtmlEventConverter;
|
pub(crate) struct SerializedHtmlEventConverter;
|
||||||
|
|
||||||
impl HtmlEventConverter for SerializedHtmlEventConverter {
|
impl HtmlEventConverter for SerializedHtmlEventConverter {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ mod edits;
|
|||||||
mod element;
|
mod element;
|
||||||
mod escape;
|
mod escape;
|
||||||
mod eval;
|
mod eval;
|
||||||
|
mod events;
|
||||||
mod file_upload;
|
mod file_upload;
|
||||||
mod hooks;
|
mod hooks;
|
||||||
mod ipc;
|
mod ipc;
|
||||||
|
|||||||
Reference in new issue
Block a user