ratatui_kit/components/
context_provider.rs

1//! ContextProvider 组件:上下文依赖注入容器,为子组件提供全局/局部 context。
2//!
3//! 常用于全局状态、主题、配置等跨组件共享数据场景。
4//!
5//! ## 示例
6//! ```rust
7//! element!(ContextProvider(value: Some(Context::owned(MyData { ... }))) {
8//!     ChildComponent()
9//! })
10//! ```
11//! 子组件可通过 `hooks.use_context::<MyData>()` 获取注入的数据。
12
13use crate::{AnyElement, Component, Context};
14use ratatui_kit_macros::Props;
15
16#[derive(Default, Props)]
17/// ContextProvider 组件属性。
18pub struct ContextProviderProps<'a> {
19    /// 子元素列表。
20    pub children: Vec<AnyElement<'a>>,
21    /// 注入的上下文对象。
22    pub value: Option<Context<'a>>,
23}
24
25/// ContextProvider 组件实现。
26pub struct ContextProvider;
27
28impl Component for ContextProvider {
29    type Props<'a> = ContextProviderProps<'a>;
30    fn new(_props: &Self::Props<'_>) -> Self {
31        Self
32    }
33
34    fn update(
35        &mut self,
36        props: &mut Self::Props<'_>,
37        _hooks: crate::Hooks,
38        updater: &mut crate::ComponentUpdater,
39    ) {
40        updater.set_transparent_layout(true);
41        updater.update_children(
42            props.children.iter_mut(),
43            props.value.as_mut().map(|v| v.borrow()),
44        );
45    }
46}