Introduction

Endless React Admin Theme is pure React theme, Yes! you read correct, it's No Jquery React admin theme including all feature and functionality with ease of integration for your project.Endless theme document will help you to understand React from scratch to making perfect real time dream application.

We aslo includes React Hooks and Redux which is manage applications data in easy way. It's user freindlly to learn the application.

Follow the documentation carefully for solving your issues in minutes, Apart from that if you don't find solution when you following the docs you can raise a support ticket for your issue from pixelstrap.freshdesk.com

Dependancies
  • React
  • Bootstrap-4
  • Reactstrap
  • SASS

Yes! again No Jquery dependency.

Features

  • ReactJS, No Jquery Dependency
  • Created with React CLI 16.10.2
  • 6 Attractive Dashboard
  • Attractive Charts using Google Charts, ChartJS, Chartist
  • Map using Google map and Leaflet
  • Editor
  • Knowledge Base
  • Job Search
  • 9 Workable Application
    • E-commerce App
    • Chat Application
    • To-do
    • Firebase To-do
    • Bookmark
    • Email
    • Calender
    • Firebase Contact
    • Attractive Gallery
  • Drag and Drop
  • Sidebar variation (Default, Compact, Icon)
  • Color Variation (Light and Dark Layout)
  • RTL Support
  • Error pages

Getting started

Welcome to React! React helps you build modern applications for the web, mobile, or desktop.

For getting started an React application you needs two things as Prerequisites.

Prerequisites

Before you begin, make sure your development environment includes Node and an npm package manager.

Node.js

Download latest version of node.js from nodejs.org.

  • Install Node.js using downloaded file
  • To check your node version, run node -v in a terminal/console window.
Npm package manager

React CLI, and React apps depend on features and functionality provided by libraries that are available as npm packages. To download and install npm packages, you must have an npm package manager. This Quick Start uses the npm client command line interface, which is installed with Node.js by default. To check that you have the npm client installed, run npm -v in a terminal/console window.

For better understanding Vue we suggest you to once go through official documentation of Vue from ReactJS.org

React setup

If you want Endless theme setup then directly follow next endless setup section

Installing React CLI

You use the React CLI to create projects, generate application and library code, and perform a variety of ongoing development tasks as it is a progressive framework for building user interfaces.

Install the React CLI globally.

To install the CLI using npm, open a terminal/console window and enter the following command:

npm install -g create-react-app 
Create Initial application
  • 1 . Run the CLI command react create and provide the name my-app, as shown here:
npm create-react-app my-app
  • 2. The react create command prompts you for information about features to include in the initial app project. Accept the defaults by pressing the Enter or Return key.
Run Application
  • 1. Go to the workspace folder (my-app).
cd my-app
  • 2. Launch the server by using the CLI command npm start
npm start
Supplemental

Endless setup

If you have already download and install node.js and React CLI then ignore prerequisites accordingly.

Prerequisites
Node.js

Download latest version of node.js from nodejs.org.

  • Install Node.js using downloaded file
  • To check your node version, run node -v in a terminal/console window.
React CLI

Install React CLI Using:

npm install -g create-react-app
Setup an Endless theme by
  • 1) Download and extract an endless themes from themeforest
  • 2) Extract it and then go in to theme folder.
cd  theme
  • 3) Import all dependency by installing npm command
npm install
  • 4) Now you are in stage to successfully run endless using below command:
npm start

Once you serve your application by default it will take their defalult port so you can open port using localhost://3000

Make sure you are not running any other react project in local if so then use new generated port from terminal with label called app running at:

Some Common solution if you do not run project successfully
  • Use Latest Version of node.js
  • Remove node_module and package-lock.json file and again do npm install
  • You can again download theme from themeforst and then again run
  • Then also if you don't solve issue you can generate a ticket.
Build Application
  • 1. Build you application for host on server using below command:
npm run build
  • 2. It will create one dist file in your theme folder. Make zip of dist folder. so here you are ready to upload your theme on server.
  • If you’re using Apache HTTP Server, you need to create a .htaccess file in the public folder by pastng below code

  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.html [QSA,L]
                              
  • Now upload your dist folder on public folder
Supplemental

Folder Structured

Here we represent Vue Folder Structure and Style Customize

  • Endless Admin
    • node_modules # All your dependencies you can find here
    • public # your Index.html file is here
    • src # Flow of complete project and all components you can find it from here
      • components # A common components of complete project place here
        • app.jsx # All Common files
      • pages # All dashboard and widget you can refer from here
        • allFiles.js
      • Assets # Assets of your complete peoject place here
        • Fonts
        • Images
        • Css
        • Scss
        • Video
      • data # All Json or Js file place here
        • product.json
      • store # Centralize store for Maintain Reducers
        • index.js
      • Reducers # Centralize store for Reducers
        • index.js
      • Action # Centralize services provide for Reducers
        • index.action.js
      • index.js #Root File of your project
      • index.scss #Root design structure File of your project
    • .env #Create for Firebase environment
    • package.json

How to Remove Loader from Application?

  • Go to app.jsx file in src >> components >> common >> loader.js
  • Remove design of loader from src >> components >> common >> loader.js between comment of Loader starts to Loader ends

                                    
    <!-- Loader starts -->
      <div className={`loader-wrapper ${show ? '' : 'loderhide'}`}>
        <div className="loader bg-white">
          <div className="whirly-loader"></div>
        </div>
      </div>
                                    
                                  
  • correspondingly remove methods of useEffect from script tag in loader.js

    
    const [show, setShow] = useState(true);
      useEffect(() => {
        setTimeout(() => {
          setShow(false)
        }, 1000);
      },[show]);
                                    
                                  

Routing

Your complete route structure is place at index.js

Suppose you are creating a new component (For creating a new component refer create new component ) then you have to add new routes for that components.

  • Import that component in index.js

    
    /* Dashboards */
    import Default from './components/dashboard/defaultCompo/default';
    import Ecommerce from './components/dashboard/ecommerce';
    import University from './components/dashboard/university';
    import Crypto from './components/dashboard/crypto/crypto-component';
    import ServerComponent from './components/dashboard/server/server-component';
    import Project from './components/dashboard/project/project';
                                                
                                      
                                  
  • Use that component name with path in routes array in index.js

    %process.env.PUBLIC_URL% :- When you run npm run build, Create React App will substitute %PUBLIC_URL% with a correct absolute path so your project works even if you use client-side routing or host it at a non-root URL.

    
    <Route exact path={`${process.env.PUBLIC_URL}/`} component={Default} />
    <Routeexactpath={`${process.env.PUBLIC_URL}/dashboard/default`}component={Default}/>
    <Routepath={`${process.env.PUBLIC_URL}/dashboard/ecommerce`}component={Ecommerce}/>
    <Routepath={`${process.env.PUBLIC_URL}/dashboard/university`}component={University}/>
    <Routepath={`${process.env.PUBLIC_URL}/dashboard/crypto`}component={Crypto}/>
    <Routepath={`${process.env.PUBLIC_URL}/dashboard/server`}component={ServerComponent}/>
    <Routepath={`${process.env.PUBLIC_URL}/dashboard/project`}component={Project}/>        
                                  
                                

Customize or Replace Menu Sidebar

Suppose you want to change in your menu sidebar or want to add new menu in your menu section then you just need to open constant >> menu.js and


{
  title: 'Dashboard', icon: Home, type: 'sub', badgeType: 'primary', active: false, children: [
      { path: '/dashboard/default', title: 'Default', type: 'link' },
      { path: '/dashboard/ecommerce', title: 'E-Commerce', type: 'link' },
      { path: '/dashboard/university', title: 'University', type: 'link' },
      { path: '/dashboard/crypto', title: 'Crypto', type: 'link' },
      { path: '/dashboard/server', title: 'Server', type: 'link' },
      { path: '/dashboard/project', title: 'Project', type: 'link' }
  ]
},
                        
Variables :

Path : Here you have to give path name same as you have given in index.js

title : Title is the name that you can see on frontside so here you can give attractive title to showcase your menu item

type : It denote how you want to open your particular routes means on same page, or on new page on live application. Means suppose you want to open "ecommerce" dashboard on new page then write "extTabLink" in type attribute. Here we have four type attribute:

  • link : It simply link with particular routes without loading your page.
  • sub : It stop to route your page to next. In most case it use when our menu have children item.
  • extLink : It change route with reloading a page (Work like href)
  • extTabLink : It change routes and taking us on new tab.

Now, Suppose you want to add New Menu in your menu.js then you just need to add it in same way like if it has no any child then no need to give children attribute and if your menu item have sub menu then you can add children attribute accordingly in your menu.js. For more refer constant >> menu.js.

Add Components

React provide two types Components :-
  • - Class Components
  • - Functional Components (Hooks)

Class Components

Suppose if you want to create a new class component then you just need to create a folder in src >> pages and then create a react file with .js extension and then paste code as per your needs.


import React, { Component } from 'react';

class Demo extends Component {
    render() {
        return (
            <div>
                //write Html code or structure
            </div>
        );
    }
}

export default Demo;
                        

Functional Component : (Hooks)

Suppose if you want to create a new class component then you just need to create a folder in src >> pages and then create a react file with .js extension and then paste code as per your needs.


import React from 'react';
const Demo = () => {
  return (
      <div>
        //write Html code or structure
      ></div>
    );
  };

export default Demo;
                          

Use of Widgets

Suppose you want to use widget then you need to integrate a particular widget in your existing file. Suppose you want to use calneder components in your dashboard then you need to import that widget in your dashboard


import React, { Component } from 'react';
import Datepicker from './datepicker';  //import external dependacy

class Demo extends Component {
    render() {
        return (
            <Datepicker> 
                //declare like this here
            </Datepicker>
        );
    }
}

export default Demo;
                          

Style customization

Suppose you want to customize color and font as per your project then you can change it by:

Theme Customize

Layouts

We have provided a bunch of page layouts and menu layouts that can be implemented with just a options change to body!

For creating your dream layout open customizer by click on setting icon

img1

You can change your theme by clicking particular setting

img1

Then you just need to click on configuration button

img3

Configuration popup will be open then just click on copy json button which will copy configuration of theme which you want

img3

Now go to our theme >> src >> data >> customizer >> config.js and then just replace complete config.js with your new configuration and re-run theme using npm start.


{ "settings":
  {
    "layout_type":"ltr",
    "sidebar":{
      "type":"default",
      "body_type":"default"
    },
    "sidebar_setting":"default-sidebar",
    "sidebar_backround":"dark-sidebar"
  },
  "color":
    {
      "layout_version":"light",
      "color":"color-1",
      "primary_color":"#4466f2",
      "secondary_color":"#1ea6ec",
      "mix_layout":"default"
    },
  "router_animation":"fade"
}
      

Please refer the below table for corresponding classes. it is just for your inforamation you do not need to bother about this it's dynamically take particular classes according to your needs.

Layout Options
RTL Layout Attribute:
main-theme-layout="rtl"
Light layout class:
light-only
Dark Page-body class:
dark-body-only
Dark Page-body & Sidebar class:
dark-sidebar-body-mix
Dark Layout class:
dark-only
Theme options

We have some inbuilt themes for sidebar that can be switched with just a class change

Sidebar Options
Default Sidebar layout Attribute:
sidebar-layout="default-sidebar"
Bordered Navigation Attribute:
sidebar-layout="border-sidebar"
Sidebar icons color Attribute:
sidebar-layout="iconcolor-sidebar"
Background Image class:
sidebar-img*
Light Sidebar layout class:
light-sidebar

RTL

Suppose you want to add RTL in your application then you just need to set "layout_type" as RTL so application will be converted in RTL layout.

Suppose you want to change Colors from config.js then you have to first clear localStorage then you will get your color in theme.


{ "settings":
  {
    "layout_type":"rtl",
    "sidebar":{
      "type":"default",
      "body_type":"default"
    },
    "sidebar_setting":"default-sidebar",
    "sidebar_backround":"dark-sidebar"
  },
  "color":
    {
      "layout_version":"light",
      "color":"color-1",
      "primary_color":"#4466f2",
      "secondary_color":"#1ea6ec",
      "mix_layout":"default"
    },
  "router_animation":"fade"
}
                              
Basic UI Elements
                                
<button class="btn btn-primary" type="button">Primary</button>
<button class="btn btn-secondary" type="button">Secondary</button>
<button class="btn btn-success" type="button">Success</button>
<button class="btn btn-info" type="button">Info</button>
<button class="btn btn-warning" type="button">Warning</button>
<button class="btn btn-danger" type="button">Danger</button>
                                
                              
PrimarySecondarySuccessInfoWarningDangerLightDark
                                
<span class="badge badge-primary">Primary</span>
<span class="badge badge-secondary">Secondary</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-info">Info</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-danger">Danger</span>
<span class="badge badge-light">Light</span>
<span class="badge badge-dark tag-pills-sm-mb">Dark</span>                       
                      
                          
                                
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
</div>
<div class="progress">
<div class="progress-bar bg-primary" role="progressbar" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
</div>
<div class="progress">
<div class="progress-bar bg-secondary" role="progressbar" style="width: 50%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
</div>
<div class="progress">
<div class="progress-bar bg-success" role="progressbar" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
</div>
<div class="progress">
<div class="progress-bar bg-info" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
</div>
                                
<div class="alert alert-primary dark" role="alert">This is a info alert—check it out!</div>
<div class="alert alert-secondary dark" role="alert">This is a light alert—check it out!</div>
<div class="alert alert-success dark" role="alert">This is a success alert—check it out!</div>
<div class="alert alert-info dark" role="alert">This is a danger alert—check it out!</div>
<div class="alert alert-warning dark" role="alert">This is a secondary alert—check it out!</div>
<div class="alert alert-danger dark" role="alert">This is a warning alert—check it out!</div>
<div class="alert alert-light dark" role="alert">This is a dark alert—check it out!</div>
<div class="alert alert-dark dark" role="alert">This is a dark alert—check it out!</div>
Dismissible popover
                                

import { Popover, PopoverHeader, PopoverBody} from 'reactstrap';
const Example = () => {
  const [popoverOpen, setPopoverOpen] = useState(false);
  const Toggle = () => {
    setPopoverOpen(!popoverOpen)
  } 
  return(
  <button id="Popover1" type="button" className="btn btn-primary">
    Click to toggle popover
  </button>
  <Popover placement="top" isOpen={popoverOpen} target="Popover1" toggle={Toggle}>
    <PopoverHeader>Popover Title</PopoverHeader>
    <PopoverBody>And here's some amazing content. It's very engaging. Right?</PopoverBody>
  </Popover>
  )
}
                                
                              
                                
<UncontrolledTooltip placement="right" target="UncontrolledTooltipExample">
          Hello world!
</UncontrolledTooltip>
                                
                          

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting,remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages,and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting,remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages,and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum

                                
import { TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';
const TabsSet = () => {
  const [activeTab, setActiveTab] = useState('1');
  return(
    <Nav tabs className="border-tab-primary">
        <NavItem className="nav nav-tabs" id="myTab" role="tablist">
            <NavLink className={activeTab === '1' ? 'active' : ''} onClick={() => setActiveTab('1')}>
                Home
            </NavLink>
        </NavItem>
        <NavItem className="nav nav-tabs" id="myTab" role="tablist">
            <NavLink className={activeTab === '2' ? 'active' : ''} onClick={() => setActiveTab('2')}>
                Profile
            </NavLink>
        </NavItem>
        <NavItem className="nav nav-tabs" id="myTab" role="tablist">
            <NavLink className={activeTab === '3' ? 'active' : ''} onClick={() => setActiveTab('3')}>
                Contact
            </NavLink>
        </NavItem>
    </Nav>
    <TabContent activeTab={activeTab}>
        <TabPane tabId="1">
            <p className="mb-0 m-t-30">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum</p>
        </TabPane>
        <TabPane tabId="2">
            <p className="mb-0 m-t-30">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages</p>
        </TabPane>
        <TabPane tabId="3">
            <p className="mb-0 m-t-30">Lorem Ipsum is simply dummy text of the printing and typesetting industry. when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum</p>
        </TabPane>
    </TabContent>
  )
}
 
                                
                                
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute,non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute,non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute,non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et.
Installing and usage
                              npm i react-light-accordion
                            
                                
import { Accordion, AccordionItem } from 'react-light-accordion';
import 'react-light-accordion/demo/css/index.css';

const AccordionComponent = () => {
  const DummyContent1 = () => (
    <div className="collapse show" id="collapseicon" aria-labelledby="collapseicon" data-parent="#accordionoc">
      <div className="card">
        <p>
          Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
        </p>
      </div>
    </div>
  );
  const DummyContent2 = () => (
    <div className="collapse show" id="collapseicon1" aria-labelledby="collapseicon1" data-parent="#accordionoc">
      <p>
      Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et.
      </p>
    </div>
  );
  const DummyContent3 = () => (
    <div className="collapse show" id="collapseicon2" data-parent="#accordionoc">
      <p>
      Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et.
      </p>
    </div>
  );
  return (
     <div>
       <div className="card">
         <Accordion atomic={true}>
           <AccordionItem className="card-header bg-primary" title="Collapsible Group Item #1">
             <DummyContent1 />
           </AccordionItem>
           <AccordionItem className="card-header bg-primary" title="Collapsible Group Item #2">
             <DummyContent2 />
           </AccordionItem>
           <AccordionItem className="card-header bg-primary" title="Collapsible Group Item #3">
             <DummyContent3 />
           </AccordionItem>
         </Accordion>
       </div>

     </div>
  );

}

                                
                                  
Supplemental
Larger shadow
Larger shadow
Regular shadow
Regular shadow
small shadow
Small shadow
                                  
<h6 class="sub-title mb-5 mt-5">Regular shadow</h6>
<div class="shadow-lg p-25 shadow-showcase text-center">
<h6 class="m-0 f-18">Larger shadow</h5>
</div>
<h6 class="sub-title mb-5 mt-5">Regular shadow</h6>
<div class="shadow shadow-showcase p-25 text-center">
<h6 class="m-0 f-18">Regular shadow</h5>
</div>
<h6 class="sub-title mb-5 mt-5">small shadow</h6>
<div class="shadow-sm shadow-showcase p-25 text-center mb-5">
<h6 class="m-0 f-18">Small shadow</h5>
</div>

Components

Advance UI Elements

This is an React wrapper library for the React Scrollbar. To use this library you should get familiar with the Perfect Scrollbar documentation as well since this documentation only explains details specific to this wrapper.

Installing and usage
                              npm i react-scrollbar
                            
                                
import ScrollBars from 'react-scrollbar';

const scrollbarStyles = { borderRadius: 5 }

const Scrollable = () => {

  return (
    <div className="card-body">
        <ScrollBars horizontal autoHide={false} >
            <div> <img src = {require('../../assets/images/banner/3.jpg')} alt="girl" className="img-fluid" /></div>
        </ScrollBars>
    </div>
    )
}
                                
                              
Supplemental
Installing and usage
                                npm i react-toastify  
                          
                              
<div className="card-body btn-showcase">
  <button type="button" className="btn btn-success" onClick={() => toast.success("Success Notification !")}>
    Success Notification
  </button>
</div>
<ToastContainer />
                            
                            
Supplemental
Installing and usage
                                    npm i reactour 
                              
                              
import Tour from 'reactour';

const TourComponent = () => {

const [isTourOpen, setIsTourOpen] = useState(true);

const closeTour = () => {
  setIsTourOpen(false);
} 
const steps = [
  {
    selector: '.pro',
    content: 'This is Profile Image',
  },
]
render(
  <Tour steps={steps} isOpen={isTourOpen} onRequestClose={closeTour} />
  )
}

                              
                            
Supplemental
Installing and usage
                                npm i react-ratings-declarative
                          
                              
import Ratings from 'react-ratings-declarative';

const RatingComponent = () => {

  const [rating, setRating] = useState();
  const changeRating = (newRating) => {
    setRating1(newRating)
  }

  return (
    <Ratings 
      rating={rating} 
      widgetRatedColors="blue" 
      changeRating={changeRating} 
    >
    <Ratings.Widget />
    <Ratings.Widget />
    <Ratings.Widget />
    <Ratings.Widget widgetHoverColor="black" />
    <Ratings.Widget />
    <Ratings.Widget />
    <Ratings />
  );
}
                              
                            
Supplemental
Installing and usage
                                      npm i sweetalert2
                                
                                  
import SweetAlert from 'sweetalert2'

const Sweetalert = (props) => {
  const Showalert = () => {
    SweetAlert.fire({title:"Hello world!"})
  }

  return (
           <button class="btn btn-primary"  onClick={Showalert}>Basic</button> 
    )
  }
                                  
                                
Supplemental
Installing and usage
                                        npm i react-input-range
                                  
                                    
  import React from 'react'
  import InputRange from 'react-input-range'
  
  const RangeSlider = () => {
    const initialslider = {
      value: 10,
    }
    const [values, setValues] = useState(initialslider);
   
    return (
       <InputRange
   maxValue={20}
   minValue={0}
   value={values.value}
   onChange={(value) =>
   setValues({ ...values, value: value })
   }
   /> ) }
Supplemental
Installing and usage
                                          npm i react-image-crop
                                    
                                      
import ReactCrop from "react-image-crop";
import "react-image-crop/dist/ReactCrop.css";
const Example = () => {
  const [crop, setCrop] = useState({ unit: '%', width: 30, aspect: 16 / 9 });
  return(
  <ReactCrop
    src={src}
    crop={crop}
    onImageLoaded={onImageLoaded}
    onComplete={onCropComplete}
    onChange={onCropChange}
  />
  )
}
                                      
                                    
Supplemental
Installing and usage
                                            npm i react-dragula
                                      
                                        
import dragula from 'react-dragula';
import  'node_modules/react-dragula/dist/dragula.css';
const DragAndDrop = (props) => {
  const dragulaDecorator = (componentBackingInstance) => {
    if (componentBackingInstance) {
        let options = {};
        dragula([componentBackingInstance], options);
        }
    };
  return (
    <Container  ref={dragulaDecorator}>
      <div>Swap me around</div>
      <div>Swap her around</div>
      <div>Swap him around</div>
      <div>Swap them around</div>
      <div>Swap us around</div>
      <div>Swap things around</div>
      <div>Swap everything around</div>
    </Container>
  )
}
                                        
                                      
Supplemental
Installing and usage
                                              npm i react-dropzone-uploader
                                        
                                          
import 'react-dropzone-uploader/dist/styles.css'
import Dropzone from 'react-dropzone-uploader'
const MyUploader = () => {
// specify upload params and url for your files
const getUploadParams = ({ meta }) => { return { url: 'https://httpbin.org/post' } }

// called every time a file's `status` changes
const handleChangeStatus = ({ meta, file }, status) => { console.log(status, meta, file) }


// receives array of files that are done uploading when submit button is clicked
const handleSubmit = (files) => { console.log(files.map(f => f.meta)) }

return (
    <Dropzone
      getUploadParams={getUploadParams}
      onChangeStatus={handleChangeStatus}
      onSubmit={handleSubmit}
      accept="image/*,audio/*,video/*"
    />
)
}
                                          
                                        
Supplemental
Forms

Installing and usage
                                              npm i react-datepicker 
                                        
                                    
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";

const Example = () => {
  const [startDate,setstartDate] = useState(new Date())

  const handleChange = date => {
        setstartDate(date);
    };

  return (
      <DatePicker 
              className="form-control digits" 
              selected={startDate} 
              onChange={handleChange}  />
  );

}
                                    
                                  
Supplemental
Installing and usage
                                      npm i react-bootstrap-typeahead
                                    
                                      
import { Typeahead } from 'react-bootstrap-typeahead';
import 'react-bootstrap-typeahead/css/Typeahead.css';
    //Component
    <Typeahead
      id="custom-typeahead"
      allowNew
      multiple
      newSelectionPrefix="Add a new item: "
      options={[]}
      placeholder="Type anything..."
    />
                                      
                                    
Supplemental
Tables

Installing and usage

For installing bootstrap in your project use

                                      npm i bootstrap 
                                
                                        
<table className="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">First Name</th>
      <th scope="col">Last Name</th>
      <th scope="col">Username</th>
      <th scope="col">Role</th>
      <th scope="col">Country</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>Alexander</td>
      <td>Orton</td>
      <td>@mdorton</td>
      <td>Admin</td>
      <td>USA</td>
    </tr>
    <tr>
      <th>2</th>
      <td>John Deo</td>
      <td>Deo</td>>
      <td>@johndeo</td>
      <td>User</td>
      <td>USA</td>
    </tr>
    <tr>
      <th>3</th>
      <td>Randy Orton</td>
      <td>the Bird</td>
      <td>@twitter</td>
      <td>admin</td>
      <td>UK</td>
    </tr>
    <tr>
      <th>4</th>
      <td>Randy Mark</td>
      <td>Ottandy</td>
      <td>@mdothe</td>
      <td>user</td>
      <td>AUS</td>
    </tr>
    <tr>
      <th>5</th>
      <td>Ram Jacob</td>
      <td>Thornton</td>
      <td>@twitter</td>
      <td>admin</td>
      <td>IND</td>
    </tr>
  </tbody>
</table>
                                        
                                      
Supplemental
Installing and usage
                                          npm i mui-datatables
                                    
                                      
import MUIDataTable from "mui-datatables";

const DataTableComponent = () => {

  const columns = [
  {name: "id",label: "ID",options: {filter: true,sort: true,}},
  {name: "name",label: "Name",options: {filter: true,sort: true,}},
  {name: "status",label: "Status",options: {filter: true,sort: true}},
  {name: "creat_on",label: "Creat_on",options: {filter: true,sort: true}}
 ];

  const data = [
    { id:"1",name:"Product Menu", status: <i className="fa fa-circle font-success f-12"> </i>, creat_on: "2018-04-18T00:00:00"},
    { id:"2",name:"Category Menu", status: <i className="fa fa-circle font-warning f-12"> </i>, creat_on: "2018-04-18T00:00:00"}
  ];

  const options = {
    selectableRows:true,
  };

return (
      <MUIDataTable
          data={data}
          columns={columns}
          options={options}
      />
)
}
                            
                            
Supplemental
Charts

Installing and usage
                                     npm i react-google-charts 
                              
                                  
import React from 'react';
import { GoogleChart } from "react-google-charts";

const GoogleCharts = (props) => {
    return (
      <GoogleChart
            width={'100%'}
            height={'400px'}
            chartType="PieChart"
            loader={<div>Loading Chart</div>}
            data={[
                ['Task', 'Hours per Day'],
                ['Work', 6.7],
                ['Eat', 13.3],
                ['Commute', 20],
                ['Watch TV', 26.7],
                ['Sleep', 33.3],
            ]}
            options={{
                title: 'My Daily Activities',
                colors: ["#51bb25", Your-primary-color, Your-secondary-color, "#148df6", "#ff5f24"]
                
            }}
            rootProps={{ 'data-testid': '1' }}
      />
    );
}
                                  
                                  
Supplemental
Installing and usage
                                      npm i react-chartjs-2
                                
                                  
  /* chartjsData.js */
  export const Data = {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [
        {
            label: "My Second dataset",
            backgroundColor: "rgba(253, 43, 100, 0.3)",
            borderColor: "#fd2e64",
            pointColor: "#fd2e64",
            pointStrokeColor: "#fff",
            pointHighlightFill: "#000",
            pointHighlightStroke: "rgba(30, 166, 236, 1)",
            data: [28, 48, 40, 19, 86, 27, 90]
        },
        {
            label: "My First dataset",
            backgroundColor: "rgba(101, 90, 243, 0.5)",
            borderColor: "#655af3",
            pointColor: "#655af3",
            pointStrokeColor: "#fff",
            pointHighlightFill: "#fff",
            pointHighlightStroke: "#000",
            data: [10, 59, 80, 81, 56, 55, 40]
        }
    ],
    plugins: {
        datalabels: {
            display: false,
            color: 'white'
        }
    }
  }
  export const Options = {
    maintainAspectRatio: true,
    
    legend: {
        display: false,
        
    },
    scales: {
        xAxes: [{
            stacked: false,
            
        }],
        yAxes: [{
            stacked: false,
        }]
    },
    plugins: {
        datalabels: {
            display: false,
        },
        
    },  
  }
  
  import { Line } from 'react-chartjs-2';
  import { Data,Option} from '../../charts-data/chartjsData';
  
  const ChartjsExample = () => {
    return(
        <Line 
            data={Data}
            width={778}
            height={400}
            options={Options} 
        />
    )
  }
                                  
                                
Supplemental
Installing and usage
                                    npm i react-chartist
                              
                                  
import ChartistCharts from 'react-chartist';
import {chart1} from '../../charts-data/chartistData';

const ChartistComponent = (props) => {
    return (
      <div>
        <ChartistCharts 
              key="1" 
              className="ct-chart-line flot-chart-container" 
              data={{
                  labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
                  series: [[12, 9, 7, 8, 5, 4, 6, 2, 3, 3, 4, 6],
                  [4, 5, 3, 7, 3, 5, 5, 3, 4, 4, 5, 5],
                  [5, 3, 4, 5, 6, 3, 3, 4, 5, 6, 3, 4],
                  [3, 4, 5, 6, 7, 6, 4, 5, 6, 7, 6, 3]]
              }} type={'Line'} listener={{
                  "draw": function (data) {
                      if (data.type === 'line' || data.type === 'area') {
                          data.element.animate({
                              d: {
                                  begin: 2000 * data.index,
                                  dur: 2000,
                                  from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),
                                  to: data.path.clone().stringify(),
                              }
                          });
                      }
                  }
              }} 
              options={chart1}
        />
      </div>
    )
  }
}
                                  
                                
Supplemental
Map

Installing and usage
                                        npm i google-maps-react 
                                  
                                    
import {Map, InfoWindow, Marker, GoogleApiWrapper} from 'google-maps-react';

const GoogleMap = (props) => {
    return (
      <Map google={props.google} zoom={14}>
      <Marker onClick={onMarkerClick}
                            name={'Current location'} />
      <InfoWindow onClose={onInfoWindowClose}>
      <div>
      <h1>{selectedPlace.name}</h1>
      </div>
      </InfoWindow>
      </Map>
    )
}
                                    
                                  
Supplemental
Installing and usage
                                          npm i react-leaflet
                                    
                                  
import { Map as LeafletMap, TileLayer, GeoJSON, Marker, Popup } from 'react-leaflet';
import WorldData from 'world-map-geojson';
const LeafletMap = () => {
  return(
          <div id="gmap-simple" >
            <LeafletMap
                        center={[50, 10]}
                        zoom={6}
                        maxZoom={10}
                        attributionControl={true}
                        zoomControl={true}
                        doubleClickZoom={true}
                        scrollWheelZoom={true}
                        dragging={true}
                        animate={true}
                        easeLinearity={0.35}
                    >
            <TileLayer url='http://{s}.tile.osm.org/{z}/{x}/{y}.png' />
            <Marker position={[50, 10]}>
            <Popup>
                  Popup for any custom information.
            </Popup>
            </Marker>
            </LeafletMap>
          </div>
  )
}
                                          
                                  
                                
Supplemental
Editors

Installing and usage
                                          npm i react-ckeditor-component
                                    
                                    
import CKEditors from "react-ckeditor-component";

const [content,setContent] = useState('content')

const onChange = (evt) => {
    const newContent = evt.editor.getData();
    setContent(newContent)
}

const Editor =  () =>  {
  return (
    <CKEditors
          activeclassName="p10"
          content={content}
          events={{
              "change": onChange
          }}
    />
    )
  }
                                    
                                  
Supplemental

Apps

E-commerce
img1

You can directly use complete E-commerce app to manage your E-commerce with readymade functionality of Add to cart,Quickview, and Checkout. Apart from that if you want it to use it in your frontend application then you just need to change your json with your API data and you get complete workable E-commerce for your frontend.

Chat
img1

In Chat application we provide complete chat designing with basic feature like chat with a people.

Gallery

Present your amazing ideas and images using our smooth and attractive gallery

To-D0
img1

Now it's time to Decrease your burden by listing your daily task in our To-do app and feel relax.

To-D0 with Firebase
img1

Now it's time to Decrease your burden by listing your important task in our To-do app and feel relax.

Email
img1

Use our Email application design to build complete email app

Bookmark
img1

You can Bookmark your Favioute application and pages using bookmark app so you can reach to your favioute app quickly.

Calender
Installing and usage
                                    npm i react-big-calendar
                            
                                
import { Calendar, momentLocalizer } from 'react-big-calendar'
import moment from 'moment'
  
const localizer = momentLocalizer(moment)
  
const MyCalendar = props => (
  <div>
    <Calendar
        localizer={localizer}
        events={myEventsList}
        startAccessor="start"
        endAccessor="end"
        style={{height: 500}}
    />
  </div>
)
                                
                              
Supplemental
Others
There are many others application in endless which is help you in improve your knowledge and solve your issues.
  • Knowledge Base
  • Job Search
  • Learning
  • Social App

Firebase

Basically Firebase use for:
  • Email and password authentication with Firebase,
  • Social authentication with Facebook and Google, Twitter etc..
  • Manage Complete Database on Cloud
  • Hosting
  • Password recovery,
  • Verification emails,
  • Storing and accessing the authentication state using the browser's localStorage

There are also many other use of firebase that you can find from reference which we have attach below.

Prerequisites

You must have the following prerequisites:

  • Recent versions of Node.js and NPM. You can install them from their official website,
  • React Cli installed (npm install -g create-react-app)
Let's follow below step to secure your application
  • Step 1:
    • 1.setup firebase project in firebase console.

      click on Get Started button

    • 2. Add new project

      create new project

      Accept the controler-terms and click on Create Project

    • 3. Go to Develop > Authentication

    • 4. Get config object for your web app

      To get the config object for a Firebase Web App:

      >> Click the Settings icon, then select Project settings.

      >> Go to the web app

      >> In Your apps card, select the nickname of the app for which you need a config object.

      >> Select Config from the Firebase SDK snippet pane.

      >> Copy the config object snippet, then add it to your app's HTML.

      copy config add on config.txt

    • 5.Next, you'll need to enable Email authentication from the authentication > Sign-in method tab:

    • 6.go to sign in method

      Make disble toggle to enable, and save changes

    • 7.Go to the authentication > Users tab then click on the Add user button and genarate email and password:

  • Step 2:
    Installing Firebase in React
    •                                           npm install ——save firebase
                                           
                                            
    • 2. Here .env file. Add your firebase credential for using Endless with firebase and restart your app. Don't change defined variables.


      This config file manage inside the src >> data >> base.js folder

                                            
      import * as firebase from "firebase/app";
      import 'firebase/firestore';
      import "firebase/auth";
      
      const app = firebase.initializeApp({
        apiKey: process.env.REACT_APP_FIREBASE_KEY,
        authDomain: process.env.REACT_APP_FIREBASE_DOMAIN,
        databaseURL: process.env.REACT_APP_FIREBASE_DATABASE,
        projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
        storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
        messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGEING_SENDER_ID,
        appId:process.env.REACT_APP_FIREBASE_API_ID
      });
                                            
                                          
    • 3. Generate components in auth folder called Login and Register and use firebase in Login and Register component according to your needs.

    • 4. If you are using Application with Firebase and you might get error from Firebase Database. Message like (FirebaseError : Missing or insufficient permissions).
      The security rules read/write set as false means no one has access to the database.

                                                
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow read, write: if false;
          }
        }
      }
                                                
                                              

Firebase Authentication only
  • If you want to login only with firebase then you just need to follow below step.

    1 . Just un-comment below commented code from src -> index.js

  • 2 . Do comment un-commented function. And uncommnet comment function. For more read comment described in src -> auth -> signin.js.

How to remove the firebase from endless theme
  • For Totally remove firebase from theme then check this video.

Thank You

Basically Our team will support in
  • Answering your questions, problems regarding theme with best to solving before 24 working hours,once you generate a ticket.
  • Solution of Reported Bug
  • Update you with latest version of theme

Apart from that, if you needs any extra / customization work then also you can get in touch with our experts by raising ticket to help you in customize with affordable extra budget.

Once again thank you for purchasing one of our Templates , if you like our Templates please rate us

Best Regards

Pixelstrap

Hand crafted & made with