| @ -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; | |||||