import * as icon from '@mdi/js' import Head from 'next/head' import React, { ReactElement } from 'react' import axios from 'axios' import LayoutAuthenticated from '../layouts/Authenticated' import SectionMain from '../components/SectionMain' import SectionTitleLineWithButton from '../components/SectionTitleLineWithButton' import BaseIcon from '../components/BaseIcon' import { getPageTitle } from '../config' import Link from 'next/link' import { useAppSelector } from '../stores/hooks' import { hasPermission } from '../helpers/userPermissions' const Dashboard = () => { const iconsColor = useAppSelector((state) => state.style.iconsColor) const corners = useAppSelector((state) => state.style.corners) const cardsStyle = useAppSelector((state) => state.style.cardsStyle) const { currentUser } = useAppSelector((state) => state.auth) const loadingMessage = 'Loading...' const [leads, setLeads] = React.useState(loadingMessage) const [projects, setProjects] = React.useState(loadingMessage) const [tasks, setTasks] = React.useState(loadingMessage) async function loadData() { const entities = ['leads', 'projects', 'tasks'] const fns = [setLeads, setProjects, setTasks] const requests = entities.map((entity, index) => { if (hasPermission(currentUser, `READ_${entity.toUpperCase()}`)) { return axios.get(`/${entity.toLowerCase()}/count`) } else { fns[index](null) return Promise.resolve({ data: { count: null } }) } }) Promise.allSettled(requests).then((results) => { results.forEach((result, i) => { if (result.status === 'fulfilled') { fns[i](result.value.data.count) } else { fns[i](result.reason.message) } }) }) } React.useEffect(() => { if (!currentUser) return loadData().then() }, [currentUser]) return ( <> {getPageTitle('Dashboard')} {''}
{hasPermission(currentUser, 'READ_LEADS') && (
Potential Leads
{leads}
)} {hasPermission(currentUser, 'READ_PROJECTS') && (
Active Projects
{projects}
)} {hasPermission(currentUser, 'READ_TASKS') && (
Open Tasks
{tasks}
)}
) } Dashboard.getLayout = function getLayout(page: ReactElement) { return {page} } export default Dashboard