arquitetura

Arquitetura frontend de sistemas em angular da universidade federal de Goiás.

Usage no npm install needed!

<script type="module">
  import arquitetura from 'https://cdn.skypack.dev/arquitetura';
</script>

README

Arquitetura Angular na UFG

Arquitetura frontend de sistemas em angular da universidade federal de Goiás.

Arquitetura

Este projeto é uma biblioteca de componentes com design e métodos reutilizaveis de front-end em Angular.

Instalação

Instale o pacote arquitetura via npm:

$ npm install --save arquitetura

Infelizmente, o npm não permite um pacote conter dependências de terceiros, desta forma, é necessário instalar os pacotes abaixo, se precefir, copie o trecho abaixo e cole em seu package.json:

"dependencies": {
    "@angular/animations": "~8.1.1",
    "@angular/cdk": "^8.1.1",
    "@angular/common": "^8.1.1",
    "@angular/core": "^8.1.1",
    "@angular/flex-layout": "^8.0.0-beta.26",
    "@angular/material": "^8.1.1",
    "hammerjs": "^2.0.8"
}

Configuração

Inclua os seguintes atributos no arquivos do ambiente: (src/environments/environment.json):

api_url: '<API_URL>' //Example: https://mybackend.com

Importe o módulo da arquitetura no app.module.ts:

import { ArquiteturaModule } from 'arquitetura';

Declare o uso do módulo, passando como parâmetro o arquivo de environment:

ArquiteturaModule.forRoot(environment)

Adicione o componente lib-arquitetura no arquivo app.component.html:

<lib-arquitetura [titulo]="titulo" [menuPessoal]="menuPessoal" [login]="login" [sistema]="sistema" [perfilPadrao]="perfilPadrao">

Atributos

Atributo Descrição Tipo
titulo Título do sistema string
menuPessoal Menu de configurações do usuário logado (Menu superior direito) MenuPessoal
login Usuário logado string
sistema Código do sistema no SAS string
perfilPadrao Perfil padrão do sistema no SAS string

Exemplo de app-component.ts:

export class AppComponent implements OnInit {
  title = 'sicad-app';

  titulo: string = "Aplicação";
  menuPessoal: MenuPessoal[] = [];

  login: string = "ricardoborges";
  sistema: string = "SICAD";
  perfilPadrao: string = "SICAD_DEFAULT";

  ngOnInit() {
    this.menuPessoal.push(new MenuPessoal('Perfil', 'person', MenuPessoal.ICON_MATERIAL, '/#/'));
    this.menuPessoal.push(new MenuPessoal('Configurações', 'settings', MenuPessoal.ICON_MATERIAL, '/#/'));
    this.menuPessoal.push(new MenuPessoal('Sair', 'power_settings_new', MenuPessoal.ICON_MATERIAL, '/#/'));
  }
}

Arquivos Staticos

Importar arquivos estaticos no angular.json:

"styles": [
  "./node_modules/arquitetura/style/_styles.scss",
  "./node_modules/arquitetura/style/themes.scss",
  .
  .
  .
],

Componentes

Alert (html)

<arquitetura-alert [displayAlert]="displayAlert" [tipo]="tipo" [msgDestacada]="msgDestacada" [msg]="msg">
</arquitetura-alert>
Parâmetros Descrição Tipo Obrigatório
displayAlert Boolean que determina se será ou não exibido o alerta boolean Sim
tipo Define o tipo de alerta a ser exibido string Sim
tipo = erro #f2dede - -
tipo = ajuda #e6e6e6 - -
tipo = informacao #d9edf7 - -
tipo = sucesso #dff0d8 - -
tipo = alerta #faf4d1 - -
msgDestacada Texto inicial em destaque string Não
msg Texto descritivo string Sim

Alert (typescript)

  displayAlert: boolean;
  
  constructor(
    private emissorEventService: EmissorEventService
  ) { }
  
  ngOnInit() {
    this.emissorEventEmitter = this.emissorEventService.changeEmitted$.subscribe(
      resp => this.verificarEvento(resp)
    );
  }
  
  ngOnDestroy() {
    this.emissorEventEmitter.unsubscribe();
  }
  
  verificarEvento(res: Evento) {
    if (res.acao === 'fecharAlerta' && res.key === 'false') {
      this.displayAlert = false;
    }
  }

Botão Ação (html)

<arquitetura-botao-acao tipo="tipo"></arquitetura-botao-acao>
Parâmetros Descrição Tipo Obrigatório
tipo Define o tipo de alerta a ser exibido string Sim
tipo = avancar normal = #28a745 hover = #1e7e34 -
tipo = buscar normal = #007bff hover = #0062cc -
tipo = editar normal = #ff7f00 hover = #ff5400 -
tipo = salvar normal = #28a745 hover = #1e7e34 -
tipo = voltar normal = #6c757d hover = #545b62 -
tipo = cancelar normal = #dc3545 hover = #bd2130 -

Botão Ação (typescript)

  emissorEventEmitter: Subscription;

  constructor(
    private emissorEventService: EmissorEventService
  ) { }

  ngOnInit() {
    this.emissorEventEmitter = this.emissorEventService.changeEmitted$.subscribe(
      resp => this.verificarEvento(resp)
    );
  }

  ngOnDestroy() {
    this.emissorEventEmitter.unsubscribe();
  }

  verificarEvento(res: Evento) {
    if (res.acao === 'botaoClicado' && res.key === 'tipo') {
      this.onTipo();
    }
  }

  onTipo() { }
OBS: Não é necessário implementar as ação de 'verificarEvento' para o botão cancelar.

Input (html)

<arquitetura-input matPrefix="{{matPrefix}}" type="type" fControlName="formControlName" value="value"
   placeholder="placeholder" readonly="readonly" matSuffix="{{matSuffix}}" matHintStart="matHintStart"
   matHintEnd="matHintEnd" [displayError]="validateFieldControls('formControlName')" msgError="{{msgError}}"
   fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="33.33" fxFlex.xl="33.33">
</arquitetura-input>
Parâmetros Descrição Tipo Obrigatório
matPrefix Texto ou icone fixado no inicio da parte digitável do campo string Não
type Define o tipo de entrada de dados do campo string Sim
fControlName Nome dado ao elemento de controle do formulário, responsável por sincronizar um FormControl em um FormGroup string Sim
value Valor a ser inserido no campo string Não
placeholder Texto/Rótulo da informação esperada pelo campo string Sim
readonly Define o campo como somente leitura boolean Não
matSuffix Texto ou icone fixado no fim da parte digitável do campo string Não
matHintStart Texto informativo fixado no inicio da parte inferior do campo string Não
matHintEnd Texto informativo fixado no fim da parte inferior do campo string Não
displayError Boolean que determina se será ou não exibido o erro boolean Não
msgError Mensagem de erro a ser exibido para o campo string Não

Input (typescript)

  formulario: FormGroup;
  fieldErrorDescription: string;
  fieldErrorValue: string;
  
  constructor(
    private formBuilder: FormBuilder,
    private fieldValidationService: FieldValidationService
  ) { }
  
  ngOnInit() {
    this.formulario = this.formBuilder.group({
      control: [null, []]
    });
  }
  
  validateFieldControls(campo: string) {
    const retorno = this.fieldValidationService.validateFieldControls(this.formulario.get(campo));
    this.fieldErrorDescription = retorno[0];
    this.fieldErrorValue = retorno[1];
    return retorno[2];
  }



Author

👤 Ricardo Borges

👤 Max Veloso