<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ben Haus</title>
    <description>The latest articles on DEV Community by Ben Haus (@phillybenh).</description>
    <link>https://dev.to/phillybenh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F372490%2Feab7f582-abd1-487d-8e27-4102442ea799.jpeg</url>
      <title>DEV Community: Ben Haus</title>
      <link>https://dev.to/phillybenh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phillybenh"/>
    <language>en</language>
    <item>
      <title>Building a custom mapping app with admin dashboard [Part 2]</title>
      <dc:creator>Ben Haus</dc:creator>
      <pubDate>Thu, 24 Sep 2020 21:36:16 +0000</pubDate>
      <link>https://dev.to/phillybenh/building-a-custom-mapping-app-with-admin-dashboard-part-2-5a6e</link>
      <guid>https://dev.to/phillybenh/building-a-custom-mapping-app-with-admin-dashboard-part-2-5a6e</guid>
      <description>&lt;h1&gt;
  
  
  Background (from &lt;a href="https://dev.to/phillybenh/building-a-custom-mapping-app-with-admin-dashboard-38f3"&gt;Part 1&lt;/a&gt;)
&lt;/h1&gt;

&lt;p&gt;This project (and these blog posts) are part of my education curring the 'Lambda Labs' portion of the curriculum at Lambda School&lt;/p&gt;

&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;My team was tasked with building a map with an admin dashboard for a nonprofit called Eco-Soap Bank. The goal is to be able to edit and display data points of Eco-Soap Bank contributors and clients.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Stakeholder
&lt;/h3&gt;

&lt;p&gt;Eco-Soap Bank is a nonprofit that supplies hygiene products to the developing work. Through their work they:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Supply soap products to people in need&lt;/li&gt;
&lt;li&gt;Reduce the waste that is generated form partially used hotel soap products&lt;/li&gt;
&lt;li&gt;Provide employment and education to disadvantaged women in developing areas where there are few reliable sources of income&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Eco-Soap Bank collects partially used soap products from their hotel partners, sanitizes the soap and processes it into new bars, and provides the soap to communities in need. &lt;/p&gt;

&lt;h1&gt;
  
  
  Project Updates
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Editable Data Types
&lt;/h2&gt;

&lt;p&gt;Since the last post, I have implemented components to allow the user to edit the data types in-line in the data types table. This is the most user friendly method for the user to edit this data as needed.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7u6SliOI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/swxewvtkxebs4guhg8n8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7u6SliOI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/swxewvtkxebs4guhg8n8.png" alt="Screenshot of editable data table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Records
&lt;/h2&gt;

&lt;p&gt;The components to create, read, update, and delete (CRUD) database record in the EcoSoap Bank backend are complete. These components continue the simple styling and layouts used for the data types components. &lt;/p&gt;

&lt;p&gt;The form for submitting new data records features a dropdown selector that dynamically populates the options form the data types int eh database. For the database record miscellaneous fields, the user can add as many additional fields as necessary. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YR7MmFK2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p5ug1cjgjpsbrx31hsuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YR7MmFK2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p5ug1cjgjpsbrx31hsuz.png" alt="Screenshot of new data record form"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The data record table is sortable and is paginated to make it more user friendly. Since the number of miscellaneous fields each data record has is variable, the fields are viewable as an expandable sub-table. At the stakeholders' request, the 'id' columns have been removed from all tables in the app. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rnogt3tH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/klmtl0oqgclnfl7zou2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rnogt3tH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/klmtl0oqgclnfl7zou2c.png" alt="Screenshot of data record table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To implement a feature to edit the data records, I decided that due to the more complex nature of the database records, a modal pop-up is the most appropriate choice for editing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7QpeiSZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c2x1bf0j52l3cqnp7abj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7QpeiSZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c2x1bf0j52l3cqnp7abj.png" alt="Screenshot of edit record modal pop-up"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Updated Navigation
&lt;/h2&gt;

&lt;p&gt;Based on UI/UX feedback, the nav menu has been slightly modified. The new version features larger text for improved readability and improved spacing. Also, this version indicates the page fo the app the user is in by highlighting the current link. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dKZ2wc43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nlxepor09a13z9rrzc1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dKZ2wc43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nlxepor09a13z9rrzc1n.png" alt="Screenshot of updated nav menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Reflections
&lt;/h1&gt;

&lt;p&gt;Overall, my experiance durring Lambda Labs has not been exactly what I expected. &lt;/p&gt;

&lt;p&gt;Over the past seven weeks, I have grown technically by being exposed to (and practicing self-learning) technologies that I had not previously used and was able to reinforce my skills with some technologies that I have been using throughout my time at Lambda School. During labs I have taught myself and practiced how to use a GraphQL database (from how the perspective of a front-end developer), using Apollo CLient for state management and performing CRUD operations, and using Ant Design to develop UI components for the app.  This project has also been an opportunity for practicing my JavaScripand React skills. Since this has been a longer duration project than the previous ones I have tackled, it has been a great opportunity to dive a little deeper into the Git version control functionality.&lt;/p&gt;

&lt;p&gt;As far as professional growth is concerned, I think the majority of growth has come from having more opportunities (to be forced to) talk about the work I have done at Lambda and to practice answering interview type questions on the spot. I didn’t have any significant surprises about working in a team environment. What I was surprised about was that Lambda would set up a Labs project that effectively only had two members on a team. Based on all the Labs hype, I had definitely expected a more comprehensive project with a larget more diverse team. &lt;/p&gt;

&lt;p&gt;One thing I would approach differently would have been to try to switch to a project that had both front-end and back-end roles. In hindsight, I think our team missed out by only having two members in the same role. I would have learned more with a larger multidisciplinary team. I also would have approached learning new technologies differently. I learned enough little pieces that I could apply to the project, but if I were starting over I would try to learn more of the basics and fundamentals of Apollo Client and Ant Design before diving into the project work. &lt;/p&gt;

&lt;p&gt;If I were to start Labs over again, the change I would make is to get in the habit of having more regular and reoccurring communication with my teammate. The project got off to a bit of a slow start while we were waiting for the backend to be developed more and we did not develop a great pattern for working-together and communicating. &lt;/p&gt;

</description>
      <category>react</category>
      <category>apolloclient</category>
      <category>graphql</category>
      <category>antdesign</category>
    </item>
    <item>
      <title>Building a custom mapping app with admin dashboard</title>
      <dc:creator>Ben Haus</dc:creator>
      <pubDate>Fri, 28 Aug 2020 15:00:48 +0000</pubDate>
      <link>https://dev.to/phillybenh/building-a-custom-mapping-app-with-admin-dashboard-38f3</link>
      <guid>https://dev.to/phillybenh/building-a-custom-mapping-app-with-admin-dashboard-38f3</guid>
      <description>&lt;h1&gt;
  
  
  The project
&lt;/h1&gt;

&lt;p&gt;My team was tasked with building a map with an admin dashboard for a nonprofit called Eco-Soap Bank. The goal is to be able to edit and display data points of Eco-Soap Bank contributors and clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stakeholder
&lt;/h2&gt;

&lt;p&gt;Eco-Soap Bank is a nonprofit that supplies hygiene products to the developing work. Through their work they:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Supply soap products to people in need&lt;/li&gt;
&lt;li&gt;Reduce the waste that is generated form partially used hotel soap products&lt;/li&gt;
&lt;li&gt;Provide employment and education to disadvantaged women in developing areas where there are few reliable sources of income&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Eco-Soap Bank collects partially used soap products from their hotel partners, sanitizes the soap and processes it into new bars, and provides the soap to communities in need. &lt;/p&gt;

&lt;h2&gt;
  
  
  Product Vision
&lt;/h2&gt;

&lt;p&gt;The deliverables for this project are split across three product releases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Release one focuses on authentication, building a map component, and editing data types in the database. &lt;/li&gt;
&lt;li&gt;Release two includes implementation functionality to perform create, read, update, and delete (CRUD) operations on data records from a Eco-Soap Bank database. Additionally, release two will include filterable map layers to display the data records on a map. &lt;/li&gt;
&lt;li&gt;Release three will add a higher level of polish to the project by adding embedded HTML in the data records for increased visual appeal on the map and will also include pan and zoom functionality on the map. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0DUpDWht--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gel9wd39y4u59rx8j6ru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0DUpDWht--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gel9wd39y4u59rx8j6ru.png" alt="Deliverables table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Planning
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mp3x0Ifj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9w0vdqyhc2zssyh8g8wl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mp3x0Ifj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9w0vdqyhc2zssyh8g8wl.png" alt="App user flow diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  User Stories
&lt;/h2&gt;

&lt;p&gt;I order to break down our deliverables into manageable tasks the team focused on translating the requirements down into user-stories. &lt;/p&gt;

&lt;p&gt;We then further reduced the user-stories into a list of tasks that would be required to fulfill each.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trello
&lt;/h3&gt;

&lt;p&gt;These user stories were then mapped into Trello cards so the work could be efficiently assigned and tracked. Each story was given a card, and then the necessary tasks to complete the feature were included as a checklist.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M9yKFTwM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hnaa7a2pk4pg1q3pwhgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M9yKFTwM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hnaa7a2pk4pg1q3pwhgc.png" alt="Trello Card Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Planning
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3_shugwf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/60ujo9bv12lrgoz20kbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3_shugwf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/60ujo9bv12lrgoz20kbw.png" alt="Engineering planning chart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are building this project as a React app using Apollo Client for state management and the Ant Design React UI library. The team settled on using Apollo Client because it is a great solution for interfacing with a GraphQL back-end. Ant Design was a requirement that was imposed on the team.&lt;/p&gt;

&lt;p&gt;Both of these technologies are new to the team and add a bit of a learning curve to our process. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dy6YG7no--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nm7zhma7vezpm561pde4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dy6YG7no--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nm7zhma7vezpm561pde4.png" alt="Apollo setup code sample"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apollo Client requires minimal setup to get up and running. Once you create a client with the URI for the GraphQL server and connect it to the React app, you are ready  to start pulling data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mdk2wQUX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9rr562i1y62q8ifgu82t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mdk2wQUX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9rr562i1y62q8ifgu82t.png" alt="Mutation code sample"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Querying the database and posting data mutations is manageable. Once the query or mutation is written, it is only a matter of using the &lt;code&gt;useQuery&lt;/code&gt; or &lt;code&gt;useMutation&lt;/code&gt; hooks to perform the operation. &lt;/p&gt;

&lt;h1&gt;
  
  
  The App
&lt;/h1&gt;

&lt;p&gt;The team is still in the process of building the main functionality for the app. Final styling and testing of most components is still outstanding. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e5XfM3sc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i1qankscbmlrlzt7g2xy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e5XfM3sc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i1qankscbmlrlzt7g2xy.png" alt="Data type editor screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Current State
&lt;/h2&gt;

&lt;p&gt;The current state of the app includes the following functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Styled Okta sign-in screen&lt;/li&gt;
&lt;li&gt;Sidebar navigation menu with Eco-Soap Bank branding&lt;/li&gt;
&lt;li&gt;Create new admin account functionality&lt;/li&gt;
&lt;li&gt;Table that displays data types from the Eco-Soap Bank API&lt;/li&gt;
&lt;li&gt;Create new data type functionality&lt;/li&gt;
&lt;li&gt;Delete data type functionality &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Upcoming Features
&lt;/h2&gt;

&lt;p&gt;Upcoming features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display data records from Eco-Soap Bank API&lt;/li&gt;
&lt;li&gt;Functionality to perform CRUD operations on data records&lt;/li&gt;
&lt;li&gt;Map component to display data records&lt;/li&gt;
&lt;li&gt;Filtering layers functionality for controlling what data records are displayed on map&lt;/li&gt;
&lt;li&gt;Display and update user profile&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Lessons Learned
&lt;/h1&gt;

&lt;p&gt;So far in this project, lessons learned have primarily been related to the new (to me) technologies that I discussed previously. &lt;/p&gt;

&lt;h2&gt;
  
  
  Peer Feedback
&lt;/h2&gt;

&lt;p&gt;Feedback is an important part of growth and working effectively as a team. On this project, the feedback has been positive, but limited due to the small size of the team. While I enjoy receiving praise, the lack of feedback has limited what I can learn about my self and my efforts to complete this project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking forward
&lt;/h2&gt;

&lt;p&gt;Building this Eco-Soap Bank has been a valuable experience in that it has given me the opportunity to learn new technology packages on my own and demonstrate that I can successfully work in a new ecosystem in a limited time-frame. &lt;/p&gt;

&lt;p&gt;It has also helped me find a new appreciation of communication and feedback. Prior to this these may not have been a major concern of mine, but finding a workplace that clearly has inter-team and intra-team communication is now something I will heavily consider. &lt;/p&gt;

</description>
      <category>react</category>
      <category>antdesjign</category>
      <category>graphql</category>
      <category>mapbox</category>
    </item>
  </channel>
</rss>
