{"data":{"content":{"fields":{"slug":"/labs/integrating-redux","type":"lab"},"frontmatter":{"title":"Integrating Redux"},"html":"<h1>Lab Four - Integrating Redux</h1>\n<h2>Switch to Lab04</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-04\nyarn start</code></pre></div>\n<h3>Check it out!</h3>\n<ul>\n<li>\n<p>While we were working on the last lab, the rest of the team was adding lots of new stuff to the app</p>\n</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 there’s a new <strong>Timeunits</strong> module. This will track time entries in a Timesheet</li>\n<li>It has been hooked up to Redux already. Some parts of <strong>src/timeunits/Timeunits.js</strong> may sound familiar from the lecture - <code class=\"language-text\">connect</code>, <code class=\"language-text\">mapDispatchToProps</code>, <code class=\"language-text\">mapStateToProps</code> for example</li>\n<li>The team has implemented <strong>actions</strong> and <strong>reducers</strong> for large parts of the app. Take a look at those directories to get a feel for how these items are laid out and used.</li>\n<li>Finally, look at the <strong>src/index.js</strong>, <strong>src/reducers/index.js</strong> and <strong>src/store/configure-store.js</strong> to see how we instantiated Redux and included it in our app.</li>\n<li>Don’t worry if it looks a little cryptic - by the end of this lab you will have a better understanding of what is happening.</li>\n</ul>\n</li>\n<li>\n<p>What will we do?</p>\n<ul>\n<li>We want to replace our use of static data with loading data dynamically using Rest service calls. To do this we’ll need a way to retrieve all employees and retrieve a single employee.</li>\n<li>We will be building our <strong>EmployeeActionCreator</strong> and our <strong>employee-reducer</strong>.</li>\n<li>Next we will add our reducer to the <strong>rootReducer</strong> and connect our state and actions to our <strong>Employees</strong> component</li>\n<li>Then we will update our <strong>Employees</strong> components to use our actions to retrieve our list of employees.</li>\n<li>Finally, we will update our <strong>EmployeeRow</strong> to delete/restore employees using the actions we created.</li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<h3>Create the Employee Action Types</h3>\n<ul>\n<li>Open <strong>src/actions/EmployeeActionTypes.js</strong></li>\n<li>Let’s add the constants for the list and get actions.</li>\n</ul>\n<div class=\"gatsby-code-title\">src/actions/EmployeeActionTypes.js</div>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token constant\">LIST</span> <span class=\"token operator\">=</span> <span class=\"token string\">'LIST_EMPLOYEES'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token constant\">GET</span> <span class=\"token operator\">=</span> <span class=\"token string\">'GET_EMPLOYEE'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p> </p>\n<h3>Create the Employee Actions</h3>\n<ul>\n<li>\n<p>Redux Thunk typically works this way:</p>\n<ul>\n<li>A trigger (usually user activity, but could be an expiring timer, etc) will execute an asynchronous method</li>\n<li>The method will execute whatever logic is necessary to complete the activity flow (getting data, updating data, etc). Typically this involves making Rest service calls.</li>\n<li>Any results of the activity that the application state must respond to (changing values in Redux State) are communicated by dispatching an action. A single asynchronous method may generate 0 to many actions.</li>\n<li>A common pattern is for an action will be dispatched when a service call is starting so a loading indicator can be activated and when the service call completes (either successfully or unsuccessfully) so the indicator can be stopped</li>\n<li>In our examples here we’re only dispatching actions at the end of each activity to inform the application when new data has been retrieved - to retain simplicity we aren’t using loading indicators so we dispense with those actions </li>\n</ul>\n</li>\n<li>\n<p>Now open <strong>src/actions/EmployeeActionCreator.js</strong> so we can create the actions.</p>\n</li>\n<li>\n<p>We’ll import the types we just created, and the <a href=\"https://github.com/mzabriskie/axios\">Axios</a> library to handle our http requests.</p>\n</li>\n</ul>\n<div class=\"gatsby-code-title\">src/actions/EmployeeActionCreator.js</div>\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 operator\">*</span> <span class=\"token keyword\">as</span> EmployeeActionTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeActionTypes'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Axios <span class=\"token keyword\">from</span> <span class=\"token string\">'axios'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Now let’s implement the functions that will be used to update the state of our application.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">list</span> <span class=\"token operator\">=</span> employees <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    type<span class=\"token punctuation\">:</span> EmployeeActionTypes<span class=\"token punctuation\">.</span><span class=\"token constant\">LIST</span><span class=\"token punctuation\">,</span>\n    employees<span class=\"token punctuation\">:</span> employees<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><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\">const</span> <span class=\"token function-variable function\">get</span> <span class=\"token operator\">=</span> employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    type<span class=\"token punctuation\">:</span> EmployeeActionTypes<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span>\n    employee<span class=\"token punctuation\">:</span> employee<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Next we’ll implement the asynchronous methods that will be used to make our http Requests, along with a helper method to build the url.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> apiUrl <span class=\"token operator\">=</span> <span class=\"token string\">'/api/users'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">url</span> <span class=\"token operator\">=</span> employeeId <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>employeeId<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>apiUrl<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>employeeId<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> apiUrl<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\">const</span> <span class=\"token function-variable function\">listEmployees</span> <span class=\"token operator\">=</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\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</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 function\">then</span><span class=\"token punctuation\">(</span>response <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token function\">list</span><span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Employees retrieved.'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error attempting to retrieve employees.'</span><span class=\"token punctuation\">,</span> error<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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getEmployee</span> <span class=\"token operator\">=</span> id <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>res <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>data<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 boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'There was an error getting the employee'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">updateEmployee</span> <span class=\"token operator\">=</span> employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">.</span>_id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>res <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token string\">`Employee : </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>employee<span class=\"token punctuation\">.</span>_id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">, updated.`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'There was an error updating employee.'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">removeEmployee</span> <span class=\"token operator\">=</span> employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">.</span>_id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>res <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token string\">`Employee : </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>_id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">, was deleted.`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error attempting to delete employee.'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">restoreEmployee</span> <span class=\"token operator\">=</span> employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">.</span>_id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>res <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token string\">`Employee : </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>_id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">, was restored.`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error attempting to restore employee.'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">createEmployee</span> <span class=\"token operator\">=</span> employee <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> dispatch <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Axios<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token function\">url</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>res <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token string\">`Employee : </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>res<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>_id<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">, created.`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">.</span><span class=\"token keyword\">catch</span><span class=\"token punctuation\">(</span>error <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'There was an error creating employee.'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Finally let’s test that our functions do what we think they should:</li>\n<li>Open <strong>src/actions/EmployeeActionCreator.test.js</strong> and replace the stubbed out test with the following:</li>\n</ul>\n<div class=\"gatsby-code-title\">src/actions/EmployeeActionCreator.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> configureMockStore <span class=\"token keyword\">from</span> <span class=\"token string\">'redux-mock-store'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> thunk <span class=\"token keyword\">from</span> <span class=\"token string\">'redux-thunk'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">as</span> actions <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeActionCreator'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">as</span> types <span class=\"token keyword\">from</span> <span class=\"token string\">'./EmployeeActionTypes'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> moxios <span class=\"token keyword\">from</span> <span class=\"token string\">'moxios'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> middlewares <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>thunk<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> mockStore <span class=\"token operator\">=</span> <span class=\"token function\">configureMockStore</span><span class=\"token punctuation\">(</span>middlewares<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'synchronous actions'</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\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'list should send objects'</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>actions<span class=\"token punctuation\">.</span><span class=\"token function\">list</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token string\">'p1'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'p2'</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 punctuation\">{</span>\n      type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">LIST</span><span class=\"token punctuation\">,</span>\n      employees<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'p1'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'p2'</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>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'get should send object'</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>actions<span class=\"token punctuation\">.</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'p1'</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 punctuation\">{</span>\n      type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span>\n      employee<span class=\"token punctuation\">:</span> <span class=\"token string\">'p1'</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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">describe</span><span class=\"token punctuation\">(</span><span class=\"token string\">'async actions'</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\">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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">install</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\n  <span class=\"token function\">afterEach</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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">uninstall</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\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'creates LIST when fetching employees has been done'</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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">stubRequest</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api/users'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token punctuation\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      response<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'employee1'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'employee2'</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 keyword\">const</span> expectedActions <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">LIST</span><span class=\"token punctuation\">,</span> employees<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'employee1'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'employee2'</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>\n    <span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">mockStore</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> 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>\n\n    <span class=\"token keyword\">return</span> store<span class=\"token punctuation\">.</span><span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span>actions<span class=\"token punctuation\">.</span><span class=\"token function\">listEmployees</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\">then</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 comment\">// return of async actions</span>\n      <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span><span class=\"token function\">getActions</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>expectedActions<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>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'create GET when requesting single 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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">stubRequest</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api/users/1'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token punctuation\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      response<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</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 keyword\">const</span> expectedActions <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">mockStore</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> 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>\n\n    <span class=\"token keyword\">return</span> store<span class=\"token punctuation\">.</span><span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span>actions<span class=\"token punctuation\">.</span><span class=\"token function\">getEmployee</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 punctuation\">.</span><span class=\"token function\">then</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 comment\">// return of async actions</span>\n      <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span><span class=\"token function\">getActions</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>expectedActions<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>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'create GET when updating a 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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">stubRequest</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api/users/1'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token punctuation\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      response<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</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 keyword\">const</span> expectedActions <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">mockStore</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> 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>\n\n    <span class=\"token keyword\">return</span> store<span class=\"token punctuation\">.</span><span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span>actions<span class=\"token punctuation\">.</span><span class=\"token function\">updateEmployee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</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\">then</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 comment\">// return of async actions</span>\n      <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span><span class=\"token function\">getActions</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>expectedActions<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>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'create GET when removing a 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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">stubRequest</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api/users/1'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token punctuation\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      response<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</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 keyword\">const</span> expectedActions <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">mockStore</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> 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>\n\n    <span class=\"token keyword\">return</span> store<span class=\"token punctuation\">.</span><span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span>actions<span class=\"token punctuation\">.</span><span class=\"token function\">removeEmployee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</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\">then</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 comment\">// return of async actions</span>\n      <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span><span class=\"token function\">getActions</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>expectedActions<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>\n\n  <span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">'create GET when restoring a 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    moxios<span class=\"token punctuation\">.</span><span class=\"token function\">stubRequest</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api/users/1'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      status<span class=\"token punctuation\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      response<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</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 keyword\">const</span> expectedActions <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">:</span> types<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">,</span> employee<span class=\"token punctuation\">:</span> <span class=\"token string\">'employee1'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> store <span class=\"token operator\">=</span> <span class=\"token function\">mockStore</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> 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>\n\n    <span class=\"token keyword\">return</span> store<span class=\"token punctuation\">.</span><span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span>actions<span class=\"token punctuation\">.</span><span class=\"token function\">restoreEmployee</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> _id<span class=\"token punctuation\">:</span> <span class=\"token number\">1</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\">then</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 comment\">// return of async actions</span>\n      <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>store<span class=\"token punctuation\">.</span><span class=\"token function\">getActions</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>expectedActions<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>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>\n<p>Let’s take a look at what we are doing here. - First we’re testing that the synchronous actions are creating packets of type LIST and GET. - Then in the asynchronous tests we are using <strong>moxios</strong> to http response for our <strong>axois</strong> requests, and we’re using the <strong>redux-mock-store</strong>’s <strong>configureMockStore</strong> to mock our redux store so we can dispatch or actions and test them. - Finally, we are using those mocks to see that the async actions generate the packets we expect when dispatched.</p>\n</li>\n<li>\n<p>Make sure the tests pass and move on to the next section.</p>\n</li>\n</ul>\n<p> </p>\n<h3>Create the Reducer</h3>\n<ul>\n<li>Open <strong>src/reducers/employee-reducer.js</strong></li>\n<li>Import the action types we created earlier and implement the reducing function.</li>\n</ul>\n<div class=\"gatsby-code-title\">src/reducers/employee-reducer.js</div>\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 operator\">*</span> <span class=\"token keyword\">as</span> EmployeeActionTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'../actions/EmployeeActionTypes'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">(</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> data<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> action<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>action<span class=\"token punctuation\">.</span>type<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> EmployeeActionTypes<span class=\"token punctuation\">.</span><span class=\"token constant\">LIST</span><span class=\"token punctuation\">:</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>state<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">:</span> action<span class=\"token punctuation\">.</span>employees <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> EmployeeActionTypes<span class=\"token punctuation\">.</span><span class=\"token constant\">GET</span><span class=\"token punctuation\">:</span>\n      <span class=\"token keyword\">const</span> updatedItem <span class=\"token operator\">=</span> action<span class=\"token punctuation\">.</span>employee<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">const</span> index <span class=\"token operator\">=</span> state<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span><span class=\"token function\">findIndex</span><span class=\"token punctuation\">(</span>d <span class=\"token operator\">=></span> d<span class=\"token punctuation\">.</span>_id <span class=\"token operator\">===</span> updatedItem<span class=\"token punctuation\">.</span>_id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>index <span class=\"token operator\">>=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">const</span> copy <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>state<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n          copy<span class=\"token punctuation\">.</span><span class=\"token function\">splice</span><span class=\"token punctuation\">(</span>index<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> updatedItem<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>state<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">:</span> copy <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>state<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>state<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">,</span> updatedItem<span class=\"token punctuation\">]</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">default</span><span class=\"token punctuation\">:</span>\n      <span class=\"token keyword\">return</span> state<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>\n<p>When the reducer receives a LIST action it will replace the currently-stored list of employees with the new one from the action’s payload</p>\n</li>\n<li>\n<p>When a GET is received the reducer will attempt to replace the existing version of that employee in state, or will add to the end of the list if it’s a new item</p>\n</li>\n<li>\n<p>Now let’s add our <strong>employee-reducer</strong> to the combined reducer</p>\n</li>\n<li>\n<p>Open <strong>src/reducers/index.js</strong></p>\n</li>\n<li>\n<p>Import the <strong>employee-reducer</strong></p>\n</li>\n</ul>\n<div class=\"gatsby-code-title\">src/reducers/index.js</div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> employees <span class=\"token keyword\">from</span> <span class=\"token string\">'./employee-reducer'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Add it to the list of reducers so it looks like this:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> rootReducer <span class=\"token operator\">=</span> <span class=\"token function\">combineReducers</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  projects<span class=\"token punctuation\">:</span> projects<span class=\"token punctuation\">,</span>\n  timesheets<span class=\"token punctuation\">:</span> timesheets<span class=\"token punctuation\">,</span>\n  timeunits<span class=\"token punctuation\">:</span> timeunits<span class=\"token punctuation\">,</span>\n  employees<span class=\"token punctuation\">:</span> employees<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<h3>Use the Employee Actions</h3>\n<ul>\n<li>Now, let’s update our <strong>Employee</strong> components to use these actions.</li>\n<li>Open <strong>src/employees/Employees.js</strong></li>\n<li>Import some <strong>redux</strong> libraries we need and the <strong>EmployeeActionCreator</strong></li>\n</ul>\n<div class=\"gatsby-code-title\">src/employees/Employees.js</div>\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> connect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-redux'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">as</span> EmployeeActionCreators <span class=\"token keyword\">from</span> <span class=\"token string\">'../actions/EmployeeActionCreator'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Next lets add the <strong>mapStateToProps</strong> and <strong>mapDispatchToProps</strong> methods between the component and the export.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">mapStateToProps</span> <span class=\"token operator\">=</span> state <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    employees<span class=\"token punctuation\">:</span> state<span class=\"token punctuation\">.</span>employees<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> mapDispatchToProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  listEmployees<span class=\"token punctuation\">:</span> EmployeeActionCreators<span class=\"token punctuation\">.</span>listEmployees<span class=\"token punctuation\">,</span>\n  deleteEmployee<span class=\"token punctuation\">:</span> EmployeeActionCreators<span class=\"token punctuation\">.</span>removeEmployee<span class=\"token punctuation\">,</span>\n  restoreEmployee<span class=\"token punctuation\">:</span> EmployeeActionCreators<span class=\"token punctuation\">.</span>restoreEmployee\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Then we’ll modify the export to <strong>connect</strong> the methods to the component using the <strong>redux</strong> connect() method we imported above</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>mapStateToProps<span class=\"token punctuation\">,</span> mapDispatchToProps<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>Employees<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Next, we can replace previously hard-coded state data with a call to the <strong>listEmployees</strong> action in a lifecycle method to retrieve the employees from the server. Replace the state initialization with the following:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">  <span class=\"token function\">componentDidMount</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> listEmployees <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    <span class=\"token function\">listEmployees</span><span class=\"token punctuation\">(</span><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>This allows the following to happen:</p>\n<ul>\n<li>When the component is mounted (the user navigates to that tab), it will trigger the <code class=\"language-text\">listEmployees</code> activity</li>\n<li>That activity will make a Rest service call and eventually dispatch a <strong>LIST</strong> action with the resulting data</li>\n<li>The reducer will pick up the LIST action and update the Redux State with the new data</li>\n<li>The connected component will detect the state update and will re-run <code class=\"language-text\">mapStateToProps</code> - this will take the data from Redux and pass it into our component as a prop</li>\n</ul>\n</li>\n<li>\n<p>Now we update the data we are passing to the EmployeeTable in the render method. Note that we’re now pulling employees from props since React-Redux pulls them from global Redux state and adds them to the components props in <code class=\"language-text\">mapStateToProps</code></p>\n</li>\n<li>\n<p>We also pass down two of the actions we’re getting from <code class=\"language-text\">mapDispatchToProps</code> so that they can be called from a row</p>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employees<span class=\"token punctuation\">,</span> deleteEmployee<span class=\"token punctuation\">,</span> restoreEmployee <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>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> onDelete<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>deleteEmployee<span class=\"token punctuation\">}</span> onRestore<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>restoreEmployee<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></code></pre></div>\n<ul>\n<li>Next let’s open <strong>src/employees/EmployeeTable.js</strong> and update the render method to pass the actions to the <strong>EmployeeRows</strong></li>\n</ul>\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\">const</span> <span class=\"token punctuation\">{</span> employees<span class=\"token punctuation\">,</span> onDelete<span class=\"token punctuation\">,</span> onRestore <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<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> onDelete<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>onDelete<span class=\"token punctuation\">}</span> onRestore<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>onRestore<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></code></pre></div>\n<ul>\n<li>Also, update the propTypes</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">EmployeeTable<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<span class=\"token punctuation\">,</span>\n  onDelete<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">,</span>\n  onRestore<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Then we need to add a column header for the delete button we’ll add to the <strong>EmployeeRow</strong></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token operator\">&lt;</span>th<span class=\"token operator\">></span>Delete<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>th<span class=\"token operator\">></span></code></pre></div>\n<ul>\n<li>\n<p>Now let’s open <strong>src/employees/EmployeeRow.js</strong> and add the delete/restore functionality</p>\n</li>\n<li>\n<p>Import the Bootstrap Button component</p>\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> <span class=\"token punctuation\">{</span> Button <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-bootstrap'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<ul>\n<li>Add a new table cell containing the button. The button can dynamically change its label &#x26; style based on whether a click would delete or restore the record. We also give it a click handler to call.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token operator\">&lt;</span>td<span class=\"token operator\">></span>\n  <span class=\"token operator\">&lt;</span>Button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>handleClick<span class=\"token punctuation\">}</span> bsStyle<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'success'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'danger'</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n    <span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'Restore'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Delete'</span><span class=\"token punctuation\">}</span>\n  <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Button<span class=\"token operator\">></span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>td<span class=\"token operator\">></span></code></pre></div>\n<ul>\n<li>Next, let’s make the row re-style based on whether the record has been deleted:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token operator\">&lt;</span>tr className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'deleted'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span></code></pre></div>\n<ul>\n<li>Almost done! Implement the click handler method:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token function-variable function\">handleClick</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employee<span class=\"token punctuation\">,</span> onDelete<span class=\"token punctuation\">,</span> onRestore <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\">if</span> <span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">.</span>deleted<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">onRestore</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">onDelete</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  event<span class=\"token punctuation\">.</span><span class=\"token function\">stopPropagation</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></code></pre></div>\n<ul>\n<li>And lastly update our propTypes:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">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<span class=\"token punctuation\">,</span>\n  onDelete<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n  onRestore<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">.</span>isRequired\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 view the final file:</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<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Button <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react-bootstrap'</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-variable function\">handleClick</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> employee<span class=\"token punctuation\">,</span> onDelete<span class=\"token punctuation\">,</span> onRestore <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\">if</span> <span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">.</span>deleted<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">onRestore</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">onDelete</span><span class=\"token punctuation\">(</span>employee<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    event<span class=\"token punctuation\">.</span><span class=\"token function\">stopPropagation</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>\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> 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 className<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'deleted'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">}</span><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>td<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>Button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>handleClick<span class=\"token punctuation\">}</span> bsStyle<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'success'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'danger'</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n            <span class=\"token punctuation\">{</span>employee<span class=\"token punctuation\">.</span>deleted <span class=\"token operator\">?</span> <span class=\"token string\">'Restore'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Delete'</span><span class=\"token punctuation\">}</span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>Button<span class=\"token operator\">></span>\n        <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\nEmployeeRow<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<span class=\"token punctuation\">,</span>\n  onDelete<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n  onRestore<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<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<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 windows 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</ul>\n<p>Did your application display any data? Look at your console to see the reported “Proxy error”. This gives us a clue that we need to start our backend server to start supplying the data to our application.</p>\n<h2>Checkout the API repository</h2>\n<ul>\n<li>Keep your <code class=\"language-text\">yarn start</code> frontend running, but now open a 2nd console window—or a separate tab</li>\n<li>Change directories to a folder separate from the existing project. The parent directory above the react-redux-timesheet project would work nicely</li>\n<li>This is to get a backend server running and available for local development</li>\n</ul>\n<p>Checkout the backend API server project from Github.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ git clone https://github.com/objectpartners/react-redux-api.git</code></pre></div>\n<p>You should get output similar to below:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">Cloning into <span class=\"token string\">'react-redux-api'</span><span class=\"token punctuation\">..</span>.\nremote: Counting objects: 6272, done.\nremote: Compressing objects: 100% <span class=\"token punctuation\">(</span>2493/2493<span class=\"token punctuation\">)</span>, done.\nremote: Total 6272 <span class=\"token punctuation\">(</span>delta 3534<span class=\"token punctuation\">)</span>, reused 6260 <span class=\"token punctuation\">(</span>delta 3523<span class=\"token punctuation\">)</span>, pack-reused 0\nReceiving objects: 100% <span class=\"token punctuation\">(</span>6272/6272<span class=\"token punctuation\">)</span>, 2.31 MiB <span class=\"token operator\">|</span> 4.05 MiB/s, done.\nResolving deltas: 100% <span class=\"token punctuation\">(</span>3534/3534<span class=\"token punctuation\">)</span>, done.\nChecking connectivity<span class=\"token punctuation\">..</span>. done.</code></pre></div>\n<p>Change directories into the API main directory.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ <span class=\"token function\">cd</span> react-redux-api</code></pre></div>\n<p>Install the backend API NPM dependencies</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ yarn</code></pre></div>\n<p>Run the backend API server</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ yarn start</code></pre></div>\n<h2>See the results</h2>\n<ul>\n<li>You may need to restart the frontend process in your frontend terminal console</li>\n<li>Navigate to <a href=\"http://localhost:3000\">http://localhost:3000</a> in your favorite browser.</li>\n<li>Click around and enjoy the result of your hard work during this lab.</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: 35.22727272727273%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAAA5klEQVQoz6VQ2U7DMBD0/7/wwKchIWhaRBXVcVIlETlqO9ews21CQeIBYWm04z3GszaH5AnPry/YJ3u8H48oijNslsE5J7jGXPntLrVMYBXuCuc2bkIY0DSNous6WGtFtEDbtvDeI8b4J5hpmlSIoMA4jgrm53nGsiwaf/JvuOs1VOU6aZqiLEv861CQ6lVV6QshBF19GIbNJTkfYo05ci+c+Q/pjcLLZIeh7zGKhlkHONxLkk7zPN9EKcQ/XXld18r95YJW+qP89enxAf3bAZOYNNz7y/HyK9b6fa9GcRXtCXPwev8EFIQeHL8OY8sAAAAASUVORK5CYII='); 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=\"employees\"\n        title=\"\"\n        src=\"/static/b875a5e4b42e4fc046c8788bbbda7716/83a8b/employees.png\"\n        srcset=\"/static/b875a5e4b42e4fc046c8788bbbda7716/8992e/employees.png 163w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/ae0a7/employees.png 325w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/83a8b/employees.png 650w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/50453/employees.png 975w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/af9d4/employees.png 1300w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/7cf95/employees.png 1950w,\n/static/b875a5e4b42e4fc046c8788bbbda7716/bdf94/employees.png 2464w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n      />\n  </span></p>\n<ul>\n<li>How ‘bout that delete!</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: 37.95620437956204%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA90lEQVQoz61Qu07EMBD0/7fU/AM/ARTXISFECogine0IRUoc52En8eDx5SJzDRSMNPJ6dz2eXfH6/oaiKFCWJeq6htIaSiloHZlOfaHa70qmuow8p1MfPEsF0bYtyL7v00MpJYwxsHaAcw7zPKfzT4y9YpomeO+xLMshwHhdV2zb9itXMusVtF9VVXL3HxBN0yRXdGqtRQjhx48cn+sgWO+67og5UTtafI0m9oaLQzZzZIped5nvjYLDMKQe1vI4bMDp5Qn3D3cYXVxbzAvui6A6fx12l1dSnI4J713qY56PienzA+b5ESHGzAvsQY5cMM/dxrc58hsTpmz7r6Y6OwAAAABJRU5ErkJggg=='); 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=\"employees deleted\"\n        title=\"\"\n        src=\"/static/1f5a0b8494b7a471bb8cf37ec0489eec/83a8b/employees.deleted.png\"\n        srcset=\"/static/1f5a0b8494b7a471bb8cf37ec0489eec/8992e/employees.deleted.png 163w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/ae0a7/employees.deleted.png 325w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/83a8b/employees.deleted.png 650w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/50453/employees.deleted.png 975w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/af9d4/employees.deleted.png 1300w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/7cf95/employees.deleted.png 1950w,\n/static/1f5a0b8494b7a471bb8cf37ec0489eec/bc2c7/employees.deleted.png 2466w\"\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;I think I know redux now?!&quot;</code></pre></div>"}},"pageContext":{"next":{"node":{"fields":{"slug":"/labs/forms-and-validation"},"frontmatter":{"title":"Forms and Validation","index":5}}},"slug":"/labs/integrating-redux"}}