| @ -0,0 +1,24 @@ | |||
| const dbPublicacoes = _db.query(` | |||
| SELECT | |||
| SUBSTRING(publicacao.momento FROM 1 FOR 10) as dia, | |||
| comunidade.nome, | |||
| COUNT(publicacao.id) as total | |||
| FROM publicacao | |||
| INNER JOIN comunidade ON publicacao.comunidade_id = comunidade.id | |||
| GROUP BY dia, nome | |||
| ORDER BY dia, nome | |||
| `) | |||
| const dados = _val.list() | |||
| for (const dbPublicacao of dbPublicacoes) { | |||
| dados.add( | |||
| _val.map() | |||
| .set("dia", dbPublicacao.getString("dia")) | |||
| .set("comunidade", dbPublicacao.getString("nome")) | |||
| .set("total", dbPublicacao.getInt("total")) | |||
| ) | |||
| } | |||
| _out.json( | |||
| dados | |||
| ) | |||
| @ -0,0 +1,28 @@ | |||
| const dbPublicacoes = _db.query(` | |||
| SELECT | |||
| publicacao.uid, | |||
| comunidade.nome "comunidade", | |||
| publicacao.mensagem, | |||
| publicacao.momento | |||
| FROM | |||
| publicacao | |||
| INNER JOIN pessoa ON publicacao.pessoa_id = pessoa.id | |||
| LEFT JOIN comunidade ON publicacao.comunidade_id = comunidade_id | |||
| WHERE pessoa.uid = ? | |||
| ORDER BY publicacoes.momento desc | |||
| `) | |||
| const dados = _val.list() | |||
| for (const dbPublicacao of dbPublicacoes) { | |||
| dados.add( | |||
| _val.map() | |||
| .set("uid", dbPublicacao.getString("uid")) | |||
| .set("comunidade", dbPublicacao.getString("comunidade")) | |||
| .set("mensagem", dbPublicacao.getString("mensagem")) | |||
| .set("momento", dbPublicacao.getSQLTimestamp("momento")) | |||
| ) | |||
| } | |||
| _out.json(dados) | |||
| @ -0,0 +1,59 @@ | |||
| import React, { useEffect, useState } from "react" | |||
| import Spin from 'antd/lib/spin'; | |||
| import notification from 'antd/lib/notification'; | |||
| import { Chart, LineAdvance} from 'bizcharts'; | |||
| export default () => { | |||
| const [ dados, setDados ] = useState([]); | |||
| const [ carregando, setCarregando ] = useState(false); | |||
| useEffect(() => { | |||
| setCarregando(true); | |||
| const fail = () => { | |||
| setCarregando(false); | |||
| notification["error"]({ | |||
| message: 'Gráfico das Publicações Diárias por Comunidade', | |||
| description: | |||
| 'Houve uma falha ao carregar os dados do gráfico...', | |||
| style: { | |||
| marginTop: 100 | |||
| } | |||
| }); | |||
| }; | |||
| netuno.service({ | |||
| method: "GET", | |||
| url: "/services/graficos/publicacoes-comunidades-diarias", | |||
| credentials: "include", | |||
| success: (response) => { | |||
| console.log("Response", response) | |||
| if(response.json) { | |||
| setDados(response.json); | |||
| setCarregando(false); | |||
| } else { | |||
| fail(); | |||
| } | |||
| }, | |||
| fail: (e) => { | |||
| console.log("graficos/publicacoes-comunidades-diarias Fail.", e); | |||
| fail(); | |||
| } | |||
| }); | |||
| }, []); | |||
| return ( | |||
| <> | |||
| {carregando && <Spin/>} | |||
| <Chart padding={[10, 20, 50, 40]} autoFit height={300} data={dados}> | |||
| <LineAdvance | |||
| shape="smooth" | |||
| point | |||
| area | |||
| position="dia*total" | |||
| color="comunidade" | |||
| /> | |||
| </Chart> | |||
| </> | |||
| ); | |||
| } | |||
| @ -0,0 +1,76 @@ | |||
| import React, { useState, useEffect } from "react"; | |||
| import PropTypes from "prop-types"; | |||
| import Modal from 'antd/lib/modal'; | |||
| import Spin from 'antd/lib/spin'; | |||
| import Typography from 'antd/lib/typography'; | |||
| import notification from 'antd/lib/notification'; | |||
| const { Title } = Typography; | |||
| const JanelaPublicacoes = ({ pessoa, onclose }) => { | |||
| const [ publicacoes, setPublicacoes ] = useState([]); | |||
| const [ carregando, setCarregando ] = useState(false); | |||
| useEffect(() => { | |||
| setCarregando(true); | |||
| const fail = () => { | |||
| setCarregando(false); | |||
| notification["error"]({ | |||
| message: 'Publicações', | |||
| description: | |||
| 'Houve uma falha ao carregar as publicações...', | |||
| style: { | |||
| marginTop: 100 | |||
| } | |||
| }); | |||
| onClose(); | |||
| }; | |||
| netuno.service({ | |||
| method: "GET", | |||
| url: "/services/pessoas/publicacoes", | |||
| data: { | |||
| uid: pessoa.uid | |||
| }, | |||
| credentials: "include", | |||
| success: (response) => { | |||
| console.log("Response", response) | |||
| if(response.json) { | |||
| setPublicacoes(response.json); | |||
| setCarregando(false); | |||
| } else { | |||
| fail(); | |||
| } | |||
| }, | |||
| fail: (e) => { | |||
| console.log("Pessoas/Publicacoes Fail.", e); | |||
| fail(); | |||
| } | |||
| }); | |||
| }, []) | |||
| return ( | |||
| <Modal title="Publicações" visible={true} onOk={onClose} onCancel={onClose}> | |||
| { carregando && <Spin/> } | |||
| { | |||
| publicacoes.length > 0 ? | |||
| publicacoes.map( | |||
| (publicacao) => ( | |||
| <div key={publicacao.uid}> | |||
| <Title level={5}>{publicacao.comunidade}</Title> | |||
| {publicacao.mensagem} | |||
| <p><em>{ publicacao.momento.replace(".0", "") }</em></p> | |||
| </div> | |||
| ) | |||
| ) | |||
| : <p>Não fez publicações ainda.</p> | |||
| } | |||
| </Modal> | |||
| ); | |||
| }; | |||
| JanelaPublicacoes.propTypes = { | |||
| pessoa: PropTypes.object.isRequired, | |||
| onClose: PropTypes.func.isRequired | |||
| } | |||
| export default JanelaPublicacoes; | |||