1

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>
    `;
  };

0 Answers0