Snippets

Opções avançadas para utilização de componentes de carregamento dinâmico

O Snippet é um tipo de componente que pode ser carregado após a renderização inicial/principal da página. Um exemplo disso são as sugestões de pesquisa de acordo com o termo digitado.

Estrutura de diretórios

Os Snippets são armazenados na pasta "Snippets" localizada na raiz do projeto. Certifique-se de organizar seus arquivos de snippet corretamente dentro dessa pasta.

Para o retorno de dados, assim como uma página, é utilizado um arquivo .graphql para fazer a query dos dados necessários para o carregamento do snippet, o arquivo deverá estar dentro da pasta Queries.

Utilização do Snippet

Existem duas maneiras de renderizar um Snippet: usando o SDK JavaScript do Storefront ou através do método fetch do JavaScript.

A seguir, você encontrará instruções detalhadas e exemplos para ambos os métodos, considerando um arquivo snippet.html dentro da pasta Snippets e um respectivo query.graphql dentro da pasta Queries:

SDK Javascript

É possível utilizar o SDK Javascript da seguinte forma:

const variables = { query: "tenis" }; const response = await client.snippet.render("snippet.html", "query.graphql", variables);
  • O primeiro parâmetro refere-se ao arquivo .html do snippet.
  • O segundo parâmetro refere-se ao arquivo .graphql da query a ser realizada na API.
  • O terceiro parâmetro refere-se às variáveis da query a ser realizada.

A variável response representa o código HTML renderizado.

📘

Nota

A chamada de renderização é assíncrona, portanto, é necessário usar a palavra-chave await.

Fetch via Javascript

Você também pode utilizar o método fetch do Javascript para chamar a rota /snippet do site. Veja o exemplo abaixo:

const url = window.location.protocol + "//" + window.location.host + "/snippet"; const inputData = { fileName: "snippet.html", queryName: "query.graphql", variables: { query: "tenis" } }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(inputData) }) .then((response) => response.text()) .then((data) => { console.log(data); }) .catch((error) => { console.error('Error:', error); });

Caminhos personalizados

É possível salvar um arquivo .html de snippet e .graphql de query em subpastas em Snippets e em Queries, respectivamente. Veja o exemplo abaixo::

  • Arquivo snippet salvo em Snippets/Product/product_snippet.html
  • Arquivo de query salvo em Queries/SnippetQueries/product_snippet.graphql.

Para renderizar esse Snippet, se utiliza o seguinte formato:

const response = await client.snippet.render("Product/product_snippet.html", "SnippetQueries/product_snippet.graphql", variables);

Vários templates com apenas uma query

Abaixo temos um exemplo, onde é possível renderizar vários templates com o resultado de apenas uma query.

POST pra {url_loja}/snippet/multi -> https://sualoja.com.br/snippet/multi
{ "fileNames": [ "autocomplete_snippet.html", "wholesale_price_snippet.html" ], "queryName": "SnippetQueries/multi_snippet.graphql", "variables": { "query": "tenis", "prodVar": 256704, "quantity": 1 } }
[ { "name": "autocomplete_snippet.html", "success": true, "error": null, "result": "<div></div>" }, { "name": "wholesale_price_snippet.html", "success": true, "error": null, "result": "<div></div>" } ]