@zeedhi/zd-crosstab-vue v1.10.2
ZdCrosstab
Componente de Crosstab para ser usado com o Zeedhi, construído sobre o vue-pivot-table.
Features
- Suporte a agregações personalizadas
- Formatação personalizada das células
- Ordenação de colunas
- Filtros de colunas
- Configuração de largura/altura e alinhamento dos cabeçalhos
- Permitir esconder os sub-cabeçalhos
Getting Started
Instalação
O ZdCrosstab é composto pelos pacotes @zeedhi/zd-crosstab-common
e @zeedhi/zd-crosstab-vue
.
Utilize o comando abaixo para instalar ambos automaticamente:
npm install @zeedhi/zd-crosstab
Ou instale os pacotes separadamente:
npm install @zeedhi/zd-crosstab-vue @zeedhi/zd-crosstab-common
Registro do Componente
Para registrá-lo, adicione o seguinte código ao inicializar a aplicação (por exemplo no arquivo zeedhi.ts
)
import Vue from 'vue';
import { ZdCrosstab } from '@zeedhi/zd-crosstab';
Vue.component('ZdCrosstab', ZdCrosstab);
Uso Básico
Para utilizá-lo em um Metadata, basta definir a propriedade component
como "ZdCrosstab". Use a propriedade cols
para definir os campos que representam as colunas e a propriedade rows
para definir as linhas:
{
"name": "crosstab",
"component": "ZdCrosstab",
"rows": [
{
"name": "type",
"label": "Type"
},
{
"name": "genre",
"label": "Genre"
}
],
"cols": [
{
"name": "nationality",
"label": "Nationality"
}
],
"datasource": {
"loadAll": true,
"data": [
{ "type": "Book", "genre": "Fantasy", "name": "Harry Potter", "nationality": "International" },
{ "type": "Book", "genre": "Fantasy", "name": "The Name of the Wind", "nationality": "International" },
{ "type": "Book", "genre": "Romance", "name": "O Alquimista", "nationality": "National" },
{ "type": "Book", "genre": "Romance", "name": "Capitães da Areia", "nationality": "National" },
{ "type": "Book", "genre": "Comic Strip", "name": "It's a Magical World", "nationality": "International" },
{ "type": "Movie", "genre": "Drama", "name": "The Shawshank Redemption", "nationality": "International" },
{ "type": "Movie", "genre": "Drama", "name": "The Godfather", "nationality": "International" },
{ "type": "Movie", "genre": "Action", "name": "The Dark Knight", "nationality": "International" },
{ "type": "Movie", "genre": "Drama", "name": "Cidade de Deus", "nationality": "National" },
{ "type": "Movie", "genre": "Action", "name": "Tropa de Elite", "nationality": "National" },
{ "type": "Movie", "genre": "Drama", "name": "Schindler's List", "nationality": "International" }
]
}
}
Agregação, Formatação e Ordenação
O próximo exemplo mostra as funcionalidades de agregação (propriedade reducer
), formatação (propriedades componentProps
ou formatter
) e ordenação (propriedade sort
)
{
"component": "ZdCard",
"name": "gdpCard",
"children": [
{
"name": "title",
"component": "ZdText",
"text": "GDP of various Countries",
"tag": "h3"
},
{
"name": "crosstab",
"component": "ZdCrosstab",
"rows": [
{
"name": "continent",
"label": "Continent",
"sort": "{{AppController.sort}}"
},
{
"name": "country",
"label": "Country",
"sort": "{{AppController.sort}}"
}
],
"cols": [
{
"name": "year",
"label": "Year",
"showFooter": true
}
],
"cell": {
"name": "gdp",
"reducer": "SUM",
"componentProps": {
"component": "ZdNumber",
"mask": {
"currencySymbol": " (bi USD)",
"currencySymbolPlacement": "s"
}
}
},
"datasource": {
"loadAll": true,
"data": [
{ "country": "United States", "year": 2010, "continent": "America", "gdp": 14990 },
{ "country": "United States", "year": 2011, "continent": "America", "gdp": 15540 },
{ "country": "China", "year": 2010, "continent": "Asia", "gdp": 6087 },
{ "country": "China", "year": 2011, "continent": "Asia", "gdp": 7552 },
{ "country": "India", "year": 2010, "continent": "Asia", "gdp": 1676 },
{ "country": "India", "year": 2011, "continent": "Asia", "gdp": 1823 },
{ "country": "Brazil", "year": 2010, "continent": "America", "gdp": 2209 },
{ "country": "Brazil", "year": 2011, "continent": "America", "gdp": 2616 },
{ "country": "Australia", "year": 2010, "continent": "Oceania", "gdp": 1146 },
{ "country": "Australia", "year": 2011, "continent": "Oceania", "gdp": 1397 }
]
}
}
]
}
// AppController.ts
export class AppController {
// Order items reversely
public sort = (a: number, b: number) => {
if (a < b) return 1;
if (a === b) return 0;
return -1;
};
}
Também é possível formatar as células de forma manual usando a propridade formatter
:
"cell": {
"name": "gdp",
"reducer": "SUM",
"formatter": "{{AppController.formatter}}"
}
// AppController.ts
export class AppController {
public formatter = (value: number, labels: ILabel[]) => {
return `$ ${value}`;
};
}
Propriedades
Crosstab
Nome | Tipo | Padrão | Descrição |
---|---|---|---|
datasource | IDatasource | Fonte de dados do componente | |
cell | ICell | { reducerInitialValue: 0, align: 'right' } | Configuração de exibição das células |
rows | IField[] | [] | Campos que serão utilizados como linhas |
cols | IField[] | [] | Campos que serão utilizados como colunas |
noDataText | string | 'NO_DATA' | Texto a ser exibido quando o datasource não possuir dados |
loadingSlot | IComponentRender[] | [{ name: 'name-loading', component: 'ZdText', text: 'Loading items...' }] | Componente a ser renderizado enquanto o datasource estiver carregando |
height | string \| number | 'auto' | Altura do componente |
dense | boolean | true | Define se a altura das linhas será densa |
Eventos
Nome | Parâmetros | Descrição |
---|---|---|
cellClick | { component, event, element, value, labels }: IEventParam<Crosstab> | Evento disparado ao clicar em uma célula |
IField
Nome | Tipo | Padrão | Descrição |
---|---|---|---|
name | string | Nome do campo | |
label | string | Label a ser exibida no Crosstab | |
showFooter | boolean | false | Exibe a coluna no footer |
showHeader | boolean | true | Exibe a coluna no header |
sort | string \| ((a: number, b: number) => number) | Função utilizada para ordenar os campos. Esta função deve retornar 1, 0 ou -1, seguindo o mesmo padrão do Arrays.sort | |
valuesFiltered | string[] | Filtro de valores que podem ser renderizados. Deve ser um array de strings contendo os possíveis valores |
ICell
Nome | Tipo | Padrão | Descrição |
---|---|---|---|
name | string | Nome do campo a ser utilizado para agregar as células | |
align | string | 'right' | Alinhamento dos valores das células |
componentProps | IDictionary | Propriedades utilizadas para formatar as células. Elas serão formatadas de acordo com o componente utilizado | |
formatter | string \| ((value: number, labels: ILabel[]) => string \| number) | Função utilizada para formatar as células. Os parâmetros value e labels são passados por parâmetro para a função de formatação | |
reducer | string \| ((sum: number, item: IDictionary) => number) | 'COUNT' | Função utilizada para agregar os valores. Existem duas funções predefinidas, basta passar o nome delas para a propriedade: COUNT e SUM . Também é possível passar uma função personalizada para agregar os valores, utilizando um Accessor |
reducerInitialValue | number | 0 | Valor inicial do agregador |
ILabel
Nome | Tipo |
---|---|
field | any |
value | string |
2 days ago
4 days ago
6 days ago
3 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
6 months ago
6 months ago
8 months ago
8 months ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago