App.tsx
import './App.css';
import Cabecalho from './components/Cabecalho';
import Container from './components/Container';
import Grafico from './components/Grafico';
import Rodape from './components/Rodape';
import Tabela from './components/Tabela';
import Titulo from './components/Titulo';
import useDadosConsulta from './useDadosConsulta';
import useDadosProfissional from './useDadosProfissional';
function App() {
const { dados: consultas, erro: consultasErro } = useDadosConsulta();
const { dados: profissionais, erro: profissionaisErro } = useDadosProfissional();
if (consultasErro || profissionaisErro) {
console.log("Ocorreu um erro na requisição");
}
return (
<>
<Cabecalho/>
<Container>
<Titulo>Área Administrativa</Titulo>
<Tabela consultas={consultas}/>
<Grafico consultas={consultas} profissionais={profissionais}/>
</Container>
<Rodape/>
</>
);
}
export default App;
Grafico.tsx
import { ResponsiveContainer } from "recharts";
import { Bar } from "recharts";
import { XAxis } from "recharts";
import { YAxis } from "recharts";
import { BarChart } from "recharts";
import styled from "styled-components";
import IConsulta from "../../types/IConsulta";
import IProfissional from "../../types/IProfissional";
import useDadosGrafico from "./useDadosGrafico";
interface Props {
profissionais: IProfissional[] | null,
consultas: IConsulta[] | null
}
interface IDados {
nome: string,
consultas: number
}
const SecaoEstilizada = styled.section`
background-color: var(--branco);
border-radius: 16px;
`
function Grafico({ profissionais, consultas }: Props) {
let dados: Array<IDados> = useDadosGrafico({ profissionais, consultas });
return (
<SecaoEstilizada>
<ResponsiveContainer width="100%" height={350}>
<BarChart
layout="vertical"
data={dados}
margin={{ top: 25, right: 40, left: 40, bottom: 20 }}
>
<XAxis type="number"></XAxis>
<YAxis type="category" dataKey="nome"></YAxis>
<Bar dataKey="consultas" fill="#083860" barSize={30}></Bar>
</BarChart>
</ResponsiveContainer>
</SecaoEstilizada>
)
}
export default Grafico;
useDadosGrafico.tsx
import IConsulta from "../../types/IConsulta";
import IProfissional from "../../types/IProfissional";
interface Props {
profissionais: IProfissional[] | null,
consultas: IConsulta[] | null
}
interface IDados {
nome: string,
consultas: number
}
const useDadosGrafico = ({ profissionais, consultas }: Props) => {
let dados: Array<IDados> = [];
if (profissionais && consultas) {
dados = profissionais.map((profissional) => ({
nome: profissional.nome,
consultas: consultas.filter((consulta) =>
consulta.profissional.some((prof) => prof.nome === profissional.nome)
).length
}))
}
return dados;
}
export default useDadosGrafico;
O que está acontecendo ?
Aguardo um retorno.
Att.