Tutorial PrimeVue Nuxt

Tutorial - Configurando PrimeVue em um projeto Nuxt

Data de Publicação: 29 de setembro de 2021

NuxtJS

PrimeVue é uma biblioteca open source que fornece vários componentes de UI para VueJS. Neste post será explicado passo a passo como configurá-la em um projeto NuxtJS.

Introdução

A medida que a web e os browsers evoluem a complexidade dos web apps aumentam, visto que os componentes tendem a ser cada vez mais interativos. Sendo assim, surgiram várias bibliotecas de componentes que absorvem esta responsabilidade permitindo que os desenvolvedores mantenham o foco na regra de negócio.

PrimeVue

A PrimeVue é uma biblioteca open source desenvolvida pela PrimeTek Informatics que fornece vários componentes de UI para VueJS. Também existem variações desta biblioteca para outros frameworks de front-end como React e Angular.

Instalação

Como o Nuxt é escrito sobre a arquitetura do Vuejs na versão 2 precisamos instalar a versão da PrimeVue correspondente, além disso é necessário instalar a biblioteca primeicons para que todos os componentes funcionem corretamente. Para fazer a instalação abra o terminal no diretório do seu projeto e execute o comando abaixo:

npm install primeicons primevue@^2.6.0 --save

Configuração

dentro do diretório /plugins crie o arquivo primevue-locale-dictionary.js e também primevue.js sendo que o primeiro será utilizado para configurar o idioma dos componentes e o segundo conterá todos os imports e configurações. Vale ressaltar que se você estiver utilizando typescript em seu projeto pode utilizar a extensão .ts sem problemas.

export const locale = {
  startsWith: 'Começa com',
  contains: 'Contém',
  notContains: 'Não contém',
  endsWith: 'Termina com',
  equals: 'Igual',
  notEquals: 'Diferente de',
  noFilter: 'Sem Filtros',
  lt: 'Menor que',
  lte: 'Menor ou igual a',
  gt: 'Maior que',
  gte: 'Maior ou igual a',
  dateIs: 'Data igual a',
  dateIsNot: 'Data diferente de',
  dateBefore: 'Data anterior a',
  dateAfter: 'Data posterior a',
  clear: 'Limpar',
  apply: 'Aplicar',
  matchAll: 'Corresponde a todos',
  matchAny: 'Corresponde a algum',
  addRule: 'Adicionar regra',
  removeRule: 'Remover regra',
  accept: 'Sim',
  reject: 'Não',
  choose: 'Selecione',
  upload: 'Upload',
  cancel: 'Cancelar',
  dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
  dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],
  dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],
  monthNames: [
    'Janeiro',
    'Fevereiro',
    'Março',
    'Abriu',
    'Maio',
    'Junho',
    'Julho',
    'Agosto',
    'Setembro',
    'Outubro',
    'Novembro',
    'Dezembro',
  ],
  monthNamesShort: [
    'Jan',
    'Fev',
    'Mar',
    'Abr',
    'Mai',
    'Jun',
    'Jul',
    'Ago',
    'Set',
    'Out',
    'Nov',
    'Dez',
  ],
  today: 'Hoje',
  weekHeader: 'Wk',
  firstDayOfWeek: 1,
  dateFormat: 'dd/mm/yyyy',
  weak: 'Fraco',
  medium: 'Médio',
  strong: 'Forte',
  passwordPrompt: 'Informe a Senha',
  emptyFilterMessage: 'Nenhum resultado encontrado',
  emptyMessage: 'Não há informações',
}
import Vue from 'vue'
import PrimeVue from 'primevue/config'

import Card from 'primevue/card'
import InputText from 'primevue/inputtext'
import Button from 'primevue/button'
import { locale } from './primevue-locale-dictionary'

import 'primevue/resources/themes/saga-blue/theme.css'
import 'primevue/resources/primevue.min.css'
import 'primeicons/primeicons.css'

Vue.use(PrimeVue, { locale })

Vue.component('Card', Card)
Vue.component('InputText', InputText)
Vue.component('Button', Button)

A documentação do PrimeVue recomenda que os componentes sejam importados a medida que forem utilizados no projeto e registrados globalmente. Além dos componentes é preciso importar também os arquivos de css base e o css do tema que será utilizado.

Agora abra o arquivo nuxt.config.js e adicione o arquivo primevue.js na lista de plugins:

...
plugins: ['@/plugins/primevue']
...

Para evitar que ocorra erros inesperados ao executar os testes unitários abra o arquivo jest.config.js e adicione a linha de código abaixo:

transformIgnorePatterns: ['<rootDir>/node_modules/(?!primevue/.*)']

Este ajuste é necessário porque os componentes da biblioteca PrimeVue ficam separados em arquivos .vue e o Jest não consegue compilá-los. Então caso você precise escrever testes para um componente seu que utiliza um componente da PrimeVue é preciso informar ao Jest que ele deve ignorar tudo que vier de /node_modules/primevue

disclaimer

A biblioteca PrimeVue também pode ser instalada através de um módulo do nuxt que dispensa configurações adicionais, porém tive alguns problemas na hora de escrever testes unitários utilizando este módulo.

E assim chegamos ao fim deste post, espero que você tenha gostado ;)