speki-app 0.1.0

ontological flashcard app
use dioxus::prelude::*;
use tracing::info;

use crate::{
    overlays::{
        card_selector::{CardSelector, CardSelectorRender},
        Overender,
    },
    APP, OVERLAY,
};

#[derive(Clone)]
pub struct BrowseState {
    pub browse_page: CardSelector,
    pub prev_cardstate: Option<String>,
}

static BROWSE_STATE: GlobalSignal<BrowseState> = Signal::global(BrowseState::new);

#[component]
pub fn Browse() -> Element {
    let mut browse_state = BROWSE_STATE.cloned();

    let card_state = APP
        .read()
        .inner()
        .provider
        .cards
        .currently_applied_ledger_hash();
    if browse_state.prev_cardstate != card_state {
        *BROWSE_STATE.write() = BrowseState::new();
        browse_state = BROWSE_STATE.cloned();
    }

    let overlay = dbg!(OVERLAY.read().get());

    rsx! {
        Overender {
            overlay,
            root: rsx!{
                CardSelectorRender {
                    title: browse_state.browse_page.title.clone(),
                    search: browse_state.browse_page.search.clone(),
                    on_card_selected: browse_state.browse_page.on_card_selected.clone(),
                    cards: browse_state.browse_page.cards.clone(),
                    allow_new: browse_state.browse_page.allow_new.clone(),
                    allowed_cards: browse_state.browse_page.allowed_cards.clone(),
                    filtereditor: browse_state.browse_page.filtereditor.clone(),
                    filtermemo: browse_state.browse_page.filtermemo.clone(),
                    collection: browse_state.browse_page.collection,
                    edit_collection: browse_state.browse_page.edit_collection,
                    instance_of: browse_state.browse_page.instance_of.clone(),
                    reviewable: true,
                }
            }
         }
    }
}

impl BrowseState {
    pub fn new() -> Self {
        info!("creating browse state!");

        let browse_page = CardSelector::new(true, vec![]).no_title();
        let prev_cardstate = APP
            .read()
            .inner()
            .provider
            .cards
            .currently_applied_ledger_hash();

        Self {
            browse_page,
            prev_cardstate,
        }
    }
}