bombshell-dev / clack

Effortlessly build beautiful command-line apps
https://clack.cc
5.22k stars 88 forks source link

[Request] Grouped spinners? #152

Open JoshuaKGoldberg opened 10 months ago

JoshuaKGoldberg commented 10 months ago

Is your feature request related to a problem? Please describe.

Grouping (https://github.com/natemoo-re/clack/tree/24a3f4a20019c7dad2f69bcf163a8b5a3f747a16/packages/prompts#grouping) is available right now for prompts, but not for spinners. But I'd like to group the spinners together too: having a parent task and sub-task.

Describe the solution you'd like

Could we add a new spinner API analogous to p.group? Maybe, p.spinnerGroup?

await p.spinnerGroup("Outer group", [
  ["First sub-task", async () => { /* ... */ }],
  ["Second sub-task", async () => { /* ... */ }],
  ["Third sub-task", async () => { /* ... */ }],
]);

Describe alternatives you've considered

In https://github.com/JoshuaKGoldberg/template-typescript-node-package/issues/708 -> https://github.com/JoshuaKGoldberg/create-typescript-app/pull/710 I kind of did it manually, wrapping around Clack. It's not great.

https://github.com/natemoo-re/clack/assets/3335181/a3c6cbe4-8abe-4357-977a-377d4e53d9d1

Additional context

I'd be happy to contribute this, or if you don't want to keep it as a core feature, publish it as a standalone helper package.

JoshuaKGoldberg commented 10 months ago

@cpreston321 that PR doesn't resolve this issue though. It just runs s.start and s.stop around the tasks. This issue is for nesting tasks within the spinners.

cpreston321 commented 10 months ago

@JoshuaKGoldberg Got it, i reopened the issue.

So if task 1 completes it moves to task 2.. Let's say if task 2 fails does that kick out of the task process / cancel the spinner ?


Also if it easier you can create a draft pull request with some examples. I think for this functionality we can keep this at the @clack/prompt level. I think in the future we can think more of creating standalone helper primitives in a separate package.

JoshuaKGoldberg commented 10 months ago

if task 2 fails does that kick out of the task process / cancel the spinner ?

I would think so, yeah. At least by default. Maybe there could be an API option for whether to bail or continue?

create a draft pull request with some examples

Yes! https://github.com/natemoo-re/clack/pull/158 is roughly what I was thinking of. I haven't put too much thought into the API design, pending posting here.