<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://rochabianca.github.io/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rochabianca.github.io/blog/" rel="alternate" type="text/html" /><updated>2022-05-24T14:56:34+00:00</updated><id>https://rochabianca.github.io/blog/feed.xml</id><title type="html">Bianca Rocha</title><subtitle>Desenvolvedora Frontend, apaixonada por design</subtitle><entry><title type="html">Como monitorar graphql requests no Cypress quando o request é um GET</title><link href="https://rochabianca.github.io/blog/como-monitorar-graphql-requests-no-cypress-quando-request-get" rel="alternate" type="text/html" title="Como monitorar graphql requests no Cypress quando o request é um GET" /><published>2022-05-24T11:48:00+00:00</published><updated>2022-05-24T11:48:00+00:00</updated><id>https://rochabianca.github.io/blog/como-monitorar-graphql-requests-no-cypress-quando-request-get</id><content type="html" xml:base="https://rochabianca.github.io/blog/como-monitorar-graphql-requests-no-cypress-quando-request-get">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/como-monitorar-graphql-requests-no-cypress-quando-request-get/asset-1.jpeg&quot; alt=&quot;Uma IDLE mostrando códigos de testes&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Recentemente aprendi uma ferramenta muito útil no Cypress, que é o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cy.intercept&lt;/code&gt; . Ele me permite, entre outras coisas interceptar requests feitas, e esperar por elas antes de fazer uma ação. É bem mais sofisticado que usar um cy.wait(1000) e ajuda bastante quando você tem uma request em particular que demora muito para terminar.&lt;/p&gt;

&lt;!--more--&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cy.intercept('POST', `${Cypress.env('api')}/login`).as('auth')
cy.wait('@auth')
// Ações que só podem ser executadas depois da request auth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Só que quando você usa GraphQL as coisas ficam um pouco mais complicadas. Felizmente o próprio Cypress tem um guia muito bom sobre como implementar o intercept em GraphQL quando a request é um POST, que vou deixar &lt;a href=&quot;https://docs.cypress.io/guides/testing-strategies/working-with-graphql&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Só que, para meu azar, o modo que as requests eram feitas no projeto que estava trabalhando utilizava GET em vez de POST e isso fazia com que o guia acima não me ajudasse muito. Então, após alguns dias de tudo dando errado, fui obrigada a tomar medidas desesperadas, porém efetivas: Usar regex.&lt;/p&gt;

&lt;p&gt;A lógica era simples: minha api graphql era sempre &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://site-da-api.com.br/graphql&lt;/code&gt; e como o request era um GET, o nome da query iria sempre aparecer em algum lugar do request. Então utilizei o regex para detectar as ocorrências de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;graphql&lt;/code&gt; e o nome da minha query (armazenada em uma variável) e, por fim, era só dar um alias para o comando, assim como é feito em chamadas rest, e criar um comando personalizado para facilitar o uso. Ficou assim no final:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Cypress.Commands.add('interceptGraphqlGET', (query) =&amp;gt; {
	const regex = new RegExp(
    '\\bgraphql\\b.*\\b' + query + '\\b' // Equivalente à /\bgraphql\b.*\bQueryExemplo\b/
  )
  cy.intercept(regex).as(`gql${query}`)
})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Aí se eu quiser interceptar e esperar uma chamada GET em qualquer local dos meus testes vai ser só chamar:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cy.interceptGraphqlGET('QueryExemplo')
cy.wait('@gqlQueryExemplo')
// faça alguma coisa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;E aí, curtiu a solução? Ou tem uma muito melhor para mostrar? Comenta aí o que achou e até a próxima :D&lt;/p&gt;</content><author><name>Bianca Rocha</name></author><category term="Dicas" /><category term="Cypress" /><category term="GraphQL" /><category term="GET" /><summary type="html">Recentemente aprendi uma ferramenta muito útil no Cypress, que é o cy.intercept . Ele me permite, entre outras coisas interceptar requests feitas, e esperar por elas antes de fazer uma ação. É bem mais sofisticado que usar um cy.wait(1000) e ajuda bastante quando você tem uma request em particular que demora muito para terminar.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/como-monitorar-graphql-requests-no-cypress-quando-request-get/asset-1.jpeg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/como-monitorar-graphql-requests-no-cypress-quando-request-get/asset-1.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Um jeito simples de simular erro de requests</title><link href="https://rochabianca.github.io/blog/um-jeito-simples-de-simular-erro-requests" rel="alternate" type="text/html" title="Um jeito simples de simular erro de requests" /><published>2022-05-05T15:00:00+00:00</published><updated>2022-05-05T15:00:00+00:00</updated><id>https://rochabianca.github.io/blog/um-jeito-simples-de-simular-erro-requests</id><content type="html" xml:base="https://rochabianca.github.io/blog/um-jeito-simples-de-simular-erro-requests">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-1.jpeg&quot; alt=&quot;Uma página mostrando um aviso de erro de autenticação com um link embaixo para tentar logar novamente&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Esses dias estava quebrando a cabeça em como simular um request falho em uma feature que já havia implementado e acabei topando com uma dica bem legal: Você sabia que dá para bloquear requests no Inspect do Chrome (versão 63 para cima)? Achei esse recurso muito útil, e queria mostrar pra vocês. Vem aqui que te explico como fazer.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Existem 2 modos de iniciar, no primeiro você vai:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;abrir o inspect&lt;/li&gt;
  &lt;li&gt;ir para a aba de network&lt;/li&gt;
  &lt;li&gt;selecionar um request que você quer bloquear&lt;/li&gt;
  &lt;li&gt;clicar com o botão direito neste request&lt;/li&gt;
  &lt;li&gt;selecionar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;block request url&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;e pronto, seu request estará bloqueado e a aba &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;network request blocking&lt;/code&gt;  será aberta, mostrando todos os requests bloqueados da página.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-2.png&quot; alt=&quot;tela do Inspect mostrando a aba Network e a opção &amp;quot;Block request URL&amp;quot; selecionada em um dos requests&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-3.png&quot; alt=&quot;Nova aba Network request blocking&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Um outro modo de chegar nesta aba é, também na aba Network, na barra de opções, ao lado da opção “no trottling” você verá um ícone de wifi, que vai te levar as opções avançadas de wifi, ai é só selecionar a aba “Network request blocking” e lá adicionar o request que deseja bloquear.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-4.png&quot; alt=&quot;Aba network, barra de opções mostrando o ícone de wifi levemente mais brilhante&quot; /&gt;&lt;/p&gt;

&lt;p&gt;E é isso, quis fazer um post mais rápido com uma dica que achei deveras interessante, com certeza vou utiliza-la para testar fluxos de erro sem precisar mockar requisições ou ficar devolvendo promise.reject. Como você vai utilizar essa dica?&lt;/p&gt;</content><author><name>Bianca Rocha</name></author><category term="Dicas" /><category term="Google Webtools" /><summary type="html">Esses dias estava quebrando a cabeça em como simular um request falho em uma feature que já havia implementado e acabei topando com uma dica bem legal: Você sabia que dá para bloquear requests no Inspect do Chrome (versão 63 para cima)? Achei esse recurso muito útil, e queria mostrar pra vocês. Vem aqui que te explico como fazer.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-1.jpeg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/um-jeito-simples-de-simular-erro-requests/asset-1.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Facilite sua vida, crie Snippets</title><link href="https://rochabianca.github.io/blog/facilite-sua-vida-com-snippets" rel="alternate" type="text/html" title="Facilite sua vida, crie Snippets" /><published>2022-03-21T16:27:00+00:00</published><updated>2022-03-21T16:27:00+00:00</updated><id>https://rochabianca.github.io/blog/facilite-sua-vida-com-snippets</id><content type="html" xml:base="https://rochabianca.github.io/blog/facilite-sua-vida-com-snippets">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/facilite-sua-vida-com-snippets/asset-1.jpeg&quot; alt=&quot;Um computador sobre uma mesa de madeira em que um pé está apoiado&quot; /&gt;&lt;/p&gt;

&lt;p&gt;No decorrer da sua carreira você eventualmente vai encontrar com pedaços de códigos que são repetidos várias e várias vezes, mas que são específicos a sua empresa ou seu projeto.&lt;/p&gt;

&lt;p&gt;Um exemplo disso seria um componente de ícones, onde você teria o componente base, com as tags svg iniciais além de algumas propriedades e o componente que definirá qual ícone o componente base vai compilar. O componente de ícone tem um template, com seu html, propriedades e estilo, mas o conteúdo dele será sempre diferente. A questão que fica é: como fazer com que a criação de novos componentes seguindo esse template não se torne um tedioso copia e cola?&lt;/p&gt;

&lt;p&gt;É aqui que entram os snippets.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Snippets são blocos de códigos que podem ser acessados por um atalho no seu editor de código. Por um exemplo, quando você digita &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;!&lt;/code&gt;  no seu arquivo html e vê um atalho para criar toda uma estrutura html no seu arquivo, aquilo é um snippet&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/facilite-sua-vida-com-snippets/asset-2.png&quot; alt=&quot;Um arquivo em html no vscode com ! digitado, mostrando os atalhos do mencionado acima&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Você também pode criar snippets customizados, para isso basta ir (no vscode) em &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Preferences &amp;gt; User Snippets&lt;/code&gt; e então selecionar a linguagem que você quer criar seus snippets&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/facilite-sua-vida-com-snippets/asset-3.png&quot; alt=&quot;Tela de snippets, mostrando todas as linguagens disponíveis para a criação de snippets&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A partir daí é só seguir o template que vai aparecer nos comentários do arquivo e criar seus próprios snippets. Um exemplo disso é &lt;a href=&quot;https://gist.github.com/rochabianca/2c39f611b28dfb51f0fb3ff483afbf51&quot; target=&quot;\_blank&quot;&gt;um snippet que criei a um tempo atrás&lt;/a&gt; para trazer de volta o scaffold nos arquivos vue, uma vez que o mesmo havia sido retirado (renomeado na verdade) do Vetur:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
	&quot;bring back the scaffold to vue files&quot;: {
		&quot;prefix&quot;: &quot;scaffold&quot;,
		&quot;body&quot;: [
			&quot;&amp;lt;template&amp;gt;&quot;,
			&quot;  &amp;lt;div&amp;gt;$TM_FILENAME_BASE&amp;lt;/div&amp;gt;&quot;,
			&quot;&amp;lt;/template&amp;gt;&quot;,
			&quot;&quot;,
			&quot;&amp;lt;script&amp;gt;&quot;,
			&quot;export default {&quot;,
			&quot;  name: '$TM_FILENAME_BASE',&quot;,
			&quot;};&quot;,
			&quot;&amp;lt;/script&amp;gt;&quot;,
			&quot;&quot;,
			&quot;&amp;lt;style&amp;gt;&quot;,
			&quot;&amp;lt;/style&amp;gt;&quot;,
			&quot;&quot;
		],
		&quot;description&quot;: &quot;bring back the scaffold to vue files&quot;
	}
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Para utilizar esse atalho agora você só precisa digitar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;scaffold&lt;/code&gt; no seu arquivo vue que ele deve aparecer.&lt;/p&gt;

&lt;p&gt;O &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$TM_FILENAME_BASE&lt;/code&gt;  é uma variável do Vscode que me devolve o nome do arquivo sem sua extensão, por exemplo, se o nome do componente é “Exemplo.vue” ele me retorna apenas “Exemplo”. Você pode ver a lista de variáveis do vscode &lt;a href=&quot;https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables&quot; target=&quot;\_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O ideal é que você crie um snippet sempre que notar que está copiando e colando muito um trecho de código. Uma outra dica muito boa é que você pode criar snippets específicos para o projeto em que está trabalhando, assim tanto você quanto seus colegas podem ter acesso aos atalhos.&lt;/p&gt;

&lt;p&gt;Para isso, você precisa criar, dentro da sua pasta &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vscode&lt;/code&gt; (se ela não existir você pode cria-la) um arquivo com o nome dos arquivos nos quais o snippet vai aparecer com a extensão &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.code-snippets&lt;/code&gt;  (por exemplo arquivos vue seriam nomeados &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vue.code-snippets&lt;/code&gt; , arquivos javascript &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;javascript.code-snippets&lt;/code&gt;  e por ai vai). Lá você pode criar seu snippet como demostrado acima e ele vai funcionar para todas as pessoas que forem mexer no projeto e estiverem utilizando o vscode, facilitando a sua vida e a de quem mais trabalhar com você 😀&lt;/p&gt;

&lt;p&gt;Agora, para fechar com chave de ouro, é bom documentar os atalhos do projeto e avisar seus colegas sobre os novos atalhos, assim eles também tem a vida facilitada e vocês tem um código mais padrão e documentado.&lt;/p&gt;</content><author><name>Bianca Rocha</name></author><category term="Dicas" /><category term="Vscode" /><summary type="html">No decorrer da sua carreira você eventualmente vai encontrar com pedaços de códigos que são repetidos várias e várias vezes, mas que são específicos a sua empresa ou seu projeto. Um exemplo disso seria um componente de ícones, onde você teria o componente base, com as tags svg iniciais além de algumas propriedades e o componente que definirá qual ícone o componente base vai compilar. O componente de ícone tem um template, com seu html, propriedades e estilo, mas o conteúdo dele será sempre diferente. A questão que fica é: como fazer com que a criação de novos componentes seguindo esse template não se torne um tedioso copia e cola? É aqui que entram os snippets.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/facilite-sua-vida-com-snippets/asset-1.jpeg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/facilite-sua-vida-com-snippets/asset-1.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Criando Validações customizadas no Vee-Validate</title><link href="https://rochabianca.github.io/blog/criando-validacoes-customizadas-vee-validate" rel="alternate" type="text/html" title="Criando Validações customizadas no Vee-Validate" /><published>2022-01-11T14:51:00+00:00</published><updated>2022-01-11T14:51:00+00:00</updated><id>https://rochabianca.github.io/blog/criando-validacoes-customizadas-vee-validate</id><content type="html" xml:base="https://rochabianca.github.io/blog/criando-validacoes-customizadas-vee-validate">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/criando-validacoes-customizadas-vee-validate/asset-1.jpeg&quot; alt=&quot;Uma pessoa digitando em um macbook&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para você que usa o VeeValidate, mas precisa de validações mais específicas do que as disponíveis pelo framework (cof cof…. validação com moedas…. cof cof).&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;A primeira coisa que deve ser feita é criar uma nova pasta em src.Inicialmente essa pasta vai ter 2 arquivos:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- src
  - validadoresCustomizados
    - index.js
    - validacaoCustom.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Por enquanto vamos ignorar o index.js e focar no segundo arquivo, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;validacaoCustom.js&lt;/code&gt; é nele que iremos criar nossa primeira validação. Começaremos criando uma validação que verifica se certo valor, no formato &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;R$ XX,XX&lt;/code&gt; é positivo ou não:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// src/validadoresCustomizados/validacaoCustom.js

const ehPositivo = {
    getMessage: field =&amp;gt; 'O campo ' + field + 'deve ser positivo',
    validate (value) {
        const valorFormatado = value.replace('R$ ', '').replace(',', '.')
        const validacao = +valorFormatado &amp;gt; 0
        return validacao
    }
}

export default ehPositivo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Okay, mas o que exatamente faz esse código funcionar?&lt;/p&gt;

&lt;p&gt;Basicamente, para que o VeeValidate reconheça sua regra, ela precisa seguir um certo padrão. O padrão que estou mostrando é a forma em objeto, que pode ser vista &lt;a href=&quot;https://vee-validate.logaretm.com/v2/guide/custom-rules.html#function-form&quot; target=&quot;\_blank&quot;&gt;aqui&lt;/a&gt; mas que consiste em um objeto com 2 funções dentro:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getMessage&lt;/code&gt; , que retorna a mensagem que será exibida caso a validação falhe&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;validate&lt;/code&gt; que é onde a validação ocorre e obrigatoriamente deve retornar um booleano ou uma promessa que resulta em um booleano.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso você queira utilizar um parâmetro para fazer sua validação, como por exemplo, saber se um valor é menor ou maior que um certo número, basta utilizar os args:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// src/validadoresCustomizados/ehMaiorQue.js

const ehMaiorQue = {
    getMessage: (field, args) =&amp;gt; 'O campo ' + field + 'deve ser maior que' + args,
    validate (value, args) {
        const validacao = value &amp;gt; args
        return validacao
    }
}

export default ehMaiorQue
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Beleza, mas como eu vou importar esse código nas minhas regras?&lt;/p&gt;

&lt;p&gt;Bom, antes disso vamos voltar ao index.js e fazer lá a importação do nosso objeto, para manter nosso código mais organizado e facilitar a adição de novas regras no futuro:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// src/validadoresCustomizados/index.js

import { Validator } from 'vee-validate'
import ehPositivo from './validacaoCustom'
import ehMaiorQue from './ehMaiorQue'

Validator.extend('eh_positivo', ehPositivo)
Validator.extend('eh_maior_que', ehMaiorQue)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No código acima a função &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Validator.extend&lt;/code&gt; é a responsável por adicionar a regra que criamos as regras disponíveis por padrão. Agora sim, está tudo pronto para importarmos.&lt;/p&gt;

&lt;p&gt;A importação é feita no local onde você adiciona o vee-validate no vue. Pode ser no main.js, ou em um arquivo específico apenas para plugins. Lá você precisa apenas importar o index.js que acabamos de criar que a validação já deve estar disponível para você:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// src/main.js

import VeeValidate from 'vee-validate'
import '@/validadoresCustomizados/index.js'

...

export default (Vue) =&amp;gt; {
    Vue.use(VeeValidate),
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Por fim, a validação estará disponível e pode ser utilizada assim como quaisquer outras validações no vee-validate:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// ComponenteQualquer.vue

&amp;lt;div class=&quot;form-group&quot; :class=&quot;{ 'has-error': errors.has('eh_positivo') }&quot;&amp;gt;
  &amp;lt;label class=&quot;control-label&quot; for=&quot;total&quot;&amp;gt;Total&amp;lt;/label&amp;gt;

  &amp;lt;!-- Input com a nossa validação customizada --&amp;gt;
  &amp;lt;input
    name=&quot;total&quot;
    type=&quot;text&quot;
    mask=&quot;R$ XX,XX&quot;
    class=&quot;form-control&quot;
    id=&quot;total&quot;
    placeholder=&quot;Total&quot;
    v-validate
    data-rules=&quot;required|eh_positivo&quot;
   /&amp;gt;
  &amp;lt;!-- Fim do input com a nossa validação customizada --&amp;gt;

  &amp;lt;span v-show=&quot;errors.has('eh_positivo')&quot; class=&quot;help-block&quot;&amp;gt;
    
  &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;!-- Validação com parametros --&amp;gt;
&amp;lt;div class=&quot;form-group&quot; :class=&quot;{ 'has-error': errors.has('eh_maior_que') }&quot;&amp;gt;
  &amp;lt;label class=&quot;control-label&quot; for=&quot;total&quot;&amp;gt;Total&amp;lt;/label&amp;gt;

  &amp;lt;!-- Input com a nossa validação customizada --&amp;gt;
  &amp;lt;input
    name=&quot;total&quot;
    type=&quot;number&quot;
    class=&quot;form-control&quot;
    id=&quot;total&quot;
    placeholder=&quot;Total&quot;
    v-validate
    data-rules=&quot;required|eh_maior_que:1&quot;
   /&amp;gt;
  &amp;lt;!-- Fim do input com a nossa validação customizada --&amp;gt;

  &amp;lt;span v-show=&quot;errors.has('eh_maior_que')&quot; class=&quot;help-block&quot;&amp;gt;
    
  &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No mais acho que é isso, espero que tenham achado esse post útil, até a próxima :D&lt;/p&gt;

&lt;p&gt;Fontes que me ajudaram a produzir esse texto:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zz7d0XLsl08&amp;amp;t=65s&amp;amp;ab_channel=Poorgrammer&quot; target=&quot;\_blank&quot;&gt;Esse vídeo do canal Poorgramer que mostra um exemplo prático de como fazer uma regra customizada&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://vee-validate.logaretm.com/v2/guide/custom-rules.html&quot; target=&quot;\_blank&quot;&gt;A documentação do Vee Validate para custom rules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name>Bianca Rocha</name></author><category term="Dicas" /><category term="Vuejs" /><category term="VeeValidate" /><summary type="html">Para você que usa o VeeValidate, mas precisa de validações mais específicas do que as disponíveis pelo framework (cof cof…. validação com moedas…. cof cof).</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/criando-validacoes-customizadas-vee-validate/asset-1.jpeg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/criando-validacoes-customizadas-vee-validate/asset-1.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Como cancelar requests ao digitar na barra de pesquisa</title><link href="https://rochabianca.github.io/blog/cancelando-requests-vue" rel="alternate" type="text/html" title="Como cancelar requests ao digitar na barra de pesquisa" /><published>2021-05-20T16:15:00+00:00</published><updated>2021-05-20T16:15:00+00:00</updated><id>https://rochabianca.github.io/blog/cancelando-requests-vue</id><content type="html" xml:base="https://rochabianca.github.io/blog/cancelando-requests-vue">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/cancelando-requests-vue/asset-1.png&quot; alt=&quot;Parte de network do inspecionar do chrome mostrando vários requests 'search' cancelados e um com status 200&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Vamos lá, você está fazendo um input de pesquisa que vai atualizar a cada palavra digitada e quer cancelar o request anterior quando uma nova palavra for digitada, assim não sobrecarregando seu backend? Pois eu tenho a solução! (talvez não seja a melhooor solução, mas é o que achei)&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;O código a seguir está em Vue, mas acho que se você trabalha com React não vai ser nada muito diferente (na verdade tem um artigo melhor que o meu explicando como fazer em react, então se você entende inglês da uma olhada &lt;a href=&quot;https://www.codingdeft.com/posts/axios-cancel-previous-request-react/&quot; target=&quot;\_blank&quot;&gt;aqui&lt;/a&gt;. E se você trabalha com Angular aparentemente ele já tem uma solução pra isso chamada &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;switchMap&lt;/code&gt;. Dito tudo isso, vamos ao código.&lt;/p&gt;

&lt;p&gt;Primeiramente você vai precisar importar o axios no script do seu componente:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// Search.vue

import axios from 'axios'

export default {
...
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Então vamos precisar criar uma variável &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cancelToken&lt;/code&gt; no  data, com o valor inicial &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;undefined&lt;/code&gt; :&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;data() {
  return {
    cancelToken: undefined,
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Aí, na função onde você for fazer a chamada para a pesquisa, você vai adicionar as seguintes linhas:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;methods: {
  search(query) {
    // Esse if serve para verificar se não existe nenhum request anterior pendente.
    // Caso exista ele vai cancela-lo (a mensagem é opcional)
    if (typeof this.cancelToken !== typeof undefined) {
      this.cancelToken.cancel(&quot;Operation canceled due to new request.&quot;)
    }

    // A seguir a gente salva o token de cancelamento do request atual
    this.cancelToken = axios.CancelToken.source()

    // E ai você vai mandar esse token no seu dispatch (assumindo que você esteja usando vuex)
    this.$store.dispatch('search_term', {
      query,
      cancel: this.cancelToken.token
    })
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Então, lá onde esta função vai estar na sua store, você vai adicionar o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cancelToken&lt;/code&gt; na sua chamada para o axios:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// search.js

import axios from 'axios'

// ...
actions: {
  search_term({}, payload) {
    // Aqui eu estou fazendo um get, mas funciona em post também
    axios.get('search',
     { query: payload.query },
     { cancelToken: payload.cancel })
    .then(res =&amp;gt; {
      // ...
    })
  }
}
// ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;E é basicamente isso! Eu deixei algumas coisas de fora para o código ficar o mais focado possivel, mas espero que tenha dado para entender. Qualquer coisa pode comentar que eu ajeito aqui e se você tiver uma solução melhor comenta aí tbm que estamos todos aqui pra aprender. Até a próxima aí galera!&lt;/p&gt;</content><author><name>Bianca Rocha</name></author><category term="Axios" /><category term="Vuejs" /><category term="Vuex" /><summary type="html">Vamos lá, você está fazendo um input de pesquisa que vai atualizar a cada palavra digitada e quer cancelar o request anterior quando uma nova palavra for digitada, assim não sobrecarregando seu backend? Pois eu tenho a solução! (talvez não seja a melhooor solução, mas é o que achei)</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/cancelando-requests-vue/asset-1.png" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/cancelando-requests-vue/asset-1.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Problemas com meta tags? Vem cá que eu te ajudo</title><link href="https://rochabianca.github.io/blog/problemas-com-meta-tags" rel="alternate" type="text/html" title="Problemas com meta tags? Vem cá que eu te ajudo" /><published>2021-04-28T10:11:00+00:00</published><updated>2021-04-28T10:11:00+00:00</updated><id>https://rochabianca.github.io/blog/problemas-com-meta-tags</id><content type="html" xml:base="https://rochabianca.github.io/blog/problemas-com-meta-tags">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/problemas-com-meta-tags/asset-1.jpeg&quot; alt=&quot;Eu juro pra vocês que eu tento botar outra imagem que não seja de código, mas é difícil&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Eu passei algum tempo das ultimas semanas desenvolvendo uma landing page para a empresa que estou trabalhando. QA vai QA vem, finalmente chegou a hora de mandar o negócio para a produção. Só que ai me veio meu primeiro problema. Durante todos esses anos eu só sabia fazer um tipo de meta tag, que é esse tipo aqui:&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/problemas-com-meta-tags/asset-2.png&quot; alt=&quot;imagem mostrando um preview consistente de um texto e uma imagem pequena ao lado&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Enquanto isso quebra um galho obviamente não é tão bonito quanto aqueles previews com uma imagem gigante. E era exatamente isso que a minha empresa queria para a nova landing page.  Algo mais nesse estilo aqui:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/problemas-com-meta-tags/asset-3.png&quot; alt=&quot;imagem mostrando um preview mais em formato de post, com uma imagem maior em cima e o titulo e texto embaixo, além do endereço do website&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pois bem, como faz um negócio desses? Eu passei um dia inteiro procurando mas, além de não ter muita informação online de como fazer esse card específico a cada teste eu tinha que fazer o deploy do site para então ver os resultados. Até que eu achei &lt;a href=&quot;https://www.heymeta.com/&quot; target=&quot;\_blank&quot;&gt;Esse site aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com ele você pode inserir o endereço do seu website e ele vai detectar as meta tags e mostrar o que ele identificou e aí você pode corrigir essas informações lá na hora. Um exemplo, ao por o meu último post, isso é o que ele detecta:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/problemas-com-meta-tags/asset-4.png&quot; alt=&quot;as informações detectadas pelo website sobre o meu blog, incluindo titulo, descrição e imagem&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se algo estiver errado eu posso editar essas informações, ai lá embaixo o site me dá a opção para gerar as meta tags, e assim obter o resultado que eu queria:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/problemas-com-meta-tags/asset-5.png&quot; alt=&quot;Parte do site onde você pode gerar as meta tags do seu site com as informações da imagem anterior&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aí é só copiar esse código no seu &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; e ser feliz 😄&lt;/p&gt;

&lt;p&gt;Agora só falta eu achar um tempo pra implementar isso aqui…&lt;/p&gt;</content><author><name>Bianca Rocha</name></author><category term="Dicas" /><category term="SEO" /><category term="Meta tags" /><summary type="html">Eu passei algum tempo das ultimas semanas desenvolvendo uma landing page para a empresa que estou trabalhando. QA vai QA vem, finalmente chegou a hora de mandar o negócio para a produção. Só que ai me veio meu primeiro problema. Durante todos esses anos eu só sabia fazer um tipo de meta tag, que é esse tipo aqui:</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/problemas-com-meta-tags/asset-1.jpeg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/problemas-com-meta-tags/asset-1.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Leia esse post e dê adeus ao “nvm use”</title><link href="https://rochabianca.github.io/blog/leia-esse-post-e-de-adeus-ao-nvm-use" rel="alternate" type="text/html" title="Leia esse post e dê adeus ao “nvm use”" /><published>2020-10-29T18:22:00+00:00</published><updated>2020-10-29T18:22:00+00:00</updated><id>https://rochabianca.github.io/blog/leia-esse-post-e-de-adeus-ao-nvm-use</id><content type="html" xml:base="https://rochabianca.github.io/blog/leia-esse-post-e-de-adeus-ao-nvm-use">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/leia-esse-post-e-de-adeus-ao-nvm-use/asset-1.jpg&quot; alt=&quot;imagem de várias linhas de código&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Comecei recentemente a trabalhar em uma nova empresa, e pela primeira vez estou tendo que trabalhar com muitos projetos com versões diferentes do node e isso estava começando a perturbar meu juízo, uma vez era uma festa de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nvm use x&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nvm use y&lt;/code&gt; e vários servidores iniciados apenas para dar erro depois pois você errou a versão node desse repositório. Bom, agora não mais.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Resolvi dar uma pesquisada na doc do nvm porque não era possível que não houvesse um jeito mais simples de fazer isso. E você sabe que se está lendo esse post é porque eu encontrei.&lt;/p&gt;

&lt;p&gt;Devo avisar, porém, que o tutorial a seguir é para a implementação utilizando zsh no MacOs,  então se você usa bash ou Windows o passo inicial pode ser um pouco diferente, mas &lt;a href=&quot;https://github.com/nvm-sh/nvm#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file&quot; target=&quot;\_blank&quot;&gt;você pode ler mais sobre e ver as diferentes opções de implementação aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Primeiramente, você vai ter que modificar o seu &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$HOME/.zshrc&lt;/code&gt; e para isso basta executar o seguinte código:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nano $HOME/.zshrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Então, logo abaixo de onde você inicia o nvm, você vai colocar esse código aqui:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version=&quot;$(nvm version)&quot;
  local nvmrc_path=&quot;$(nvm_find_nvmrc)&quot;

  if [ -n &quot;$nvmrc_path&quot; ]; then
    local nvmrc_node_version=$(nvm version &quot;$(cat &quot;${nvmrc_path}&quot;)&quot;)

    if [ &quot;$nvmrc_node_version&quot; = &quot;N/A&quot; ]; then
      nvm install
    elif [ &quot;$nvmrc_node_version&quot; != &quot;$node_version&quot; ]; then
      nvm use
    fi
  elif [ &quot;$node_version&quot; != &quot;$(nvm version default)&quot; ]; then
    echo &quot;Reverting to nvm default version&quot;
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Salve, saia e vá para o diretório que você precisa mudar a versão do node , crie um arquivo chamado &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.nvmrc&lt;/code&gt; e coloque lá a versão de node compatível com o projeto. Um exemplo:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;v9.9.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Reinicie o terminal e pronto! Agora quando você entrar no diretório ele vai automaticamente mudar para a versão compatível daquele projeto!&lt;/p&gt;</content><author><name></name></author><category term="Dicas" /><category term="Nvm" /><category term="Nodejs" /><category term="zsh" /><category term="MacOs" /><summary type="html">Comecei recentemente a trabalhar em uma nova empresa, e pela primeira vez estou tendo que trabalhar com muitos projetos com versões diferentes do node e isso estava começando a perturbar meu juízo, uma vez era uma festa de nvm use x, nvm use y e vários servidores iniciados apenas para dar erro depois pois você errou a versão node desse repositório. Bom, agora não mais.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/leia-esse-post-e-de-adeus-ao-nvm-use/asset-1.jpg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/leia-esse-post-e-de-adeus-ao-nvm-use/asset-1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Usa variáveis sass no Vue? Posso ter uma dica bem útil pra você</title><link href="https://rochabianca.github.io/blog/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue" rel="alternate" type="text/html" title="Usa variáveis sass no Vue? Posso ter uma dica bem útil pra você" /><published>2020-05-29T12:15:00+00:00</published><updated>2020-05-29T12:15:00+00:00</updated><id>https://rochabianca.github.io/blog/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue</id><content type="html" xml:base="https://rochabianca.github.io/blog/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue/asset-1.jpg&quot; alt=&quot;imagem de várias linhas de código CSS&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Faz um bom tempo que, na empresa onde trabalho, utilizamos um arquivo geral de variáveis sass para definir as cores do sistema. Desde então, o que fazíamos era importar manualmente o arquivo de variáveis para cada componente, cheguei até a criar um snippet no vue para fazer isso por mim toda vez que eu criava um componente. Só que isso está longe de ser uma solução ideal.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;O primeiro que essa abordagem gerava era que ela dependia que todos os meus colegas lembrassem de importar as variáveis, ou usassem meu snippet. E o segundo problema era que tudo bem, enquanto fossem apenas variáveis no arquivo esse tipo de abordagem não complicaria muito o tamanho do bundle final, uma vez que, ao ser compilado, a única coisa que aconteceria é que as variáveis seriam substituídas por seus respectivos valores e nenhum código css seria adicionado. Mas e se alguém adicionasse um código css ali por engano? Dependendo do código isso poderia impactar seriamente o bundle final da aplicação. Por conta disso, eu estava procurando uma solução mais aceitável para esse problema, e acabei topando com &lt;a href=&quot;https://stackoverflow.com/questions/35580710/using-sass-variables-in-a-vuejs-component&quot; target=&quot;\_blank&quot;&gt;essa pergunta no Stack Overflow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Edit:&lt;/b&gt;: Quando publiquei esse post, um usuário chamado Fagner P do grupo VueJS Brasil, me alertou que uma outra abordagem possivel seria importar o arquivo de variáveis no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;App.vue&lt;/code&gt;. Infelizmente, por motivos ainda desconhecidos, essa solução não funciona na plataforma em que trabalho, mas pode ser que funcione na sua, então vale tentar antes de seguir com esse tutorial. E valeu Fagner pelo aviso!&lt;/p&gt;

&lt;p&gt;E qual a solução que eu achei nessa pergunta? Bem simples, na real a única coisa que você precisa fazer é adicionar o código abaixo ao seu &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vue.config.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;module.exports = {
  css: {
    loaderOptions: {
      sass: {
        data: '@import &quot;@/pathto/variables.scss&quot;;'
      }
    }
  }
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Alguns pontos importantes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Se você está usando o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sass-loader 8&lt;/code&gt;, substitua o &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;data&lt;/code&gt; por &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prependData&lt;/code&gt;;&lt;/li&gt;
  &lt;li&gt;É necessário reiniciar seu servidor para que essas mudanças se apliquem;&lt;/li&gt;
  &lt;li&gt;Essas mudanças não irão funcionar se você não colocar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lang=&quot;scss&quot;&lt;/code&gt; (ou qualquer outro pré processador que esteja usando) na tag style do seu componente Vue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;E prontinho! Agora você pode usar suas variáveis sass em qualquer componente sem ter que importar! Abaixo você vai encontrar um &lt;a href=&quot;https://codesandbox.io/s/936omxkqro?from-embed&quot; target=&quot;\_blank&quot;&gt;exemplo feito pela @sdras desse código funcionando e mudando a cor primária do texto para roxo&lt;/a&gt;:&lt;/p&gt;

&lt;iframe src=&quot;https://codesandbox.io/embed/936omxkqro?autoresize=1&amp;amp;fontsize=14&amp;amp;moduleview=1&amp;amp;theme=dark&quot; style=&quot;width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;&quot; title=&quot;Import Syle Variables in every Vue Component&quot; allow=&quot;accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking&quot; sandbox=&quot;allow-autoplay allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts&quot;&gt;
&lt;/iframe&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;E é isso, eu espero que essa dica tenha te sido útil para você. Até a próxima! :D&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Links que foram essenciais para a criação desse texto:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://css-tricks.com/how-to-import-a-sass-file-into-every-vue-component-in-an-app/&quot; target=&quot;\_blank&quot;&gt;O texto do CSS Tricks sobre como importar um arquivo Sass em todos componentes Vue de um app&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codesandbox.io/s/936omxkqro?from-embed=&amp;amp;file=/src/App.vue&quot; target=&quot;\_blank&quot;&gt;O exemplo criado pela @sdras no CodeSandbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="Dicas" /><category term="VueJS" /><category term="Sass" /><summary type="html">Faz um bom tempo que, na empresa onde trabalho, utilizamos um arquivo geral de variáveis sass para definir as cores do sistema. Desde então, o que fazíamos era importar manualmente o arquivo de variáveis para cada componente, cheguei até a criar um snippet no vue para fazer isso por mim toda vez que eu criava um componente. Só que isso está longe de ser uma solução ideal.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue/asset-1.jpg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/uma-dica-bem-util-para-quem-usa-variaveis-sass-no-vue/asset-1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dicas para quem vai começar um trabalho remoto</title><link href="https://rochabianca.github.io/blog/dicas-para-trabalho-remoto" rel="alternate" type="text/html" title="Dicas para quem vai começar um trabalho remoto" /><published>2020-03-18T18:09:00+00:00</published><updated>2020-03-18T18:09:00+00:00</updated><id>https://rochabianca.github.io/blog/dicas-para-trabalho-remoto</id><content type="html" xml:base="https://rochabianca.github.io/blog/dicas-para-trabalho-remoto">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/dicas-para-trabalho-remoto/asset-1.jpg&quot; alt=&quot;uma mulher, sentada em uma poltrona com um macbook no colo, suas mãos sobre as teclas&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Com os casos do novo coronavírus se alastrando, muitas empresas optaram por permitir que seus funcionários façam seus trabalhos de casa, muitos dos quais que nunca trabalharam remotamente, então visando ajudar essas pessoas, eu vou tentar dar algumas dicas para que você possa passar por esse momento (não sei se aproveitar é a palavra correta, dada a situação) da melhor maneira possível.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;antes-de-tudo-já-lavou-as-mãos&quot;&gt;Antes de tudo: já lavou as mãos?&lt;/h2&gt;

&lt;p&gt;Estar em casa não é desculpa para não lavar as mãos, evitar pegar em nariz e olhos, etc etc, então antes de mais nada vai bem ali, dá uma lavadinha nas mãos e depois volta.
&lt;br /&gt;&lt;/p&gt;
&lt;div style=&quot;width:100%;height:0;padding-bottom:100%;position:relative;&quot;&gt;&lt;iframe src=&quot;https://giphy.com/embed/SK4EWuN6eLRCg&quot; width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;position:absolute&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://giphy.com/gifs/cute-vine-iguana-SK4EWuN6eLRCg&quot;&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Lavou? Ok, agora podemos continuar.
&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;tente-manter-o-mesmo-horário-de-trabalho-da-era-presencial&quot;&gt;Tente manter o mesmo horário de trabalho da era presencial&lt;/h3&gt;
&lt;p&gt;Essa é uma dica um pouco mais focada nesse período, porque muitos de vocês provavelmente vão voltar a trabalhar presencialmente quando o surto acabar, então faz sentido manter o trabalho no mesmo horário do presencial. Além disso, como você já está acostumado a trabalhar nesse período, fica mais fácil de se concentrar (isso não é fato, apenas minha opinião, não interprete como fato)&lt;/p&gt;

&lt;h3 id=&quot;procure-arrumar-um-espaço-na-sua-casa-para-trabalhar&quot;&gt;Procure arrumar um espaço na sua casa para trabalhar&lt;/h3&gt;
&lt;p&gt;Obvio, porém essencial, deixe um espaço reservado para seu computador e demais objetos que você use em seu trabalho. Além de facilitar sua organização no geral, pode te ajudar a manter a concentração (mais uma vez, não são fatos, só opiniões minhas jogadas ao vento)&lt;/p&gt;

&lt;h3 id=&quot;caso-esteja-tendo-problemas-não-demore-para-pedir-ajuda-a-colegas&quot;&gt;Caso esteja tendo problemas: não demore para pedir ajuda a colegas&lt;/h3&gt;
&lt;p&gt;Quando estamos sozinhos às vezes queremos resolver tudo sozinhos, mesmo que isso nos leve o dia inteiro. Porém se você está tendo problemas com algo a mais de 1h (ou simplesmente não sabe como fazer), é interessante chamar alguém para te ajudar.  Pense no tanto de vezes que você estava penando com um problema e um colega seu te ajudou no presencial. É a mesma coisa no remoto. Então por favor, peça ajuda, até porque pode acontecer (e acontece muitas vezes) de você e seu colega chegarem numa solução mais rapidamente trabalhando juntos do que você sozinho com apenas o google para te ajudar.&lt;/p&gt;

&lt;h3 id=&quot;se-não-tem-nada-para-fazer-durante-o-trabalho-tente-ajudar-colegas&quot;&gt;Se não tem nada para fazer durante o trabalho, tente ajudar colegas&lt;/h3&gt;
&lt;p&gt;Caso você tenha acabado suas atividades e não tenha novas que possa pegar no momento, pergunte a algum colega, ou até mesmo ao seu chefe/gerente/superior se eles não precisam de ajuda em algo, ou se não a nada que possa ser feito no momento. Ao fazer isso, além de poder ajudar seus colegas ou chefes/gerentes/superiores você também vai passar a confiança de que leva o trabalho remoto a sério, o que pode ser um fator para que a cultura do remoto seja considerada com menos temor futuramente.&lt;/p&gt;

&lt;h3 id=&quot;anote-o-que-você-fez-no-dia&quot;&gt;Anote o que você fez no dia&lt;/h3&gt;
&lt;p&gt;Se sua empresa ou equipe decidiu trabalhar com reuniões diárias para que as pessoas reportem o que fizeram no dia (caso não tenham feito isso pode ser uma boa ideia sugerir, uma vez que ajuda bastante a construir uma confiança entre a empresa e o trabalhador e desmistificar o pensamento muito comum de “tá em casa, não deve estar trabalhando”) é uma boa ideia que você anote o que fez no dia para que possa reportar com mais detalhes durante essas reuniões, inclusive, o mesmo vale para pontos chave das reuniões ou problemas que tenham aparecido nelas.&lt;/p&gt;

&lt;p&gt;Isso pode ser muito útil se você, assim como eu, tem problemas de memória e costuma esquecer detalhes das coisas na hora de falar, ou esquecer coisas que tem para resolver. Uso muito o &lt;a href=&quot;todoist.com&quot; target=&quot;\_blank&quot;&gt;todoist&lt;/a&gt; mas simplesmente anotar em um caderninho e deixar perto na hora das reuniões também funciona.&lt;/p&gt;

&lt;h2 id=&quot;problemas-de-concentração-como-lidar&quot;&gt;Problemas de concentração: como lidar&lt;/h2&gt;
&lt;p&gt;Infelizmente não existe uma solução perfeita para isso, então aqui eu vou simplesmente citar alguns que li e tentei, além dos que mais funcionam pra mim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Criar uma lista com o que você tem para fazer no dia&lt;/strong&gt;
&lt;br /&gt;
 funciona tanto para organizar o que deve ser feito durante o dia quanto para reportar depois, uso muito o &lt;a href=&quot;todoist.com&quot; target=&quot;\_blank&quot;&gt;todoist&lt;/a&gt; pra isso.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(Modo tartaruga do item acima) Anotar - manualmente - o que você tem que fazer (um item apenas), tentar finalizar este item, então repetir&lt;/strong&gt;
&lt;br /&gt;
 às vezes esse é o único modo que funciona comigo, uma vez que ocasionalmente tem tanta coisa para fazer que o item acima mais atrapalha que ajuda.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pomodoro&lt;/strong&gt;
&lt;br /&gt;
 Para quem não conhece, consiste basicamente em um timer onde você deve passar 25min (ou mais) focado na sua tarefa, sem mexer em mais nada ou responder chats (exceto emergências do trabalho claro) e então descansar por 5 minutos e ai repetir. Existem muitos apps e extensões para navegador com essa premissa, eu particularmente gosto muito do aplicativo Be Focused, disponível para &lt;a href=&quot;https://apps.apple.com/br/app/be-focused-focus-timer/id973134470?l=en&amp;amp;mt=12&quot; target=&quot;\_blank&quot;&gt;IOS&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.superelement.pomodoro&quot; target=&quot;\_blank&quot;&gt;Android&lt;/a&gt; e &lt;a href=&quot;https://apps.apple.com/br/app/be-focused-focus-timer/id973134470?l=en&amp;amp;mt=12&quot; target=&quot;\_blank&quot;&gt;MacOS&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RescueTime&lt;/strong&gt;
&lt;br /&gt;
 Essa é uma premissa interessante, porém mais focada no longo prazo. O &lt;a href=&quot;https://www.rescuetime.com/download-rescuetime&quot; target=&quot;\_blank&quot;&gt;RescueTime&lt;/a&gt; é um aplicativo de desktop ou mobile que monitora suas atividades durante o dia e te dá um report de quando você estava mais “focado” (utilizando as ferramentas do trabalho) durante aquele dia. A versão gratuita não difere as abas do seu navegador então se você quiser pode adotar a seguinte medida para “burlar” isso: baixe um novo navegador e use esse somente para coisas não relacionadas a trabalho, assim fica um pouco mais simples diferir um do outro.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ouvir música&lt;/strong&gt;
&lt;br /&gt;
Hoje existem muitas playlists com o objetivo de foco no trabalho (um exemplo &lt;a href=&quot;https://open.spotify.com/playlist/2TXtfj9Vjc2ZQOnwf9BlOW?si=AYef6sYxTbe40Jd8imTEDQ&quot; target=&quot;\_blank&quot;&gt;aqui&lt;/a&gt;) mas você também pode tentar ouvir música instrumental, a trilha sonora de algum jogo que você curta (usei demais a playlist de &lt;a href=&quot;https://open.spotify.com/playlist/0WS2SR4YoI6MbiThZ7CCGY?si=bGe9jrN5QViLn5JB1iJmdQ&quot; target=&quot;\_blank&quot;&gt;Zelda&lt;/a&gt;  e &lt;a href=&quot;https://open.spotify.com/playlist/0DZoqhexg7sPRpIVSvobKY?si=ckr6o6nsQ1Sj188g6FmKfQ&quot; target=&quot;\_blank&quot;&gt;Undertale&lt;/a&gt;)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Acho que isso resume as dicas por hoje. Caso você tenha mais dúvidas pode deixar um comentário aqui, ou até mesmo me mandar um &lt;a href=&quot;mailto:bianca.rocha1711@gmail.com&quot; target=&quot;\_blank&quot;&gt;email&lt;/a&gt;  que vou tentar te ajudar. Espero que esse texto tenha sido útil para você e até o próximo :D&lt;/p&gt;</content><author><name></name></author><category term="Dicas" /><category term="Home Office" /><category term="Trabalho Remoto" /><category term="Remote Work" /><summary type="html">Com os casos do novo coronavírus se alastrando, muitas empresas optaram por permitir que seus funcionários façam seus trabalhos de casa, muitos dos quais que nunca trabalharam remotamente, então visando ajudar essas pessoas, eu vou tentar dar algumas dicas para que você possa passar por esse momento (não sei se aproveitar é a palavra correta, dada a situação) da melhor maneira possível.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/dicas-para-trabalho-remoto/asset-1.jpg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/dicas-para-trabalho-remoto/asset-1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Um jeito simples de manipular a altura de um textarea (autosize.js)</title><link href="https://rochabianca.github.io/blog/um-jeito-simples-de-manipular-a-altura-do-textarea" rel="alternate" type="text/html" title="Um jeito simples de manipular a altura de um textarea (autosize.js)" /><published>2020-01-20T16:58:00+00:00</published><updated>2020-01-20T16:58:00+00:00</updated><id>https://rochabianca.github.io/blog/um-jeito-simples-de-manipular-a-altura-do-textarea</id><content type="html" xml:base="https://rochabianca.github.io/blog/um-jeito-simples-de-manipular-a-altura-do-textarea">&lt;p&gt;&lt;img src=&quot;/blog/assets/posts/um-jeito-simples-de-manipular-a-altura-do-textarea/asset-1.jpg&quot; alt=&quot;um print do codepen abaixo dizendo: textarea com auto resize; escreva e veja as linhas do textarea se formando de acordo com o tamanho do seu texto (Enter tbm funciona); e no textarea escrito &amp;quot;um texto em uma textarea com resize (vale para textos muito longos que quebram a linha também viu?)&amp;quot;, cada palavra separada por enter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Uma coisa bem simples, mas que tenho julgado cada vez mais padrão na web, é a capacidade de fazer os inputs (textareas na verdade) de texto se adequarem ao texto em que o usuário digita, a medida que o mesmo vai digitando. Afinal nessa época em que textões e threads estão se tornando cada vez mais comuns, seria um estresse a mais para o usuário revisar esse texto quando ele está contido em uma única linha gigante.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Bom, recentemente eu precisei implementar esta funcionalidade em uma das features em que estou trabalhando, porém não lembrava de jeito nenhum qual era o nome da bendita. Depois de algumas várias pesquisas, descobri como se chama: autosize. E agora vou ensinar para vocês um jeito simples de implementá-la.&lt;/p&gt;

&lt;p&gt;Em resumo, existe um pequeno script (pequeno mesmo, a build tem apenas 3.5kb) chamado &lt;a href=&quot;https://github.com/jackmoore/autosize&quot; target=&quot;\_blank&quot;&gt;autosize&lt;/a&gt; que torna o processo todo incrivelmente simples. Você pode usar o npm para instalá-lo no seu projeto:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install autosize
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Depois disso o processo todo é bem simples, e aqui vou usar o Vue como framework, mas é possível adaptar esse código para qualquer framework do seu gosto&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;textarea
    rows=&quot;1&quot;
    placeholder=&quot;Escreva aqui&quot;
    class=&quot;resized-textarea&quot;
  /&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import autosize from 'autosize';

export default {
  mounted() {
    autosize(document.querySelector('.resized-textarea'));
  },
};
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;E o resultado final é esse:&lt;/p&gt;

&lt;p class=&quot;codepen&quot; data-height=&quot;364&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;js,result&quot; data-user=&quot;rochabianca&quot; data-slug-hash=&quot;BayGOwV&quot; style=&quot;height: 364px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-pen-title=&quot;Textarea com autoresize (Vuejs)&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/rochabianca/pen/BayGOwV&quot;&gt;
  Textarea com autoresize (Vuejs)&lt;/a&gt; by Bianca (&lt;a href=&quot;https://codepen.io/rochabianca&quot;&gt;@rochabianca&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Você também pode ver mais opções e configurações no &lt;a href=&quot;https://github.com/jackmoore/autosize&quot; target=&quot;\_blank&quot;&gt;github do script&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;No mais é isso, espero que tenham curtido o mini tutorial, e até a próxima :D&lt;/p&gt;</content><author><name></name></author><category term="Utilidades" /><category term="Tutoriais" /><summary type="html">Uma coisa bem simples, mas que tenho julgado cada vez mais padrão na web, é a capacidade de fazer os inputs (textareas na verdade) de texto se adequarem ao texto em que o usuário digita, a medida que o mesmo vai digitando. Afinal nessa época em que textões e threads estão se tornando cada vez mais comuns, seria um estresse a mais para o usuário revisar esse texto quando ele está contido em uma única linha gigante.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rochabianca.github.io/blog/assets/posts/um-jeito-simples-de-manipular-a-altura-do-textarea/asset-1.jpg" /><media:content medium="image" url="https://rochabianca.github.io/blog/assets/posts/um-jeito-simples-de-manipular-a-altura-do-textarea/asset-1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>