Fix merge conflicts with new event system

This commit is contained in:
Jonathan Kelley committed 2024-01-05 12:28:33 -08:00
1 parent 47306bf89b
commit 8e9984b4b5
3 files changed
+32 -27

No files matched your search

+31 -11
View File
@@ -11,7 +11,10 @@ use crate::{
};
use crossbeam_channel::Receiver;
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::{
cell::{Cell, RefCell},
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))]
app.connect_hotreload();
@@ -229,14 +238,14 @@ impl<P: 'static> App<P> {
} = evt;
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
let as_any = match data {
dioxus_html::EventData::Mounted => Rc::new(MountedData::new(DesktopElement::new(
element,
view.desktop_context.clone(),
view.desktop_context.query.clone(),
))),
dioxus_html::EventData::Mounted => {
let element = DesktopElement::new(element, view.desktop_context.clone(), query);
Rc::new(PlatformEventData::new(Box::new(MountedData::new(element))))
}
_ => data.into_any(),
};
@@ -263,17 +272,28 @@ impl<P: 'static> App<P> {
let Ok(file_dialog) = serde_json::from_value::<FileDialogRequest>(msg.params()) else {
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 event_name = &file_dialog.event;
let event_bubbles = file_dialog.bubbles;
let files = file_dialog.get_file_event();
let data = Rc::new(FormData {
value: Default::default(),
values: Default::default(),
files: Some(Arc::new(NativeFileEngine::new(files))),
});
let data = Rc::new(PlatformEventData::new(Box::new(DesktopFileUploadForm {
files: Arc::new(NativeFileEngine::new(files)),
})));
let view = self.webviews.get_mut(&window).unwrap();
-16
View File
@@ -5,22 +5,6 @@ use serde::{Deserialize, Serialize};
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;
impl HtmlEventConverter for SerializedHtmlEventConverter {
+1
View File
@@ -12,6 +12,7 @@ mod edits;
mod element;
mod escape;
mod eval;
mod events;
mod file_upload;
mod hooks;
mod ipc;