use serde::{Deserialize, Serialize}; use tokio::sync::mpsc::{UnboundedSender, error::SendError}; use crate::{ app::{GlobalAction, run::Action}, literature::Publication, }; use brittle_macros::component; #[derive(Serialize, Deserialize, Default)] pub struct SeedingComponent { pub input: String, #[serde(skip)] pub included_publications: Vec, } #[component(SeedingAction)] impl SeedingComponent { #[action] pub fn submit( &mut self, action_tx: &UnboundedSender, ) -> Result<(), SendError> { action_tx .send(GlobalAction::FetchAndIncludeSeed(self.input.clone()).into()) } #[action] pub fn clear_input(&mut self) { self.input.clear(); } #[action] pub fn enter_char(&mut self, c: char) { self.input.push(c) } #[action] pub fn enter_backspace(&mut self) { if self.input.len() > 0 { self.input.truncate(self.input.len() - 1); } } }