How to build a React Admin Panel using React?

The main purpose of web applications is to display content to dynamic web pages from static websites. At this place, users access and interact with the content. This content is powered by those APIs that send and receive data. The data is sorted and handled by the admin page by creating an interface and connecting every endpoint. Here the react admin panel is contemplating the market.

As a React developer if you also want to build an admin panel with React then you are at the right place here. This article will guide you step by step for implementing a react admin dashboard.

React Admin – An Introduction

React Admins are defined as frameworks that make admin interfaces. For this purpose, they consume APIs including GraphQL, RESET or the custom. One of the interesting facts is that it is themed with React Library and Material UI which are used to design application interfaces. This compels developers to go with a react dashboard.

After the exposing of react native latest version, most of the react developers like to know more about it.

Starting with React-Admin:

To build the react admin panel, we first initially create a new-react-admin folder. After that, we install package.json, json-server and concurrently in the new server folder.

npm init –y
npm install json-server
npm install concurrently 

Now we will open up the package.json file and then replace the default value on the script object as follows. Here we are not installing json-server globally.

# – “test”: “echo \”Error: no test specified \” && exit 1”

+ “server”: “json-server –watch db.json –port 5000”,
+ “client”: “npm start –prefix admin-demo”,
+ “dev”: “concurrently \”npm run server\” \”npm run client\””

# “admin-demo” will be the name of our react app 

Here we want to run json-server and then watch a file called db.json. This holds the data generated by the fake REST API.

Instead of running in separate terminals concurrently is a framework that enables the react app and API to run simultaneously. Like above, the client script is assigned to start the React app. The client and server script run simultaneously with the help of the dev script.

To develop a react admin dashboard we will now create a React project in the admin-demo folder and then in its directory, we will install react-admin.

npx create-react-app admin-demo
cd admin-demo
# install react-admin
npm install react-admin 

Now we will add the proxy to the package.json file of React app. This proxy is set to the server script URL.

// /new-react-admin/admin-demo/package.json
“proxy” : http://localhost:5000
We will fill the db.json file with some data and the code will be something like this.
// /new-react-admin/server/db.json
{
"users": [
{
"id": "1",
"name": “Gill Smith",
"username": "Gill",
"email": "gills@gmail.com",
"phone": 37801223,
"company": "Smith Mobile Co."
},
{
"id": "2",
"name": "Paul Joseph",
"username": "Paul",
"email": "josephp@gmail.com",
"phone": 5501673,
"company": "Pauls Drycleaning"
},
{
"id": "3",
"name": "Ricky Martin",
"username": "rmartin",
"email": "ricky1956@gmail.com",
"phone": 443323045,
"company": "ricky’s Pot"
},
{
"id": "4",
"name": "John Hanus",
"username": "Hanuson",
"email": "Jhanus22@gmail.com",
"phone": 89444022,
"company": "Johns Funeral Home"
},
{
"id": "5",
"name": "Saad Lamjarred",
"username": "slamajarred",
"email": "lamjarred@gmail.com",
"phone": 2345566,
"company": "lamjarred"
}
]
} 

Using guessers for Modifying and Filtering Data

CRUD functionalities are compulsory for an admin page and therefore considered while making a react admin panel. Here we will use a data provider to show how react-admin will do this. The simple REST is a data provider that will fit REST APIs using Simple GET parameters. This will exist for filtering and sorting.

// /new-react-admin/admin-demo
npm install ra-data-simple-rest 

Let’s do fetching data with db.json and for this purpose, the react-admin will use . Replace the default syntax in src/App.js with the following.

import React from 'react'
import { Admin} from 'react-admin'
import restProvider from 'ra-data-simple-rest'
const dataProvider = restProvider('http://localhost:3000');
function App() {
return (
<Admin dataProvider={dataProvider} />
);
}
export default App; 

Now, we will change directories from the React app to the main folder, cd.. and run npm dev at this point to render an app. This is done with a confirmatory message in the browser.

The API server will need to have a content range value to prevent it from throwing an error to display the data from the db.json file. Here we will create a file known as range.js.

// /new-react-admin/server/range.js
module.exports = (req, res, next) => {
res.header('Content-Range', 'posts 0-20/20')
next()
} 

We must add middlewares ./range.js to the server script in the package.json file to run the middleware function.

Using guessers in React:

With the help of “guessers” React-admin develops admin interfaces.

import React from 'react'
import { Admin, Resource,ListGuesser } from 'react-admin' 
import restProvider from 'ra-data-simple-rest'
const dataProvider = restProvider('http://localhost:3000');
function App() {
return (
<Admin dataProvider={dataProvider}>
<Resource name="users" list={ListGuesser} />
</Admin>
);
}
export default App; 

In the above code, the element is mainly responsible for mapping the name property to an endpoint in the API.

Use of < ListGuesser >component:

To display this data as a list of users, the listed property will use the component. This component must be replaced by a custom component because it is not meant to be used in production. To display the source code of data retrieved from API in the browser’s console is an awesome feature of guessers.

Create a file name user.js in the src folder of the project.

Create a file name user.js in the src folder of the project.
/src/components/User.js
import React from 'react';
import { List, Datagrid, TextField, EmailField, EditButton, DeleteButton } from 'react-admin'
export const UserList = (props) => {
return (
<List {...props}>
<Datagrid>
<TextField source="id" />
<TextField source="name" />
<TextField source="username" />
<EmailField source="email" />
<TextField source="phone" />
<TextField source="company" label="Company" />
<EditButton basePath="/users" />
<DeleteButton basePath="/users" />
</Datagrid>
</List>
)
} 

Here we have made links on our email column clickable by using the element. After that, we have added a label property to the company column. This will make headers more presentable in the making of react admin panel.

Let’s navigate to App.js and replace ListGuesser with UserList

/src/App.js
import React, { Component } from "react";
import { Admin, Resource } from "react-admin";
import { UserList } from './components/User';
import restProvider from 'ra-data-simple-rest';
const dataProvider = restProvider('http://localhost:3000')
function App() {
return (
<Admin dataProvider={dataProvider}>
<Resource name="users" list={UserList} />
</Admin>
);
}
export default App; 

Adding new users:

To add new users we have to create a new set in the db.json file. In the users.js, we replicate the code sample like this.

the code sample like this.
import React from 'react';
import { Create, SimpleForm, TextInput } from 'react-admin';
export const UserCreate = (props) => {
return (
<Create title='Create User' {...props}>
<SimpleForm>
<TextInput type="number" source="id" />
<TextInput source="name" />
<TextInput source="username" />
<TextInput source="email" />
<TextInput source="phone" />
<TextInput source="company"/>
</SimpleForm>
</Create>
)
} 

Now add the UserCreate component in the App.js like this.

//src/App.js
import React, { Component } from "react";
import { Admin, Resource } from "react-admin";
import  { UserList, UserEdit, UserCreate }  from './components/User';
const dataProvider = restProvider('http://localhost:3000')
function App() {
return (
<Admin dataProvider={dataProvider}>
<Resource name="users" list={UserList} create={UserCreate} edit={UserEdit} />
</Admin>
);
}
export default App; 

React-admin authentication

The authentication process is important for every admin page and hence it is good to be carried out during the react admin panel creation. This could be basic or complex also like OAuth or JSON Web Tokens (JWT).

Any react-admin app does not need authentication as it is already present. In our src folder, create a file called authProvider.

React-admin always offers flexibility with how we implement the authentication. Here we create a dummy authentication process that will accept any values as password and username. These values will be stored in the localStorage.

Create a file called authProvider in the src folder as follows.

// src/components/authProvider.js
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin';
export const authProvider = (type, params) => {
// when a user tries to log in
if (type === AUTH_LOGIN) {
const { username } = params;
localStorage.setItem('username', username)
return Promise.resolve();
}
// when a user tries to logout
if (type === AUTH_LOGOUT) {
localStorage.removeItem('username');
return Promise.resolve();
}
// when the API throws an error
if (type === AUTH_ERROR) {
const { status } = params;
if (status === 401 || status === 403) {
localStorage.removeItem('username');
return Promise.reject()
}
return Promise.resolve()
}
// when a user navigates to a new location
if (type === AUTH_CHECK) {
return localStorage.getItem('username') ?
Promise.resolve() :
Promise.reject();
}
return Promise.reject('Unknown Method');
}; 

Then head to App.js and then pass the authProvider property in the component.

//src/App.js
import React from 'react'
import { Admin, Resource } from 'react-admin'
import restProvider from 'ra-data-simple-rest'
import { authProvider } from "./components/authProvider";
import { UserList, UserEdit, UserCreate} from './components/User';
const dataProvider = restProvider('http://localhost:3000')
function App() {
return (
<Admin dataProvider={dataProvider} authProvider={authProvider}>
<Resource name="users" list={UserList} create={UserCreate} edit={UserEdit} />
</Admin>
);
}
export default App; 

We will get our first login page on restarting our application.

Wrapping Up

Creating an Admin application does not need to be as complex as it once was. We can scaffold the admin interfaces quite readily with the react admin panel. The authentication process is also very much crucial. So here you have seen how easily we have built the react admin page with React. Try it once and have a happy time coding. Connect with us to hire react native developers who are highly experienced.

 
Share This Story, Choose Your Platform!