things3_cloud/commands/
inbox.rs1use 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}