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>"
    }
]