use dioxus::prelude::*;
use zino_core::{json, SharedString};
pub fn TuiEditor(props: TuiEditorProps) -> Element {
let eval = eval(
r#"
let options = await dioxus.recv();
options.el = document.getElementById(options.id);
options.plugins = [toastui.Editor.plugin.codeSyntaxHighlight];
const tuiEditor = new toastui.Editor(options);
"#,
);
rsx! {
div {
id: "{props.id}",
onmounted: move |_event| {
let options = json!({
"id": props.id,
"height": props.height,
"minHeight": props.min_height,
"initialValue": props.content,
"initialEditType": props.edit_type,
"previewStyle": props.preview_style,
"language": props.locale,
"theme": props.theme,
"referenceDefinition": true,
"usageStatistics": false,
});
eval.send(options).ok();
},
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct TuiEditorProps {
#[props(into, default = "editor".into())]
pub id: SharedString,
#[props(into)]
pub content: SharedString,
#[props(into, default = "auto".into())]
pub height: SharedString,
#[props(into, default = "300px".into())]
pub min_height: SharedString,
#[props(into, default = "markdown".into())]
pub edit_type: SharedString,
#[props(into, default = "vertical".into())]
pub preview_style: SharedString,
#[props(into, default = "light".into())]
pub theme: SharedString,
#[props(into, default = "en-US".into())]
pub locale: SharedString,
}