Skip to main content

things3_cloud/commands/
anytime.rs

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