diff --git a/pt/developing-capabilities/analytics.mdx b/pt/developing-capabilities/analytics.mdx index 659d75b..edd2400 100644 --- a/pt/developing-capabilities/analytics.mdx +++ b/pt/developing-capabilities/analytics.mdx @@ -9,16 +9,12 @@ O `dataLayer` é a camada de dados utilizada pelo Google Tag Manager ou Google Tag (utilizado pelo Google Analytics) para gerenciar os eventos dos pixels que estão configurados na tag. -Em um projeto deco.cx existe uma -[sdk/analytics.ts](https://github.com/deco-sites/fashion/blob/main/sdk/analytics.tsx) -que contem a função **sendEvents**, que recebe um objeto do tipo +No template da deco.cx, existe o hook +[useSendEvent](https://github.com/deco-sites/storefront/blob/main/sdk/useSendEvent.ts) +que aceita como parâmetro o objeto da interface Options, que nele possui a propriedade [AnalyticsEvent](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/commerce/types.ts#L754) -e adiciona o dado no dataLayer. Neste mesmo arquivo, também contem 2 -componentes, que recebe uma propriedade `event` do tipo AnalyticsEvent e envia o -evento para o dataLayer. O **SendEventOnLoad** dispara o evento quando ocorrer o -evento de `load` do navegador, ele é útil para enviar os eventos, cujo nome tem -padrão `view_*`. Já o **SendEventOnClick** dispara o evento quando o elemento -for clicado. +e retorna os atributos necessários para disparar o evento no dataLayer. +Esse hook facilita o envio de eventos de view, click e change diretamente nos elementos, sem precisar criar componentes específicos. Exemplos: @@ -27,7 +23,7 @@ Exemplos: uma Island. ```tsx -import { sendEvent } from "$store/sdk/analytics.tsx"; +import { useSendEvent } from "$store/sdk/analytics.tsx"; interface Props { name: string; @@ -39,35 +35,44 @@ interface Props { } function AddToCart({ name, sku, id, price, discount, currency }: Props) { - const handleClick = () => { - addSkuToCart({ sku, quantity: 1 }); // function that call api to add sku - sendEvent({ + const addToCartEvent = useSendEvent({ + on: "click", + event: { name: "add_to_cart", params: { currency, value: price, - items: [{ - item_id: id, - quantity: 1, - price: price + (discount ?? 0), - discout, - name, - }], + items: [ + { + item_id: id, + quantity: 1, + price: price + (discount ?? 0), + discount, + name, + }, + ], }, - }); + }, + }); + + const handleClick = () => { + addSkuToCart({ sku, quantity: 1 }); }; - return ; + return ( + + ); } ``` -2. Enviando evento de `view_item` na página de produto ao carregar a página, - utilizando SendEventOnLoad. +2. Enviando evento de `view_item` na página de produto ao carregar a página ```tsx import type { Product } from "apps/commerce/types.ts"; import { mapProductToAnalyticsItem } from "apps/commerce/utils/productToAnalyticsItem.ts"; -import { SendEventOnLoad } from "$store/sdk/analytics.tsx"; +import { useSendEvent } from "$store/sdk/analytics.tsx"; import { useOffer } from "$store/sdk/useOffer.ts"; interface Props { @@ -77,33 +82,34 @@ interface Props { function ProductDetails({ product, currency }: Props) { const { price, listPrice } = useOffer(product.offers); + const item = mapProductToAnalyticsItem({ product, price, listPrice }); + + const viewItemEvent = useSendEvent({ + on: "view", + event: { + name: "view_item", + params: { + currency, + value: price, + items: [item], + }, + }, + }); return ( - <> +