diff --git a/packages/inquirer/lib/prompts/rawlist.js b/packages/inquirer/lib/prompts/rawlist.js index 9728af39b..da3cfdd8c 100644 --- a/packages/inquirer/lib/prompts/rawlist.js +++ b/packages/inquirer/lib/prompts/rawlist.js @@ -73,9 +73,11 @@ class RawListPrompt extends Base { validation.success.forEach(this.onEnd.bind(this)); validation.error.forEach(this.onError.bind(this)); - events.normalizedUpKey.pipe(takeUntil(events.line)).forEach(this.onUpKey.bind(this)); + events.normalizedUpKey + .pipe(takeUntil(validation.success)) + .forEach(this.onUpKey.bind(this)); events.normalizedDownKey - .pipe(takeUntil(events.line)) + .pipe(takeUntil(validation.success)) .forEach(this.onDownKey.bind(this)); events.keypress .pipe(takeUntil(validation.success)) diff --git a/packages/inquirer/test/specs/prompts/rawlist.js b/packages/inquirer/test/specs/prompts/rawlist.js index e35ac9ed7..a369d66dc 100644 --- a/packages/inquirer/test/specs/prompts/rawlist.js +++ b/packages/inquirer/test/specs/prompts/rawlist.js @@ -110,6 +110,22 @@ describe('`rawlist` prompt', () => { this.rl.emit('line', this.rl.line); }); + it('should allow for arrow navigation after invalid input', function (done) { + this.rawlist + .run() + .then((answer) => { + expect(answer).to.equal('bar'); + done(); + }) + .catch(done); + + this.rl.emit('line', 'blah'); + this.rl.input.emit('keypress', '', { name: 'down' }); + this.rl.input.emit('keypress', '', { name: 'down' }); + this.rl.input.emit('keypress', '', { name: 'up' }); + this.rl.emit('line', this.rl.line); + }); + describe('going out of boundaries', () => { beforeEach(function () { this.pressKey = function (dir, times) {