From 843e9c6514b6318ef128421c0948ccec6cfe1808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 7 May 2024 15:28:23 -0300 Subject: [PATCH 01/19] =?UTF-8?q?fix:=20Corrige=20a=20sigla=20do=20colegia?= =?UTF-8?q?do=20apreciador=20e=20sigla=20da=20comiss=C3=A3o=20ao=20alterar?= =?UTF-8?q?=20destino=20da=20emenda=20salva.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 1 + src/components/destino/destino.component.ts | 22 +++++++++++++++++---- src/model/emenda/emenda.ts | 2 +- tsconfig.json | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index aa75f03b..50b28682 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,6 +13,7 @@ module.exports = { experimentalObjectRestSpread: true, }, }, + ignorePatterns: ['**/*.js'], plugins: ['@typescript-eslint', 'import', 'html'], extends: [ 'eslint:recommended', diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index f7bc4ede..606e1b7c 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -27,6 +27,7 @@ export class DestinoComponent extends LitElement { this._proposicao = value; this.isMPV = false; if (this._proposicao.sigla === 'MPV') { + this.isMPV = true; this._colegiadoApreciador.siglaCasaLegislativa = 'CN'; this._colegiadoApreciador.tipoColegiado = 'Comissão'; if (this.isMateriaOrcamentaria) { @@ -36,7 +37,6 @@ export class DestinoComponent extends LitElement { this._colegiadoApreciador.siglaComissao = `CMMPV ${this._proposicao.numero}/${this._proposicao.ano}`; this._autocomplete.value = `${this._colegiadoApreciador.siglaComissao} - COMISSÃO MISTA DA MEDIDA PROVISÓRIA N° ${this._proposicao.numero}, DE ${this._proposicao.ano}`; } - this.isMPV = true; } this.requestUpdate(); @@ -70,9 +70,12 @@ export class DestinoComponent extends LitElement { @property({ type: Object, state: true }) set colegiadoApreciador(value: ColegiadoApreciador | undefined) { this._colegiadoApreciador = value ? value : new ColegiadoApreciador(); - this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário' ? true : false; - if (this._colegiadoApreciador.siglaComissao) { + this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário'; + if (this.tipoColegiadoPlenario) { + this.ajustaTipoColegiadoPlenario(); + } else if (this._colegiadoApreciador.siglaComissao) { const option: Option = this._comissoesOptions.find(op => op.value === this._colegiadoApreciador.siglaComissao) || new Option('', ''); + this._selecionarComissao(option); this._autocomplete.value = option.description || this._colegiadoApreciador.siglaComissao; } else { this._autocomplete.value = ''; @@ -206,12 +209,17 @@ export class DestinoComponent extends LitElement { if (!this.isMPV && !this.isPlenario) { this._colegiadoApreciador.tipoColegiado = value; this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário'; + if (this.tipoColegiadoPlenario) this.ajustaTipoColegiadoPlenario(); this.requestUpdate(); } } private _selecionarComissao(item: Option): void { - this._colegiadoApreciador.siglaComissao = item.value; + const comissaoSelecionada: Comissao = this._comissoes.find(op => op.sigla === item.value)!; + if (comissaoSelecionada) { + this._colegiadoApreciador.siglaCasaLegislativa = comissaoSelecionada.siglaCasaLegislativa; + this._colegiadoApreciador.siglaComissao = comissaoSelecionada.sigla; + } } private _filtroComissao(query: string): void { @@ -243,6 +251,12 @@ export class DestinoComponent extends LitElement { }) ); } + + private ajustaTipoColegiadoPlenario() { + this._autocomplete.value = ''; + this._colegiadoApreciador.siglaComissao = ''; + this._colegiadoApreciador.siglaCasaLegislativa = 'SF'; + } } declare global { diff --git a/src/model/emenda/emenda.ts b/src/model/emenda/emenda.ts index 0d97261d..a8fa0ab2 100644 --- a/src/model/emenda/emenda.ts +++ b/src/model/emenda/emenda.ts @@ -50,7 +50,7 @@ export class RefProposicaoEmendada { // Colegiado apreciador da emenda ---------------------------- export class ColegiadoApreciador { - siglaCasaLegislativa: 'CN' | 'SF' | 'CD' = 'CN'; + siglaCasaLegislativa?: 'CN' | 'SF' | 'CD' = 'CN'; tipoColegiado: 'Plenário' | 'Comissão' | 'Plenário via Comissão' = 'Plenário'; siglaComissao?: string; } diff --git a/tsconfig.json b/tsconfig.json index 93c789d4..e357f42d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,5 +19,5 @@ "noImplicitAny": false }, "include": ["**/*.ts"], - "exclude": ["node_modules", "*.d.ts"] + "exclude": ["node_modules", "*.d.ts", "**/*.js"], } From da91120cef15504d51cdedd240464aee9b026231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Thu, 9 May 2024 11:07:06 -0300 Subject: [PATCH 02/19] =?UTF-8?q?fix:=20Corrige=20autocomplete=20de=20comi?= =?UTF-8?q?ss=C3=A3o=20ap=C3=B3s=20selecionar=20comiss=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 606e1b7c..75d13e59 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -236,6 +236,7 @@ export class DestinoComponent extends LitElement { if (!comissaoSelecionada) { this._autocomplete.value = ''; this.comissaoSelecionada = ''; + this._comissoesAutocomplete = []; } }, 200); } @@ -252,7 +253,7 @@ export class DestinoComponent extends LitElement { ); } - private ajustaTipoColegiadoPlenario() { + private ajustaTipoColegiadoPlenario(): void { this._autocomplete.value = ''; this._colegiadoApreciador.siglaComissao = ''; this._colegiadoApreciador.siglaCasaLegislativa = 'SF'; From 2285eef7bef9f6327977c8b3a67fc034df038c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Fri, 10 May 2024 16:35:09 -0300 Subject: [PATCH 03/19] fix: Alterando a urlComissoes. --- demo/components/demoview.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/components/demoview.ts b/demo/components/demoview.ts index 3986cb6d..dcf52d7e 100644 --- a/demo/components/demoview.ts +++ b/demo/components/demoview.ts @@ -81,7 +81,7 @@ export class DemoView extends LitElement { constructor() { super(); this.emendaConfig = new LexmlEmendaConfig(); - this.emendaConfig.urlComissoes = 'https://run.mocky.io/v3/18146f46-003c-4f6f-b00f-6e290de175dd'; + this.emendaConfig.urlComissoes = 'https://run.mocky.io/v3/9fc979a9-1fa0-4cd1-abd0-e166277ef3d6'; } createRenderRoot(): LitElement { From 92e2fdebf82290bed7cea55538efadb2c43395f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Fri, 10 May 2024 16:36:04 -0300 Subject: [PATCH 04/19] =?UTF-8?q?feat:=20Valida=20preenchimento=20da=20com?= =?UTF-8?q?iss=C3=A3o=20de=20destino.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 75d13e59..54e48644 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -4,6 +4,9 @@ import { Option } from '../editor/autocomplete-async'; import { LexmlAutocomplete } from '../lexml-autocomplete'; import { ColegiadoApreciador, RefProposicaoEmendada } from '../../model/emenda/emenda'; import { Comissao } from './comissao'; +import { rootStore } from '../../redux/store'; +import { adicionarAlerta } from '../../model/alerta/acao/adicionarAlerta'; +import { removerAlerta } from '../../model/alerta/acao/removerAlerta'; @customElement('lexml-destino') export class DestinoComponent extends LitElement { @@ -112,6 +115,23 @@ export class DestinoComponent extends LitElement { box-shadow: var(--sl-shadow-small); } + .mensagem { + font-size: 0.8em; + font-weight: normal; + text-align: left; + border: 1px solid; + padding: 4px 10px; + margin: 10px 0; + display: inline-block; + border-radius: 2px; + font-family: var(--sl-font-sans); + } + + .mensagem--danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; + } /* sl-radio-group::part(base) { display: flex; flex-direction: row; @@ -200,11 +220,28 @@ export class DestinoComponent extends LitElement { @blur=${this._blurAutoComplete} ?disabled=${this.isMPV || this.isPlenario || this.tipoColegiadoPlenario || !this.comissoes?.length} > + ${this.avaliarErroComissao() ? html`
A comissão de destino deve ser selecionada.
` : ''} `; } + private avaliarErroComissao(): boolean { + const erroComissao = !this.comissaoSelecionada && this._autocomplete && !this._autocomplete.value; + erroComissao ? this.disparaAlertaErroComissao() : rootStore.dispatch(removerAlerta('alerta-global-comissao-nao-selecionada')); + return erroComissao; + } + + disparaAlertaErroComissao(): void { + const alerta = { + id: 'alerta-global-comissao-nao-selecionada', + tipo: 'error', + mensagem: 'A comissão de destino deve ser selecionada.', + podeFechar: false, + }; + rootStore.dispatch(adicionarAlerta(alerta)); + } + private updateTipoColegiado(value: any): void { if (!this.isMPV && !this.isPlenario) { this._colegiadoApreciador.tipoColegiado = value; @@ -237,6 +274,7 @@ export class DestinoComponent extends LitElement { this._autocomplete.value = ''; this.comissaoSelecionada = ''; this._comissoesAutocomplete = []; + this._colegiadoApreciador.siglaComissao = ''; } }, 200); } From 8e0c8734d662c2c4baf593f9605db7de1dd17cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Fri, 10 May 2024 17:07:50 -0300 Subject: [PATCH 05/19] =?UTF-8?q?refactor:=20Melhoria=20no=20nome=20de=20m?= =?UTF-8?q?=C3=A9todos=20e=20avalia=C3=A7=C3=A3o=20de=20atributos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 54e48644..15fbfb3c 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -220,14 +220,14 @@ export class DestinoComponent extends LitElement { @blur=${this._blurAutoComplete} ?disabled=${this.isMPV || this.isPlenario || this.tipoColegiadoPlenario || !this.comissoes?.length} > - ${this.avaliarErroComissao() ? html`
A comissão de destino deve ser selecionada.
` : ''} + ${this.validarErroComissao() ? html`
A comissão de destino deve ser selecionada.
` : ''} `; } - private avaliarErroComissao(): boolean { - const erroComissao = !this.comissaoSelecionada && this._autocomplete && !this._autocomplete.value; + private validarErroComissao(): boolean { + const erroComissao = this._colegiadoApreciador?.tipoColegiado !== 'Plenário' && !this.comissaoSelecionada && !this._autocomplete?.value; erroComissao ? this.disparaAlertaErroComissao() : rootStore.dispatch(removerAlerta('alerta-global-comissao-nao-selecionada')); return erroComissao; } From 9611bf16495f6f5c1c5869e888b57109f851f70a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 14 May 2024 10:48:14 -0300 Subject: [PATCH 06/19] =?UTF-8?q?feat:=20Criando=20mecanismo=20de=20erro?= =?UTF-8?q?=20e=20alerta=20de=20comiss=C3=A3o=20n=C3=A3o=20selecionada.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 29 ++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 15fbfb3c..d3076058 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -16,13 +16,12 @@ export class DestinoComponent extends LitElement { @state() private _comissoesAutocomplete: Option[] = []; - @state() - private comissaoSelecionada = ''; private isMPV = false; private isPlenario = false; private tipoColegiadoPlenario = false; public isMateriaOrcamentaria = false; - + @state() + private isErroComissaoSelecionada = false; private _proposicao!: RefProposicaoEmendada; @property({ type: RefProposicaoEmendada }) set proposicao(value: RefProposicaoEmendada) { @@ -72,6 +71,7 @@ export class DestinoComponent extends LitElement { private _colegiadoApreciador!: ColegiadoApreciador; @property({ type: Object, state: true }) set colegiadoApreciador(value: ColegiadoApreciador | undefined) { + console.log('this.tipoColegiadoPlenario', this.tipoColegiadoPlenario); this._colegiadoApreciador = value ? value : new ColegiadoApreciador(); this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário'; if (this.tipoColegiadoPlenario) { @@ -83,6 +83,9 @@ export class DestinoComponent extends LitElement { } else { this._autocomplete.value = ''; } + if (!this.tipoColegiadoPlenario && !this._colegiadoApreciador.siglaComissao) { + this.criarAlertaErroComissao(); + } this.requestUpdate(); } @@ -217,22 +220,18 @@ export class DestinoComponent extends LitElement { .items=${this._comissoesAutocomplete} .onSearch=${value => this._filtroComissao(value)} .onSelect=${value => this._selecionarComissao(value)} + .onChange="${() => false}" @blur=${this._blurAutoComplete} ?disabled=${this.isMPV || this.isPlenario || this.tipoColegiadoPlenario || !this.comissoes?.length} > - ${this.validarErroComissao() ? html`
A comissão de destino deve ser selecionada.
` : ''} + ${this.isErroComissaoSelecionada ? html`
A comissão de destino deve ser selecionada.
` : ''} `; } - private validarErroComissao(): boolean { - const erroComissao = this._colegiadoApreciador?.tipoColegiado !== 'Plenário' && !this.comissaoSelecionada && !this._autocomplete?.value; - erroComissao ? this.disparaAlertaErroComissao() : rootStore.dispatch(removerAlerta('alerta-global-comissao-nao-selecionada')); - return erroComissao; - } - - disparaAlertaErroComissao(): void { + private criarAlertaErroComissao(): void { + this.isErroComissaoSelecionada = true; const alerta = { id: 'alerta-global-comissao-nao-selecionada', tipo: 'error', @@ -242,6 +241,11 @@ export class DestinoComponent extends LitElement { rootStore.dispatch(adicionarAlerta(alerta)); } + private removerAlertaErroComissao(): void { + this.isErroComissaoSelecionada = false; + rootStore.dispatch(removerAlerta('alerta-global-comissao-nao-selecionada')); + } + private updateTipoColegiado(value: any): void { if (!this.isMPV && !this.isPlenario) { this._colegiadoApreciador.tipoColegiado = value; @@ -256,6 +260,7 @@ export class DestinoComponent extends LitElement { if (comissaoSelecionada) { this._colegiadoApreciador.siglaCasaLegislativa = comissaoSelecionada.siglaCasaLegislativa; this._colegiadoApreciador.siglaComissao = comissaoSelecionada.sigla; + this.removerAlertaErroComissao(); } } @@ -272,9 +277,9 @@ export class DestinoComponent extends LitElement { if (!comissaoSelecionada) { this._autocomplete.value = ''; - this.comissaoSelecionada = ''; this._comissoesAutocomplete = []; this._colegiadoApreciador.siglaComissao = ''; + this.criarAlertaErroComissao(); } }, 200); } From b7411791dde15103a451e83829313719d90bd8ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 14 May 2024 15:09:24 -0300 Subject: [PATCH 07/19] =?UTF-8?q?feat:=20Limpa=20filtro=20do=20autocomplet?= =?UTF-8?q?e=20e=20exibe=20as=20comiss=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 10 +++++++--- src/components/editor/autocomplete-async.ts | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index bffe1134..18540274 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -178,7 +178,8 @@ export class DestinoComponent extends LitElement { .items=${this._comissoesAutocomplete} .onSearch=${value => this._filtroComissao(value)} .onSelect=${value => this._selecionarComissao(value)} - .onChange="${() => false}" + .onChange="${() => true}" + .onClick="${() => this._exibirComissoes()}" @blur=${this._blurAutoComplete} ?disabled=${this.isMPV || this.isPlenario || this.tipoColegiadoPlenario || !this.comissoes?.length} > @@ -188,6 +189,11 @@ export class DestinoComponent extends LitElement { `; } + private _exibirComissoes() { + this._autocomplete.value = ''; + this._comissoesAutocomplete = this._comissoesOptions; + } + private criarAlertaErroComissao(): void { this.isErroComissaoSelecionada = true; const alerta = { @@ -234,8 +240,6 @@ export class DestinoComponent extends LitElement { const comissaoSelecionada = this._comissoesOptions.find(comissaoOp => comissao === comissaoOp.description); if (!comissaoSelecionada) { - this._autocomplete.value = ''; - this._comissoesAutocomplete = []; this._colegiadoApreciador.siglaComissao = ''; this.criarAlertaErroComissao(); } diff --git a/src/components/editor/autocomplete-async.ts b/src/components/editor/autocomplete-async.ts index 48ef1d4d..18205cf6 100644 --- a/src/components/editor/autocomplete-async.ts +++ b/src/components/editor/autocomplete-async.ts @@ -31,6 +31,9 @@ export class AutocompleteAsync extends LitElement { @property({ type: Function }) onChange = (value: string): void => console.log('Mudança texto:', value); + @property({ type: Function }) + onClick = (value: string): void => console.log('Click:', value); + _interval = 1000; _timer: any; @@ -115,6 +118,7 @@ export class AutocompleteAsync extends LitElement { placeholder=${this.placeholder} .value=${this.value?.description || ''} @change=${e => this._handleChange(e.target.value)} + @click=${e => this._handleClick(e.target.value)} ?disabled=${this.disabled} > @@ -169,12 +173,14 @@ export class AutocompleteAsync extends LitElement { this._bound.onFocus = this._handleFocus.bind(this); this._bound.onBlur = this._handleBlur.bind(this); this._bound.onChange = this._handleChange.bind(this); + this._bound.onClick = this._handleClick.bind(this); this.contentElement.addEventListener('keydown', this._bound.onKeyDown); this.contentElement.addEventListener('keyup', this._bound.onKeyUp); this.contentElement.addEventListener('focus', this._bound.onFocus); this.contentElement.addEventListener('blur', this._bound.onBlur); this.contentElement.addEventListener('sl-input', this._bound.onChange); + this.contentElement.addEventListener('click', this._bound.onClick); if (this._tempValue !== undefined) { this.contentElement.value = this._tempValue; @@ -188,6 +194,7 @@ export class AutocompleteAsync extends LitElement { this.contentElement.removeEventListener('focus', this._bound.onFocus); this.contentElement.removeEventListener('blur', this._bound.onBlur); this.contentElement.removeEventListener('sl-input', this._bound.onChange); + this.contentElement.removeEventListener('click', this._bound.onClick); } focus(options?: FocusOptions): void { @@ -318,6 +325,10 @@ export class AutocompleteAsync extends LitElement { // eslint-disable-next-line no-unused-expressions this._blur && setTimeout(() => this.close(), 500); // Give user some slack before closing } + + _handleClick(value: string): void { + this.onClick(value); + } } export class Option { From acaff3091728a29bbd46eb9cd31a79921e12fc48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Thu, 16 May 2024 16:57:06 -0300 Subject: [PATCH 08/19] =?UTF-8?q?fix:=20Corre=C3=A7=C3=A3o=20do=20filtro?= =?UTF-8?q?=20de=20comiss=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 18540274..8c8433d7 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -1,7 +1,6 @@ import { LitElement, html, TemplateResult } from 'lit'; import { customElement, property, query, state } from 'lit/decorators.js'; -import { Option } from '../editor/autocomplete-async'; -import { LexmlAutocomplete } from '../lexml-autocomplete'; +import { AutocompleteAsync, Option } from '../editor/autocomplete-async'; import { ColegiadoApreciador, RefProposicaoEmendada } from '../../model/emenda/emenda'; import { Comissao } from './comissao'; import { rootStore } from '../../redux/store'; @@ -11,7 +10,7 @@ import { removerAlerta } from '../../model/alerta/acao/removerAlerta'; @customElement('lexml-destino') export class DestinoComponent extends LitElement { @query('#auto-complete-async') - private _autocomplete!: LexmlAutocomplete; + private _autocomplete!: AutocompleteAsync; @state() private _comissoesAutocomplete: Option[] = []; @@ -74,7 +73,7 @@ export class DestinoComponent extends LitElement { this._colegiadoApreciador = value ? value : new ColegiadoApreciador(); this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário'; if (this.tipoColegiadoPlenario) { - this.ajustaTipoColegiadoPlenario(); + this.ajustarTipoColegiadoPlenario(); } else if (this._colegiadoApreciador.siglaComissao) { const option: Option = this._comissoesOptions.find(op => op.value === this._colegiadoApreciador.siglaComissao) || new Option('', ''); this._selecionarComissao(option); @@ -191,7 +190,7 @@ export class DestinoComponent extends LitElement { private _exibirComissoes() { this._autocomplete.value = ''; - this._comissoesAutocomplete = this._comissoesOptions; + this._comissoesAutocomplete = []; } private criarAlertaErroComissao(): void { @@ -214,7 +213,7 @@ export class DestinoComponent extends LitElement { if (!this.isMPV && !this.isPlenario) { this._colegiadoApreciador.tipoColegiado = value; this.tipoColegiadoPlenario = this._colegiadoApreciador.tipoColegiado === 'Plenário'; - if (this.tipoColegiadoPlenario) this.ajustaTipoColegiadoPlenario(); + if (this.tipoColegiadoPlenario) this.ajustarTipoColegiadoPlenario(); this.requestUpdate(); } } @@ -235,6 +234,7 @@ export class DestinoComponent extends LitElement { private _blurAutoComplete(): void { if (!this.comissoes?.length) return; + setTimeout(() => { const comissao = this._autocomplete.value ?? ''; const comissaoSelecionada = this._comissoesOptions.find(comissaoOp => comissao === comissaoOp.description); @@ -242,6 +242,7 @@ export class DestinoComponent extends LitElement { if (!comissaoSelecionada) { this._colegiadoApreciador.siglaComissao = ''; this.criarAlertaErroComissao(); + this._autocomplete.value = ''; } }, 200); } @@ -258,7 +259,7 @@ export class DestinoComponent extends LitElement { ); } - private ajustaTipoColegiadoPlenario(): void { + private ajustarTipoColegiadoPlenario(): void { this._autocomplete.value = ''; this._colegiadoApreciador.siglaComissao = ''; this._colegiadoApreciador.siglaCasaLegislativa = 'SF'; From 8422a37407235ce7ad6f6bc89156666bdf6cc297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Fri, 17 May 2024 10:42:28 -0300 Subject: [PATCH 09/19] =?UTF-8?q?fix:=20Corre=C3=A7=C3=A3o=20da=20valida?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20comiss=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 8c8433d7..ee1216cf 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -263,6 +263,7 @@ export class DestinoComponent extends LitElement { this._autocomplete.value = ''; this._colegiadoApreciador.siglaComissao = ''; this._colegiadoApreciador.siglaCasaLegislativa = 'SF'; + this.removerAlertaErroComissao(); } } From 7ccb66e8b59c21613354cf365fef1a3656161ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Fri, 17 May 2024 16:28:53 -0300 Subject: [PATCH 10/19] feat: Parametriza casa legislativa de destino da emenda. --- src/components/destino/destino.component.ts | 13 +++++- src/components/lexml-emenda.component.ts | 48 +++++++++++++-------- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index ee1216cf..18d2b09e 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -16,15 +16,22 @@ export class DestinoComponent extends LitElement { private _comissoesAutocomplete: Option[] = []; private isMPV = false; + private isPlenario = false; + private tipoColegiadoPlenario = false; + + public casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; + public isMateriaOrcamentaria = false; + @state() private isErroComissaoSelecionada = false; + private _proposicao!: RefProposicaoEmendada; + @property({ type: RefProposicaoEmendada }) set proposicao(value: RefProposicaoEmendada) { - // this._autocomplete.value = ''; this._proposicao = value; this.isMPV = false; if (this._proposicao.sigla === 'MPV') { @@ -38,6 +45,10 @@ export class DestinoComponent extends LitElement { this._colegiadoApreciador.siglaComissao = `CMMPV ${this._proposicao.numero}/${this._proposicao.ano}`; this._autocomplete.value = `${this._colegiadoApreciador.siglaComissao} - COMISSÃO MISTA DA MEDIDA PROVISÓRIA N° ${this._proposicao.numero}, DE ${this._proposicao.ano}`; } + } else if (['PDN', 'PRN'].indexOf(this._proposicao.sigla) > -1) { + this._colegiadoApreciador.siglaCasaLegislativa = 'CN'; + } else if (this.casaLegislativa) { + this._colegiadoApreciador.siglaCasaLegislativa = this.casaLegislativa; } this.requestUpdate(); diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index 96360201..1ef7fdc6 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -83,6 +83,9 @@ export class LexmlEmendaParametrosEdicao { // Opções de impressão padrão opcoesImpressaoPadrao?: { imprimirBrasao: boolean; textoCabecalho: string; tamanhoFonte: number }; + + // Casa legislativa resposavel pela apreciaçao da emenda + casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; } @customElement('lexml-emenda') @@ -106,6 +109,8 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { private motivo = ''; + private casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; + private parlamentaresCarregados = false; private comissoesCarregadas = false; @@ -176,13 +181,15 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { if (!this.lexmlEmendaConfig.urlComissoes) { return Promise.resolve([]); } - const _response = await fetch(this.lexmlEmendaConfig.urlComissoes); + const _response = await fetch(`${this.lexmlEmendaConfig.urlComissoes}?siglaCasaLegislativa=${this.casaLegislativa}`); const _comissoes = await _response.json(); - return _comissoes.map(c => ({ - siglaCasaLegislativa: c.siglaCasaLegislativa, - sigla: c.sigla, - nome: c.nome, - })); + return _comissoes + .filter(c => c.siglaCasaLegislativa === this.casaLegislativa) + .map(c => ({ + siglaCasaLegislativa: c.siglaCasaLegislativa, + sigla: c.sigla, + nome: c.nome, + })); } catch (err) { console.log('Erro inesperado ao carregar lista de comissões'); console.log(err); @@ -193,16 +200,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { return Promise.resolve([]); } - // private habilitarBotoes(): void { - // const botoes = document.querySelectorAll('.lexml-eta-main-header input[type=button]'); - - // if (this.parlamentaresCarregados && this.comissoesCarregadas) { - // botoes.forEach(btn => ((btn as HTMLInputElement).disabled = false)); - // } else { - // botoes.forEach(btn => ((btn as HTMLInputElement).disabled = true)); - // } - // } - atualizaListaParlamentares(): void { this.getParlamentares().then(parlamentares => (this.parlamentares = parlamentares)); } @@ -341,10 +338,14 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { if (params.emenda) { this.setEmenda(params.emenda); + this.casaLegislativa = params.emenda.colegiadoApreciador.siglaCasaLegislativa ?? 'CN'; } else { this.resetaEmenda(params); + this.casaLegislativa = params.casaLegislativa; } + this._lexmlDestino!.casaLegislativa = this.casaLegislativa; + this.limparAlertas(); if (this.isEmendaTextoLivre() && !this._lexmlEmendaTextoRico.texto) { @@ -368,6 +369,8 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { }); } + this.atualizaListaComissoes(); + this.updateView(); } catch (err) { setTimeout(() => { @@ -376,6 +379,15 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } } + private inicializaColegiadoApreciador(params: LexmlEmendaParametrosEdicao): void { + const siglaProposicao = params.emenda?.proposicao.sigla ?? ''; + if (['MPV', 'PDN', 'PRN'].indexOf(siglaProposicao)) { + this._lexmlDestino!.colegiadoApreciador.siglaCasaLegislativa = 'CN'; + } else { + this._lexmlDestino!.colegiadoApreciador.siglaCasaLegislativa = params.casaLegislativa; + } + } + public trocarModoEdicao(modo: string, motivo = ''): void { if (this.modo === modo) { console.log('Ignorando tentativa de mudança para o mesmo modo de edição.'); @@ -607,7 +619,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { protected firstUpdated(): void { // this.habilitarBotoes(); setTimeout(() => this.atualizaListaParlamentares(), 0); - setTimeout(() => this.atualizaListaComissoes(), 0); + // setTimeout(() => this.atualizaListaComissoes(), 0); this._tabsEsquerda?.addEventListener('sl-tab-show', (event: any) => { const tabName = event.detail.name; @@ -618,7 +630,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } } else if (tabName === 'autoria') { this.parlamentares.length === 0 && this.atualizaListaParlamentares(); - this.comissoes?.length === 0 && this.atualizaListaComissoes(); + // this.comissoes?.length === 0 && this.atualizaListaComissoes(); } }); From 5ad40d140603ff48be35f59ce5e7b72e8ccedf6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 21 May 2024 15:53:43 -0300 Subject: [PATCH 11/19] =?UTF-8?q?fix:=20Corre=C3=A7=C3=A3o=20da=20casa=20l?= =?UTF-8?q?egislativa=20de=20na=20abertura=20de=20emenda.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/components/demoview.ts | 1 + src/components/destino/destino.component.ts | 17 ++++++++------ src/components/lexml-emenda.component.ts | 26 +++++++-------------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/demo/components/demoview.ts b/demo/components/demoview.ts index dcf52d7e..41cf3284 100644 --- a/demo/components/demoview.ts +++ b/demo/components/demoview.ts @@ -191,6 +191,7 @@ export class DemoView extends LitElement { }; } params.motivo = 'Motivo da emenda de texto livre'; + params.casaLegislativa = 'SF'; this.elLexmlEmenda.inicializarEdicao(params); this.atualizarProposicaoCorrente(this.projetoNorma); diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 18d2b09e..1daf0777 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -21,8 +21,6 @@ export class DestinoComponent extends LitElement { private tipoColegiadoPlenario = false; - public casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; - public isMateriaOrcamentaria = false; @state() @@ -47,8 +45,6 @@ export class DestinoComponent extends LitElement { } } else if (['PDN', 'PRN'].indexOf(this._proposicao.sigla) > -1) { this._colegiadoApreciador.siglaCasaLegislativa = 'CN'; - } else if (this.casaLegislativa) { - this._colegiadoApreciador.siglaCasaLegislativa = this.casaLegislativa; } this.requestUpdate(); @@ -65,6 +61,7 @@ export class DestinoComponent extends LitElement { if (!this._comissoes || this._comissoes.length === 0) { this._comissoes = value ? value : []; this._comissoesOptions = this.comissoes.map(comissao => new Option(comissao.sigla, `${comissao.sigla} - ${comissao.nome}`)); + this.ajustarValorAutocomplete(); this.requestUpdate(); } if (typeof value === 'undefined') { @@ -78,6 +75,14 @@ export class DestinoComponent extends LitElement { private _comissoesOptions: Option[] = []; + private ajustarValorAutocomplete(): void { + if (this._colegiadoApreciador?.siglaComissao) { + const option: Option = this._comissoesOptions.find(op => op.value === this._colegiadoApreciador.siglaComissao) || new Option('', ''); + this._selecionarComissao(option); + this._autocomplete.value = option.description || this._colegiadoApreciador.siglaComissao; + } + } + private _colegiadoApreciador!: ColegiadoApreciador; @property({ type: Object, state: true }) set colegiadoApreciador(value: ColegiadoApreciador | undefined) { @@ -86,9 +91,7 @@ export class DestinoComponent extends LitElement { if (this.tipoColegiadoPlenario) { this.ajustarTipoColegiadoPlenario(); } else if (this._colegiadoApreciador.siglaComissao) { - const option: Option = this._comissoesOptions.find(op => op.value === this._colegiadoApreciador.siglaComissao) || new Option('', ''); - this._selecionarComissao(option); - this._autocomplete.value = option.description || this._colegiadoApreciador.siglaComissao; + this.ajustarValorAutocomplete(); } else { this._autocomplete.value = ''; } diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index 1ef7fdc6..0cb1da77 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -176,15 +176,15 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { return Promise.resolve([]); } - async getComissoes(): Promise { + async getComissoes(siglaCasaLegislativa: string): Promise { try { if (!this.lexmlEmendaConfig.urlComissoes) { return Promise.resolve([]); } - const _response = await fetch(`${this.lexmlEmendaConfig.urlComissoes}?siglaCasaLegislativa=${this.casaLegislativa}`); + const _response = await fetch(`${this.lexmlEmendaConfig.urlComissoes}?siglaCasaLegislativa=${siglaCasaLegislativa}`); const _comissoes = await _response.json(); return _comissoes - .filter(c => c.siglaCasaLegislativa === this.casaLegislativa) + .filter(c => c.siglaCasaLegislativa === siglaCasaLegislativa) .map(c => ({ siglaCasaLegislativa: c.siglaCasaLegislativa, sigla: c.sigla, @@ -205,7 +205,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } atualizaListaComissoes(): void { - this.getComissoes().then(comissoes => (this.comissoes = comissoes)); + this.getComissoes(this.casaLegislativa).then(comissoes => (this.comissoes = comissoes)); } private montarColegiadoApreciador(sigla: string, numero: string, ano: string): ColegiadoApreciador { @@ -337,14 +337,14 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } if (params.emenda) { - this.setEmenda(params.emenda); this.casaLegislativa = params.emenda.colegiadoApreciador.siglaCasaLegislativa ?? 'CN'; + this.setEmenda(params.emenda); } else { - this.resetaEmenda(params); this.casaLegislativa = params.casaLegislativa; + this.resetaEmenda(params); } - this._lexmlDestino!.casaLegislativa = this.casaLegislativa; + this.atualizaListaComissoes(); this.limparAlertas(); @@ -369,8 +369,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { }); } - this.atualizaListaComissoes(); - this.updateView(); } catch (err) { setTimeout(() => { @@ -379,15 +377,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } } - private inicializaColegiadoApreciador(params: LexmlEmendaParametrosEdicao): void { - const siglaProposicao = params.emenda?.proposicao.sigla ?? ''; - if (['MPV', 'PDN', 'PRN'].indexOf(siglaProposicao)) { - this._lexmlDestino!.colegiadoApreciador.siglaCasaLegislativa = 'CN'; - } else { - this._lexmlDestino!.colegiadoApreciador.siglaCasaLegislativa = params.casaLegislativa; - } - } - public trocarModoEdicao(modo: string, motivo = ''): void { if (this.modo === modo) { console.log('Ignorando tentativa de mudança para o mesmo modo de edição.'); @@ -542,6 +531,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { emenda.proposicao = this.montarProposicaoPorUrn(this.urn, params.ementa); emenda.autoria = this.montarAutoriaPadrao(params); emenda.opcoesImpressao = this.montarOpcoesImpressaoPadrao(params); + emenda.colegiadoApreciador.siglaCasaLegislativa = params.casaLegislativa; this._lexmlEmendaComando.emenda = {}; this.setEmenda(emenda); rootStore.dispatch(limparRevisaoAction.execute()); From 3ca3fe371125e5d8339dbbbc1b3a2104381eda62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 21 May 2024 15:57:28 -0300 Subject: [PATCH 12/19] =?UTF-8?q?fix:=20Removendo=20parametriza=C3=A7?= =?UTF-8?q?=C3=A3o=20indevida.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/components/demoview.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/components/demoview.ts b/demo/components/demoview.ts index 41cf3284..2a4ee33d 100644 --- a/demo/components/demoview.ts +++ b/demo/components/demoview.ts @@ -191,7 +191,7 @@ export class DemoView extends LitElement { }; } params.motivo = 'Motivo da emenda de texto livre'; - params.casaLegislativa = 'SF'; + // params.casaLegislativa = 'SF'; this.elLexmlEmenda.inicializarEdicao(params); this.atualizarProposicaoCorrente(this.projetoNorma); From b6a155348490f1f85f30ae95f98da3cfac808fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Wed, 22 May 2024 11:22:17 -0300 Subject: [PATCH 13/19] =?UTF-8?q?refactor:=20Removendo=20do=20componente?= =?UTF-8?q?=20a=20valida=C3=A7=C3=A3o=20de=20colegiado=20apreciador,=20por?= =?UTF-8?q?=20motivos=20de=20lista=20de=20comiss=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 3 --- src/components/lexml-emenda.component.ts | 9 +++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 1daf0777..5a63bbd1 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -34,7 +34,6 @@ export class DestinoComponent extends LitElement { this.isMPV = false; if (this._proposicao.sigla === 'MPV') { this.isMPV = true; - this._colegiadoApreciador.siglaCasaLegislativa = 'CN'; this._colegiadoApreciador.tipoColegiado = 'Comissão'; if (this.isMateriaOrcamentaria) { this._colegiadoApreciador.siglaComissao = 'CMO'; @@ -43,8 +42,6 @@ export class DestinoComponent extends LitElement { this._colegiadoApreciador.siglaComissao = `CMMPV ${this._proposicao.numero}/${this._proposicao.ano}`; this._autocomplete.value = `${this._colegiadoApreciador.siglaComissao} - COMISSÃO MISTA DA MEDIDA PROVISÓRIA N° ${this._proposicao.numero}, DE ${this._proposicao.ano}`; } - } else if (['PDN', 'PRN'].indexOf(this._proposicao.sigla) > -1) { - this._colegiadoApreciador.siglaCasaLegislativa = 'CN'; } this.requestUpdate(); diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index 0cb1da77..153a4518 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -109,7 +109,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { private motivo = ''; - private casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; + private casaLegislativa = 'CN'; private parlamentaresCarregados = false; private comissoesCarregadas = false; @@ -340,7 +340,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this.casaLegislativa = params.emenda.colegiadoApreciador.siglaCasaLegislativa ?? 'CN'; this.setEmenda(params.emenda); } else { - this.casaLegislativa = params.casaLegislativa; + this.casaLegislativa = this.inicializaColegiadoApreciador(params); this.resetaEmenda(params); } @@ -377,6 +377,11 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } } + private inicializaColegiadoApreciador(params: LexmlEmendaParametrosEdicao): string { + const siglaProposicao = params.emenda?.proposicao.sigla ?? ''; + return ['MPV', 'PDN', 'PRN'].indexOf(siglaProposicao) > -1 ? 'CN' : params.casaLegislativa; + } + public trocarModoEdicao(modo: string, motivo = ''): void { if (this.modo === modo) { console.log('Ignorando tentativa de mudança para o mesmo modo de edição.'); From bb48b582b4b67bd67955d256494cd3e7eda9c7af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 28 May 2024 10:33:35 -0300 Subject: [PATCH 14/19] feat: Editor de texto rico inicia de modo justificado. --- .../editor-texto-rico.component.ts | 15 +++++++++++++++ src/components/editor/editor.component.ts | 1 + src/components/lexml-emenda.component.ts | 10 +++++----- src/emenda/comando-emenda-util.ts | 4 ++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/components/editor-texto-rico/editor-texto-rico.component.ts b/src/components/editor-texto-rico/editor-texto-rico.component.ts index 28c653f4..ac72b986 100644 --- a/src/components/editor-texto-rico/editor-texto-rico.component.ts +++ b/src/components/editor-texto-rico/editor-texto-rico.component.ts @@ -575,6 +575,8 @@ export class EditorTextoRicoComponent extends connect(rootStore)(LitElement) { (this.quill as any).notasRodape.associar(notasRodape); }, 100); // A linha anterior gera um history, então é necessário limpar novamente. + if (!textoAjustado) this.quill.format('align', 'justify'); + this.atualizaStatusElementosRevisao(); }; @@ -669,6 +671,19 @@ export class EditorTextoRicoComponent extends connect(rootStore)(LitElement) { this.anexos = [...anexo]; }; + isEditorVazio = (): boolean => { + const delta = this.quill?.getContents(); + if (!delta || !delta.ops || delta.ops.length === 0) { + return true; + } + for (let i = 0; i < delta.ops.length; i++) { + if (delta.ops[i]?.insert.trim() !== '') { + return false; + } + } + return true; + }; + private getNomeSwitch = (): string => { return this.modo === Modo.JUSTIFICATIVA ? 'chk-em-revisao-justificativa' : 'chk-em-revisao-texto-livre'; }; diff --git a/src/components/editor/editor.component.ts b/src/components/editor/editor.component.ts index 07c78d95..4138fffd 100644 --- a/src/components/editor/editor.component.ts +++ b/src/components/editor/editor.component.ts @@ -1296,6 +1296,7 @@ export class EditorComponent extends connect(rootStore)(LitElement) { private carregarArticulacao(elementos: Elemento[]): void { setTimeout(() => { + if (!this.quill) return; this.quill.getLine(0)[0].remove(); elementos.forEach((elemento: Elemento) => { const etaContainerTable = EtaQuillUtil.criarContainerLinha(elemento); diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index 153a4518..36eaec6b 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -348,7 +348,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this.limparAlertas(); - if (this.isEmendaTextoLivre() && !this._lexmlEmendaTextoRico.texto) { + if (this.isEmendaTextoLivre() && this._lexmlEmendaTextoRico.isEditorVazio()) { this.showAlertaEmendaTextoLivre(); } setTimeout(this.handleResize, 0); @@ -415,7 +415,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this.limparAlertas(); - if (this.isEmendaTextoLivre() && !this._lexmlEmendaTextoRico.texto) { + if (this.isEmendaTextoLivre() && this._lexmlEmendaTextoRico.isEditorVazio()) { this.showAlertaEmendaTextoLivre(); } setTimeout(this.handleResize, 0); @@ -749,12 +749,12 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this._lexmlEmendaComando.emenda = comandoEmenda; this._lexmlEmendaComandoModal.atualizarComandoEmenda(comandoEmenda); } else if (this.isEmendaTextoLivre()) { - if (!this._lexmlJustificativa.texto) { + if (!this._lexmlEmendaTextoRico.isEditorVazio() && this._lexmlJustificativa.isEditorVazio()) { this.disparaAlerta(); } else { rootStore.dispatch(removerAlerta('alerta-global-justificativa')); } - if (!this._lexmlEmendaTextoRico.texto) { + if (this._lexmlEmendaTextoRico.isEditorVazio()) { this.showAlertaEmendaTextoLivre(); } else { rootStore.dispatch(removerAlerta('alerta-global-emenda-texto-livre')); @@ -773,7 +773,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this._lexmlEmendaComandoModal.atualizarComandoEmenda(comandoEmenda); } - if (comandoEmenda !== null && comandoEmenda.comandos?.length > 0 && !this._lexmlJustificativa.texto) { + if (comandoEmenda !== null && comandoEmenda.comandos?.length > 0 && this._lexmlJustificativa.isEditorVazio()) { this.disparaAlerta(); } else { rootStore.dispatch(removerAlerta('alerta-global-justificativa')); diff --git a/src/emenda/comando-emenda-util.ts b/src/emenda/comando-emenda-util.ts index 5de39b59..91a17cf4 100644 --- a/src/emenda/comando-emenda-util.ts +++ b/src/emenda/comando-emenda-util.ts @@ -5,7 +5,7 @@ import { getDispositivoPosterior, getFilhosEstiloLexML, isUltimaAlteracao, - percorreHierarquiaDispositivos + percorreHierarquiaDispositivos, } from '../model/lexml/hierarquia/hierarquiaUtil'; import { StringBuilder, removeEspacosDuplicados } from '../util/string-util'; import { DescricaoSituacao } from './../model/dispositivo/situacao'; @@ -27,7 +27,7 @@ export class CmdEmdUtil { static getDispositivosNaoOriginais(articulacao: Articulacao): Dispositivo[] { const ret: Dispositivo[] = []; - if (articulacao.projetoNorma?.ementa?.situacao.descricaoSituacao === DescricaoSituacao.DISPOSITIVO_MODIFICADO) { + if (articulacao?.projetoNorma?.ementa?.situacao.descricaoSituacao === DescricaoSituacao.DISPOSITIVO_MODIFICADO) { ret.push(articulacao.projetoNorma.ementa); } From b975bb689d7a729323bbf13d524284180ad0e08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Wed, 29 May 2024 13:24:06 -0300 Subject: [PATCH 15/19] feat refs #896: Filtra parlamentares pela casa de destino. --- src/components/lexml-emenda.component.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index 5b3762b8..c6d3d833 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -158,14 +158,16 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { try { const _response = await fetch(this.lexmlEmendaConfig.urlConsultaParlamentares); const _parlamentares = await _response.json(); - return _parlamentares.map(p => ({ - identificacao: p.id + '', - nome: p.nome, - sexo: p.sexo, - siglaPartido: p.siglaPartido, - siglaUF: p.siglaUF, - siglaCasaLegislativa: p.siglaCasa, - })); + return _parlamentares + .filter(p => this.casaLegislativa === 'CN' || p.siglaCasa === this.casaLegislativa) + .map(p => ({ + identificacao: p.id + '', + nome: p.nome, + sexo: p.sexo, + siglaPartido: p.siglaPartido, + siglaUF: p.siglaUF, + siglaCasaLegislativa: p.siglaCasa, + })); } catch (err) { console.log('Erro inesperado ao carregar lista de parlamentares'); console.log(err); @@ -344,6 +346,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this.resetaEmenda(params); } + this.atualizaListaParlamentares(); this.atualizaListaComissoes(); this.limparAlertas(); @@ -513,6 +516,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } this._lexmlAutoria.autoria = emenda.autoria; + this._lexmlAutoria.casaLegislativa = emenda.colegiadoApreciador.siglaCasaLegislativa; this._lexmlOpcoesImpressao.opcoesImpressao = emenda.opcoesImpressao; this._lexmlJustificativa.setTextoAntesRevisao(emenda.justificativaAntesRevisao); this._lexmlDestino!.colegiadoApreciador = emenda.colegiadoApreciador; @@ -614,7 +618,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { protected firstUpdated(): void { // this.habilitarBotoes(); - setTimeout(() => this.atualizaListaParlamentares(), 0); + // setTimeout(() => this.atualizaListaParlamentares(), 0); // setTimeout(() => this.atualizaListaComissoes(), 0); this._tabsEsquerda?.addEventListener('sl-tab-show', (event: any) => { @@ -625,7 +629,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { badge.pulse = false; } } else if (tabName === 'autoria') { - this.parlamentares.length === 0 && this.atualizaListaParlamentares(); + // this.parlamentares.length === 0 && this.atualizaListaParlamentares(); // this.comissoes?.length === 0 && this.atualizaListaComissoes(); } }); From 9925bd0e1bb915c0134cdba145315d5e93fa4be6 Mon Sep 17 00:00:00 2001 From: Marcos Fragomeni Date: Mon, 17 Jun 2024 17:23:12 -0300 Subject: [PATCH 16/19] =?UTF-8?q?fix:=20corre=C3=A7=C3=A3o=20da=20configur?= =?UTF-8?q?a=C3=A7=C3=A3o=20de=20autoria=20padr=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #869 --- src/components/lexml-emenda.component.ts | 43 +++++++++++++----------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/components/lexml-emenda.component.ts b/src/components/lexml-emenda.component.ts index c6d3d833..09bf5112 100644 --- a/src/components/lexml-emenda.component.ts +++ b/src/components/lexml-emenda.component.ts @@ -40,6 +40,8 @@ import { unsafeHTML } from 'lit-html/directives/unsafe-html.js'; import { DestinoComponent } from './destino/destino.component'; import { errorInicializarEdicaoAction } from '../model/lexml/acao/errorInicializarEdicaoAction'; +type TipoCasaLegislativa = 'SF' | 'CD' | 'CN'; + /** * Parâmetros de inicialização de edição de documento */ @@ -85,7 +87,7 @@ export class LexmlEmendaParametrosEdicao { opcoesImpressaoPadrao?: { imprimirBrasao: boolean; textoCabecalho: string; tamanhoFonte: number }; // Casa legislativa resposavel pela apreciaçao da emenda - casaLegislativa: 'SF' | 'CD' | 'CN' = 'CN'; + casaLegislativa?: TipoCasaLegislativa; } @customElement('lexml-emenda') @@ -109,7 +111,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { private motivo = ''; - private casaLegislativa = 'CN'; + private casaLegislativa: TipoCasaLegislativa = 'CN'; private parlamentaresCarregados = false; private comissoesCarregadas = false; @@ -202,10 +204,6 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { return Promise.resolve([]); } - atualizaListaParlamentares(): void { - this.getParlamentares().then(parlamentares => (this.parlamentares = parlamentares)); - } - atualizaListaComissoes(): void { this.getComissoes(this.casaLegislativa).then(comissoes => (this.comissoes = comissoes)); } @@ -317,7 +315,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { return revisoes; } - inicializarEdicao(params: LexmlEmendaParametrosEdicao): void { + async inicializarEdicao(params: LexmlEmendaParametrosEdicao) { try { this._lexmlEmendaComando.emenda = []; this.modo = params.modo; @@ -338,15 +336,17 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { this._lexmlEta!.inicializarEdicao(this.modo, this.urn, params.projetoNorma, !!params.emenda); } + this.casaLegislativa = this.inicializaCasaLegislativa(getSigla(this.urn), params); + + // Deve ser chamado antes do reseta emenda para garantir a autoria padrão e depois da inicialização da casaLegislativa + this.parlamentares = await this.getParlamentares(); + if (params.emenda) { - this.casaLegislativa = params.emenda.colegiadoApreciador.siglaCasaLegislativa ?? 'CN'; this.setEmenda(params.emenda); } else { - this.casaLegislativa = this.inicializaColegiadoApreciador(params); this.resetaEmenda(params); } - this.atualizaListaParlamentares(); this.atualizaListaComissoes(); this.limparAlertas(); @@ -381,9 +381,11 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } } - private inicializaColegiadoApreciador(params: LexmlEmendaParametrosEdicao): string { - const siglaProposicao = params.emenda?.proposicao.sigla ?? ''; - return ['MPV', 'PDN', 'PRN'].indexOf(siglaProposicao) > -1 ? 'CN' : params.casaLegislativa; + private inicializaCasaLegislativa(siglaProposicao: string, params: LexmlEmendaParametrosEdicao): TipoCasaLegislativa { + if (['MPV', 'PDN', 'PRN'].indexOf(siglaProposicao) > -1) { + return 'CN'; + } + return (params.emenda ? params.emenda.colegiadoApreciador.siglaCasaLegislativa : params.casaLegislativa) || 'CN'; } public trocarModoEdicao(modo: string, motivo = ''): void { @@ -516,7 +518,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { } this._lexmlAutoria.autoria = emenda.autoria; - this._lexmlAutoria.casaLegislativa = emenda.colegiadoApreciador.siglaCasaLegislativa; + this._lexmlAutoria.casaLegislativa = this.casaLegislativa; this._lexmlOpcoesImpressao.opcoesImpressao = emenda.opcoesImpressao; this._lexmlJustificativa.setTextoAntesRevisao(emenda.justificativaAntesRevisao); this._lexmlDestino!.colegiadoApreciador = emenda.colegiadoApreciador; @@ -541,7 +543,7 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { emenda.proposicao = this.montarProposicaoPorUrn(this.urn, params.ementa); emenda.autoria = this.montarAutoriaPadrao(params); emenda.opcoesImpressao = this.montarOpcoesImpressaoPadrao(params); - emenda.colegiadoApreciador.siglaCasaLegislativa = params.casaLegislativa; + emenda.colegiadoApreciador.siglaCasaLegislativa = this.casaLegislativa; this._lexmlEmendaComando.emenda = {}; this.setEmenda(emenda); rootStore.dispatch(limparRevisaoAction.execute()); @@ -549,11 +551,12 @@ export class LexmlEmendaComponent extends connect(rootStore)(LitElement) { private montarAutoriaPadrao(params: LexmlEmendaParametrosEdicao): Autoria { const autoria = new Autoria(); - const autoriaPadrao = params.autoriaPadrao; - const parlamentarAutor = this.parlamentares.find(par => par.identificacao === autoriaPadrao?.identificacao && par.siglaCasaLegislativa === autoriaPadrao?.siglaCasaLegislativa); - - if (parlamentarAutor) { - autoria.parlamentares = [parlamentarAutor]; + if (params.autoriaPadrao?.identificacao) { + const autoriaPadrao = params.autoriaPadrao; + const parlamentarAutor = this.parlamentares.find(par => par.identificacao === autoriaPadrao!.identificacao && par.siglaCasaLegislativa === autoriaPadrao!.siglaCasaLegislativa); + if (parlamentarAutor) { + autoria.parlamentares = [parlamentarAutor]; + } } return autoria; } From 68edea23677660beeeaaa169279e452ae4a9dbfa Mon Sep 17 00:00:00 2001 From: Marcos Fragomeni Date: Mon, 17 Jun 2024 17:55:12 -0300 Subject: [PATCH 17/19] =?UTF-8?q?feat:=20adiciona=20PDN=20e=20PRN=20ao=20v?= =?UTF-8?q?ocabul=C3=A1rio=20de=20URNs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refs #876 --- src/model/lexml/documento/vocabulario.ts | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/model/lexml/documento/vocabulario.ts b/src/model/lexml/documento/vocabulario.ts index 4c37a016..e5daa9c0 100644 --- a/src/model/lexml/documento/vocabulario.ts +++ b/src/model/lexml/documento/vocabulario.ts @@ -149,6 +149,16 @@ export const VOCABULARIO = { descricao: 'Projeto de Decreto Legislativo', genero: 'M', }, + { + urn: 'projeto.decreto.legislativo;pdn', + descricao: 'Projeto de Decreto Legislativo do Congresso Nacional', + genero: 'M', + }, + { + urn: 'projeto.resolucao;prn', + descricao: 'Projeto de Resolução do Congresso Nacional', + genero: 'M', + }, { urn: 'substitutivo.projeto.lei.senado;scd', descricao: 'Substitutivo da Câmara dos Deputados', @@ -221,6 +231,16 @@ export const VOCABULARIO = { urnAutoridade: 'senado.federal', urnTipoDocumento: 'medida.provisoria;mpv', }, + { + sigla: 'PDN', + urnAutoridade: 'congresso.nacional', + urnTipoDocumento: 'projeto.decreto.legislativo;pdn', + }, + { + sigla: 'PRN', + urnAutoridade: 'congresso.nacional', + urnTipoDocumento: 'projeto.resolucao;prn', + }, ], siglas: [ { @@ -253,6 +273,16 @@ export const VOCABULARIO = { urnTipoDocumento: 'projeto.lei', sigla: 'PLC', }, + { + urnAutoridade: 'congresso.nacional', + urnTipoDocumento: 'projeto.decreto.legislativo;pdn', + sigla: 'PDN', + }, + { + urnAutoridade: 'congresso.nacional', + urnTipoDocumento: 'projeto.resolucao;prn', + sigla: 'PRN', + }, ], atalhosUrn: [ { From 83228336d7c489b78e20dfd905061d9caef69f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 18 Jun 2024 11:35:44 -0300 Subject: [PATCH 18/19] =?UTF-8?q?fix:=20Corre=C3=A7=C3=A3o=20na=20defini?= =?UTF-8?q?=C3=A7=C3=A3o=20da=20casa=20legislativa=20ao=20usar=20colegiado?= =?UTF-8?q?=20plen=C3=A1rio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/destino/destino.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/destino/destino.component.ts b/src/components/destino/destino.component.ts index 5a63bbd1..b96ebc5e 100644 --- a/src/components/destino/destino.component.ts +++ b/src/components/destino/destino.component.ts @@ -273,7 +273,6 @@ export class DestinoComponent extends LitElement { private ajustarTipoColegiadoPlenario(): void { this._autocomplete.value = ''; this._colegiadoApreciador.siglaComissao = ''; - this._colegiadoApreciador.siglaCasaLegislativa = 'SF'; this.removerAlertaErroComissao(); } } From 31453c8cc1fb00ee930cefaf80304423cadccb90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Matos?= Date: Tue, 18 Jun 2024 17:12:13 -0300 Subject: [PATCH 19/19] =?UTF-8?q?feat=20refs=20#907:=20Implementa=20barra?= =?UTF-8?q?=20de=20rolagem=20no=20componente=20de=20destino=20ao=20selecio?= =?UTF-8?q?nar=20uma=20comiss=C3=A3o.=20Alterando=20mock=20de=20comiss?= =?UTF-8?q?=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/components/demoview.ts | 2 +- src/components/editor/autocomplete-async.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/components/demoview.ts b/demo/components/demoview.ts index aacb66f8..3dc32f65 100644 --- a/demo/components/demoview.ts +++ b/demo/components/demoview.ts @@ -89,7 +89,7 @@ export class DemoView extends LitElement { constructor() { super(); this.emendaConfig = new LexmlEmendaConfig(); - this.emendaConfig.urlComissoes = 'https://run.mocky.io/v3/9fc979a9-1fa0-4cd1-abd0-e166277ef3d6'; + this.emendaConfig.urlComissoes = 'https://run.mocky.io/v3/fee83f1d-e204-4746-adf6-c0f617156a6a'; } createRenderRoot(): LitElement { diff --git a/src/components/editor/autocomplete-async.ts b/src/components/editor/autocomplete-async.ts index 18205cf6..0be8485d 100644 --- a/src/components/editor/autocomplete-async.ts +++ b/src/components/editor/autocomplete-async.ts @@ -166,6 +166,7 @@ export class AutocompleteAsync extends LitElement { firstUpdated(): void { this._suggestionEl = this.shadowRoot!.getElementById('suggestions'); + this._suggestionEl.style = 'max-height: 250px; overflow: scroll'; this._suggestionEl.style.width = `${this.contentElement.getBoundingClientRect().width}px`; this._bound.onKeyDown = this._handleKeyDown.bind(this);