Skip to main content

things3_cloud/commands/
inbox.rs

1use crate::app::Cli;
2use crate::commands::{Command, DetailedArgs};
3use crate::ui::render_element_to_string;
4use crate::ui::views::inbox::InboxView;
5use anyhow::Result;
6use clap::Args;
7use iocraft::prelude::*;
8use std::sync::Arc;
9
10#[derive(Debug, Default, Args)]
11pub struct InboxArgs {
12    #[command(flatten)]
13    pub detailed: DetailedArgs,
14}
15
16impl Command for InboxArgs {
17    fn run_with_ctx(
18        &self,
19        cli: &Cli,
20        out: &mut dyn std::io::Write,
21        ctx: &mut dyn crate::cmd_ctx::CmdCtx,
22    ) -> Result<()> {
23        let store = Arc::new(cli.load_store()?);
24        let today = ctx.today();
25        let tasks = store.inbox();
26
27        let mut ui = element! {
28            ContextProvider(value: Context::owned(store.clone())) {
29                ContextProvider(value: Context::owned(today)) {
30                    InboxView(
31                        items: &tasks,
32                        detailed: self.detailed.detailed,
33                    )
34                }
35            }
36        };
37        let rendered = render_element_to_string(&mut ui, cli.no_color);
38        writeln!(out, "{}", rendered)?;
39        Ok(())
40    }
41}