create Digital ID
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
1
package-lock.json
generated
1
package-lock.json
generated
@@ -5,6 +5,7 @@
|
|||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
|
"name": "mosaic-react",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/forms": "^0.4.0",
|
"@tailwindcss/forms": "^0.4.0",
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ import './charts/ChartjsConfig';
|
|||||||
import Dashboard from './pages/Dashboard';
|
import Dashboard from './pages/Dashboard';
|
||||||
import Analytics from './pages/Analytics';
|
import Analytics from './pages/Analytics';
|
||||||
import Fintech from './pages/Fintech';
|
import Fintech from './pages/Fintech';
|
||||||
|
import ProfileId from './pages/digitalId/ProfileId';
|
||||||
|
import Validate from './pages/digitalId/Validate';
|
||||||
|
import ValidationLog from './pages/digitalId/ValidationLog';
|
||||||
|
import Verify from './pages/digitalId/Verify';
|
||||||
import Customers from './pages/ecommerce/Customers';
|
import Customers from './pages/ecommerce/Customers';
|
||||||
import Orders from './pages/ecommerce/Orders';
|
import Orders from './pages/ecommerce/Orders';
|
||||||
import Invoices from './pages/ecommerce/Invoices';
|
import Invoices from './pages/ecommerce/Invoices';
|
||||||
@@ -92,6 +96,10 @@ function App() {
|
|||||||
<Route exact path="/" element={<Dashboard />} />
|
<Route exact path="/" element={<Dashboard />} />
|
||||||
<Route path="/dashboard/analytics" element={<Analytics />} />
|
<Route path="/dashboard/analytics" element={<Analytics />} />
|
||||||
<Route path="/dashboard/fintech" element={<Fintech />} />
|
<Route path="/dashboard/fintech" element={<Fintech />} />
|
||||||
|
<Route path="/digitalId/profile-id" element={<ProfileId />} />
|
||||||
|
<Route path="/digitalId/validate" element={<Validate />} />
|
||||||
|
<Route path="/digitalId/validation-log" element={<ValidationLog />} />
|
||||||
|
<Route path="/digitalId/verify" element={<Verify />} />
|
||||||
<Route path="/ecommerce/customers" element={<Customers />} />
|
<Route path="/ecommerce/customers" element={<Customers />} />
|
||||||
<Route path="/ecommerce/orders" element={<Orders />} />
|
<Route path="/ecommerce/orders" element={<Orders />} />
|
||||||
<Route path="/ecommerce/invoices" element={<Invoices />} />
|
<Route path="/ecommerce/invoices" element={<Invoices />} />
|
||||||
|
|||||||
35
src/pages/digitalId/ProfileId.jsx
Normal file
35
src/pages/digitalId/ProfileId.jsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
|
||||||
|
import Sidebar from '../../partials/Sidebar';
|
||||||
|
import Header from '../../partials/Header';
|
||||||
|
|
||||||
|
function Profile () {
|
||||||
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex h-screen overflow-hidden">
|
||||||
|
{/* Sidebar */}
|
||||||
|
<Sidebar sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
{/* Content area */}
|
||||||
|
<div className="relative flex flex-col flex-1 overflow-y-auto overflow-x-hidden">
|
||||||
|
{/* Site header */}
|
||||||
|
<Header sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div className="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
|
||||||
|
|
||||||
|
{/* Page header */}
|
||||||
|
<div className="mb-8">
|
||||||
|
{/* Title */}
|
||||||
|
<h1 className="text-2xl md:text-3xl text-slate-800 font-bold">Profile ✨</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Profile;
|
||||||
35
src/pages/digitalId/Validate.jsx
Normal file
35
src/pages/digitalId/Validate.jsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
|
||||||
|
import Sidebar from '../../partials/Sidebar';
|
||||||
|
import Header from '../../partials/Header';
|
||||||
|
|
||||||
|
function Validate () {
|
||||||
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex h-screen overflow-hidden">
|
||||||
|
{/* Sidebar */}
|
||||||
|
<Sidebar sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
{/* Content area */}
|
||||||
|
<div className="relative flex flex-col flex-1 overflow-y-auto overflow-x-hidden">
|
||||||
|
{/* Site header */}
|
||||||
|
<Header sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div className="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
|
||||||
|
|
||||||
|
{/* Page header */}
|
||||||
|
<div className="mb-8">
|
||||||
|
{/* Title */}
|
||||||
|
<h1 className="text-2xl md:text-3xl text-slate-800 font-bold">Validate ✨</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Validate;
|
||||||
35
src/pages/digitalId/ValidationLog.jsx
Normal file
35
src/pages/digitalId/ValidationLog.jsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
|
||||||
|
import Sidebar from '../../partials/Sidebar';
|
||||||
|
import Header from '../../partials/Header';
|
||||||
|
|
||||||
|
function ValidationLog () {
|
||||||
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex h-screen overflow-hidden">
|
||||||
|
{/* Sidebar */}
|
||||||
|
<Sidebar sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
{/* Content area */}
|
||||||
|
<div className="relative flex flex-col flex-1 overflow-y-auto overflow-x-hidden">
|
||||||
|
{/* Site header */}
|
||||||
|
<Header sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div className="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
|
||||||
|
|
||||||
|
{/* Page header */}
|
||||||
|
<div className="mb-8">
|
||||||
|
{/* Title */}
|
||||||
|
<h1 className="text-2xl md:text-3xl text-slate-800 font-bold">Validation log ✨</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ValidationLog;
|
||||||
35
src/pages/digitalId/Verify.jsx
Normal file
35
src/pages/digitalId/Verify.jsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
|
||||||
|
import Sidebar from '../../partials/Sidebar';
|
||||||
|
import Header from '../../partials/Header';
|
||||||
|
|
||||||
|
function Verify () {
|
||||||
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex h-screen overflow-hidden">
|
||||||
|
{/* Sidebar */}
|
||||||
|
<Sidebar sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
{/* Content area */}
|
||||||
|
<div className="relative flex flex-col flex-1 overflow-y-auto overflow-x-hidden">
|
||||||
|
{/* Site header */}
|
||||||
|
<Header sidebarOpen={sidebarOpen} setSidebarOpen={setSidebarOpen} />
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div className="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
|
||||||
|
|
||||||
|
{/* Page header */}
|
||||||
|
<div className="mb-8">
|
||||||
|
{/* Title */}
|
||||||
|
<h1 className="text-2xl md:text-3xl text-slate-800 font-bold">Verify ✨</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Verify;
|
||||||
@@ -213,6 +213,116 @@ function Sidebar({
|
|||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
</SidebarLinkGroup>
|
</SidebarLinkGroup>
|
||||||
|
{/* digitalId */}
|
||||||
|
<SidebarLinkGroup activecondition={pathname.includes('digitalId')}>
|
||||||
|
{(handleClick, open) => {
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<a
|
||||||
|
href="#0"
|
||||||
|
className={`block text-slate-200 hover:text-white truncate transition duration-150 ${
|
||||||
|
pathname.includes('digitalId') && 'hover:text-slate-200'
|
||||||
|
}`}
|
||||||
|
onClick={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
sidebarExpanded ? handleClick() : setSidebarExpanded(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className="flex items-center justify-between">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<svg className="shrink-0 h-6 w-6" viewBox="0 0 24 24">
|
||||||
|
<path
|
||||||
|
className={`fill-current text-slate-600 ${pathname.includes('digitalId') && 'text-indigo-500'}`}
|
||||||
|
d="M19.714 14.7l-7.007 7.007-1.414-1.414 7.007-7.007c-.195-.4-.298-.84-.3-1.286a3 3 0 113 3 2.969 2.969 0 01-1.286-.3z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
className={`fill-current text-slate-400 ${pathname.includes('digitalId') && 'text-indigo-300'}`}
|
||||||
|
d="M10.714 18.3c.4-.195.84-.298 1.286-.3a3 3 0 11-3 3c.002-.446.105-.885.3-1.286l-6.007-6.007 1.414-1.414 6.007 6.007z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
className={`fill-current text-slate-600 ${pathname.includes('digitalId') && 'text-indigo-500'}`}
|
||||||
|
d="M5.7 10.714c.195.4.298.84.3 1.286a3 3 0 11-3-3c.446.002.885.105 1.286.3l7.007-7.007 1.414 1.414L5.7 10.714z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
className={`fill-current text-slate-400 ${pathname.includes('digitalId') && 'text-indigo-300'}`}
|
||||||
|
d="M19.707 9.292a3.012 3.012 0 00-1.415 1.415L13.286 5.7c-.4.195-.84.298-1.286.3a3 3 0 113-3 2.969 2.969 0 01-.3 1.286l5.007 5.006z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<span className="text-sm font-medium ml-3 lg:opacity-0 lg:sidebar-expanded:opacity-100 2xl:opacity-100 duration-200">
|
||||||
|
Digital ID
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{/* Icon */}
|
||||||
|
<div className="flex shrink-0 ml-2">
|
||||||
|
<svg
|
||||||
|
className={`w-3 h-3 shrink-0 ml-1 fill-current text-slate-400 ${open && 'transform rotate-180'}`}
|
||||||
|
viewBox="0 0 12 12"
|
||||||
|
>
|
||||||
|
<path d="M5.9 11.4L.5 6l1.4-1.4 4 4 4-4L11.3 6z" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<div className="lg:hidden lg:sidebar-expanded:block 2xl:block">
|
||||||
|
<ul className={`pl-9 mt-1 ${!open && 'hidden'}`}>
|
||||||
|
<li className="mb-1 last:mb-0">
|
||||||
|
<NavLink
|
||||||
|
end
|
||||||
|
to="/digitalId/profile-id"
|
||||||
|
className={({ isActive }) =>
|
||||||
|
'block text-slate-400 hover:text-slate-200 transition duration-150 truncate ' + (isActive ? '!text-indigo-500' : '')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="text-sm font-medium lg:opacity-0 lg:sidebar-expanded:opacity-100 2xl:opacity-100 duration-200">
|
||||||
|
Profile
|
||||||
|
</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li className="mb-1 last:mb-0">
|
||||||
|
<NavLink
|
||||||
|
end
|
||||||
|
to="/digitalId/validate"
|
||||||
|
className={({ isActive }) =>
|
||||||
|
'block text-slate-400 hover:text-slate-200 transition duration-150 truncate ' + (isActive ? '!text-indigo-500' : '')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="text-sm font-medium lg:opacity-0 lg:sidebar-expanded:opacity-100 2xl:opacity-100 duration-200">
|
||||||
|
Validate
|
||||||
|
</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li className="mb-1 last:mb-0">
|
||||||
|
<NavLink
|
||||||
|
end
|
||||||
|
to="/digitalId/validation-log"
|
||||||
|
className={({ isActive }) =>
|
||||||
|
'block text-slate-400 hover:text-slate-200 transition duration-150 truncate ' + (isActive ? '!text-indigo-500' : '')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="text-sm font-medium lg:opacity-0 lg:sidebar-expanded:opacity-100 2xl:opacity-100 duration-200">
|
||||||
|
Validation log
|
||||||
|
</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li className="mb-1 last:mb-0">
|
||||||
|
<NavLink
|
||||||
|
end
|
||||||
|
to="/digitalId/verify"
|
||||||
|
className={({ isActive }) =>
|
||||||
|
'block text-slate-400 hover:text-slate-200 transition duration-150 truncate ' + (isActive ? '!text-indigo-500' : '')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="text-sm font-medium lg:opacity-0 lg:sidebar-expanded:opacity-100 2xl:opacity-100 duration-200">
|
||||||
|
Verify
|
||||||
|
</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</SidebarLinkGroup>
|
||||||
{/* E-Commerce */}
|
{/* E-Commerce */}
|
||||||
<SidebarLinkGroup activecondition={pathname.includes('ecommerce')}>
|
<SidebarLinkGroup activecondition={pathname.includes('ecommerce')}>
|
||||||
{(handleClick, open) => {
|
{(handleClick, open) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user