import { PoComboFilter, PoMultiselectFilter } from '../../po-field';
import { PoDynamicField } from '../po-dynamic-field.interface';
import { PoDynamicViewRequest } from './interfaces/po-dynamic-view-request.interface';
/**
* @usedBy PoDynamicViewComponent
*
* @docsExtends PoDynamicField
*
* @description
*
* Interface para definição das propriedades dos campos de visualização que serão criados dinamicamente.
*/
export interface PoDynamicViewField extends PoDynamicField {
/**
* Indica se o campo será um `po-tag`.
*
* @default `false`
*/
tag?: boolean;
/**
* Determina a cor da tag. As maneiras de customizar as cores são:
* - Hexadeximal, por exemplo `#c64840`;
* - RGB, como `rgb(0, 0, 165)`;
* - O nome da cor, por exemplo `blue`;
* - Usando uma das cores do tema do PO:
* - Valores válidos:
* - `color-01`
* - `color-02`
* - `color-03`
* - `color-04`
* - `color-05`
* - `color-06`
* - `color-07`
* - `color-08`
* - `color-09`
* - `color-10`
* - `color-11`
* - `color-12`
*/
color?: string;
/**
* Determina a cor do texto da tag. As maneiras de customizar as cores são:
* - Hexadeximal, por exemplo `#c64840`;
* - RGB, como `rgb(0, 0, 165)`;
* - O nome da cor, por exemplo `blue`;
*/
textColor?: string;
/**
* Permite que seja exibido em tela, de forma concatenada as propriedades `fieldLabel` + `fieldValue`.
* A ordem sempre será `fieldLabel` e depois `fieldValue`, não sendo possível alterar.
*
* > Propriedade funciona corretamente caso as propriedades `fieldLabel` e `fielValue` sejam válidas.
*
* @default `false`
*/
concatLabelValue?: boolean;
/**
* Nome da propriedade do objeto retornado que será utilizado como descrição do campo.
*
* O valor padrão é: `label`.
*
*/
fieldLabel?: string;
/**
* Nome da propriedade do objeto retornado que será utilizado como valor do campo.
*
* O valor padrão é: `value`.
*
*/
fieldValue?: string;
/**
* Define um ícone que será exibido ao lado do valor para o campo do tipo *tag*.
*
* > Veja os valores válidos na [biblioteca de ícones](https://po-ui.io/icons).
*/
icon?: string;
/**
* Define que a propriedade `property` é uma lista ou um objeto.
*
* > Por padrão, espera-se que a lista ou o objeto esteja com as propriedades `label` e `value`.
* Caso estejam com nomes diferentes, deve-se usar as propriedades `fieldLabel` e `fieldValue`.
* > É ignorada caso a propriedade `searchService` esteja sendo utilizada.
*
* @default `false`
*/
isArrayOrObject?: boolean;
/**
* Define o formato de exibição para o valor de um campo.
*
* - Quando `format` é uma `string`, o formato aplicado depende da propriedade **type** segue como usar cada tipo:
* - `currency`: Utiliza códigos de moeda definidos pelo [CurrencyPipe](https://angular.io/api/common/CurrencyPipe).
* Exemplos: Use 'BRL' para Real Brasileiro e 'USD' para Dólar Americano.
* - `date`: Adota formatos de data especificados pelo [DatePipe](https://angular.io/api/common/DatePipe).
* Suporta formatos personalizados, como dia (dd), mês (MM) e ano (yyyy ou yy).
* Formato padrão é 'dd/MM/yyyy'. Exemplos: 'dd/MM/yyyy', 'dd-MM-yy', 'mm/dd/yyyy'.
* - `time`: Aceita formatos de tempo, incluindo hora (HH), minutos (mm), segundos (ss) e opcionalmente
* milisegundos (f-ffffff). Formato padrão é 'HH:mm:ss'. Exemplos: 'HH:mm', 'HH:mm:ss.ffffff', 'HH:mm:ss.ff'.
* - `number`: Usa especificações do [DecimalPipe](https://angular.io/api/common/DecimalPipe) para formatação numérica.
* Na ausência de um formato específico, o número é exibido como fornecido.
* Exemplo: Entrada `50`, formato `'1.2-5'`, resulta em `50.00`.
*
* - Quando `format` é um `Array`:
* - Cada elemento do array representa uma propriedade do objeto.
* - Os valores dessas propriedades são concatenados, separados pelo padrão ' - '.
* - Exemplo: Para `format: ["id", "name"]` e um objeto `{ id: 1, name: 'Carlos Diego' }`,
* o resultado será `'1 - Carlos Diego'`.
*
* @example Para formatar um campo de moeda, use format: "BRL".
* Para um campo de data, use format: "dd/MM/yyyy".
* Para combinar propriedades de um objeto em um campo, use format: ["id", "name"].
*/
format?: string | Array;
/**
* Informa a ordem de exibição do campo.
*
* Exemplo de utilização:
*
* ```
* [
* { property: 'test 1', order: 2 },
* { property: 'test 2', order: 1 },
* { property: 'test 3' },
* { property: 'test 4', order: 3 }
* ];
* ```
*
* Na exibição a ordem ficará dessa forma:
* ```
* [
* { property: 'test 2', order: 1 },
* { property: 'test 1', order: 2 },
* { property: 'test 4', order: 3 },
* { property: 'test 3' }
* ];
* ```
*
* Só serão aceitos valores com números inteiros maiores do que zero.
*
* Campos sem `order` ou com valores negativos, zerados ou inválidos
* serão os últimos a serem renderizados e seguirão o posicionamento dentro do
* array.
*/
order?: number;
/**
* Defini o texto alternativo descrevendo a imagem.
*
* Exemplo de utilização:
*
* ```
* [
* { property: 'imagem 1', image:'string', alt:'string', height:'300'},
* ];
* ```
* **Componentes compatíveis:** `po-image`.
*
*/
alt?: string;
/**
* Defini o texto alternativo descrevendo a imagem.
*
* Exemplo de utilização:
*
* ```
* [
* { property: 'imagem 1', image:'string', alt:'string', height:'number'},
* ];
* ```
* **Componentes compatíveis:** `po-image`.
*
*/
height?: string;
/**
* Possibilita a utilização de imagem.
*
* Exemplo de utilização:
*
* ```
* [
* { property: 'imagem 1', image:'string', alt:'string', height:'300'},
* ];
* ```
* * @default `false`
*
* **Componentes compatíveis:** `po-image`.
*/
image?: boolean;
/**
* Lista de opções que podem ser vinculadas à propriedade p-value.
* Quando uma opção de valor é passada, sua propriedade label será atribuída à propriedade p-value.
*
* Exemplo de utilização:
*
* ```
* fields = [
* {
* property: 'name', options: [
* {label: 'Anna', value: '1'},
* {label: 'Jhon', value: '2'},
* {label: 'Mark', value: '3'}
* ]
* }
* ];
* ```
*
* ```
*
*
* ```
*
*/
options?: Array<{
label: string;
value: string | number;
}>;
/**
* Serviço que será utilizado para buscar os itens e preencher a lista de opções dinamicamente.
* Pode ser informada uma URL ou uma instancia do serviço baseado em PoComboFilter.
* **Importante**
* > Para que funcione corretamente, é importante que o serviço siga o
* [guia de API do PO UI](https://po-ui.io/guides/api).
*/
optionsService?: string | PoComboFilter | PoMultiselectFilter;
/**
* Habilita a visualização de múltiplos itens.
* Útil para exibir dados em formatos semelhantes aos componentes que suportam seleção múltipla.
*/
optionsMulti?: boolean;
/**
* Serviço customizado para um campo em específico.
* Pode ser ser informada uma URL ou uma instancia do serviço baseado em PoDynamicViewRequest.
* **Importante:**
* > A propriedade `property` deve receber um valor válido independente de sua utilização para
* execução correta.
* > Para que funcione corretamente, é importante que o serviço siga o
* [guia de API do PO UI](https://po-ui.io/guides/api).
*/
searchService?: string | PoDynamicViewRequest;
/** Texto exibido quando o valor do componente for *true*. */
booleanTrue?: string;
/** Texto exibido quando o valor do componente for *false*. */
booleanFalse?: string;
/**
* Objeto que será enviado como parâmetro nas requisições de busca `searchService` ou `optionsService`
* utilizadas pelos campos que dependem de serviços para carregar seus dados.
*
* Por exemplo, para o parâmetro `{ age: 23 }` a URL da requisição ficaria:
*
* ``
* url + /1?age=23
* ``
*/
params?: any;
}