Browse Source

sessão 5

master
pedro.luis@sitana.pt 5 years ago
parent
commit
5feee2d2c4
8 changed files with 10394 additions and 4028 deletions
  1. BIN
      dbs/social.mv.db
  2. +10190
    -4026
      public/scripts/main.js
  3. +1
    -1
      public/scripts/main.js.map
  4. +24
    -0
      server/services/graficos/publicacoes-comunidades-diarias.js
  5. +28
    -0
      server/services/pessoas/publicacoes/get.js
  6. +59
    -0
      ui/src/components/GraficoPublicacoes/index.jsx
  7. +76
    -0
      ui/src/containers/TabelaPessoas/JanelaPublicacoes/index.jsx
  8. +16
    -1
      ui/src/containers/TabelaPessoas/index.jsx

BIN
dbs/social.mv.db View File


+ 10190
- 4026
public/scripts/main.js
File diff suppressed because it is too large
View File


+ 1
- 1
public/scripts/main.js.map
File diff suppressed because it is too large
View File


+ 24
- 0
server/services/graficos/publicacoes-comunidades-diarias.js View File

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

+ 28
- 0
server/services/pessoas/publicacoes/get.js View File

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

+ 59
- 0
ui/src/components/GraficoPublicacoes/index.jsx View File

@ -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>
</>
);
}

+ 76
- 0
ui/src/containers/TabelaPessoas/JanelaPublicacoes/index.jsx View File

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

+ 16
- 1
ui/src/containers/TabelaPessoas/index.jsx View File

@ -3,9 +3,13 @@ import PropTypes from "prop-types";
import Table from 'antd/lib/table';
import Tag from 'antd/lib/tag';
import notification from 'antd/lib/notification';
import Button from "antd/lib/button";
const TabelaPessoas = ({ buttonRef, text, click }) => {
import JanelaPublicacoes from './JanelaPublicacoes/index.jsx'
const TabelaPessoas = ({ }) => {
const [ tabelaDados, setTabelaDados ] = useState([]);
const [pessoaPublicacoes, setPessoasPublicacoes] = useState(null);
const [ carregando, setCarregando ] = useState(false);
useEffect(() => {
@ -62,11 +66,22 @@ const TabelaPessoas = ({ buttonRef, text, click }) => {
)
}
</>
},
{
title: "Ações",
render: (text, record, index) => <>
{
<Button onClick={ () => setPessoasPublicacoes(record)}>
Publicações
</Button>
}
</>
}
];
return (
<div>
{ !!pessoaPublicacoes && <JanelaPublicacoes pessoa={pessoaPublicacoes} onClose={ ()=> setPessoasPublicacoes(null) } />}
<Table columns={ columns } dataSource={ tabelaDados } loading={carregando} />
</div>
);


Loading…
Cancel
Save