<?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: GABRIEL OYIKWU</title>
    <description>The latest articles on DEV Community by GABRIEL OYIKWU (@oyiks).</description>
    <link>https://dev.to/oyiks</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%2F1582073%2F1e973889-df87-4f71-bc5a-40c4ce5fa77c.jpg</url>
      <title>DEV Community: GABRIEL OYIKWU</title>
      <link>https://dev.to/oyiks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oyiks"/>
    <language>en</language>
    <item>
      <title>INTRODUCTION</title>
      <dc:creator>GABRIEL OYIKWU</dc:creator>
      <pubDate>Thu, 20 Feb 2025 09:58:54 +0000</pubDate>
      <link>https://dev.to/oyiks/introduction-51o9</link>
      <guid>https://dev.to/oyiks/introduction-51o9</guid>
      <description>&lt;p&gt;Have you ever wanted to make use of Google Chrome on your mobile and seem to be stuck? I would solve that with a user guide that would help you navigate Google Chrome and its features on mobile. Google Chrome is one of the web browsers that you can use to surf the web. In this article, you will learn how to install it on your mobile, why you use the Chrome browser apart from the others, and how to make the best use of it.&lt;/p&gt;

&lt;p&gt;WHAT IS GOOGLE CHROME?&lt;/p&gt;

&lt;p&gt;Google Chrome is an open-source web browser that was developed by Google in 2008 and runs on different platforms. With Google Chrome, you can get search results that are tailored specifically to you as you type in your text. You can synchronize settings and bookmarks across all your devices. Also, you can use other Google Workspace products like Google Docs, slides, sheets, and more. Google Chrome has functionalities like the extension and you can add web store extensions like project-management tools and editors.&lt;/p&gt;

&lt;p&gt;WHY GOOGLE CHROME?&lt;/p&gt;

&lt;p&gt;Google Chrome is built for performance. You can optimize your experience with features like energy saver and memory saver. Browsing online is made safe using Google Chrome. Your privacy can be kept in check with intuitive settings. Chrome comes with a password manager which you can store your password safely.&lt;/p&gt;

&lt;p&gt;Several extensions are shipped with Google Chrome that you would have access to for a better experience. You can sign in to Chrome from any device. It has several themes and you can customize it for a dark mode and other options. Chrome updates itself automatically and this comes every four weeks.&lt;/p&gt;

&lt;p&gt;INSTALLATION&lt;/p&gt;

&lt;p&gt;Since this is a mobile user guide, I would start by installing it on Android and then on iOS. To install on Android, follow these steps.&lt;/p&gt;

&lt;p&gt;Go to the Google Play Store on your Android device.&lt;br&gt;
Tap Enable.&lt;/p&gt;

&lt;p&gt;Continue to begin browsing.&lt;/p&gt;

&lt;p&gt;You can find the Chrome app on the home screen. To install Chrome on your iPhone or iPad, follow these steps.&lt;/p&gt;

&lt;p&gt;Search for chrome on the App store.&lt;br&gt;
Tap Get.&lt;br&gt;
Follow the on-screen instructions to install. Enter your Apple ID Password when asked.&lt;br&gt;
Tap open to start browsing. Tap Chrome to open Chrome on your home screen.&lt;/p&gt;

&lt;p&gt;GOOGLE CHROME ALTERNATIVE (FIREFOX)&lt;/p&gt;

&lt;p&gt;Firefox is an open-source web browser built by the Mozilla Development network. With Firefox, you can view all your tabs, recent searches, and favorite sites all in one place.&lt;/p&gt;

&lt;p&gt;FAST AND PRIVATE&lt;/p&gt;

&lt;p&gt;Firefox provides privacy protection and gives you great speed as the pages load. It has a feature called enhanced tracking protection that blocks those who track you online and makes your page load slowly.&lt;/p&gt;

&lt;p&gt;PRIVATE MODE BROWSING&lt;/p&gt;

&lt;p&gt;With just one tap, you can get to private mode on Firefox. When you exit from private mode, all your browsing history will be deleted.&lt;/p&gt;

&lt;p&gt;EASY SEARCH&lt;/p&gt;

&lt;p&gt;Whether you are using a smaller phone or a bigger one, the search bar is brought down to the bottom so that you can access it while surfing the web with one hand.&lt;/p&gt;

&lt;p&gt;DARK MODE POWER SAVER&lt;/p&gt;

&lt;p&gt;You can switch to dark mode to reduce the straining of your eyes and also save your battery.&lt;/p&gt;

&lt;p&gt;ENHANCED FUNCTIONALITY WITH ADD-ONS&lt;/p&gt;

&lt;p&gt;Add-ons are extra functionalities that can be added to your browser to carry out advanced tasks like increasing default privacy settings and customizing your experience.&lt;/p&gt;

&lt;p&gt;HOW TO USE GOOGLE CHROME EFFECTIVELY&lt;/p&gt;

&lt;p&gt;I will be sharing some tips on how to use Google Chrome better.&lt;/p&gt;

&lt;p&gt;How to Set Chrome as your default web browser&lt;br&gt;
Open settings on your Android device.&lt;/p&gt;

&lt;p&gt;Tap Apps&lt;/p&gt;

&lt;p&gt;Tap the ‘’default” apps under Apps Management.&lt;/p&gt;

&lt;p&gt;Tap the browser app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How to browse in incognito mode&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open Chrome on your Android phone.&lt;br&gt;
To the right of the address bar, tap more to open a new incognito tab.&lt;/p&gt;

&lt;p&gt;In the left-left corner of the new window that comes up, select the ‘new incognito tab’.&lt;br&gt;
Note: you can only browse in private when you’re using incognito mode.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How to Delete your browsing data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open Chrome.&lt;br&gt;
Go to settings, and select Privacy and Security.&lt;/p&gt;

&lt;p&gt;Tap Clear data.&lt;/p&gt;

&lt;p&gt;Choose a time range like last hour or All time.&lt;/p&gt;

&lt;p&gt;Browsing data has been cleared.&lt;/p&gt;

&lt;p&gt;How to Turn on Dark Mode&lt;/p&gt;

&lt;p&gt;At the top right-hand corner, tap more, and go to setting, then select Theme.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the dark theme out of these options.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;System default&lt;br&gt;
Dark&lt;br&gt;
Light&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So far, you have learned about the features of Google Chrome, how to use it, and why it should be your go-to browser. Also, you were able to see a good alternative to Google Chrome.&lt;/p&gt;

</description>
      <category>google</category>
      <category>mobile</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I built a personal expense tracker using Reactjs</title>
      <dc:creator>GABRIEL OYIKWU</dc:creator>
      <pubDate>Wed, 19 Feb 2025 13:40:26 +0000</pubDate>
      <link>https://dev.to/oyiks/how-i-built-a-personal-expense-tracker-using-reactjs-33bd</link>
      <guid>https://dev.to/oyiks/how-i-built-a-personal-expense-tracker-using-reactjs-33bd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started learning a JavaScript framework called Reactjs, and I was able to build a personal finance app using It. The app is to manage your personal income and expenditure and it would have functionalities like adding total income, adding expenses, deleting expenses, and editing expenses like every other CRUD app. I would like to acknowledge &lt;a class="mentioned-user" href="https://dev.to/alexandersstudi"&gt;@alexandersstudi&lt;/a&gt;, who created the UI design in the Figma community that I used.&lt;/p&gt;

&lt;p&gt;This is a live demo of the web application &lt;a href="https://gabyie-personal-finance.netlify.app/" rel="noopener noreferrer"&gt;https://gabyie-personal-finance.netlify.app/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I made use of the UseState hook and react-redux toolkit for state management. I used react-router for routing from one page to another. I used Styled components for styling. &lt;/p&gt;

&lt;p&gt;Here is the file structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sh07mwz6yotbxnd4o6u.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sh07mwz6yotbxnd4o6u.PNG" alt="Image description" width="260" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;HTML&lt;br&gt;
CSS&lt;br&gt;
JavaScript&lt;br&gt;
Reactjs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7s2kwx5r4o08u9coc16.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7s2kwx5r4o08u9coc16.PNG" alt="Image description" width="620" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a functional component with a regular JavaScript function and then exported the default, specifying that the App is the main component. It holds the two pages the web app comprises since it is a two-page application. I used the import keyword to import the Dashboard page and also the Homepage. &lt;/p&gt;

&lt;p&gt;Since I am using the styled component library to style the application, I imported it also to set global styles to all the pages, such that any style I add here would be applied to every other page. React app does not come with page routing – it’s what organizes and manages how users navigate through your web application.&lt;/p&gt;

&lt;p&gt;I ran this command on your terminal to install React Router to your application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install react-router-dom.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, I imported the react-router to the app.js functional component. I wrapped my entire app.js functional component with the Routes and added individual routes for the homepage and Dashboard page. I started creating the homepage with a functional component named Homepage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86di1i7psbsgkxn80kde.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86di1i7psbsgkxn80kde.PNG" alt="Image description" width="537" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The homepage returns an empty wrapper &amp;lt;&amp;gt;...&amp;lt;/&amp;gt; nested with a Main component – this begins with a capital letter to signify that it is a React component different from an HTML element which starts with a small letter. It is the container of the Homepage. Nested in it is the ImageContainer component which renders an image.&lt;/p&gt;

&lt;p&gt;The next component is a Form component with a level one heading and three inputs with a button. To manage the changes that would occur as the user interacts with the form, I used the UseState hook to manage state change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90q1jicv57qt3zl5jfeg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90q1jicv57qt3zl5jfeg.PNG" alt="Image description" width="601" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, I set the input that receives the income that is inserted through the form. The HandleNameChange is an event listener that updates the income state. The next state is to set the input to receive the name of the user through the form and it is handled in the handleSubmit event listener which is attached to the form. &lt;/p&gt;

&lt;p&gt;Inside the form, I used an if statement to conditionally render the form, such that if there’s no value inserted into the input it does nothing but if it has a value, then, you use the dispatch method to update the state, and the navigate method to route to the dashboard page. Also, I used the guard clause to validate the username input. If one doesn’t input the username, goals, or income, then the form will not be submitted. For the income input, the isNaN method is used to check if someone inputs a value for the income and it is not a number, it won’t be received by the form.&lt;/p&gt;

&lt;p&gt;I added a state variable named goals and SetGoals to the component to handle the state for goals. The handleGoalChange event listener updates the goal state once it receives input and then updates the change when it re-renders. Also, inside the handleSubmit event listener, there is an if statement that updates the change using the dispatch method once a value is inserted into the input and displayed the new record is received. Also, the navigate method is used for routing to the dashboard page.&lt;/p&gt;

&lt;h2&gt;
  
  
  USING REDUX TOOLKIT FOR STATE MANAGEMENT
&lt;/h2&gt;

&lt;p&gt;After installing the Redux toolkit using the appropriate command, I added a new file called store.js and imported the configureStore API from the Redux toolkit to create a store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7wras9l5i7tiskbstyc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7wras9l5i7tiskbstyc.PNG" alt="Image description" width="752" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To connect the store to the application, I made use of the Provider component from the redux toolkit. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdykbdpi3d2uqrp25jk4v.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdykbdpi3d2uqrp25jk4v.PNG" alt="Image description" width="503" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I imported the Provider component from the redux toolkit and the redux store in the main.jsx file. Next, I wrapped the App and Browser Router from the react-router library with the Provider function and passed the store as a prop. This makes all the components in the App have access to the redux store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfz8dhx1s8f4yzp64tn2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfz8dhx1s8f4yzp64tn2.PNG" alt="Image description" width="496" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, I created a slice for the income which contains reducers and actions to update the income.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus5ip4euh8xqcmflhbvb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus5ip4euh8xqcmflhbvb.PNG" alt="Image description" width="518" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a slice for updating the state of the goals data inserted in the input. This contains reducers and actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwnbdy8ytqwv4oml9edg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwnbdy8ytqwv4oml9edg.PNG" alt="Image description" width="633" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a slice for updating the amount inserted in the input. This also contains reducers and actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jsxmmu3mw02ew08pp86.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jsxmmu3mw02ew08pp86.PNG" alt="Image description" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I created a slice for updating the state when someone inputs the data from the form on the modal window, the description of the expenses is displayed on the screen with the addExpense action. The removeExpense action is to delete the expenses when the delete button is clicked. Then the editItem is for editing the form from the description, to change its values and re-update what was initially selected.&lt;/p&gt;

&lt;p&gt;I made use of styled components for styling. Styled components let you remove the mapping between components and styles, as such you create a normal React component that has styles attached to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1oull7xzok4sltwmpyb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1oull7xzok4sltwmpyb.PNG" alt="Image description" width="601" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the Dashboard page which is created by making a Dashboard component. It starts with the main component, the wrapper for the Dashboard component, and nested in it is the Navbar component, a flex parent with two children: NavLeft and NavRight. &lt;/p&gt;

&lt;p&gt;NavLeft has a click event handler that takes you to the home page when you click on the logo. The Nav Right has routing that takes you from the homepage to the dashboard page. There is also a click event handler that reveals a modal window once the button is clicked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3jrk6e6qgo9tl7o7a88.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3jrk6e6qgo9tl7o7a88.PNG" alt="Image description" width="514" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a select element that you can select from different options for your expenses. Then below it, you have a cart and a layout for a description of your various expenses in detail. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folxqogmh3vmvlsfj8tra.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folxqogmh3vmvlsfj8tra.PNG" alt="Image description" width="472" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s an event handler to close the modal window. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztowlapi444u1nankfzu.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztowlapi444u1nankfzu.PNG" alt="Image description" width="559" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, I made use of two hooks, first the useNavigate to programmatically navigate to the homepage and the useState hook to manage the change in state of the income and the amount values. I added a progress bar to show the percentage of money spent from the total capital.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fvf77g1e9oa8fg2twyc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fvf77g1e9oa8fg2twyc.PNG" alt="Image description" width="697" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added an event handler – handleGoBack to close the show modal window. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjnmasbkn6rea3h2l0qy.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjnmasbkn6rea3h2l0qy.PNG" alt="Image description" width="427" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I made use of the useSelector hook to reference the change in state as the user inputs the value for goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  CONCLUSION
&lt;/h2&gt;

&lt;p&gt;This side project was an engaging one and I was able to learn how to create components with React to manage state using redux-toolkit, and incorporate other libraries into the project. It was a good experience for learning and would love to keep doing more of these in the coming days. I would like to know your thoughts. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to create a Shopify Onboarding UI</title>
      <dc:creator>GABRIEL OYIKWU</dc:creator>
      <pubDate>Mon, 23 Dec 2024 10:39:35 +0000</pubDate>
      <link>https://dev.to/oyiks/how-to-create-a-shopify-onboarding-ui-3f33</link>
      <guid>https://dev.to/oyiks/how-to-create-a-shopify-onboarding-ui-3f33</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have been learning about Front-end development and was privileged to join a hackathon. The task was to build a Shopify onboarding dashboard for online stores using HTML, CSS, and JavaScript. I will explain how I set it up and the steps I took to build it. &lt;/p&gt;

&lt;p&gt;It was a perfect challenge to showcase my skills; one can only show proof of knowledge in web development after building something. Frantz Kati, a full-stack software engineer and educator, organized this hackathon. &lt;/p&gt;

&lt;p&gt;Here is the final app [&lt;a href="https://oyiks.github.io/Shopify_clone/" rel="noopener noreferrer"&gt;https://oyiks.github.io/Shopify_clone/&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For you to build a Shopify onboarding dashboard like this, you would have an understanding of the following:&lt;/p&gt;

&lt;p&gt;HTML&lt;br&gt;
CSS&lt;br&gt;
JavaScript.&lt;/p&gt;

&lt;p&gt;This is the file structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn876h8tbbwgcc56j5ea.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvn876h8tbbwgcc56j5ea.PNG" alt="screenshot of file structure" width="205" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTML Structure&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyitmw3qssodl0t23qsqp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyitmw3qssodl0t23qsqp.PNG" alt="Screenshot of file Structure" width="740" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, I added the font as seen in the UI design to the head of the HTML document and linked the CSS file to the HTML.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqj6dzz53mxfk3h9lejt.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqj6dzz53mxfk3h9lejt.PNG" alt="Screen of HTML Structure code" width="661" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The navigation starts here with a nav element, the navigation's container. I added a div nested in the nav element so I can add responsive images using the picture element and make the image a link that you can click to go to another page. &lt;/p&gt;

&lt;p&gt;Next, I added a div container with a class of search and an input which is a flex child of the nav element.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ybcejo7an14sj1h5ssx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ybcejo7an14sj1h5ssx.PNG" alt="Screenshot of end part of the navigation" width="468" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next in the navigation bar is a div container with the class btn, and a button with a bell icon. The three attributes on the button are used for accessibility; aria-has-popup indicates an element triggers a popup; aria-expanded indicates the current state of an element; aria-controls specifies the ID of the element.&lt;/p&gt;

&lt;p&gt;Next, you have an unordered list which is used for accessibility, with a class of menu-active and ID of profile-menu-content; aria-labelledby attribute for the screen reader to associate the profile-menu with the unordered list; role=”menu” is used to indicate the menu since Ul element is non-semantic in this situation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6451b2ys49kihdhh7s2a.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6451b2ys49kihdhh7s2a.PNG" alt="screenshot of the dropdown menu" width="615" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the dropdown menu for the button with the bell icon.  You have a div container with a class of menu-icon which wraps the dropdown with three list items. The first two are images and the last is an inner container with text. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrdo8peu5ponkjeh8v57.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvrdo8peu5ponkjeh8v57.PNG" alt="screenshot of the menu wrapper" width="574" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next button is wrapped in a div container with a class menu-wrapper and the button has a class of profile-trigger for styling and other attributes for accessibility. Embedded in the button is a placeholder image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqgmtbmahb4wubr4uk7b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqgmtbmahb4wubr4uk7b.PNG" alt="Part of the dropdown menu" width="519" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another dropdown menu begins. There is a div with a list container and an image with text named All Stores inside it, along with a horizontal line. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzic8xfl6e9190jttdu8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzic8xfl6e9190jttdu8.PNG" alt="Part of the dropdown menu" width="580" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, you have 4 four list elements that nest a paragraph with text in it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1putmv1ss5gabppvkf4k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1putmv1ss5gabppvkf4k.PNG" alt="Image description" width="571" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create a card component, I added a div container with the class advert advert-active. I added another div nested in the div container with the class advert-message which would be one of the flex children. Then, the next flex child is a div container which is the parent of a button element and a cancel icon for closing the card component.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2g6y5f9aielkl5zqed5p.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2g6y5f9aielkl5zqed5p.PNG" alt="Image of Accordion codebase" width="571" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create an accordion, I added a div, the parent container with a class of accordion-container. Next, I added two divs nested in the accordion container div that would be flex children. Then, I added a div that would carry some text in the header of the accordion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5nn15n8p5ttl06gu970.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5nn15n8p5ttl06gu970.PNG" alt="screenshot of progress bar code" width="565" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next is the progress bar which is given an attribute of max=”100” and value=”0” to show the maximum is 100 and starts at 0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiiyw4nfgqmp6lrfar6d2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiiyw4nfgqmp6lrfar6d2.PNG" alt="Image of collapsible section" width="405" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, I want to build the collapsible section. All collapsible have a div container with an image and text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS Styling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8m87z8uj0p41di2uor.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8m87z8uj0p41di2uor.PNG" alt="screenshot of CSS styling" width="591" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added the fonts needed to the body and gave it a background color of “#b5b5b5”. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzi7y60gjun1jhjw42wq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzi7y60gjun1jhjw42wq.PNG" alt="Image nav container screenshot" width="570" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I gave the nav container a display flex and a space between it. I also added a background color the same as the design and aligned the items to be the same vertical height.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotidmls6cxyl0ak4vfce.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotidmls6cxyl0ak4vfce.PNG" alt="Image code snippet for progress bar" width="215" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The progress bar has a width of 72px and a height of 10px, a margin-left of 10px for space at the left-hand side. The accent color is the color that fills the progress bar which is black in this case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2gnenaabo126agyv0fq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2gnenaabo126agyv0fq.PNG" alt="Image of code snippet for accordion container" width="487" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The accordion container is the div container that wraps the accordion. It’s given a border radius on all four sides and a background color of white and is made wide with 888px.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tuflwwnhdl0b6d0tfpf.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tuflwwnhdl0b6d0tfpf.PNG" alt="Image of code snippet for accordion menu" width="328" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The accordion menu class is the div container with all the collapsible elements. It’s given a display flex so that all the elements stay on the same line and space with all the items aligned at the center.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2imy8y2c42kr8u7qh3b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2imy8y2c42kr8u7qh3b.PNG" alt="Image of code snippet for mobile devices" width="361" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the styling for devices below 480px. A little bit of adjustment to the nav container, reducing the gap, padding, and height.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the functionality with JavaScript, a function is created as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36arga7m52xa21ugq560.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36arga7m52xa21ugq560.PNG" alt="screenshot of showMenuComponent function code" width="651" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside the ShowMenuComponent function, the button with the bell icon with a class of Alert Trigger is selected and stored as a reference to the MenuTrigger variable. Also, the dropdown menu which is an Ul element with an ID of profile-menu-content is selected and stored as a reference to the menu variable.&lt;/p&gt;

&lt;p&gt;Next, I added a click event handler MenuTrigger so that the dropdown menu is shown when the button with the bell icon is triggered. The button with the bell icon has an attribute aria-expanded that is set to true and stored in the variable isExpanded. Menu.classList.toggles adds the class menu-active which makes the dropdown menu active.&lt;/p&gt;

&lt;p&gt;All the lists in the dropdown menu are selected and stored as a reference to the variable allMenuItems. Now, there is a conditional statement, if the button with the bell icon is clicked, the aria-expanded attribute is set to false and focused, else it is set to true and the AllMenuItems is focused detecting to assistive technology that the dropdown menu has collapsed and brought back to default. Lastly, you call the function using ShowMenuComponent();.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp35vqlf9y5gyb9oy8olo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp35vqlf9y5gyb9oy8olo.PNG" alt="ShowDropdownMenu screenshot" width="578" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, another function is created to expand the dropdown menu after the second button is clicked. The button with the class profile-trigger is selected and stored as a reference to the variable MenuTrigger. Also, the ID's profile menu is selected and stored as a reference to the variable menu. &lt;/p&gt;

&lt;p&gt;A click-event listener is added which toggles the dropdown menu whenever the second button is clicked. Lastly, the function is called using showDropdownMenu();.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx7fu8c32bpmmc75tqwqv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx7fu8c32bpmmc75tqwqv.PNG" alt="screenshot of AdvertMenuComponent function" width="550" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another function is created to toggle the advert component on and off. The cancel-icon class is selected which is an image that behaves like a button and is stored as a reference to the variable AdvertTrigger. Also, the advert class of the advert component div container is selected and stored as a reference to the variable menu. &lt;/p&gt;

&lt;p&gt;A click event listener is added to toggle the advert menu component when the cancel icon is clicked. Finally, the function is called using AdvertMenuComponent();.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ez8wlu3s50ejactshaw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ez8wlu3s50ejactshaw.PNG" alt="Image of code snippet for DisplayAccordion function" width="666" height="429"&gt;&lt;/a&gt;,&lt;/p&gt;

&lt;p&gt;Another functionality was created to collapse the accordion and expand it. The div container with a class of loading texts for the accordion child elements was selected and reference was stored in the variable AccordionTrigger.&lt;/p&gt;

&lt;p&gt;A for loop was created to run through the five accordion child elements with a click event listener inserted inside the loop. Once any of the child elements is clicked, it is displayed, else it stays unexpanded by default. DisplayAccordion(); is used to call the function. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have come a long way in getting into my head to understand the steps I took in building this Shopify onboarding UI. It was good for me because I had to practically make use of those syntaxes I had been watching from tutorials. This proves to me that building things is really the way to learn, but far better is writing about what you built. &lt;/p&gt;

&lt;p&gt;Next, I would write on a budget tracker I built using Reactjs, a framework on JavaScript. Let me know your thoughts.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
