# Objeto Button
Métodos do botão devolvido por generateButton() e os objetos actions.
`generateButton()` devolve um objeto Button. Renderize-o com `.render()` e controle-o com
os métodos abaixo.
Referência baseada na implementação **JavaScript** atual (`Button.js`), a fonte autoritativa.
```js
const button = facipay.generateButton({ /* ... */ });
button.render('#facipay-button-container');
```
## Ciclo de vida
Renderiza o botão. `container` pode ser um seletor (`'#facipay-button-container'`) ou um
elemento DOM. Lança `Error('Container not found')` se o elemento não existir. Aguarda a
validação da chave antes de mostrar o botão.
Funde novas opções nas atuais (`Object.assign`) e re-renderiza o botão.
Remove o botão e limpa o container.
Ativa o botão.
Desativa o botão.
## Referências de pagamento
Usadas para mostrar o valor no botão e suportar vários itens. Ver
[Referências múltiplas](/pt/sdk/recipes/multiple-references).
Adiciona **uma** referência de pagamento e recalcula o total.
Substitui o conjunto de referências por uma lista (ignora entradas sem `referenceNumber`)
e recalcula o total.
Remove a referência com o `referenceNumber` indicado e recalcula o total.
Atualiza a quantidade de uma referência existente (valida contra `referenceTotalQuantity`)
e recalcula o total.
Soma `referenceAmount × (referenceQuantity || 1)` de todas as referências (uma quantidade ausente ou zero conta como 1).
Cada referência tem a forma:
```ts
{
referenceNumber: string; // id único
referenceAmount: number; // preço unitário (AOA, inteiro)
referenceQuantity: number; // quantidade
referenceTotalQuantity: number; // stock disponível (limite do updateQuantity)
}
```
```js
button.addAllPaymentReferences(cart.items.map((item) => ({
referenceNumber: String(item.id),
referenceAmount: item.price,
referenceQuantity: item.quantity,
referenceTotalQuantity: item.stock_quantity,
})));
```
## Cliente
Define os dados do cliente (`{ name, phone }`), tipicamente dentro de `onClick`.
```js
facipay.button.addCustomerInfo({ name: 'Pascoal Luís', phone: '947554613' });
```
## Objetos `actions`
A SDK passa um objeto `actions` diferente conforme o callback:
| Callback | `actions` disponível |
|---|---|
| `onInit(actions)` | `enable()`, `disable()` |
| `onClick(data, actions)` | `enable()`, `disable()`, `reject()` |
| `onApprove(data, actions)` / `onPending(data, actions)` | `onPopupWindowClosed(cb)` |
Ativam/desativam o botão (em `onInit` e `onClick`).
Interrompe a sequência do botão neste clique (em `onClick`) — o popup não abre.
Regista uma função a correr quando o popup fecha (em `onApprove`/`onPending`).
Comunicação por postMessage entre o popup e a sua página.