Skip to main content

things3_cloud/commands/
inbox.rs

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