{"data":{"content":{"fields":{"slug":"/labs/routing-and-components","type":"lab"},"frontmatter":{"title":"Routing and Components"},"html":"<h1>Lab Three - Routing and Components</h1>\n<h2>Switch to Lab03</h2>\n<ul>\n<li>In a terminal:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">cd ../ # presuming still in previous lab\ncd lab-03\nyarn start</code></pre></div>\n<h3>Check it out!</h3>\n<ul>\n<li>While we were working on the last lab, the rest of the team was adding lots of new stuff to the app</li>\n<li>\n<p>Before proceeding, let’s look at the progress that has been made:</p>\n<ul>\n<li>Peruse the <strong>src</strong> directory and notice that the <strong>Timesheets</strong> module has been implemented by the team.</li>\n<li>You will be building out the <strong>Employees</strong> module and adding <strong>Navigation</strong> to the app.</li>\n<li>The module files have been stubbed out for you, we just need to add the logic.</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h2>Creating our Application’s Routes</h2>\n<ul>\n<li>Open <strong>src/App.js</strong></li>\n<li>Let’s start by importing the component classes that we’re going to use as the <strong>Handlers</strong> for our routes:</li>\n</ul>\n<div class=\"gatsby-code-title\">src/App.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Projects <span class=\"token keyword\">from</span> <span class=\"token string\">'./projects/Projects'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Employees <span class=\"token keyword\">from</span> <span class=\"token string\">'./employees/Employees'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Timesheets <span class=\"token keyword\">from</span> <span class=\"token string\">'./timesheets/Timesheets'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Next we’ll import some classes from <code class=\"language-text\">react-router-dom</code> - this library is a way to declare <code class=\"language-text\">react-router</code> rules within JSX</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> BrowserRouter<span class=\"token punctuation\">,</span> Route<span class=\"token punctuation\">,</span> Switch<span class=\"token punctuation\">,</span> Redirect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-router-dom'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>\n<p>Next let’s configure our routes:</p>\n<ul>\n<li>We need to wrap the routes in a <strong>BrowserRouter</strong> so the Browser URL is used to determine which Routes match</li>\n<li>We only want to render a single segment of the app based on the URL, so we add a <strong>Switch</strong></li>\n<li>We need separate sibling routes for <strong>Projects</strong>, <strong>Employees</strong>, and <strong>Timesheets</strong>.</li>\n<li>If no route matches, we want to redirect the user to the <strong>Employees</strong> component.</li>\n</ul>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\">  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>BrowserRouter</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>App<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>container<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Switch</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Route</span> <span class=\"token attr-name\">path</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/projects<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">component</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>Projects<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Route</span> <span class=\"token attr-name\">path</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/employees<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">component</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>Employees<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Route</span> <span class=\"token attr-name\">path</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/timesheets<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">component</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>Timesheets<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>Redirect</span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/employees<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>Switch</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>BrowserRouter</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>\n<p>Finally, let’s add the Navigation component while we’re here.</p>\n<ul>\n<li>Let’s import the <strong>Navigation</strong> component - then add the component just inside the “App” div (but outside the “container” div)</li>\n</ul>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> Navigation <span class=\"token keyword\">from</span> <span class=\"token string\">'./nav/Navigation'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token operator\">&lt;</span>Navigation <span class=\"token operator\">/</span><span class=\"token operator\">></span></code></pre></div>\n<details>\n  <summary>Click here to see the finished class:</summary>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token string\">'./App.css'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Projects <span class=\"token keyword\">from</span> <span class=\"token string\">'./projects/Projects'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Employees <span class=\"token keyword\">from</span> <span class=\"token string\">'./employees/Employees'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Timesheets <span class=\"token keyword\">from</span> <span class=\"token string\">'./timesheets/Timesheets'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Navigation <span class=\"token keyword\">from</span> <span class=\"token string\">'./nav/Navigation'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> BrowserRouter<span class=\"token punctuation\">,</span> Route<span class=\"token punctuation\">,</span> Switch<span class=\"token punctuation\">,</span> Redirect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-router-dom'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">App</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token operator\">&lt;</span>BrowserRouter<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token string\">\"App\"</span><span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>Navigation <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>Switch<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>Route path<span class=\"token operator\">=</span><span class=\"token string\">\"/projects\"</span> component<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>Projects<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>Route path<span class=\"token operator\">=</span><span class=\"token string\">\"/employees\"</span> component<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>Employees<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>Route path<span class=\"token operator\">=</span><span class=\"token string\">\"/timesheets\"</span> component<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>Timesheets<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>Redirect to<span class=\"token operator\">=</span><span class=\"token string\">\"/employees\"</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Switch<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>BrowserRouter<span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App<span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<h2>Implement the Navigation bar</h2>\n<ul>\n<li>\n<p>Open <strong>src/nav/Navigation.js</strong></p>\n</li>\n<li>\n<p>We first need to import the Bootstrap components that we are going to use</p>\n</li>\n<li>\n<p>There is also a <strong>NavLink</strong> component from the react-router-dom library that helps us integrate the router</p>\n</li>\n</ul>\n<div class=\"gatsby-code-title\">src/nav/Navigation.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Nav<span class=\"token punctuation\">,</span> Navbar<span class=\"token punctuation\">,</span> NavItem <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-bootstrap'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> NavLink <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-router-dom'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Now we can implement our <code class=\"language-text\">render()</code> method:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token operator\">&lt;</span>Navbar<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>Navbar<span class=\"token punctuation\">.</span>Header<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>Navbar<span class=\"token punctuation\">.</span>Brand<span class=\"token operator\">></span>\n            Timesheetz\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Navbar<span class=\"token punctuation\">.</span>Brand<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Navbar<span class=\"token punctuation\">.</span>Header<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>Nav<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>NavItem<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span>NavLink to<span class=\"token operator\">=</span><span class=\"token string\">\"/projects\"</span><span class=\"token operator\">></span>Projects<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavLink<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavItem<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>NavItem<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span>NavLink to<span class=\"token operator\">=</span><span class=\"token string\">\"/employees\"</span><span class=\"token operator\">></span>Employees<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavLink<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavItem<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>NavItem<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span>NavLink to<span class=\"token operator\">=</span><span class=\"token string\">\"/timesheets\"</span><span class=\"token operator\">></span>Timesheets<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavLink<span class=\"token operator\">></span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>NavItem<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Nav<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Navbar<span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>\n<p>What did we just do?</p>\n<ul>\n<li>We’ve told Bootstrap to render our application name as a header</li>\n<li>We declared a Nav component with three navigation items in it</li>\n<li>Each navigation item is a NavLink which, when clicked, will tell react-router to switch the current URL to a new value</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h2>Test the Navbar</h2>\n<ul>\n<li>\n<p>Just like in lab 2, we need to test that our component will render without errors.</p>\n</li>\n<li>\n<p>Open <strong>src/nav/Navigation.test.js</strong> and add the test suite.</p>\n</li>\n<li>\n<p>Add the below code to the <strong>Navigation.test.js</strong></p>\n</li>\n</ul>\n<div class=\"gatsby-code-title\">src/nav/Navigation.test.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> shallow <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'enzyme'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Navigation <span class=\"token keyword\">from</span> <span class=\"token string\">'./Navigation'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'&lt;Navigation />'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> wrapper<span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">beforeEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    wrapper <span class=\"token operator\">=</span> <span class=\"token function\">shallow</span><span class=\"token punctuation\">(</span>\n      <span class=\"token operator\">&lt;</span>Navigation <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'should instantiate the Navigation Component'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p> </p>\n<h2>Run the tests</h2>\n<ul>\n<li>\n<p>Run <code class=\"language-text\">yarn test</code> and verify that the Navigation tests pass.</p>\n<ul>\n<li>Since the rest of your team has already implemented a bunch of tests, you may have to do a little searching to find the tests you just wrote.</li>\n<li>Also, the stubbed tests for the employee components will fail since we haven’t implemented them yet</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h2>Run the application and see your work.</h2>\n<p>If you haven’t already done so,</p>\n<ul>\n<li>In a terminal window run: <code class=\"language-text\">yarn start</code> to fire off the build.</li>\n<li>Navigate to <a href=\"http://localhost:3000\">http://localhost:3000</a> in your favorite browser.</li>\n<li>\n<p>You should be able to click around the navbar and see the routes change.</p>\n<ul>\n<li>It should work fine for <strong>Timesheets</strong> and <strong>Projects</strong>, but we still need to implement <strong>Employees</strong>.</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h2>Composing React Components</h2>\n<ul>\n<li>\n<p>Now that we have functional routing between our three sections of the application, we need to finish the <strong>Employee</strong> module.</p>\n</li>\n<li>\n<p>This is going to be very much like the Projects components you created in the previous lab, so as a challenge we aren’t going to give you quite as many hints. Try to implement them by referencing what you did previously. If you get stuck the code is still available at the end.</p>\n</li>\n<li>\n<p>We want to display the list of employees when the user clicks the employee link in the navbar.</p>\n</li>\n<li>\n<p>To do this, we need to build three components:</p>\n<ul>\n<li>The <em>Employees</em> route handler that acts as our container component.</li>\n<li>The <em>EmployeeTable</em> component to contain our list of employees.</li>\n<li>The <em>EmployeeRow</em> component that is repeated within our <em>EmployeeTable</em> component for each employee.</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h2>Create the EmployeeRow Component</h2>\n<ul>\n<li>Open <strong>src/employees/EmployeeRow.js</strong></li>\n<li>We need to create a component that accepts an employee property (which is an object).</li>\n<li>The row should contain <code class=\"language-text\">&lt;td/&gt;</code>’s for each of the employee’s properties (username, email, firstName, lastName, and Yes/No for whether they’re an admin)</li>\n</ul>\n<details>\n  <summary>When finished, click here to see if your component is similar to the one below:</summary>\n<div class=\"gatsby-code-title\">src/employees/EmployeeRow.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">  <span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">class</span> <span class=\"token class-name\">EmployeeRow</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employee <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">;</span>\n  \n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>tr<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>username<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>email<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>firstName<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>lastName<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>admin <span class=\"token operator\">?</span> <span class=\"token string\">'Yes'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'No'</span><span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>tr<span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  \n  EmployeeRow<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    employee<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>object<span class=\"token punctuation\">.</span>isRequired\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> EmployeeRow<span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Now, we need to test that our component renders correctly.</li>\n<li>Verify the row renders without blowing up and that each cell is showing the correct value</li>\n</ul>\n<details>\n  <summary>When finished, click here to see if your suite is similar to the one below:</summary>\n<div class=\"gatsby-code-title\">src/employees/EmployeeRow.test.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmployeeRow <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeRow'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> shallow <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'enzyme'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'&lt;EmployeeRow />'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> wrapper<span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">beforeEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> employee <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      username<span class=\"token punctuation\">:</span> <span class=\"token string\">'fflintstone'</span><span class=\"token punctuation\">,</span>\n      email<span class=\"token punctuation\">:</span> <span class=\"token string\">'fred.flintstone@slatequarry.com'</span><span class=\"token punctuation\">,</span>\n      firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Fred'</span><span class=\"token punctuation\">,</span>\n      lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Flintstone'</span><span class=\"token punctuation\">,</span>\n      admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    wrapper <span class=\"token operator\">=</span> <span class=\"token function\">shallow</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>EmployeeRow employee<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'should render values into expected cells'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fflintstone'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fred.flintstone@slatequarry.com'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Fred'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Flintstone'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">'td'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Yes'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Run the tests. Did your new one pass?</li>\n</ul>\n<h2>Create the EmployeeTable Component</h2>\n<ul>\n<li>Our next move is to create the table that will contain our <strong>EmployeeRow</strong>s.</li>\n<li>Build a render method that iterates over a list of employees and builds an EmployeeRow for each</li>\n<li>Don’t forget to add appropriate propTypes</li>\n</ul>\n<details>\n  <summary>When finished, click here to see if your component is similar to the one below:</summary>\n<div class=\"gatsby-code-title\">src/employees/EmployeeTable.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Table <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-bootstrap'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmployeeRow <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeRow'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">EmployeeTable</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employees <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token operator\">&lt;</span>Table bordered striped<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>thead<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>tr<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>Username<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>Email<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>First Name<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>Last Name<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span>\n            <span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>Admin<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>tr<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>thead<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>tbody<span class=\"token operator\">></span>\n          <span class=\"token punctuation\">{</span>employees<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n            <span class=\"token operator\">&lt;</span>EmployeeRow employee<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span> employee <span class=\"token punctuation\">}</span> key<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span> employee<span class=\"token punctuation\">.</span>_id <span class=\"token punctuation\">}</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n          <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>tbody<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Table<span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nEmployeeTable<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  employees<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nEmployeeTable<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  employees<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">.</span>isRequired\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> EmployeeTable<span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Now let’s test that our employee table renders correctly.</li>\n<li>Can you write a test to check the number of <strong>EmployeeRows</strong> added to our table?</li>\n</ul>\n<details>\n  <summary>When finished, click here to see if your suite is similar to the one below:</summary>\n  \n<div class=\"gatsby-code-title\">src/employees/EmployeeTable.test.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmployeeTable <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeTable'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> shallow <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'enzyme'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmployeeRow <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeRow'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'&lt;EmployeeTable />'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> wrapper<span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">beforeEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> employees <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span>\n        username<span class=\"token punctuation\">:</span> <span class=\"token string\">'fflintstone'</span><span class=\"token punctuation\">,</span>\n        email<span class=\"token punctuation\">:</span> <span class=\"token string\">'fred.flintstone@slatequarry.com'</span><span class=\"token punctuation\">,</span>\n        firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Fred'</span><span class=\"token punctuation\">,</span>\n        lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Flintstone'</span><span class=\"token punctuation\">,</span>\n        admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n        _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n    wrapper <span class=\"token operator\">=</span> <span class=\"token function\">shallow</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>EmployeeTable employees<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employees<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'should render a row for each employee'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>EmployeeRow<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Run the tests. Did your new one pass?</li>\n</ul>\n<p> </p>\n<h2>Create Employees Component</h2>\n<ul>\n<li>Last, we need to add the table to our handler for the <code class=\"language-text\">/employees</code> route.</li>\n<li>Open <strong>src/employees/Employees.js</strong> and implement the data container</li>\n<li>To get your started, here’s some mock data:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span>\n  _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n  username<span class=\"token punctuation\">:</span> <span class=\"token string\">'admin'</span><span class=\"token punctuation\">,</span>\n  email<span class=\"token punctuation\">:</span> <span class=\"token string\">'admin@mixtape.com'</span><span class=\"token punctuation\">,</span>\n  password<span class=\"token punctuation\">:</span> <span class=\"token string\">'password'</span><span class=\"token punctuation\">,</span>\n  admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Admin'</span><span class=\"token punctuation\">,</span>\n  lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'User'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n  _id<span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n  username<span class=\"token punctuation\">:</span> <span class=\"token string\">'user'</span><span class=\"token punctuation\">,</span>\n  email<span class=\"token punctuation\">:</span> <span class=\"token string\">'user@mixtape.com'</span><span class=\"token punctuation\">,</span>\n  password<span class=\"token punctuation\">:</span> <span class=\"token string\">'password'</span><span class=\"token punctuation\">,</span>\n  admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n  firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Normal'</span><span class=\"token punctuation\">,</span>\n  lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'User'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p> </p>\n<details>\n  <summary>When finished, click here to see if your component is similar to the one below:</summary>\n  \n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">  <span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">import</span> EmployeeTable <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeTable'</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">class</span> <span class=\"token class-name\">Employees</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n    state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      employees<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">{</span>\n          _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n          username<span class=\"token punctuation\">:</span> <span class=\"token string\">'admin'</span><span class=\"token punctuation\">,</span>\n          email<span class=\"token punctuation\">:</span> <span class=\"token string\">'admin@mixtape.com'</span><span class=\"token punctuation\">,</span>\n          password<span class=\"token punctuation\">:</span> <span class=\"token string\">'password'</span><span class=\"token punctuation\">,</span>\n          admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n          firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Admin'</span><span class=\"token punctuation\">,</span>\n          lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'User'</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">{</span>\n          _id<span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n          username<span class=\"token punctuation\">:</span> <span class=\"token string\">'user'</span><span class=\"token punctuation\">,</span>\n          email<span class=\"token punctuation\">:</span> <span class=\"token string\">'user@mixtape.com'</span><span class=\"token punctuation\">,</span>\n          password<span class=\"token punctuation\">:</span> <span class=\"token string\">'password'</span><span class=\"token punctuation\">,</span>\n          admin<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n          firstName<span class=\"token punctuation\">:</span> <span class=\"token string\">'Normal'</span><span class=\"token punctuation\">,</span>\n          lastName<span class=\"token punctuation\">:</span> <span class=\"token string\">'User'</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  \n    <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employees <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">;</span>\n  \n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Employees<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>EmployeeTable employees<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span> employees <span class=\"token punctuation\">}</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  \n  Employees<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n      employees<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">arrayOf</span><span class=\"token punctuation\">(</span>PropTypes<span class=\"token punctuation\">.</span>object<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Employees<span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Open <strong>src/employees/Employees.test.js</strong></li>\n<li>Test that our component renders as expected and passes down the expected data to EmployeeTable</li>\n</ul>\n<details>\n  <summary>When finished, click here to see if your component is similar to the one below:</summary>\n<div class=\"gatsby-code-title\">src/employees/Employees.test.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Employees <span class=\"token keyword\">from</span> <span class=\"token string\">'./Employees'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> shallow <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'enzyme'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmployeeTable <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeTable'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'&lt;Employees />'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> wrapper<span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">beforeEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    wrapper <span class=\"token operator\">=</span> <span class=\"token function\">shallow</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>Employees <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'should instantiate the Employee Component'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'should pass employees down to table'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      employees<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>EmployeeTable<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">prop</span><span class=\"token punctuation\">(</span><span class=\"token string\">'employees'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</details>\n<p> </p>\n<ul>\n<li>Run the tests.</li>\n</ul>\n<h2>Run the application and see your work.</h2>\n<p>If you haven’t already done so,</p>\n<ul>\n<li>\n<p>In a terminal windows run: <code class=\"language-text\">yarn start</code> to fire off the build.</p>\n</li>\n<li>\n<p>Navigate to <a href=\"http://localhost:3000\">http://localhost:3000</a> in your favorite browser.</p>\n</li>\n<li>\n<p>Click around and enjoy the result of your hard work during this lab.</p>\n</li>\n</ul>\n<p><span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 650px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 50.7029053420806%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsSAAALEgHS3X78AAABFklEQVQoz6VR2W7DMAzL//9bsZdiD1sDxM59IG1zXw5nCk0GZH0IMAKEEpmiJdm5fV5wuX7g6/sG13Xh+z7iJIHSCkHgIwwCicEr+lpDCxW0UlDKg2ejp7TQqZsW1fNpjTSyLENeFIjjWIzv97uw7/vTdMyywKwGxhgQ67qi6zrUdY1xHDFNExarOUuHJk/bYRiGMkqapvgPxLBtWyRJirIs8Xg8MM/z3i1JGLPISNskwzBI98Q8zXuNGNZVhcLujuj7DlEUizENWERxZTVRFO1rSOzDVXYtvICN8HwfmYUU8pAxz3Ok9oG2HMm9Nk0jHfMCTsVvmrCeOeqc42jb/zuc0bwMf02PRcf8MXfknw7fic5oNv4A69cLMhMaTl0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"first page\"\n        title=\"\"\n        src=\"/static/0d92597e970eef59eeed7616a326167b/83a8b/first.page.png\"\n        srcset=\"/static/0d92597e970eef59eeed7616a326167b/8992e/first.page.png 163w,\n/static/0d92597e970eef59eeed7616a326167b/ae0a7/first.page.png 325w,\n/static/0d92597e970eef59eeed7616a326167b/83a8b/first.page.png 650w,\n/static/0d92597e970eef59eeed7616a326167b/50453/first.page.png 975w,\n/static/0d92597e970eef59eeed7616a326167b/5731d/first.page.png 1067w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n      />\n  </span></p>\n<p> </p>\n<h3>Commit your changes to Git and get ready for the next lab.</h3>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">git add .\ngit commit -m &quot;We added some routes&quot;</code></pre></div>"}},"pageContext":{"next":{"node":{"fields":{"slug":"/labs/integrating-redux"},"frontmatter":{"title":"Integrating Redux","index":4}}},"slug":"/labs/routing-and-components"}}