hyle_dioxus/lib.rs
1//! Dioxus integration for hyle.
2//!
3//! Provides hooks and context utilities for building data-driven UIs with hyle
4//! in Dioxus applications, calling the `hyle` crate directly without any WASM bridge.
5//!
6//! # Quick start
7//!
8//! ```rust,ignore
9//! use std::sync::Arc;
10//! use dioxus::prelude::*;
11//! use hyle_dioxus::{use_context_provider, HyleConfig, use_data, HyleAdapter, use_adapter_config};
12//!
13//! fn app() -> Element {
14//! use_context_provider(|| HyleConfig { blueprint: Arc::new(my_blueprint()) });
15//! use_adapter_config!(make_rest_adapter("http://localhost:3001/api"));
16//! rsx! { Router::<Route> {} }
17//! }
18//! ```
19
20mod context;
21mod filter;
22mod hooks;
23mod query;
24mod types;
25#[cfg(feature = "axum")]
26pub mod axum;
27#[cfg(feature = "axum")]
28pub use axum::HyleRenderer;
29
30pub use context::{use_context_provider, use_hyle_components, HyleConfig};
31pub use filter::{FilterField, FormFilterField};
32pub use hooks::{form_body, use_data, use_filters, use_form, use_forma, use_list, use_list_with_filters, use_manifest, use_mutation};
33pub use query::{
34 make_fullstack_adapter, use_dioxus_mutation, use_fullstack_source,
35 DioxusMutationOptions, InvalidationSignal,
36};
37pub use types::{
38 field_type_key, BoundMutateInput, BoundMutation, BoundMutations, DioxusFieldChangeFn,
39 DioxusFieldChangeMap, HyleAdapter,
40 HyleComponents, HyleFilterField, HyleFilterFieldProps,
41 HyleFiltersState, HyleFormState, HyleListState, HyleMutation,
42 HyleSourceState, HyleValueProps, UseFiltersOptions, UseFormOptions,
43 UseSource,
44};
45
46// Re-export hyle types that callers need when building blueprints and queries.
47pub use hyle::{
48 Blueprint, Column, Field, FieldType, Forma, FormaContext, FormaField, FormaFieldType, Manifest,
49 Model, Primitive, PurifyError, Query, Row, Sort, Source, Value,
50};
51
52// ── Adapter config macro ──────────────────────────────────────────────────────
53
54/// Provide a `HyleAdapter` as Dioxus context.
55///
56/// Call this at the **top level** of your root component, passing a fully
57/// constructed `HyleAdapter` (e.g. from `make_fullstack_adapter`).
58/// All hooks then read source and mutations from context automatically.
59///
60/// ```rust,ignore
61/// use hyle_dioxus::use_adapter_config;
62/// use hyle_dioxus::make_fullstack_adapter;
63///
64/// fn App() -> Element {
65/// use_adapter_config!(make_fullstack_adapter(...));
66/// // ...
67/// }
68/// ```
69#[macro_export]
70macro_rules! use_adapter_config {
71 ($adapter:expr) => {
72 {
73 use dioxus::prelude::use_context_provider;
74 use hyle_dioxus::HyleAdapter;
75 let _hyle_adapter: HyleAdapter = $adapter;
76 use_context_provider(|| _hyle_adapter);
77 }
78 };
79}