David Faizulaev
David Faizulaev

Reputation: 5741

inquirer package, present questions based on previous answers

I'm using NPM 'inquirer' package in order to present the user various questions. One of them is a 'choices' selection. Is there a way to present follow up questions based on the 'choices' selection?

Here's my code:

    const { prompt } = require('inquirer');
require('colors');

const questions = [
    {
        type: 'input',
        name: 'appName',
        message: 'Enter application name:'
    },
    {
        type: 'input',
        name: 'appDescription',
        message: 'Enter app description:'
    },
    {
        type: 'input',
        name: 'appAuthor',
        message: 'Enter app author:'
    },
    {
        type: 'checkbox',
        name: 'plugins',
        message: 'Select plugins to install:',
        choices: [
            {
                name: 'Cassandra'
            }
        ]
    }
];

module.exports.performQuestions = async () => {
    console.log('\nWelcome to Chef!\n'.underline.italic.cyan);

const answers = await prompt(questions);
if (!answers.appName) {
    console.error('\nPlease provide app name!\n'.red);
    process.exit(1);
}

    answers.appType = 'service';

    return answers;
};

Here I want to present a few more questions if the user selects 'Cassandra' is that possible?

Thanks.

Upvotes: 1

Views: 590

Answers (1)

Ivo Tsochev
Ivo Tsochev

Reputation: 887

You can use "when" and like in the example bellow, the second question will popup only if "Cassandra" is selected:

const QUESTIONS = [
  {
    name: 'your-name',
    type: 'list',
    message: 'Your name:',
    choices: ['Batman', 'Superman', 'Ultron', 'Cassandra'],
  },
  {
    name: 'hello-cassandra',
    type: 'confirm',
    message: 'Oh, hello Cassandra!',
    when: (answers) => answers['your-name'] === 'Cassandra',
  },
]; 


inquirer.prompt(QUESTIONS)
  .then(answers =>
  {
    console.log(answers);
  });

Upvotes: 0

Related Questions