nova_forms/components/
summary.rs

1use leptos::*;
2
3use crate::{BaseGroupContext, GroupContext, InputContext, Node};
4
5#[component]
6pub fn Summary() -> impl IntoView {
7    let group = expect_context::<BaseGroupContext>();
8
9    view! {
10        <div class="summary">
11            <SummaryGroup group=group.to_group_context() />
12        </div>
13    }
14}
15
16#[component]
17fn SummaryGroup(
18    group: GroupContext,
19) -> impl IntoView {
20    view! {
21        <div class="summary-group">
22            <span class="summary-group-label">{group.label()}</span>
23            <div class="summary-group-content">
24                <For
25                    each={move || group.nodes()}
26                    key={move |node| node.qs()}
27                    children={move |node| {
28                        view! {
29                            <div class="summary-group-node">
30                                {match node {
31                                    Node::Group(group) => view! {
32                                        <SummaryGroup group=group />
33                                    },
34                                    Node::Input(input) => view! {
35                                        <SummaryInput input=input />
36                                    }
37                                }}
38                            </div>
39                        }
40                    }}
41                />
42            </div>
43        </div>
44    }
45}
46
47#[component]
48fn SummaryInput(
49    input: InputContext,
50) -> impl IntoView {
51    view! {
52        <div class="summary-input">
53            <span class="summary-input-label">{input.label()}</span>
54            <span class="summary-input-value">{input.raw_value()}</span>
55        </div>
56    }
57}