I want to use the previous answer for the next question in inquirer, and this is my code:
const promptForMissingOptions = async (options) => {
const questions = [];
if (!options.name) {
questions.push({
type: "input",
name: "name",
message: "Name:",
});
}
if (!options.file) {
questions.push({
type: "checkbox",
name: "lots",
message: "Select the categories:",
pageSize: 30,
choices: () => {
const files = helpers.getFileNames();
return Object.keys(files);
},
});
}
if (answers.lots) {
questions.push({
type: "checkbox",
name: "files",
message: "Select the files:",
pageSize: 50,
choices: () => {
const choices = helpers.getFileNames();
return Object.keys(
Object.keys(x)
.filter((key) => answers.lots.includes(key))
.reduce((obj, key) => {
obj[key] = x[key];
return obj;
}, {})
).reduce(
(r, k) =>
r.concat(
new inquirer.Separator(
chalk.underline.bold.bgMagenta(
"------------------------ " + k + " ------------------------"
)
),
choices[k]
),
[]
);
},
});
}
const answers = await inquirer.prompt(questions);
return {
files: options.file ? [options.file] : answers.files,
name: options.name || answers.name,
};
};
let options = await promptForMissingOptions(options);
What I want to do here is to use the answer from the second question for the third question.
I tried the solution in here : Is there a way to use previous answers in inquirer when presenting a prompt (inquirer v6)?
Which didn't work for my case.
How can I solve this ?
Thanks in advance.
Before I get to your question, I would like to point out some optimisations to your example code that would help with this:
Where you currently using this:
You could achieve the same with:
Two points from the docs:
The wording here is slightly misleading, but what it boils down to here is that when the function you assign to
when
is called, it gets the current user answers passed to it as the first argument, and ultimately your function must return eithertrue
orfalse
to determine if it should be shown to the user.The description does go on to talk about possible answer value types, but the key takeaway here is the first function parameter: "the current inquirer session answers". At the point of Question 3, you have access to the answers from Question 2 in there.
Now, to apply this concept to your example questions array, I'll use an example applying the above concepts for brevity.
I believe the code itself and the small comment in Question 3 should be clear enough here, but please do let me know whether or not this helps?