> For the complete documentation index, see [llms.txt](https://docs.gaiodataos.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.gaiodataos.com/gaio-dataos-portuguese/tools/tarefas/entrega/conteudo/documentacao-do-context-helper.md).

# Documentação do Context Helper

O objeto `context` fornece uma interface poderosa para acessar dados e executar ações dentro do Report Static Query Builder. Ele está disponível globalmente como `window.context` e contém diversos componentes principais.

### Estrutura Geral

```javascript
{
  params: {},       // Parâmetros de query
  table: {},        // Tabelas disponíveis com dados
  flow: Function,   // Carregar ou abrir um flow
  form: Function,   // Abrir um formulário
  query: {}         // Objeto Query Builder
}
```

### Componentes

#### params

O objeto `params` contém todos os parâmetros de query disponíveis para o report atual.

```javascript
// Exemplo
context.params.userId = "12345";
context.params.startDate = "2023-01-01";
```

***

#### table

O objeto `table` contém todas as tabelas disponíveis, onde cada tabela é uma lista de objetos.

```javascript
// Exemplo
const firstUser = context.table.users[0];

const totalSales = context.table.sales
  .reduce((sum, sale) => sum + sale.amount, 0);
```

***

#### flow()

A função `flow()` permite carregar ou abrir outro flow a partir do report atual.

**Parâmetros**

```javascript
context.flow({
  flowId: "flow123",                // Obrigatório: ID do flow a ser carregado
  executionType: "loadFlow",        // Obrigatório: "loadFlow" ou "openFlow"
  reloadCurrentFlow: true,          // Opcional: Recarregar o flow atual após execução
  reloadCurrentContent: true,       // Opcional: Recarregar o conteúdo atual após execução
  resetParams: false,               // Opcional: Resetar params para o padrão
  params: [                         // Opcional: Parâmetros a serem enviados
    {
      paramName: "userId",
      paramValue: "12345"
    },
    {
      paramName: "view",
      paramValue: "detailed"
    }
  ]
});
```

**Opções de executionType**

* `openFlow` – Abre o flow selecionado no dashboard
* `loadFlow` – Executa o flow em segundo plano

***

#### form()

A função `form()` permite abrir um formulário a partir do report atual.

**Parâmetros**

```javascript
context.form({
  formId: "form123",                // Obrigatório: ID do formulário
  params: [                         // Opcional: Parâmetros enviados ao formulário
    {
      paramName: "userId",
      paramValue: "12345"
    },
    {
      paramName: "mode",
      paramValue: "edit"
    }
  ]
});
```

***

#### query

A propriedade `query` fornece acesso ao Query Builder.

Esse recurso permite construir e executar consultas programaticamente.

{% hint style="warning" %}
Para documentação detalhada sobre o Query Builder, consulte a aba específica de Query Builder.
{% endhint %}

### Exemplos Práticos

#### Navegar entre flows com base em uma condição

```javascript
if (context.table.users.length > 0) {
  context.flow({
    flowId: "userDetailsFlow",
    executionType: "openFlow",
    params: [
      {
        paramName: "userId",
        paramValue: context.table.users[0].id
      }
    ]
  });
} else {
  context.flow({
    flowId: "noUsersFlow",
    executionType: "openFlow"
  });
}
```

***

#### Abrir um formulário com dados do contexto atual

```javascript
// Abrir formulário de edição para o primeiro produto
context.form({
  formId: "productEditForm",
  params: [
    {
      paramName: "productId",
      paramValue: context.table.products[0].id
    },
    {
      paramName: "category",
      paramValue: context.params.currentCategory
    }
  ]
});
```

***

#### Executar um flow em segundo plano e recarregar a página atual

```javascript
// Atualiza dados em background e recarrega a visualização atual
context.flow({
  flowId: "dataUpdateFlow",
  executionType: "loadFlow",
  reloadCurrentFlow: true,
  reloadCurrentContent: true,
  resetParams: false
});
```

***

### Boas Práticas

1. **Gerenciamento de Parâmetros:**\
   Ao enviar parâmetros para flows ou formulários, inclua apenas os que precisam ser alterados em relação ao contexto atual.
2. **Tratamento de Erros:**\
   Sempre verifique se os IDs obrigatórios (`flowId`, `formId`) são válidos antes de chamar as funções.
3. **Experiência do Usuário:**\
   Utilize `reloadCurrentFlow: true` com cautela, pois isso recarregará a visualização atual do usuário.
4. **Performance:**\
   Ao trabalhar com tabelas grandes, considere processar os dados antes de navegar para outro flow para reduzir transferência desnecessária de dados.
