clickup_cli/commands/
shared.rs1use crate::client::ClickUpClient;
2use crate::commands::auth::resolve_token;
3use crate::commands::workspace::resolve_workspace;
4use crate::error::CliError;
5use crate::output::OutputConfig;
6use crate::Cli;
7use clap::Subcommand;
8
9#[derive(Subcommand)]
10pub enum SharedCommands {
11 List,
13}
14
15pub async fn execute(command: SharedCommands, cli: &Cli) -> Result<(), CliError> {
16 let token = resolve_token(cli)?;
17 let client = ClickUpClient::new(&token, cli.timeout)?;
18 let output = OutputConfig::from_cli(&cli.output, &cli.fields, cli.no_header, cli.quiet);
19
20 match command {
21 SharedCommands::List => {
22 let team_id = resolve_workspace(cli)?;
23 let resp = client.get(&format!("/v2/team/{}/shared", team_id)).await?;
24
25 if cli.output == "json" {
26 println!("{}", serde_json::to_string_pretty(&resp).unwrap());
27 return Ok(());
28 }
29
30 let shared = resp.get("shared").cloned().unwrap_or(resp);
31 let tasks = shared
32 .get("tasks")
33 .and_then(|v| v.as_array())
34 .map(|a| a.len())
35 .unwrap_or(0);
36 let lists = shared
37 .get("lists")
38 .and_then(|v| v.as_array())
39 .map(|a| a.len())
40 .unwrap_or(0);
41 let folders = shared
42 .get("folders")
43 .and_then(|v| v.as_array())
44 .map(|a| a.len())
45 .unwrap_or(0);
46
47 let summary = vec![serde_json::json!({
48 "tasks": tasks,
49 "lists": lists,
50 "folders": folders,
51 })];
52 output.print_items(&summary, &["tasks", "lists", "folders"], "tasks");
53 Ok(())
54 }
55 }
56}