Skip to content
Snippets Groups Projects
mod.rs 1.4 KiB
Newer Older
Louis's avatar
Louis committed
use crate::{
    widget::{widget_update, widget_update_with_context, EmptyState, Widget},
    KayakUIPlugin,
};

mod context;
mod details;
mod summary;

pub use self::details::{AccordionDetails, AccordionDetailsBundle};
pub use context::{AccordionContext, AccordionContextBundle, AccordionContextProvider};
pub use summary::{AccordionSummary, AccordionSummaryBundle};

use super::TransitionState;

pub struct AccordionPlugin;
impl KayakUIPlugin for AccordionPlugin {
    fn build(&self, context: &mut crate::context::KayakRootContext) {
        context.add_widget_data::<AccordionContextProvider, EmptyState>();
        context.add_widget_system(
            AccordionContextProvider::default().get_name(),
            widget_update::<AccordionContextProvider, EmptyState>,
            context::render,
        );

        context.add_widget_data::<AccordionSummary, EmptyState>();
        context.add_widget_system(
            AccordionSummary::default().get_name(),
            widget_update_with_context::<AccordionSummary, EmptyState, AccordionContext>,
            summary::render,
        );

        context.add_widget_data::<AccordionDetails, EmptyState>();
        context.add_widget_system(
            AccordionDetails::default().get_name(),
            widget_update_with_context::<AccordionDetails, TransitionState, AccordionContext>,
            details::render,
        );
    }
}