DEV Community

Cover image for How To Build A Decentralized eCommerce Platform with React and Solidity: (PART TWO)
Gospel Darlington
Gospel Darlington

Posted on • Edited on

How To Build A Decentralized eCommerce Platform with React and Solidity: (PART TWO)

What you will be building, see the live demo and GitHub repo for more info.

Add New Product

Pay With Ethers

Chat With Seller

Introduction

In the PART-ONE of this tutorial, we built the smart contract that powers our application. Now let’s build the frontend for interacting with it as you can see above.

Not much talking, let’s get coding… We’ll begin by installing the rest of the dependencies for this application.

Check out my YouTube channel for FREE web3 tutorials now.

Installing App Dependencies

On your terminal, run the following commands…

yarn add firebase #Database SDK
yarn add @cometchat-pro/chat #Chat SDK 
yarn add @material-tailwind/react #UI Kit
Enter fullscreen mode Exit fullscreen mode

If you have successfully executed the above commands, let’s move to creating some private keys for Firebase and CometChat.

Creating Private Keys

To utilize the Firebase or CometChat SDK, we need to create an app with their services. Don’t worry, this won't cost you a dime. Firebase is limited but free, it's more than enough to help you learn full-stack development. CometChat offers its users a trial version for testing out their SDK and getting acquainted with how their technology works.

Creating an App with Firebase
Use this example If you do not already have a Firebase account, create one for yourself. After that, go to Firebase and create a new project called freshers, then activate the Google authentication service, as detailed below.

Firebase Projects page

Step 1
Step 2
Step 3

Firebase supports authentication via a variety of providers. For example, social authentication, phone numbers, and the traditional email and password method. Because we'll be using the Google authentication in this tutorial, we'll need to enable it for the project we created in Firebase, as it's disabled by default. Click the sign-in method under the authentication tab for your project, and you should see a list of providers currently supported by Firebase.

Firebase Authentication Service

Step 1
Step 2
Step 3

Super, that will be all for the firebase authentication, lets generate the Firebase SDK configuration keys.

You need to go and register your application under your Firebase project.

Project Overview Page

On the project’s overview page, select the add app option and pick web as the platform.

Registering a Firebase SDK Step 1
Registering a Firebase SDK Step 2

Return to the project overview page after completing the SDK config registration, as shown in the image below.

Project overview page

Now you click on the project settings to copy your SDK configuration setups.

Project Setups

The configuration keys shown in the image above must be copied to the .env file. We will later use it in this project.

Create a file called firebase.js in the src folder of this project and paste the following codes into it before saving.

You are awesome if you followed everything correctly. We'll do something similar for CometChat next.

Creating an App with CometChat
Head to CometChat and signup if you don’t have an account with them. Next, log in and you will be presented with the screen below.

CometChat Dashboard

Use this as an example to create new app with the name freshers by **clicking the **Add New App button. You will be presented with a modal where you can enter the app details. The image below shows an example.

Add New App Modal

Following the creation of your app, you will be directed to your dashboard, which should look something like this.

API Key Here
Rest API Key Here

You must also copy these keys to the .env file.

Finally, delete the preloaded users, and groups as shown in the images below.

Users List
Group List

Awesome, that will be enough for the setups. Use this template to ensure your .env file is following our convention.

ENDPOINT_URL=<PROVIDER_URL>
SECRET_KEY=<SECRET_PHRASE>
DEPLOYER_KEY=<YOUR_PRIVATE_KEY>

REACT_APP_COMET_CHAT_REGION=<YOUR_COMET_CHAT_REGION>
REACT_APP_COMET_CHAT_APP_ID=<YOUR_COMET_CHAT_APP_ID>
REACT_APP_COMET_CHAT_AUTH_KEY=<YOUR_COMET_CHAT_AUTH_KEY>

REACT_APP_FB_AUTH_KEY=<YOUR_FIREBASE_AUTH_KEY>
REACT_APP_FB_APP_ID=<YOUR_FIREBASE_APP_ID>
Enter fullscreen mode Exit fullscreen mode

Lastly, create a file name cometChat.js in the src folder of this project and paste the code below into it.

Cool, let’s start integrating them all into our application, we will start with the components.

Building The Components

Let’s start crafting out all the components one after the other, always refer to the git repo if you have any challenges.

The Register Component

Register Component

This component is responsible for saving new users into Firebase. Navigate to the src >> components and create a file named Register.jsx.

Awesome!!!

The Login Component

The Login Component

Let’s also create another component called Login.jsx in the src >> components folder and paste the code below in it.

Cool, these two components make up the authentication aspect of this application. We will later fuse them into their respective views.

The Header Component

Header Component

This component encapsulates the pages on our application. It was crafted with the free Creative TIm Tailwind-Material UI Kit. Create a file named Header.jsx inside the src >> components directory and paste the codes below in it.

The Food Component
This component renders the particular food properties to screen in a beautifully crafted card from tailwind CSS and Material design. Create a file called Food.jsx still in the components folder and paste the following codes in it.

Each card renders the name, image, description, price, and the remaining stocks of a food product. Here is the code for it.

Next, let’s look at the foods component.

The Foods Components
This component is responsible for rendering the entire collection of food data in our database. Let’s look at its code snippet.

The Foods Component

Still, in the components directory, create another file called Foods.jsx and paste the codes below in it.

Lastly, let’s look at the CartItem component.

The CartItem Component

CartItem Component

This component is responsible for showing a single item in our cart collection. Here is the code responsible for it.

Congratulations, you just finished coding the components, let’s move on to creating the views…

The Views

Now that we’ve created the components supporting the various views, let’s proceed next by creating the individual pages.

The Home View

The Home View

This view renders the Food component structure. This is to say, the home view retrieves all the food collection from firebase and shows them on screen. Let’s take a look at the codes responsible for it.

Navigate to the views directory and create a file named Home.jsx, then, paste the code below inside of it. In fact, you will create all these files in the views folder.

The Product View

The Product View

This view is responsible for showcasing in detail the information about a product. From this page, users can view, edit, and delete products as well as chat with the seller, or quickly purchase the food item with Ethereum.

Here is the code for it…

The AddProduct View

Add Product View

As the name implies, this view is responsible for storing new food items into our Firestore collection. Observe the code snippet below…

Awesome, we are moving forward, let’s see the edit product view…

The Edit Product View

Edit Product

This view enables us to edit our existing food items. Of course, you need to be the one who initially added the food product to the shop before you can edit. Only product owners can edit, let’s look at the codes performing this action.

Lastly, for the cases relating to products, let’s look at the cart view…

The Cart View

The Cart View

In this view, you can modify and place your orders. Once you place your order, it is immediately saved in Firestore. Below is how the code is written.

Next, let’s take care of the last four views in our tray…

The ChatList View

The Chat List View

This view simply lists out the recent conversations you’ve had with your customers so far. This is possible with the help of CometChat SDK, the codes below show you how it was implemented.

The Chat View

The Chat View

This is a one-on-one chat view for a seller and a buyer to communicate. The CometChat SDK makes this easier for us. The following code demonstrates how it works pretty well.

The SignUp View
Create a new file named SignUp.jsx and paste the codes below inside of it.

The SignIn View
Let’s do the same for the SignIn view, create a new file called SignIn.jsx and paste the codes below inside of it.

Amazing, we’ve just added all the essential views in our application, let’s tidy up the rest of the code…

The App.jsx File

This is the first file that runs before every other view and component in our application. In your App.jsx file, paste the following codes inside of it.

The AuthGuard.jsx File

This file contains the logic for bouncing out unauthenticated users from accessing secured routes in our application. Create a new file in the src folder and name it AuthGuard.jsx, then paste the following codes within it.

The Index.jsx File

Paste the following codes inside of the index.jsx file and save…

The Store

Using the power of the react-hooks-global-state library, let's create a store to manage some of our global state variables. In the src directory, >> store create a file named index.jsx and paste the codes below inside of it.

The ABI Connector File

Lastly, we have the fresher.jsx file that serves as an interface between our smart contract’s Abi and the frontend. All the codes needed to interact with our smart contract are stored in this file, here is the code for it.

Within this shared folder, we have another folder called abis that contained the generated ABI code for our deployed store. Truffle generated these codes for us when we deployed the smart contract in the PART-ONE of this article.

Make sure you have included the .env file in the .gitignore file, this is very important so you don’t expose your private keys online.

If that’s all taken care of, then you should know that you have completed this project.

Congratulations!!!

Watch my FREE web3 tutorials on Youtube now.

Conclusion

Blockchain technology has come to stay, in this new world of smart contracts, DAO, NFTs, and DeFi applications, it is very important to arm yourself with blockchain development skills.

Can’t wait to see you in the next article, check the live demo and GitHub repo for more info.

Till next time, all the best!

About the Author

Gospel Darlington kick-started his journey as a software engineer in 2016. Over the years, he has grown full-blown skills in JavaScript stacks such as React, ReactNative, VueJs, and more.

He is currently freelancing, building apps for clients, and writing technical tutorials teaching others how to do what he does.

Gospel Darlington is open and available to hear from you. You can reach him on LinkedIn, Facebook, Github, or on his website.

Top comments (0)