# Módulo

Ao criar um aplicativo, você deseja reutilizar componentes e consultas em diferentes aplicativos. Módulos são o que você precisa. Um módulo compreende componentes e consultas. Você pode inserir um módulo em um aplicativo ou em outros módulos (referidos como *aplicativos externos* no restante deste documento) e ele funciona como um único componente.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-890de16454f06e2c138f2b045955907d67139857%2F01.png?alt=media" alt=""><figcaption><p>Construindo um<a href="#demo-a-statistics-module">módulo estático</a></p></figcaption></figure>

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-05e9f72fdf4d1f73fd84be95e23000fe44ec2251%2F02.png?alt=media" alt=""><figcaption><p>Reutilize este módulo em qualquer lugar</p></figcaption></figure>

## Noções básicas do módulo

### Criando um novo módulo

Selecione **Novo > Módulo** no canto superior direito da página inicial para entrar no editor do módulo.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-854860101985df5ebcafcdbbc0a038c4ea465ab1%2F03.png?alt=media" alt=""><figcaption></figcaption></figure>

### Definindo configurações do módulo

Você pode definir as configurações de um módulo na guia **Configurações** do navegador de dados:

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-720dc2fca115fed1e70cb86f5d345710e32a9945%2F04.png?alt=media" alt=""><figcaption></figcaption></figure>

* **Entrada**: parâmetros passados ​​para o módulo atual a partir de aplicativos externos.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-60bdafd19000a49c5b5c9c3ab3f1bbcf15a1fff2%2F05.png?alt=media" alt=""><figcaption></figcaption></figure>
* **Saída**: dados expostos a aplicativos externos.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-4b45079f233bd3134e6fbd92879e33a8df52e77a%2F06.png?alt=media" alt=""><figcaption></figcaption></figure>
* **Método**: métodos expostos a aplicativos externos. Por exemplo, você pode definir um módulo com um método `redefinicaoDeTitulo`, para que aplicativos externos possam chamá-lo para redefinir o título do módulo.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-571ba46a9f6499a2328dd4b886f2123685e61414%2F07.png?alt=media" alt=""><figcaption></figcaption></figure>
* **Evento**: os eventos do módulo podem ser tratados por aplicativos externos. Por exemplo, você pode definir um evento chamado `AlteracaoDeDado`, para que aplicativos externos possam adicionar manipuladores de eventos a ele assim que o evento `AlteracaoDeDado` for disparado pelo módulo.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-6fa489082bce78b85ffe5978edc74e31a024b03a%2F08.png?alt=media" alt=""><figcaption></figcaption></figure>

Para mais detalhes, consulte o capítulo [Configurações do módulo](#module-settings).

### UI do módulo de design

As outras áreas do editor de módulos são semelhantes às do editor de aplicativos web. Insira componentes e crie consultas da mesma forma que o processo de criação de aplicativos. No editor de módulo, você pode redimensionar um módulo arrastando o canto inferior direito para o tamanho padrão desejável. Alterne o botão no painel **Propriedades** para controlar se a **altura do componente é dimensionada com o contêiner**. \*\*\*\* Isso funciona apenas para componentes de altura fixa dentro do módulo.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-38b1a21d2922722098c8585bc52fd03ba2a86ca6%2F09.gif?alt=media" alt=""><figcaption></figcaption></figure>

### Inserir módulo em aplicativos ou outros módulos

Ao editar um aplicativo ou módulo, selecione **Inserir > Extensões > Módulos** para exibir os módulos aos quais você tem acesso.

<img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-0c9d4991661376842fbd72e0a607c56b29c156f0%2F10.png?alt=media" alt="" data-size="original">

Em seguida, arraste e solte o módulo na tela, defina os parâmetros de entrada e altere os estilos dentro do painel **Propriedades** do módulo.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-b75855407c7d55ef196af62656c647ed2cc02ea4%2F11.png?alt=media" alt=""><figcaption></figcaption></figure>

Inspecione os dados expostos pelo módulo no navegador de dados.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-c738411e9a46167837d7b017305d1b80ed20ef61%2F12.png?alt=media" alt=""><figcaption></figcaption></figure>

## Configurações do módulo

### Entrada

As entradas do módulo são parâmetros passados ​​ao módulo por aplicativos externos. Os tipos de entrada suportados são **dado**, **texto**, **número**, **lista**, **booleano**, \*\*\*\* e **consulta**. Os primeiros cinco são tipos de dados. Escolha **dados** para não restringi-lo a um tipo de dados específico. Ao escolher o tipo de **consulta**, você pode passar uma consulta de aplicativos externos e acioná-la dentro do módulo. Em seguida, você pode referenciar um parâmetro de entrada do módulo por seu \*\*nome\*\*.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-2bf87506566a10d786cfe3e939aaa14a3ead2d8d%2F13.png?alt=media" alt=""><figcaption></figcaption></figure>

### Demonstração: Um módulo de estatísticas

Esta seção orienta você pelas etapas para criar um módulo de estatísticas e reutilizá-lo em um aplicativo. & #x20;

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-05e9f72fdf4d1f73fd84be95e23000fe44ec2251%2F02.png?alt=media" alt=""><figcaption></figcaption></figure>

1. Criando entradas de módulo:

Na guia **Configurações**, clique em **+** **Adicionar** para criar uma nova entrada de módulo e, em seguida, defina seu **nome**, **tipo**, **valor padrão** (opcional) e **dica** (opcional). Neste exemplo, três entradas de módulo são adicionadas: duas entradas de texto `título`, `imagemUrl` e uma entrada numérica `contador`:

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-e5a5441d675834f03a5cc30d009483a575cd96c5%2F14.png?alt=media" alt=""><figcaption></figcaption></figure>

2. Projetando a UI do módulo:
3. Insira um **contêiner** no módulo.
4. Adicione dois componentes **text** e um componente **image** ao contêiner.
5. Ajuste suas propriedades, como layout, altura e estilo.
6. Vincule o valor dos componentes às entradas do módulo. Por exemplo, a **Fonte da imagem** está vinculada ao parâmetro de entrada `imagemUrl.value`.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-c18498c90a9b8df09af57ac886396a1519704991%2F15.png?alt=media" alt=""><figcaption></figcaption></figure>

1. Insira o módulo recém-criado em um aplicativo ou módulo externo e você poderá passar valores para configurar suas propriedades.

   <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-a08665420a439d40ebb22958fd727930372822bb%2F16.png?alt=media" alt=""><figcaption></figcaption></figure>
2. Reutilize o módulo várias vezes, passando diferentes valores de entrada.

   <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-05e9f72fdf4d1f73fd84be95e23000fe44ec2251%2F02.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Teste de entrada

Para testar rapidamente a eficácia dos parâmetros de entrada durante a edição de um módulo, você pode usar a função **Teste de entrada**. No **editor de módulo**, selecione o módulo inteiro para realizar testes com dados de entrada simulados no painel **Propriedades**. No exemplo mencionado anteriormente, você pode definir os valores de teste para as três entradas do módulo: `titulo`, `imagemUrl` e `contador`, conforme mostrado abaixo:

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-1b7d26b75ae123b625817bc735a1db311e2f2829%2F17.png?alt=media" alt=""><figcaption></figcaption></figure>

### Saída

As saídas do módulo são os dados expostos a um aplicativo ou outros módulos. Você pode inspecionar as saídas de um módulo no navegador de dados e acessá-las via código JavaScript em `{{ }}`. O exemplo a seguir mostra as saídas em um módulo de filtragem de usuário.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-801f75a7e7d3bdd11e54e185730fe365c465a475%2F18.png?alt=media" alt=""><figcaption></figcaption></figure>

Em seguida, você pode verificar e referenciar as saídas de um módulo em aplicativos ou outros módulos que o utilizam.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-d915b36a825a76968a470b9d5af3a61af77db8e3%2F19.png?alt=media" alt=""><figcaption></figcaption></figure>

### Método

#### Adicionando um novo método

Na guia **Configurações**, clique em **+** **Adicionar** para criar um novo método de módulo. Clique no método para renomeá-lo e selecione uma ação. No exemplo a seguir, o método `limparTudo` foi projetado para limpar o conteúdo em ambas as caixas de entrada. Para conseguir isso, selecione **Executar JavaScript** como a ação e escreva o código JS para chamar o método `limparValor` de ambos os dois componentes de entrada.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-01feb567b75d05fbed971b8923f4d9962cebe48c%2F20.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Ao criar um método para um módulo, você não pode criar parâmetros de entrada para o método e só pode fazer referência a parâmetros dentro do escopo do módulo atual.
{% endhint %}

#### Chamando um método

Ao usar módulos, você pode chamar um método de módulo de duas maneiras:

* Em manipuladores de eventos, selecione **Ação** > **Componente de controle** e, em seguida, selecione **componente** e **método**.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-2103744eff0855a0fa54e9cd6517d5638b651346%2F21.png?alt=media" alt=""><figcaption></figcaption></figure>
* Use notação de ponto em consultas JavaScript. Por exemplo, `modulo1.limparTudo()` chama o método `limparTudo()` de `modulo1`.

#### Testando o Método

Você pode simular a chamada do método de teste na função **Teste de Método**.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-3a0c2503d669857b79cd8bfd12ab2174fc2dccc8%2F22.gif?alt=media" alt=""><figcaption></figcaption></figure>

### Evento

Os eventos são usados ​​para transferir sinais de um módulo para aplicativos externos, como definir eventos `pedidoFeito` `pedidoModificado` para um módulo de gerenciamento de pedidos. Você pode adicionar e disparar eventos dentro de um módulo e lidar com eles usando [manipuladores de eventos](https://pocketblocks.pedroza.dev/portugues-brasil/construcao-de-aplicativos/event-handlers) externamente.

#### Adicionar um novo evento

Na guia **Configurações**, clique em **+** **Adicionar** para criar um novo evento de módulo. Clique no evento para definir seu nome.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-dc001d9c55e738c7650a6922f47f4c31cc848c35%2F23.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Acionando um evento

No exemplo a seguir, o evento `conteudoAlterado` é acionado quando o conteúdo de qualquer caixa de entrada é alterado. Você pode acioná-lo de duas maneiras:

* Em **Manipuladores de eventos** de ambos os componentes de entrada, clique em **+ Adicionar**, selecione **Alterar** como o evento do componente e **Disparador de evento de módulo** como a ação e, finalmente, selecione o evento do módulo `conteudoAlterado`.

  <figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-d5c0a117f1c98da8e0ae61bd74299a6fe9f1b1c2%2F24.png?alt=media" alt=""><figcaption></figcaption></figure>
* Use notação de ponto em consultas JavaScript: `conteudoAlterado.trigger()`.

#### Manipuladores de eventos

Quando um aplicativo usa um módulo, você pode configurar como o aplicativo atual reage aos eventos do módulo. Por exemplo, em **Manipuladores de eventos** de `modulo1`, clique em **+ Adicionar** e selecione o evento do módulo `conteudoAlterado` e a ação **Mostrar aviso**.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-ed24c98c01f4eee9e2d74c1a43cc834eb9f820be%2F25.png?alt=media" alt=""><figcaption></figcaption></figure>

#### Testando Evento

O exemplo a seguir conduz testes de eventos na seção **Teste de Eventos**.

<figure><img src="https://3319212993-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fbz5pg8HuItSzRC8Qjkc6%2Fuploads%2Fgit-blob-e88c7ff0eeaef8e132b8bff92346e458e3add66a%2F26.gif?alt=media" alt=""><figcaption></figcaption></figure>

## Permissions

Os usuários finais não recebem permissões automaticamente para visualizar módulos em aplicativos ou outros módulos com os quais tenham permissão de visualização. Por isso, você deve conceder permissão nos módulos como faz com os aplicativos. Para obter mais informações, consulte [permissões para recursos](https://pocketblocks.pedroza.dev/portugues-brasil/gerenciamento-do-espaco-de-trabalho/permissions-for-resources).

## Lançamentos e versões

PocketBlocks armazena as versões históricas de seus módulos para suas referências. Clique em **Visualizar > Publicar** no canto superior direito. O gerenciamento de lançamento de um módulo é idêntico ao de um aplicativo. Para obter informações detalhadas, consulte [gerenciamento de versões](https://pocketblocks.pedroza.dev/portugues-brasil/version-and-release-management#release-management).

{% hint style="info" %}
Para um módulo não publicado, os aplicativos e módulos usam sua versão mais recente; enquanto para um publicado, você precisa publicá-lo novamente para sincronizar suas alterações mais recentes.
{% endhint %}
