// src/adminjs/index.ts

// ...

export const adminJs = new AdminJs({
  databases: [database],
  resources: adminJsResources,
  rootPath: '/admin',
  dashboard: {
    component: AdminJs.bundle('./components/Dashboard')
  },
  locale: locale,

// ...
// src/adminjs/components/Dashboard.tsx

import React from 'react'
import { H1 } from '@adminjs/design-system'

export default function Dashboard() {

  return (
    <section style={{ padding: '1.5rem' }}>
      <H1>Seja bem-vindo!</H1>
    </section>
  )
}
// tsconfig.json

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "jsx": "react"
  }
}
// src/adminjs/index.ts

// ...
import { Category, Course, Episode, User } from '../models'
// ...

export const adminJs = new AdminJs({
  databases: [database],
  resources: adminJsResources,
  rootPath: '/admin',
  dashboard: {
    component: AdminJs.bundle('./components/Dashboard'),
		handler: async (req, res, context) => {
      const courses = await Course.count()
      const episodes = await Episode.count()
      const category = await Category.count()
      const standardUsers = await User.count({ where: { role: 'user' } })

      res.json({
        'Cursos': courses,
        'Episódios': episodes,
        'Categorias': category,
        'Usuários': standardUsers
      })
    },
  },
  locale: locale,

// ...
// src/adminjs/components/Dashboard.tsx

import React, { useEffect } from 'react'
import { H1 } from '@adminjs/design-system'
import { ApiClient } from 'adminjs'

export default function Dashboard() {
	const api = new ApiClient()

  useEffect(() => {
    fetchDashboardData()
  }, [])

  async function fetchDashboardData() {
    const res = await api.getDashboard()
    console.log(res.data)
  }

  return (
    <section style={{ padding: '1.5rem' }}>
      <H1>Seja bem-vindo!</H1>
    </section>
  )
}
// src/adminjs/components/Dashboard.tsx

import React, { useEffect, useState } from 'react'
import { H1, H2, Table, TableHead, TableBody, TableRow, TableCell } from '@adminjs/design-system'
import { ApiClient } from 'adminjs'

export default function Dashboard() {
  const [resources, setResources] = useState<{ [key: string]: number }>()
  const api = new ApiClient()

  useEffect(() => {
    fetchDashboardData()
  }, [])

  async function fetchDashboardData() {
    const res = await api.getDashboard()
    console.log(res.data)

    setResources(res.data)
  }

  return (
    <section style={{ padding: '1.5rem' }}>
      <H1>Seja bem-vindo!</H1>

      <section style={{ backgroundColor: '#FFF', padding: '1.5rem' }}>
        <H2>Resumo</H2>
        <Table>
          <TableHead>
            <TableRow style={{ backgroundColor: '#FF0043' }}>
              <TableCell style={{ color: "#FFF" }}>Recurso</TableCell>
              <TableCell style={{ color: "#FFF" }}>Registros</TableCell>
            </TableRow>
          </TableHead>
          <TableBody>
            {
              resources ?
                Object.entries(resources).map(([resource, count]) => (
                  <TableRow key={resource}>
                    <TableCell>{resource}</TableCell>
                    <TableCell>{count}</TableCell>
                  </TableRow>
                ))
                :
                <></>
            }
          </TableBody>
        </Table>
      </section>
    </section>
  )
}
// src/adminjs/components/Dashboard.tsx

// ...
import { ApiClient, useCurrentAdmin } from 'adminjs'

export default function Dashboard() {
  const [currentAdmin] = useCurrentAdmin()
  const [resources, setResources] = useState<{ [key: string]: number }>()

// ...

return (
    <section style={{ padding: '1.5rem' }}>
      <H1>Seja bem-vindo, {currentAdmin?.firstName}!</H1>

      <section style={{ backgroundColor: '#FFF', padding: '1.5rem' }}>
        <H2>Resumo</H2>

// ...