| @ -0,0 +1,40 @@ | |||
| // _core : social/userPessoa | |||
| const dbPublicacoes = _db.query(` | |||
| SELECT | |||
| publicacao.uid, | |||
| pessoa.nome, | |||
| pessoa.sobrenome, | |||
| publicacao.momento, | |||
| comunidade.nome AS "comunidade", | |||
| cidade.nome AS "cidade", | |||
| publicacao.mensagem | |||
| FROM publicacao | |||
| INNER JOIN pessoa ON publicacao.pessoa_id = pessoa.id | |||
| INNER JOIN comunidade ON publicacao.comunidade_id = comunidade.id | |||
| INNER JOIN cidade ON pessoa.cidade_id = cidade.id | |||
| WHERE publicacao.active = true | |||
| AND comunidade.id IN ( | |||
| SELECT | |||
| comunidade.id | |||
| FROM pessoa_comunidade | |||
| WHERE pessoa_id = ? | |||
| ) | |||
| ORDER BY momento desc, cidade.nome, comunidade.nome | |||
| `, userPessoa().getInt("id")) | |||
| const data = _val.list() | |||
| for (const dbPublicacao of dbPublicacoes) { | |||
| data.add( | |||
| _val.map() | |||
| .set("uid", dbPublicacao.getString("uid")) | |||
| .set("name", dbPublicacao.getString("nome") +' '+ dbPublicacao.getString("sobrenome")) | |||
| .set("moment", dbPublicacao.getSQLTimestamp("momento")) | |||
| .set("community", dbPublicacao.getString("comunidade")) | |||
| .set("city", dbPublicacao.getString("cidade")) | |||
| .set("message", dbPublicacao.getString("mensagem")) | |||
| ) | |||
| } | |||
| _out.json(data) | |||
| @ -0,0 +1,2 @@ | |||
| _out.json(_val.map().set("result", true)) | |||
| @ -0,0 +1,22 @@ | |||
| // _core : social/userPessoa | |||
| const message = _req.getString("message") | |||
| const communityUid = _req.getString("community_uid") | |||
| const dbComunidade = _db.get('comunidade', communityUid) | |||
| const data = _val.map() | |||
| .set("pessoa_id", userPessoa().getInt("id")) | |||
| .set("mensagem", message) | |||
| .set("momento", _db.timestamp()) | |||
| if (dbComunidade) { | |||
| data.set("comunidade_id", dbComunidade.getInt("id")) | |||
| } | |||
| _db.insert( | |||
| "publicacao", | |||
| data | |||
| ) | |||
| _out.json(_val.map().set("result", true)) | |||
| @ -0,0 +1,65 @@ | |||
| import React, { useEffect, useRef, useState} from 'react'; | |||
| import _service from '@netuno/service-client'; | |||
| import { Form, Input, Button, Upload, notification } from 'antd'; | |||
| import "./index.less"; | |||
| const { TextArea } = Input; | |||
| export default ({ communityUid, onPublish })=> { | |||
| const form = useRef(null); | |||
| const onFinish = (values)=> { | |||
| _service({ | |||
| method: 'PUT', | |||
| url: "api/publications", | |||
| data: { | |||
| community_uid: communityUid, | |||
| message: values.message | |||
| }, | |||
| success: (response) => { | |||
| if (onPublish) { | |||
| onPublish(); | |||
| } | |||
| form.current.resetFields(); | |||
| notification["error"]({ | |||
| message: 'Publicação', | |||
| description: 'A publicação foi guardada com sucesso.', | |||
| }); | |||
| }, | |||
| fail: (e) => { | |||
| console.log("Service Error", e); | |||
| notification["error"]({ | |||
| message: 'Publicação', | |||
| description: 'Não foi possível guardar a publicação.', | |||
| }); | |||
| } | |||
| }); | |||
| }; | |||
| return ( | |||
| <Form | |||
| ref={ form } | |||
| name="basic" | |||
| layout="vertical" | |||
| onFinish={ onFinish } | |||
| > | |||
| <Form.Item | |||
| label="Mensagem" | |||
| name="message" | |||
| rules={ | |||
| [{ | |||
| required: true, | |||
| message: "Por favor preencha a mensagem." | |||
| }] | |||
| }> | |||
| <TextArea rows={4} /> | |||
| </Form.Item> | |||
| <Form.Item> | |||
| <Button type="primary" htmlType="submit"> | |||
| Publicar | |||
| </Button> | |||
| </Form.Item> | |||
| </Form> | |||
| ); | |||
| }; | |||
| @ -0,0 +1,8 @@ | |||
| .communities { | |||
| &__list { | |||
| list-style: none; | |||
| padding: 0; | |||
| margin: 0; | |||
| } | |||
| } | |||
| @ -0,0 +1,49 @@ | |||
| import React, { useEffect, useState} from 'react'; | |||
| import { Link } from "react-router-dom"; | |||
| import _service from '@netuno/service-client'; | |||
| import { Button, notification } from 'antd'; | |||
| import { CheckCircleOutlined } from '@ant-design/icons'; | |||
| import "./index.less"; | |||
| export default ({ communityUid })=> { | |||
| const [publications, setPublications] = useState(null); | |||
| useEffect(() => { | |||
| _service({ | |||
| url: "api/publications", | |||
| data: { communityUid }, | |||
| success: (response) => { | |||
| setPublications(response.json); | |||
| }, | |||
| fail: (e) => { | |||
| console.log("Service Error", e); | |||
| notification["error"]({ | |||
| message: 'Publicações', | |||
| description: 'Não foi possível carregar as publicações.', | |||
| }); | |||
| } | |||
| }); | |||
| }, []); | |||
| return ( | |||
| <div> | |||
| <h1>Publicações</h1> | |||
| { | |||
| publications && publications.map( | |||
| ({ name, message, moment, city, community }) => { | |||
| return ( | |||
| <div> | |||
| <b>{name}</b> | |||
| <div>{message}</div> | |||
| {city}: <i>{moment}</i> em <i>{community}</i> | |||
| </div> | |||
| ); | |||
| } | |||
| ) | |||
| } | |||
| </div> | |||
| ); | |||
| }; | |||
| @ -0,0 +1,8 @@ | |||
| .communities { | |||
| &__list { | |||
| list-style: none; | |||
| padding: 0; | |||
| margin: 0; | |||
| } | |||
| } | |||