Skip to main content

things3_cloud/commands/
someday.rs

1use crate::app::Cli;
2use crate::commands::{Command, DetailedArgs};
3use crate::ui::render_element_to_string;
4use crate::ui::views::someday::SomedayView;
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 SomedayArgs {
13    #[command(flatten)]
14    pub detailed: DetailedArgs,
15}
16
17impl Command for SomedayArgs {
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 items = store.someday();
27
28        let mut ui = element! {
29            ContextProvider(value: Context::owned(store.clone())) {
30                ContextProvider(value: Context::owned(today)) {
31                    SomedayView(
32                        items: &items,
33                        detailed: self.detailed.detailed,
34                    )
35                }
36            }
37        };
38        let rendered = render_element_to_string(&mut ui, cli.no_color);
39        writeln!(out, "{}", rendered)?;
40        Ok(())
41    }
42}