graphile_worker_admin_ui_client 0.1.3

Leptos WASM client for the embedded graphile_worker admin UI
Documentation
use std::cell::RefCell;
use std::rc::Rc;

use gloo_timers::callback::Interval;
use leptos::prelude::*;

use super::super::api::RefreshSignals;
use super::state::{empty_overview, stored_accent, stored_compact_density, stored_theme};
use crate::wasm::types::{JobState, ListedJob, Modal};

#[derive(Clone)]
pub(super) struct AdminSignals {
    pub(super) jobs: RwSignal<Vec<ListedJob>>,
    pub(super) overview: RwSignal<crate::wasm::types::OverviewResponse>,
    pub(super) selected_jobs: RwSignal<Vec<i64>>,
    pub(super) selected_workers: RwSignal<Vec<String>>,
    pub(super) active_state: RwSignal<JobState>,
    pub(super) search: RwSignal<String>,
    pub(super) task_filter: RwSignal<String>,
    pub(super) queue_filter: RwSignal<String>,
    pub(super) key_filter: RwSignal<String>,
    pub(super) worker_filter: RwSignal<String>,
    pub(super) limit: RwSignal<i64>,
    pub(super) modal: RwSignal<Option<Modal>>,
    pub(super) toast: RwSignal<Option<String>>,
    pub(super) token: RwSignal<String>,
    pub(super) refreshing: RwSignal<bool>,
    pub(super) refresh_pending: RwSignal<bool>,
    pub(super) theme: RwSignal<String>,
    pub(super) accent: RwSignal<String>,
    pub(super) compact: RwSignal<bool>,
    pub(super) auto_refresh_enabled: RwSignal<bool>,
    pub(super) auto_refresh_timer: Rc<RefCell<Option<Interval>>>,
}

impl AdminSignals {
    pub(super) fn new() -> Self {
        Self {
            jobs: RwSignal::new(Vec::new()),
            overview: RwSignal::new(empty_overview()),
            selected_jobs: RwSignal::new(Vec::new()),
            selected_workers: RwSignal::new(Vec::new()),
            active_state: RwSignal::new(JobState::All),
            search: RwSignal::new(String::new()),
            task_filter: RwSignal::new(String::new()),
            queue_filter: RwSignal::new(String::new()),
            key_filter: RwSignal::new(String::new()),
            worker_filter: RwSignal::new(String::new()),
            limit: RwSignal::new(100),
            modal: RwSignal::new(None),
            toast: RwSignal::new(None),
            token: RwSignal::new(
                super::super::browser::storage_get("gw-admin-token").unwrap_or_default(),
            ),
            refreshing: RwSignal::new(false),
            refresh_pending: RwSignal::new(false),
            theme: RwSignal::new(stored_theme()),
            accent: RwSignal::new(stored_accent()),
            compact: RwSignal::new(stored_compact_density()),
            auto_refresh_enabled: RwSignal::new(false),
            auto_refresh_timer: Rc::new(RefCell::new(None)),
        }
    }

    pub(super) fn refresh(&self) -> RefreshSignals {
        RefreshSignals {
            token: self.token,
            limit: self.limit,
            overview: self.overview,
            jobs: self.jobs,
            selected_jobs: self.selected_jobs,
            toast: self.toast,
            refreshing: self.refreshing,
            refresh_pending: self.refresh_pending,
        }
    }
}