//! Example: SSR
//!
//! This example shows how we can render the Dioxus Virtualdom using SSR.

use std::fmt::Write;

use dioxus::prelude::*;
use dioxus_ssr::config::SsrConfig;

fn main() {
    // We can render VirtualDoms
    let mut vdom = VirtualDom::new(app);
    let _ = vdom.rebuild();
    println!("{}", dioxus_ssr::render_vdom(&vdom));

    // Or we can render rsx! calls themselves
    println!(
        "{}",
        dioxus_ssr::render_lazy(rsx! {
            div {
                h1 { "Hello, world!" }
            }
        })
    );

    // We can configure the SSR rendering to add ids for rehydration
    println!(
        "{}",
        dioxus_ssr::render_vdom_cfg(&vdom, SsrConfig::default().pre_render(true))
    );

    // We can even render as a writer
    let mut file = String::new();
    let _ = file.write_fmt(format_args!(
        "{}",
        dioxus_ssr::SsrRender::default().render_vdom(&vdom)
    ));
    println!("{}", file);
}

fn app(cx: Scope) -> Element {
    cx.render(rsx!(
        div {
            h1 { "Title" }
            p { "Body" }
        }
    ))
}
