Skip to content

Commit f325a53

Browse files
authored
fix(progress): the progress returns isCancelled without real-time refresh (#616)
1 parent 5ac9e73 commit f325a53

5 files changed

Lines changed: 32 additions & 1 deletion

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@clack/prompts": patch
3+
"@clack/core": patch
4+
---
5+
6+
Fix that isCancelled returned after calling cancel and start methods in progress does not refresh.

‎packages/prompts/src/progress-bar.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ export function progress({
6767
error: spin.error,
6868
clear: spin.clear,
6969
advance,
70-
isCancelled: spin.isCancelled,
70+
get isCancelled() {
71+
return spin.isCancelled;
72+
},
7173
message: (msg: string) => advance(0, msg),
7274
};
7375
}

‎packages/prompts/src/spinner.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export const spinner = ({
134134

135135
const start = (msg = ''): void => {
136136
isSpinnerActive = true;
137+
isCancelled = false;
137138
_message = removeTrailingDots(msg);
138139
_origin = performance.now();
139140
registerHooks();
@@ -186,6 +187,7 @@ export const spinner = ({
186187
const _stop = (msg = '', code = 0, silent: boolean = false): void => {
187188
if (!isSpinnerActive) return;
188189
isSpinnerActive = false;
190+
isCancelled = code === 1;
189191
clearInterval(loop);
190192
if (!accessible) {
191193
clearPrevMessage();

‎packages/prompts/test/progress-bar.test.ts‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@ describe.each(['true', 'false'])('prompts - progress (isCI = %s)', (isCI) => {
9999
expect(output.buffer).toMatchSnapshot();
100100
});
101101

102+
test('tracks cancellation', () => {
103+
const result = prompts.progress({ output });
104+
105+
result.start();
106+
result.cancel();
107+
108+
expect(result.isCancelled).toBe(true);
109+
});
110+
102111
test('renders error symbol when calling error()', () => {
103112
const result = prompts.progress({ output });
104113

‎packages/prompts/test/spinner.test.ts‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,18 @@ describe.each(['true', 'false'])('spinner (isCI = %s)', (isCI) => {
130130
expect(output.buffer).toMatchSnapshot();
131131
});
132132

133+
test('tracks cancellation and resets it on restart', () => {
134+
const result = prompts.spinner({ output });
135+
136+
result.start();
137+
result.cancel();
138+
expect(result.isCancelled).toBe(true);
139+
140+
result.start();
141+
expect(result.isCancelled).toBe(false);
142+
result.stop();
143+
});
144+
133145
test('renders error symbol when calling error()', () => {
134146
const result = prompts.spinner({ output });
135147

0 commit comments

Comments
 (0)