added site logo
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
SKIP_PREFLIGHT_CHECK=true
|
SKIP_PREFLIGHT_CHECK=true
|
||||||
REACT_APP_NODE_ENV="development"
|
REACT_APP_NODE_ENV="development"
|
||||||
REACT_APP_SOCKET_URL="https://dev-socket.mermsemr.com"
|
REACT_APP_SOCKET_URL="https://dev-socket.mermsemr.com"
|
||||||
REACT_APP_MAIN_API="https://dev-api.mermsemr.com"
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com"
|
||||||
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
||||||
|
|
||||||
# Inactivity timeout/logout AT 10MINS
|
# Inactivity timeout/logout AT 10MINS
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
SKIP_PREFLIGHT_CHECK=true
|
SKIP_PREFLIGHT_CHECK=true
|
||||||
REACT_APP_NODE_ENV="development"
|
REACT_APP_NODE_ENV="development"
|
||||||
REACT_APP_SOCKET_URL="https://dev-socket.mermsemr.com"
|
REACT_APP_SOCKET_URL="https://dev-socket.mermsemr.com"
|
||||||
REACT_APP_MAIN_API="https://dev-api.mermsemr.com"
|
REACT_APP_MAIN_API="https://devapi.mermsemr.com/"
|
||||||
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
REACT_APP_MEDIA_SERVER="https://dev-media.mermsemr.com"
|
||||||
|
|
||||||
# Inactivity timeout/logout AT 10MINS
|
# Inactivity timeout/logout AT 10MINS
|
||||||
|
|||||||
@@ -4,10 +4,12 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
|
"@tanstack/react-query": "^5.62.3",
|
||||||
"@testing-library/jest-dom": "^5.17.0",
|
"@testing-library/jest-dom": "^5.17.0",
|
||||||
"@testing-library/react": "^13.4.0",
|
"@testing-library/react": "^13.4.0",
|
||||||
"@testing-library/user-event": "^13.5.0",
|
"@testing-library/user-event": "^13.5.0",
|
||||||
"apexcharts": "^4.1.0",
|
"apexcharts": "^4.1.0",
|
||||||
|
"axios": "^1.7.9",
|
||||||
"bootstrap": "^5.3.3",
|
"bootstrap": "^5.3.3",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-apexcharts": "^1.7.0",
|
"react-apexcharts": "^1.7.0",
|
||||||
|
|||||||
+17
-37
@@ -1,47 +1,27 @@
|
|||||||
import { Routes, Route } from 'react-router-dom';
|
import { QueryClientProvider, QueryClient } from '@tanstack/react-query'
|
||||||
|
import AppRouters from './AppRouters';
|
||||||
|
import axios from 'axios';
|
||||||
// import './App.css';
|
// import './App.css';
|
||||||
|
|
||||||
import UserExist from './component/authorization/UserExist';
|
|
||||||
import AuthLayout from './component/auth/AuthLayout';
|
|
||||||
import siteLinks from './links/siteLinks';
|
|
||||||
|
|
||||||
import LoginPage from './views/LoginPage';
|
// axios.interceptors.request.use(
|
||||||
import SignupPage from './views/SignupPage';
|
// config => {
|
||||||
import ForgetpwdPage from './views/ForgetpwdPage';
|
// config.headers['Authorization'] = `Bearer localStorage.getItem('access_token')`;
|
||||||
import HomePage from './views/HomePage';
|
// config.baseURL = 'https://devapi.mermsemr.com'
|
||||||
import ReportsPage from './views/ReportsPage'
|
// return config;
|
||||||
import CommentsPage from './views/CommentsPage'
|
// },
|
||||||
import ContactsPage from './views/ContactsPage'
|
// error => {
|
||||||
import UserPage from './views/UserPage'
|
// return Promise.reject(error);
|
||||||
import CalendarPage from './views/CalendarPage'
|
// }
|
||||||
import SettingsPage from './views/SettingsPage'
|
// );
|
||||||
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
|
const queryClient = new QueryClient()
|
||||||
return (
|
return (
|
||||||
<div className="">
|
<QueryClientProvider client={queryClient}>
|
||||||
<Routes>
|
<AppRouters />
|
||||||
{/* auth routes wrapper */}
|
</QueryClientProvider>
|
||||||
<Route element={<AuthLayout />}>
|
|
||||||
<Route path={siteLinks.home} element={<LoginPage />} />
|
|
||||||
<Route path={siteLinks.login} element={<LoginPage />} />
|
|
||||||
<Route path={siteLinks.signup} element={<SignupPage />} />
|
|
||||||
<Route path={siteLinks.forgetpwd} element={<ForgetpwdPage />} />
|
|
||||||
<Route path={siteLinks.error} element={<ForgetpwdPage />} />
|
|
||||||
</Route>
|
|
||||||
|
|
||||||
{/* protected routes */}
|
|
||||||
<Route element={<UserExist />}>
|
|
||||||
<Route path={siteLinks.dash} element={<HomePage />} />
|
|
||||||
<Route path={siteLinks.reports} element={<ReportsPage />} />
|
|
||||||
<Route path={siteLinks.comments} element={<CommentsPage />} />
|
|
||||||
<Route path={siteLinks.contacts} element={<ContactsPage />} />
|
|
||||||
<Route path={siteLinks.user} element={<UserPage />} />
|
|
||||||
<Route path={siteLinks.calendar} element={<CalendarPage />} />
|
|
||||||
<Route path={siteLinks.settings} element={<SettingsPage />} />
|
|
||||||
</Route>
|
|
||||||
</Routes>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import { Routes, Route } from 'react-router-dom';
|
||||||
|
|
||||||
|
import UserExist from './component/authorization/UserExist';
|
||||||
|
import AuthLayout from './component/auth/AuthLayout';
|
||||||
|
import siteLinks from './links/siteLinks';
|
||||||
|
|
||||||
|
import LoginPage from './views/LoginPage';
|
||||||
|
import SignupPage from './views/SignupPage';
|
||||||
|
import ForgetpwdPage from './views/ForgetpwdPage';
|
||||||
|
import HomePage from './views/HomePage';
|
||||||
|
import ReportsPage from './views/ReportsPage'
|
||||||
|
import CommentsPage from './views/CommentsPage'
|
||||||
|
import ContactsPage from './views/ContactsPage'
|
||||||
|
import UserPage from './views/UserPage'
|
||||||
|
import CalendarPage from './views/CalendarPage'
|
||||||
|
import SettingsPage from './views/SettingsPage'
|
||||||
|
|
||||||
|
|
||||||
|
function AppRouters() {
|
||||||
|
return (
|
||||||
|
<div className="">
|
||||||
|
<Routes>
|
||||||
|
{/* auth routes wrapper */}
|
||||||
|
<Route element={<AuthLayout />}>
|
||||||
|
<Route path={siteLinks.home} element={<LoginPage />} />
|
||||||
|
<Route path={siteLinks.login} element={<LoginPage />} />
|
||||||
|
<Route path={siteLinks.signup} element={<SignupPage />} />
|
||||||
|
<Route path={siteLinks.forgetpwd} element={<ForgetpwdPage />} />
|
||||||
|
<Route path={siteLinks.error} element={<ForgetpwdPage />} />
|
||||||
|
</Route>
|
||||||
|
|
||||||
|
{/* protected routes */}
|
||||||
|
<Route element={<UserExist />}>
|
||||||
|
<Route path={siteLinks.dash} element={<HomePage />} />
|
||||||
|
<Route path={siteLinks.reports} element={<ReportsPage />} />
|
||||||
|
<Route path={siteLinks.comments} element={<CommentsPage />} />
|
||||||
|
<Route path={siteLinks.contacts} element={<ContactsPage />} />
|
||||||
|
<Route path={siteLinks.user} element={<UserPage />} />
|
||||||
|
<Route path={siteLinks.calendar} element={<CalendarPage />} />
|
||||||
|
<Route path={siteLinks.settings} element={<SettingsPage />} />
|
||||||
|
</Route>
|
||||||
|
</Routes>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AppRouters;
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 8.6 KiB |
@@ -1,13 +1,36 @@
|
|||||||
import React from 'react'
|
import React, { useState } from 'react'
|
||||||
|
import { useMutation } from '@tanstack/react-query'
|
||||||
|
|
||||||
import LoginImg from '../../assets/bg/login.svg'
|
import LoginImg from '../../assets/bg/login.svg'
|
||||||
|
|
||||||
import { Link, useNavigate } from 'react-router-dom'
|
import { Link, useNavigate } from 'react-router-dom'
|
||||||
import siteLinks from '../../links/siteLinks'
|
import siteLinks from '../../links/siteLinks'
|
||||||
|
import { loginUser } from '../../services/services'
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
|
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|
||||||
|
const [fields, setFields] = useState({
|
||||||
|
username: '',
|
||||||
|
password: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleChange = ({target:{name, value}}) => {
|
||||||
|
console.log('working')
|
||||||
|
setFields(prev => ({...prev, [name]:value}))
|
||||||
|
}
|
||||||
|
|
||||||
|
const login = useMutation({
|
||||||
|
mutationFn: (fields) => {
|
||||||
|
return loginUser('panel/auth/login', fields)
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
navigate('/dash') // remove later
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
<div className="app-wrap">
|
<div className="app-wrap">
|
||||||
@@ -25,13 +48,13 @@ export default function Login() {
|
|||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label className="control-label">User Name*</label>
|
<label className="control-label">User Name*</label>
|
||||||
<input type="text" className="form-control" placeholder="Username" />
|
<input name='username' value={fields.username} onChange={handleChange} type="text" className="form-control" placeholder="Username" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label className="control-label">Password*</label>
|
<label className="control-label">Password*</label>
|
||||||
<input type="password" className="form-control" placeholder="Password" />
|
<input name='password' value={fields.password} onChange={handleChange} type="password" className="form-control" placeholder="Password" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
@@ -46,7 +69,7 @@ export default function Login() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12 mt-3">
|
<div className="col-12 mt-3">
|
||||||
<button type='button' onClick={()=>{navigate(siteLinks.dash)}} className="btn btn-primary text-uppercase">Sign In</button>
|
<button type='button' onClick={()=>{login.mutate(fields)}} className="btn btn-primary text-uppercase">{login.isPending ? 'loading...' : 'Sign In'}</button>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12 mt-3">
|
<div className="col-12 mt-3">
|
||||||
<p>Don't have an account ?<Link to={siteLinks.signup}> Sign Up</Link></p>
|
<p>Don't have an account ?<Link to={siteLinks.signup}> Sign Up</Link></p>
|
||||||
|
|||||||
@@ -9,6 +9,11 @@ export default function UserHeader(){
|
|||||||
document.body.classList.toggle('sidebar-toggled')
|
document.body.classList.toggle('sidebar-toggled')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const removeSidebar = (e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
document.body.classList.remove('sidebar-toggled')
|
||||||
|
}
|
||||||
|
|
||||||
// const toggleSidebarMini = (e) => {
|
// const toggleSidebarMini = (e) => {
|
||||||
// e.preventDefault()
|
// e.preventDefault()
|
||||||
// }
|
// }
|
||||||
@@ -23,7 +28,7 @@ export default function UserHeader(){
|
|||||||
<img src={getImage('logo-icon.png')} className="img-fluid logo-mobile" alt="logo"/>
|
<img src={getImage('logo-icon.png')} className="img-fluid logo-mobile" alt="logo"/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<button className="navbar-toggler" type="button" data-bs-toggle="collapse"
|
<button onClick={removeSidebar} className="navbar-toggler" type="button" data-bs-toggle="collapse"
|
||||||
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
|
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
|
||||||
aria-label="Toggle navigation">
|
aria-label="Toggle navigation">
|
||||||
<i className="ti ti-align-left"></i>
|
<i className="ti ti-align-left"></i>
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import axios from "axios"
|
||||||
|
|
||||||
|
|
||||||
|
axios.interceptors.request.use(
|
||||||
|
config => {
|
||||||
|
// config.headers = {
|
||||||
|
// Accept: "application/json",
|
||||||
|
// "Access-Control-Allow-Origin": "*",
|
||||||
|
// "Access-Control-Expose-Headers": "Access-Control-Allow-Origin",
|
||||||
|
// "Access-Control-Allow-Headers":
|
||||||
|
// "Origin, X-API-KEY, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Allow-Headers, Authorization, observe, enctype, Content-Length, X-Csrf-Token",
|
||||||
|
// "Content-Type": "application/json;charset=UTF-8",
|
||||||
|
// 'Authorization': '22222'
|
||||||
|
// };
|
||||||
|
config.headers['Authorization'] = `Bearer ${localStorage.getItem('access_token')}`;
|
||||||
|
config.baseURL = process.env.REACT_APP_MAIN_API
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export const loginUser = (path, reqData) => {
|
||||||
|
let postData = {
|
||||||
|
...reqData
|
||||||
|
}
|
||||||
|
return axios.post(path, postData)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user