Skip to content

Commit

Permalink
fix: tratamento de mensagens críticas
Browse files Browse the repository at this point in the history
refs #928
  • Loading branch information
fragomeni committed Oct 10, 2024
1 parent 9305188 commit ebb5628
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 102 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lexml/lexml-eta",
"version": "1.8.0",
"version": "1.8.1",
"description": "Webcomponent lexml-eta following open-wc recommendations",
"author": "lexml-eta",
"license": "GPL-2.0-only",
Expand Down
100 changes: 28 additions & 72 deletions src/components/lexml-emenda.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { NOTA_RODAPE_CHANGE_EVENT, NOTA_RODAPE_REMOVE_EVENT, NotaRodape } from '
import { unsafeHTML } from 'lit-html/directives/unsafe-html.js';
import { DestinoComponent } from './destino/destino.component';
import { errorInicializarEdicaoAction } from '../model/lexml/acao/errorInicializarEdicaoAction';
import { isHtmlSemTexto } from '../util/string-util';
import { ConfiguracaoPaginacao } from '../model/paginacao/paginacao';
import { TipoMensagem } from '../model/lexml/util/mensagem';

Expand All @@ -54,7 +55,7 @@ type TipoCasaLegislativa = 'SF' | 'CD' | 'CN';
* Parâmetros de inicialização de edição de documento
*/
export class LexmlEmendaParametrosEdicao {
modo = 'Emenda';
modo = 'emenda';

// Identificação da proposição (texto) emendado.
// Opcional se for informada a emenda ou o projetoNorma
Expand Down Expand Up @@ -228,21 +229,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
this.getComissoes(this.casaLegislativa).then(comissoes => (this.comissoes = comissoes));
}

private montarColegiadoApreciador(sigla: string, numero: string, ano: string): ColegiadoApreciador {
if (sigla.toUpperCase() === 'MPV') {
return {
siglaCasaLegislativa: 'CN',
tipoColegiado: 'Comissão',
siglaComissao: `CMMPV ${numero}/${ano}`,
};
}
// Inicialmente registra destino plenário do SF para demais matérias
return {
siglaCasaLegislativa: 'SF',
tipoColegiado: 'Plenário',
};
}

private montarLocalFromColegiadoApreciador(colegiado: ColegiadoApreciador): any {
return colegiado.tipoColegiado === 'Comissão' ? 'Sala da comissão' : 'Sala das sessões';
}
Expand Down Expand Up @@ -284,15 +270,15 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
emenda.comandoEmendaTextoLivre.texto = '';
} else if (this.isEmendaTextoLivre()) {
emenda.comandoEmendaTextoLivre.motivo = this.motivo;
emenda.comandoEmendaTextoLivre.texto = this._lexmlEmendaTextoRico.texto; // visualizar ? this.removeRevisaoFormat(this._lexmlEmendaTextoRico.texto) : this._lexmlEmendaTextoRico.texto;
emenda.comandoEmendaTextoLivre.texto = this._lexmlEmendaTextoRico.texto;
emenda.anexos = this._lexmlEmendaTextoRico.anexos;
emenda.comandoEmendaTextoLivre.textoAntesRevisao = this._lexmlEmendaTextoRico.textoAntesRevisao;
} else {
emenda.comandoEmendaTextoLivre.texto = '';
emenda.componentes[0].dispositivos = this._lexmlEta!.getDispositivosEmenda()!;
emenda.comandoEmenda = this._lexmlEta!.getComandoEmenda();
}
emenda.justificativa = this._lexmlJustificativa.texto; // visualizar ? this.removeRevisaoFormat(this._lexmlJustificativa.texto) : this._lexmlJustificativa.texto;
emenda.justificativa = this._lexmlJustificativa.texto;
emenda.notasRodape = this._lexmlJustificativa.notasRodape;
emenda.autoria = this._lexmlAutoria.getAutoriaAtualizada();
emenda.data = this._lexmlData.data || undefined;
Expand Down Expand Up @@ -320,17 +306,26 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
private getPendenciasPreenchimentoEmenda(emenda: Emenda): string[] {
const pendenciasPreenchimento: Array<string> = [];

if (this.isEmendaSubstituicaoTermo()) {
if (this.isEmendaPadrao()) {
if (emenda.comandoEmenda.comandos.length === 0) {
pendenciasPreenchimento.push('Deve ser feita pelo menos uma modificação no texto da proposição para a geração do comando de emenda.');
}
} else if (this.isEmendaSubstituicaoTermo()) {
if (emenda.substituicaoTermo?.termo.replace('(termo a ser substituído)', '').trim() === '' || emenda.substituicaoTermo?.novoTermo.replace('(novo termo)', '').trim() === '') {
pendenciasPreenchimento.push('Substituição de termo não preenchida.');
}
} else {
if (emenda.comandoEmenda.comandos.length === 0) {
pendenciasPreenchimento.push('Deve ser feita pelo menos uma modificação no texto da proposição para a geração do comando de emenda.');
} else if (this.isEmendaTextoLivre()) {
if (isHtmlSemTexto(emenda.comandoEmendaTextoLivre.texto)) {
pendenciasPreenchimento.push('Emenda de texto livre não preenchida.');
}
}

const messagesCritical = rootStore.getState().elementoReducer.mensagensCritical; //this.removeDuplicatasNodeList(this._lexmlEta!.querySelectorAll('.mensagem--danger'));
// Verifica preenchimento da justificação
if (isHtmlSemTexto(emenda.justificativa)) {
pendenciasPreenchimento.push('Não foi informado um texto de justificação.');
}

const messagesCritical = rootStore.getState().elementoReducer.mensagensCritical;

for (let index = 0; index < messagesCritical.length; index++) {
const element = messagesCritical[index];
Expand All @@ -340,52 +335,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
return pendenciasPreenchimento;
}

private removeDuplicatasNodeList(lista: any): any {
const novaLista: Array<any> = [];

for (let index = 0; index < lista.length; index++) {
const element = lista[index];

if (element.getAttribute('tipo') === TipoMensagem.CRITICAL) {
if (novaLista.length === 0) {
novaLista.push(element);
} else {
if (!this.existeInNodeList(novaLista, element.innerText)) {
novaLista.push(element);
}
}
}
}

return novaLista;
}

private existeInNodeList(lista: any, valor: any): boolean {
let existe = false;

for (let index = 0; index < lista.length; index++) {
const element = lista[index];
if (element.innerText === valor) {
existe = true;
break;
}
}

return existe;
}

private removeRevisaoFormat(texto: string): string {
let novoTexto = '';

if (texto !== '') {
texto = texto.replace(/<ins\b[^>]*>(.*?)<\/ins>/s, '');
texto = texto.replace(/<del\b[^>]*>(.*?)<\/del>/s, '');
novoTexto = texto;
}

return novoTexto;
}

private getRevisoes(): Revisao[] {
const revisoes = ordernarRevisoes([...rootStore.getState().elementoReducer.revisoes]);

Expand All @@ -402,7 +351,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
try {
this._lexmlEmendaComando.emenda = [];
this.modo = params.modo;
('');
this.projetoNorma = params.projetoNorma;
this.isMateriaOrcamentaria = params.isMateriaOrcamentaria || (!!params.emenda && params.emenda.colegiadoApreciador.siglaComissao === 'CMO');
this._lexmlDestino!.isMateriaOrcamentaria = this.isMateriaOrcamentaria;
Expand Down Expand Up @@ -909,12 +857,20 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) {
mostrarDialogDisclaimerRevisao();
}

private isEmendaPadrao(): boolean {
return this.modo === ClassificacaoDocumento.EMENDA;
}

private isEmendaDispositivoOndeCouber(): boolean {
return this.modo === ClassificacaoDocumento.EMENDA_ARTIGO_ONDE_COUBER;
}

private isEmendaTextoLivre(): boolean {
return this.modo && this.modo === 'emendaTextoLivre';
return this.modo === ClassificacaoDocumento.EMENDA_TEXTO_LIVRE;
}

private isEmendaSubstituicaoTermo(): boolean {
return this.modo === 'emendaSubstituicaoTermo';
return this.modo === ClassificacaoDocumento.EMENDA_SUBSTITUICAO_TERMO;
}

private updateView(): void {
Expand Down
2 changes: 2 additions & 0 deletions src/model/documento/classificacao.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
export enum ClassificacaoDocumento {
EMENDA = 'emenda',
EMENDA_ARTIGO_ONDE_COUBER = 'emendaArtigoOndeCouber',
EMENDA_TEXTO_LIVRE = 'emendaTextoLivre',
EMENDA_SUBSTITUICAO_TERMO = 'emendaSubstituicaoTermo',
NORMA = 'norma',
PROJETO = 'projeto',
}
27 changes: 1 addition & 26 deletions src/redux/elemento/reducer/atualizaMensagemCritical.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { State } from '../../state';
import { TipoMensagem } from '../../../model/lexml/util/mensagem';
import { getDispositivoAndFilhosAsLista, isAdicionado, isModificado, isSuprimido } from '../../../model/lexml/hierarquia/hierarquiaUtil';
import { createElementoValidado } from '../../../model/elemento/elementoUtil';
import { removeAllHtmlTags } from '../../../util/string-util';
import { isHtmlSemTexto, removeAllHtmlTags } from '../../../util/string-util';

export const atualizaMensagemCritical = (state: State): State => {
state.mensagensCritical = processaMensagensCriticalElementos(state);
Expand Down Expand Up @@ -39,31 +39,6 @@ const processaMensagensCriticalElementos = (state: any): string[] | undefined =>
}
}
}

const editorTextoRico = document.querySelectorAll('editor-texto-rico') as any;

if (editorTextoRico) {
let texto = '';
if (state.modo === 'emenda') {
if (editorTextoRico[1]) {
texto = removeAllHtmlTags(editorTextoRico[1]?.getTexto())
.replace(/&nbsp;/g, '')
.trim();
if (texto === '') {
mensagensCritical.push('Não foi informado um texto de justificação.');
}
}
} else if (state.modo === 'textoLivre') {
if (editorTextoRico[0]) {
texto = removeAllHtmlTags(editorTextoRico[0]?.getTexto())
.replace(/&nbsp;/g, '')
.trim();
if (texto === '') {
mensagensCritical.push('Emenda de texto livre não preenchida.');
}
}
}
}
}

mensagensCritical = [...new Set(mensagensCritical)];
Expand Down
7 changes: 7 additions & 0 deletions src/util/string-util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ export const removeAllHtmlTagsExcept = (texto: string, tags: string[]): string =
return texto.replace(regex, '');
};

export function isHtmlSemTexto(html: string | undefined): boolean {
if(!html) {
return true;
}
return removeAllHtmlTags(html).replace(/&nbsp;/g, '').trim() === '';
}

export class StringBuilder {
private strs = new Array<string>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,6 @@ describe('Testando situações de mensagem Critical na articulação.', () => {
expect(existInArray(state.mensagensCritical, 'Existem dispositivos sem texto informado.')).to.equal(false);
});

// it('Deveria contemplar a mensagem de ausência da justificação.', () => {
// expect(existInArray(state.mensagensCritical, 'Não foi informado um texto de justificação.')).to.equal(true);
// });
});
});
});

0 comments on commit ebb5628

Please sign in to comment.