Skip to main content

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}