<?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: Santos</title>
    <description>The latest articles on DEV Community by Santos (@santoast).</description>
    <link>https://dev.to/santoast</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%2F821520%2Ff2f857a6-0875-41b6-bc7a-f5c98eb54e29.png</url>
      <title>DEV Community: Santos</title>
      <link>https://dev.to/santoast</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/santoast"/>
    <language>en</language>
    <item>
      <title>Simple React e-commerce Store</title>
      <dc:creator>Santos</dc:creator>
      <pubDate>Fri, 15 Apr 2022 15:17:56 +0000</pubDate>
      <link>https://dev.to/santoast/simple-react-e-commerce-store-2bel</link>
      <guid>https://dev.to/santoast/simple-react-e-commerce-store-2bel</guid>
      <description>&lt;p&gt;I've created a super simple e-commerce application with react, react-redux, react-router, and redux-persist.&lt;/p&gt;

&lt;p&gt;Each url or "route" was made with react-router in the react index.js file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UDoybSDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yd8cbmazsvc91lof7uok.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UDoybSDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yd8cbmazsvc91lof7uok.PNG" alt="Image description" width="880" height="825"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        &amp;lt;BrowserRouter&amp;gt;
          &amp;lt;Routes&amp;gt;
            &amp;lt;Route path="/" element={&amp;lt;App /&amp;gt;} /&amp;gt;
            &amp;lt;Route path="/cart" element={&amp;lt;Cart /&amp;gt;} /&amp;gt;
            &amp;lt;Route path="/products" element={&amp;lt;ProductContainer /&amp;gt;} /&amp;gt;
            &amp;lt;Route path="*" element={&amp;lt;Error /&amp;gt;} /&amp;gt;
          &amp;lt;/Routes&amp;gt;
        &amp;lt;/BrowserRouter&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All of the products in the application were fetched and moved around using the useDispatch and useSelector functions from react-redux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8rA7hVzw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kfd2909ocqct18j07ohl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8rA7hVzw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kfd2909ocqct18j07ohl.PNG" alt="Image description" width="880" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There were two simple actions made to move items to the cart and to remove them as well.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function rootReducer(state = initialState, action) {
  switch (action.type) {
    case ADD_TO_CART:
      return {
        ...state,
        cart: [...state.cart, action.payload],
      };

    case REMOVE:
      return {
        ...state,
        cart: state.cart.filter((item) =&amp;gt; item !== action.payload),
      };

    default:
      return state;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Redux-persist was necessary to use to prevent the items in the cart from disappearing when the user would switch to another page.&lt;/p&gt;

&lt;p&gt;There was definitely more functionality I wanted to add to this little application, but I either ran out of time or couldn't figure out how to work other installed packages. &lt;/p&gt;

&lt;p&gt;But if you want to play around with the code or read a little bit more about this application, checkout the github for it &lt;a href="https://github.com/San-toast/web/tree/main/week14/day1/e-commerce"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>redux</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>First Fullstack Project: Tixxly</title>
      <dc:creator>Santos</dc:creator>
      <pubDate>Mon, 21 Mar 2022 01:27:15 +0000</pubDate>
      <link>https://dev.to/santoast/first-fullstack-project-tixxly-576j</link>
      <guid>https://dev.to/santoast/first-fullstack-project-tixxly-576j</guid>
      <description>&lt;p&gt;I'm now 10 weeks into my bootcamp and was assigned to make a fullstack project with a partner. My partner &lt;a href="https://dev.to/rayleighrozier"&gt;Rayleigh&lt;/a&gt; came up with the idea to create a movie theatre website. We created this project using various means like Node, ElephantSQL, EJS, Seuquelize and more. Much of our design and functionality were based off other theatre apps/websites. All of the movies displayed on our homepage are from &lt;a href="https://www.themoviedb.org/"&gt;The Movie Database&lt;/a&gt; API.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--crT73Tz5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgwlsh5c2jnfu5p2gj5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--crT73Tz5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgwlsh5c2jnfu5p2gj5l.png" alt="Home Page" width="880" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the front page, users can choose the movie they want to reserve a ticket for from the available time. All of these times are gathered from a database we created. Our API is set to gather recent releases from their database, so our homepage will change every few days with what movies are shown. Although because we have to manually insert times and movies to our own database to be displayed on the reservation page, some may end up having no showtimes.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3yljOR5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjymmsiiu9mg88jxmmpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3yljOR5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjymmsiiu9mg88jxmmpv.png" alt="Reservations" width="880" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, we allow the user to select some concessions which also come from one of the tables in our database.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YQR_INjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8w0jzs5ydrsxm401p20o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YQR_INjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8w0jzs5ydrsxm401p20o.png" alt="Concessions" width="880" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the user chooses their concessions, they just have to fill out a form with their name and will be redirected to a page with their ticket information.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--70lvbVyO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74bdkngmmp7pjv2f0ofv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--70lvbVyO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74bdkngmmp7pjv2f0ofv.png" alt="Ticket" width="880" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was the first time our bootcamp had an assignment involving a partner, so we had to figure out how to split the work. Rayleigh was a powerhouse through this whole project. Major props to her for putting together so much of this project and designing the website. Some of the challenges we faced at the start was figuring out how our database and tables would be setup and connected. Another slight hurdle was getting the information from our database to show up on certain pages. &lt;br&gt;
Here's our projects &lt;a href="https://github.com/San-toast/raytoast"&gt;github&lt;/a&gt; if you want to see the code.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>Front-end Project </title>
      <dc:creator>Santos</dc:creator>
      <pubDate>Fri, 25 Feb 2022 06:11:57 +0000</pubDate>
      <link>https://dev.to/santoast/front-end-project-3ml0</link>
      <guid>https://dev.to/santoast/front-end-project-3ml0</guid>
      <description>&lt;p&gt;I had an assignment for my bootcamp to create a front end involving DOM manipulation and an API the result of this project involved many hours of trying to figure out how the API I chose worked, and how to not make a complete abomination of CSS.&lt;/p&gt;

&lt;p&gt;The API I used was from &lt;a href="https://www.igdb.com/api"&gt;https://www.igdb.com/api&lt;/a&gt;. I chose this because it appeared to have a large database involving video games and would be fun to work with. It was absolutely not fun to work with. The API involves creating a and linking a &lt;a href="https://www.twitch.tv"&gt;https://www.twitch.tv&lt;/a&gt; to obtain a Client ID and a Client Secret. I then needed to make a POST request through Twitch to obtain a token to finally be able to use the API. Now it was time to figure out this API. This bootcamp taught me how to fetch data from APIs with the use of GET and Keys. Unfortunately for me, this API I chose only used POST and required the use of Headers and the Body to use it. For someone who had only learned how to use APIs for a few days, this was a struggle to figure out. The IGDB documentation is extremely hard for to figure out for someone new to APIs (like me). There weren't that many good examples of how to setup my JavaScript and how to get the information I wanted. Thankfully with the help of my instructor, we were able to get some data from the API to be on my HTML page. &lt;/p&gt;

&lt;p&gt;I could probably go on for many paragraphs about the struggle and frustration this API caused me, but I'll stop so I can just show a screenshot of one of the pages I created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kz_D5Za7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2c99x6vylywd4hfwmrbv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kz_D5Za7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2c99x6vylywd4hfwmrbv.png" alt="Image description" width="880" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is probably my favorite page just because of how fun it is to see how many different games there are in this database. I used the random number function from 1 to 25,000 to display a random game every time the page is refreshed. The API has over 100,000 games, but I realized the higher number it chose, the less likely the database had a cover art or even a description of the game. &lt;/p&gt;

&lt;p&gt;Anyway, this was a cool project to work on, and if anyone else out there has had any experience with the API I used I'd love to hear about it!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>html</category>
      <category>api</category>
    </item>
  </channel>
</rss>
