I cannot get my function generatePage to display all the data collected from my prompts. I keep getting undefined as return when the page is rendered. I already made some changes and change some values and it still doesn't go through, any help is appreciated it
This is my index.js
// The require method lets your application know that it needs to use the inquirer package to execute the code below.
const inquirer = require("inquirer");
// The fs module provides a lot of very useful functionality to access and interact with the file system.
// Once you do so, you have access to all its methods, which include: fs.
const fs = require("fs");
// This function is contained in the page-generator file
const generatePage = require("./src/page-generator");
// require the employee classes
const Manager = require("./lib/Manager");
const Engineer = require("./lib/Engineer");
const Intern = require("./lib/Intern");
const pageGenerator = require("./src/page-generator");
// empty array for employees
const employeesArray = [];
// starting with Manager questions as stated in acceptance criteria
const managerQuestions = () => {
return inquirer
.prompt([
{
type: "input",
name: "name",
message: "What is the name of the team manager? (Required)",
validate: (nameInput) => {
if (nameInput) {
return true;
} else {
console.log("Please enter the name of the team manager!");
return false;
}
},
},
{
type: "input",
name: "id",
message: "Enter an employee ID for the manager: (Required)",
// validates answer is a number - NaN = Not-a-Number
validate: (idInput) => {
if (idInput) {
return true;
} else {
console.log("Please enter an employee ID for the manager!");
return false;
}
},
},
{
type: "input",
name: "email",
message: "Enter email address for team manager: (Required)",
// validates email address
validate: function (email) {
valid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email);
if (valid) {
console.log(" Nice!");
return true;
} else {
console.log(" Please enter a valid email");
return false;
}
},
},
{
type: "input",
name: "officeNumber",
message: "Enter office number for manager: (Required)",
validate: (officeNumberInput) => {
if (officeNumberInput) {
return true;
} else {
console.log("Please enter an office number for the manager!");
return false;
}
},
},
])
.then((data) => {
const manager = new Manager(
data.name,
data.id,
data.email,
data.officeNumber
);
// shows all captured data displayed
console.log(manager);
// The push method adds new items to the end of an array. Adding manager to employeesArray
employeesArray.push(manager);
// run addTeamMember function
addTeamMember();
});
}
// Add team member function
const addTeamMember = () => {
console.log(`
===========================
Add employees to the team
===========================
`);
inquirer
.prompt([
{
type: "list",
name: "roles",
message: "Do you want to add an engineer or intern to the team?",
choices: ["Engineer", "Intern", "Team is done"],
},
])
.then((data) => {
// if Engineer is selected, engineerQuestions function will run
if (data.roles === "Engineer") {
engineerQuestions();
// if Intern is selected, internQuestions function will run
} else if (data.roles === "Intern") {
internQuestions();
// if Team is done is selected, the page will be generated
} else {
generateTeam();
}
});
}
// Engineer questions function
const engineerQuestions = () => {
return inquirer
.prompt([
{
type: "input",
name: "name",
message: "What is the name of the team engineer? (Required)",
validate: (nameInput) => {
if (nameInput) {
return true;
} else {
console.log("Please enter the name of the team engineer!");
return false;
}
},
},
{
type: "input",
name: "id",
message: "Enter an employee ID for the engineer: (Required)",
// validates answer is a number - NaN = Not-a-Number
validate: (idInput) => {
if (idInput) {
return true;
} else {
console.log("Please enter an employee ID for the engineer!");
return false;
}
},
},
{
type: "input",
name: "email",
message: "Enter email address for engineer: (Required)",
// validates email address
validate: function (email) {
valid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email);
if (valid) {
console.log("Great job");
return true;
} else {
console.log(" Please enter a valid email");
return false;
}
},
},
{
type: "input",
name: "github",
message: "Enter GitHub username for the team engineer: (Required)",
validate: (officeNumberInput) => {
if (officeNumberInput) {
return true;
} else {
console.log("Please enter GitHub username for the team engineer!");
return false;
}
},
},
])
.then((data) => {
const engineer = new Engineer(
data.name,
data.id,
data.email,
data.github
);
console.log(engineer);
employeesArray.push(engineer);
addTeamMember();
});
}
// Intern questions function
const internQuestions = () => {
return inquirer
.prompt([
{
type: "input",
name: "name",
message: "What is the name of the team intern? (Required)",
validate: (nameInput) => {
if (nameInput) {
return true;
} else {
console.log("Please enter the name of the team intern!");
return false;
}
},
},
{
type: "input",
name: "id",
message: "Enter an employee ID for the intern: (Required)",
// validates there is an answer
validate: (idInput) => {
if (idInput) {
return true;
} else {
console.log("Please enter an employee ID for the intern!");
return false;
}
},
},
{
type: "input",
name: "email",
message: "Enter email address for intern: (Required)",
// validates email address
validate: function (email) {
valid = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email);
if (valid) {
console.log("Great job");
return true;
} else {
console.log("Please enter a valid email");
return false;
}
},
},
{
type: "input",
name: "school",
message:
"Enter the school the intern is currently enrolled or graduated: (Required)",
validate: (schoolInput) => {
if (schoolInput) {
return true;
} else {
console.log(
"Please enter the school the intern is currently enrolled or graduated"
);
return false;
}
},
},
])
.then((data) => {
const intern = new Intern(data.name, data.id, data.email, data.school);
console.log(intern);
employeesArray.push(intern);
addTeamMember();
});
}
// creates a function that generates my page
function generateTeam() {
// Create a function to write html file
fs.writeFile("./dist/index.html", generatePage(employeesArray), (err) => {
if (err) throw new Error(err);
else
console.log(
"Team profile page created in dist folder!"
);
})
}
// Create a function to initialize app
managerQuestions()
This is my page-generator.js
//creates manager html
function generateManager(manager) {
return `
<div class="card employee-card" style="width: 15rem;">
<div class="card-header p-3 mb-2 bg-primary text-white text-center">
<h2 class="card-title">${manager.getName()}</h2>
<h3 class="card-title"><i class="bi bi-cup-hot-fill"></i>${manager.getRole()}</h3>
</div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item">ID: ${manager.getId()} </li>
<li class="list-group-item">Email: <a href="mailto:${manager.getEmail()}"></a></li>
<li class="list-group-item">Office Number: ${manager.getOfficeNumber()}</li>
</ul>
</div>
</div>
`;
}
// create engineer html
function generateEngineer(engineer) {
return `
<div class="card employee-card" style="width: 15rem;">
<div class="card-header p-3 mb-2 bg-primary text-white text-center">
<h2 class="card-title">${engineer.getName()}</h2>
<h3 class="card-title"><i class="bi bi-eyeglasses"></i>${manager.getRole()}</h3>
</div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item">ID: ${engineer.getId()} </li>
<li class="list-group-item">Email: <a href="mailto:${engineer.getEmail()}"></a></li>
<li class="list-group-item">GitHub: <a href="https://github.com/${engineer.getGithub()}"</li>
</ul>
</div>
</div>
`;
}
// create intern html
function generateIntern(intern) {
return `
<div class="card employee-card" style="width: 15rem;">
<div class="card-header p-3 mb-2 bg-primary text-white text-center">
<h2 class="card-title">${intern.getName()}</h2>
<h3 class="card-title"><i class="bi bi-mortarboard-fill"></i>${intern.getRole()}</h3>
</div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item">ID: ${intern.getId()} </li>
<li class="list-group-item">Email: <a href="mailto:${intern.getEmail()}"></a></li>
<li class="list-group-item">School: ${intern.getSchool()}</li>
</ul>
</div>
</div>
`;
}
}
// export function to generate entire page
module.exports = (team) => {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<title>My Team</title>
</head>
<body>
<header>
<div class="container-fluid">
<div class="jumbotron bg-danger" id="title">
<h1 class="text-center text-white">My Team</h1>
</div>
</div>
</header>
<main>
<div class="container">
${generatePage(team)}
</div>
</main>
</body>
</html>
`;
};