<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cesar Bhering</title>
    <description>The latest articles on DEV Community by Cesar Bhering (@cesarbhering).</description>
    <link>https://dev.to/cesarbhering</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F895333%2F3b174762-20c8-4e16-bebb-f1307d0c0bf9.jpeg</url>
      <title>DEV Community: Cesar Bhering</title>
      <link>https://dev.to/cesarbhering</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cesarbhering"/>
    <language>en</language>
    <item>
      <title>Guia para certificação Vue Mid-Level</title>
      <dc:creator>Cesar Bhering</dc:creator>
      <pubDate>Fri, 03 Jan 2025 18:23:43 +0000</pubDate>
      <link>https://dev.to/cesarbhering/guia-para-certificacao-vue-mid-level-pgj</link>
      <guid>https://dev.to/cesarbhering/guia-para-certificacao-vue-mid-level-pgj</guid>
      <description>&lt;p&gt;Inspirado neste &lt;a href="https://dev.to/aloisseckar/how-i-got-vue-certified-3bbj"&gt;post&lt;/a&gt;, resolvi também escrever um texto do caminho que fiz para conseguir a certificação em Vue.&lt;/p&gt;

&lt;p&gt;Trabalho com Vue há 3 anos, e no momento estamos fazendo a transição da aplicação de Vue2 para Vue3, então estudar para a certificação me pareceu um bom caminho para atualizar os conhecimentos no framework.&lt;/p&gt;

&lt;p&gt;Se você está começando no mundo do desenvolvimento web, não recomendo que faça a certificação, pois a mesma está custando atualmente quase R$600,00 e e acredito que você consegue extrair mais valor fazendo cursos e outras atividades com este dinheiro. Mas se você já é um profissional experiente e quer colocar seus conhecimentos a prova, exibir o badge de dev Vue e ajudar o desenvolvimento do framework (parte do dinheiro vai para a equipe do Vue), recomendo que o faça.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura da prova
&lt;/h2&gt;

&lt;p&gt;A prova tem duração máxima de 135 minutos, sendo 30 questões fechadas e 2 desafios de código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questões fechadas
&lt;/h2&gt;

&lt;p&gt;Você deve acertar 25 questões fechadas (algo em torno de 85% de acerto), cada questão tem 4 opções de resposta e sempre apenas uma opção é verdadeira. São questões relativamente fáceis, em sua maioria perguntando o que um bloco de código irá fazer e sobre momentos em que hooks (lifecycles e watchers) são disparados. Todas as questões levam em consideração a Composition API. O tempo é mais do que suficiente para responder e revisar todas as questões.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questões abertas
&lt;/h2&gt;

&lt;p&gt;Após a parte de questões fechadas, se inicia a parte dos desafios de código. São dois desafios, um você deve terminar um código com as instruções que são fornecidas e outro é uma correção de bug. Ambos os desafios são realizados na plataforma da Stackblitz, então é recomendável você fazer alguns códigos lá para se acostumar com a ferramenta, mas ela se parece muito com o vscode, então você não deverá ter problemas.&lt;/p&gt;

&lt;p&gt;Nos boilerplates dos desafios é usado JS e Composition API, mas você pode usar TS e Options API caso queira. Também nesta parte você tem acesso a uma documentação resumida do Vue através de um modal, a navegação é um pouco ruim, mas ajuda bastante em momentos de dúvida e você pode abrir o devtools do navegador. Recomendo já deixar o devtools configurado para abrir como um frame no navegador e não como nova janela, para evitar algum problema com o software de monitoramento. &lt;/p&gt;

&lt;p&gt;No meu caso o desafio de código foi completar uma tela de login, colocando comunicação entre os componentes (emtis, props, template syntax, event handling, form input bindings) e também fazer a estilização dos mesmos. Neste desafio não é necessário o uso de Transitions, mas já vi na internet que outros desafios utilizam bastante, então é bom estudar.&lt;/p&gt;

&lt;p&gt;O desafio de resolver um bug foi bastante simples, bastou alterar uma referência de reactive() para ref(). &lt;/p&gt;

&lt;p&gt;Você não tem acesso se as suas alterações nos códigos estão aprovadas pelos testes automatizados, então você deve submeter a sua solução confiando que o que você está vendo na tela (você tem acesso a aplicação rodando, nao apenas ao código).&lt;/p&gt;

&lt;h2&gt;
  
  
  O que estudar e onde estudar
&lt;/h2&gt;

&lt;p&gt;1 - Ao comprar a prova você tem acesso a uma lista de links para a documentação, que são os tópicos que serão cobrados na prova, conforme imagem abaixo. Assim você economiza de ler tópicos que não serão levados em consideração.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv7wyppeu4oj0nds0s9e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv7wyppeu4oj0nds0s9e.png" alt="Lista Topicos Certificacao Vue" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - Ver a seguinte playlist no Yout Tube - &lt;a href="https://www.youtube.com/watch?v=xMSPssFmJQQ&amp;amp;list=PLt9cEBHxJtdOqkCI7-UWdu2Ppx8z0RGt-" rel="noopener noreferrer"&gt;VueJS Developer Certification&lt;/a&gt; - e acompanhar os códigos que o apresentador faz, de preferência refazendo em sua máquina. Ele basicamente passa pelos tópicos citados no guia da certificação e vai desenvolvendo pequenos snippets que ajudam a fixar o conteúdo.&lt;/p&gt;

&lt;p&gt;3 - Faça você mesmo os seus snippets, para fixar os conceitos. Aqui disponilizo um &lt;a href="https://github.com/cesarbhering/EstudosVueCertification" rel="noopener noreferrer"&gt;repositório&lt;/a&gt; que demonstra como fui acompanhando os estudos e fazendo experimentos para fixar o conteúdo. Mas recomendo você começar o seu do absoluto zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerações finais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Você pode comprar o curso oficial para a certificação, mas pelo preço e dificuldade da prova, entendo ser desperdício, os materiais citados aqui são mais que suficientes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Para quem já fez provas de certificação, o processo de tirar foto do documento e mostrar a sala que está sendo feita a prova é bem facilitado, muito mais simples que da AWS e da LPI por exemplo. Caso você nunca tenha feito uma prova de certificação antes, procure vídeos na internet (ou converse com um amigo) que comentam sobre como ambiente (tanto virtual quanto real) deve estar preparado para que a prova possa ser realizada e não cause sua desclassificação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recomendo fazer a prova e um computador com no mínimo 16GB de RAM e um bom processador. Caso você tenha, assim como eu, problemas técnicos ao realizar a prova, tem um botão na página para sinalizar o problema, você deve sinalizar o problema e sair da prova, após isto mandar um e-mail para que lhe seja garantido um novo voucher. No meu caso foram solicitos e dispibilizaram um novo voucher com menos de uma semana.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vue</category>
      <category>certification</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>How to make a Squarespace domain work with Netlify</title>
      <dc:creator>Cesar Bhering</dc:creator>
      <pubDate>Sat, 24 Feb 2024 20:51:30 +0000</pubDate>
      <link>https://dev.to/cesarbhering/how-to-make-squarespace-domain-work-with-netlify-e27</link>
      <guid>https://dev.to/cesarbhering/how-to-make-squarespace-domain-work-with-netlify-e27</guid>
      <description>&lt;p&gt;If you're getting the error below when trying to &lt;strong&gt;Set up Netlify DNS&lt;/strong&gt; for your Squarespace domain, read this post.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A DNS zone for this domain already exists on NS1, the DNS provider backing Netlify DNS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hqmh4eip5uwh64y7ywp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hqmh4eip5uwh64y7ywp.png" alt="NS1 Netlify Error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to your Squarespace account and click in the domain you want to configure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 - Advanced Settings &amp;gt; Nameservers Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtfnemi9zcmo3qnwuhpj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtfnemi9zcmo3qnwuhpj.png" alt="Squarespace Nameserver Settings Button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Make sure you have "Use custom nameservers" selected. And declare only the nameservers of Squarespace (This is needed to SSL certificate to work)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2iiv2tgm880x20kf0ik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2iiv2tgm880x20kf0ik.png" alt="Squarespace Nameserver Settings options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 - Now go to "Edit DNS".&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6tljjjqzardi82qvlrh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6tljjjqzardi82qvlrh.png" alt="Squarespace Edit DNS Button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 - Add the following two records. Make sure to declare the correct url of Netlify app. (In the first line, the IP 75.2.60.5 is the same for all).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzzzugfj80sqd5jhevk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzzzugfj80sqd5jhevk.png" alt="Squarespace custom DNS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can go back to your Netlify account, and click at the "Domain management" tab, and see that your domain is working as expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8gu6dhni1456vftyfnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8gu6dhni1456vftyfnv.png" alt="Domain list at netlify with error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5nd7vhd3u0la3zhxd3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5nd7vhd3u0la3zhxd3p.png" alt="DOmain list at netlify with everything ok"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The information above can be seen in the Netlify Forums/Tutorials, but not this straight forward. Thats why i decided to make this post.&lt;/p&gt;

</description>
      <category>squarespace</category>
      <category>netlify</category>
      <category>dns</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Usando o shepherdjs para fazer tours em uma aplicação nuxt (vue.js) (Parte 2)</title>
      <dc:creator>Cesar Bhering</dc:creator>
      <pubDate>Sun, 07 Aug 2022 22:38:00 +0000</pubDate>
      <link>https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-uma-aplicacao-nuxt-vuejs-parte-2-1d22</link>
      <guid>https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-uma-aplicacao-nuxt-vuejs-parte-2-1d22</guid>
      <description>&lt;p&gt;Dando continuidade ao tutorial, &lt;a href="https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-sua-aplicacao-nuxt-vuejs-parte-1-4894"&gt;aqui&lt;/a&gt; você encontra a primeira parte, vamos alterar mais alguns comportamentos do nosso projeto e &lt;a href="https://github.com/cesarbhering/TutorialShepherd"&gt;aqui &lt;/a&gt;você encontra o repositório.&lt;/p&gt;

&lt;p&gt;Para diminuir a largura do elemento do shepherd, iremos adicionar a classe &lt;code&gt;width-limit&lt;/code&gt;, conforme código abaixo. Você pode declarar uma série de classes para que sejam aplicadas no elemento do shepherd. Por hora iremos aplicar apenas uma classe. É necessário retirar o &lt;code&gt;scoped&lt;/code&gt; da declaração de style, então tenha muito cuidado.&lt;/p&gt;

&lt;p&gt;Também vamos alterar a opção &lt;code&gt;on&lt;/code&gt; dentro de &lt;code&gt;attachTo&lt;/code&gt;, que escolhe o posicionamento da flecha/elemento shepherd, vamos trocar de 'top' para 'right-end'.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mounted() {
    this.$nextTick(() =&amp;gt; {
      const tour = this.$shepherd({
        useModalOverlay: true,
        defaultStepOptions: {
          popperOptions: {
            modifiers: [{ name: 'offset', options: { offset: [0,50] } }]
          }
        }
      });

      tour.addStep({
        classes: 'width-limit',
        attachTo: { element: '#shepherd-teste', on: 'right-end' },
        text: 'Test'
      });

      tour.start();
      });
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E a declaração em style&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.width-limit {
  max-width: 200px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim ficou o nosso elemento, menor e renderizado a direita.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DFCpBvsS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ay1vpkixmr226fqq5chb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DFCpBvsS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ay1vpkixmr226fqq5chb.PNG" alt="Mostra o elemento shepherd menor e renderizado a direita" width="880" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você deve ter notado que com a mudança de lugar, a seta que aponta para o elemento a ser destacado ficou "fora do esquadro" e isso incomoda um pouco. Para corrigir este tipo de situação usamos o modificador do popper chamado 'arrow', assim a opção &lt;code&gt;popperOptions&lt;/code&gt; fica da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;popperOptions: {
  modifiers: [{ name: 'offset', options: { offset: [0, 50] } }, 
              { name: 'arrow', options: { padding: 20 } }]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o elemento fica desta forma (bem mais apresentável), com a seta deslocada mais ao centro e o elemento no mesmo lugar. Usei o valor 20 pois é o que faz sentido para o exemplo, mas você pode testar com valores positivos e negativos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EwG6zvqU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcpnvmjr9gbrl168srpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EwG6zvqU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcpnvmjr9gbrl168srpx.png" alt="Elemento shepherd com a flecha/arrow em posição alterada" width="880" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para deixar o elemento mais completo, podemos adicionar um título, e adicionar um botão de cancelamento do tutorial. As opções utilizadas serão &lt;code&gt;cancelIcon&lt;/code&gt; e &lt;code&gt;title&lt;/code&gt;. Importante notar que a opção &lt;code&gt;cancelIcon&lt;/code&gt; se trata de um objeto com a propriedade &lt;code&gt;enabled&lt;/code&gt; que é um valor booleano.&lt;/p&gt;

&lt;p&gt;O visual e o código ficam da seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jJXtdLD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6nm5yl04jgzr2kdifqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jJXtdLD6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6nm5yl04jgzr2kdifqt.png" alt="Elemento shepherd com título" width="880" height="175"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;this.$shepherd({
          useModalOverlay: true,
          defaultStepOptions: {
            cancelIcon: {enabled: true},
            popperOptions: {
              modifiers: [{ name: 'offset', options: { offset: [0, 50] } }, 
              { name: 'arrow', options: { padding: 20 } }]
            }
         }
});

tour.addStep({
  classes: 'width-limit',
  attachTo: { element: '#shepherd-teste', on: 'right-end' },
  title: 'Test Title',
  text: 'Test'
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Continua em breve...&lt;/p&gt;

</description>
      <category>shepherdj</category>
      <category>nuxt</category>
      <category>vue</category>
      <category>portuguese</category>
    </item>
    <item>
      <title>Usando o shepherdjs para fazer tours em uma aplicação nuxt (vue.js) (Parte 1)</title>
      <dc:creator>Cesar Bhering</dc:creator>
      <pubDate>Thu, 21 Jul 2022 02:19:00 +0000</pubDate>
      <link>https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-sua-aplicacao-nuxt-vuejs-parte-1-4894</link>
      <guid>https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-sua-aplicacao-nuxt-vuejs-parte-1-4894</guid>
      <description>&lt;p&gt;Como não vi nenhum conteúdo em pt-BR ensinando o básico de &lt;a href="https://shepherdjs.dev/" rel="noopener noreferrer"&gt;shepherdjs&lt;/a&gt;, decidi fazer este pequeno tutorial. Neste exemplo irei fazer referência em como usar o shepherdjs junto ao vue.js com nuxt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cesarbhering/TutorialShepherd" rel="noopener noreferrer"&gt;Aqui &lt;/a&gt;você encontra o repositório do projeto.&lt;/p&gt;

&lt;p&gt;Primeiro e antes de mais nada vamos baixar a biblioteca destinada ao vue:&lt;br&gt;
&lt;code&gt;npm install vue-shepherd --save&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Você pode usar várias abordagens, aqui irei mostrar como usar o shepherdjs como plugin:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crie um arquivo chamado &lt;strong&gt;shepherd.js&lt;/strong&gt; na pasta &lt;strong&gt;plugins&lt;/strong&gt; com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Vue from 'vue';
import VueShepherd from 'vue-shepherd';
import 'shepherd.js/dist/css/shepherd.css';
Vue.use(VueShepherd);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E no arquivo &lt;strong&gt;nuxt.config.js&lt;/strong&gt; você deve declarar o plugin da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  plugins: [
    '@/plugins/shepherd'
  ],

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro do componente desejado você pode inicializar um tour e adicionar steps utilizando o ciclo de vida &lt;code&gt;mounted&lt;/code&gt;(conforme exemplo que existe no &lt;a href="https://github.com/shipshapecode/vue-shepherd" rel="noopener noreferrer"&gt;github oficial&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mounted() {
      this.$nextTick(() =&amp;gt; {
        const tour = this.$shepherd({
          useModalOverlay: true
        });

        tour.addStep({
          attachTo: { element: this.$el, on: 'top' },
          text: 'Test'
        });

        tour.start();
      });
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;OK, até aqui tudo certo, tudo legal. Mas caso você esteja tentando usar o shepherdjs, já percebeu que a documentação oficial é bem genérica em relação a customização do comportamento. Então vamos abordar algumas questões chave.&lt;/p&gt;

&lt;p&gt;Para fins didáticos, criei um componente simples com um id chamado &lt;em&gt;shepherd-teste&lt;/em&gt;, e iremos usar o mesmo para os exemplos abaixo.&lt;/p&gt;




&lt;p&gt;O primeiro ponto a ser abordado é o &lt;code&gt;defaultStepOptions&lt;/code&gt;, pois nele conseguimos colocar customizações em todos os steps do tour.&lt;/p&gt;

&lt;p&gt;Dentro do &lt;code&gt;defaultStepOptions&lt;/code&gt;podemos colocar a opção &lt;code&gt;popperOptions&lt;/code&gt;(sim, o shepherdjs usa o &lt;a href="https://popper.js.org/" rel="noopener noreferrer"&gt;popper&lt;/a&gt; por debaixo dos panos), que nos permite usar opções do popper. Sendo assim podemos utilizar a opção &lt;code&gt;offset&lt;/code&gt;para controlar o quanto a seta/arrow fica dentro ou distante do elemento a ser referenciado.&lt;/p&gt;

&lt;p&gt;O nosso tour começa a tomar a seguinte cara:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mounted() {
      this.$nextTick(() =&amp;gt; {
        const tour = this.$shepherd({
          useModalOverlay: true,
          defaultStepOptions: {
            popperOptions: {
              modifiers: [{ name: 'offset', options: { offset: [0, 50] } }]
            }
          }
        });

        tour.addStep({
          attachTo: { element: '#shepherd-teste', on: 'top' },
          text: 'Test'
        });

        tour.start();
      });
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Onde &lt;code&gt;[0, 50]&lt;/code&gt;, escolhe se a nossa seta (e consequentemente o elemento criado pelo shepherd) estará mais longe ou mais perto do elemento em destaque (referenciado no attachTo). Quanto maior o segundo número, mais distante a seta/elemento estará.&lt;/p&gt;

&lt;p&gt;Exemplo com &lt;code&gt;[0, 50]&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyxfsbq19i4odkpal8s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyxfsbq19i4odkpal8s2.png" alt="Exemplo com [0, 50]"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exemplo com &lt;code&gt;[0,0]&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0x24nyooh62pldxl6i6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0x24nyooh62pldxl6i6.png" alt="Exemplo com [0,0]"&gt;&lt;/a&gt;  &lt;/p&gt;




&lt;p&gt;&lt;a href="https://dev.to/cesarbhering/usando-o-shepherdjs-para-fazer-tours-em-uma-aplicacao-nuxt-vuejs-parte-2-1d22"&gt;Ir para a parte 2.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>shepherdjs</category>
      <category>tours</category>
      <category>nuxt</category>
      <category>portuguese</category>
    </item>
  </channel>
</rss>
