1.10.2 • Published 2 days ago

@zeedhi/zd-crosstab-vue v1.10.2

Weekly downloads
-
License
-
Repository
-
Last release
2 days ago

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

NomeTipoPadrãoDescrição
datasourceIDatasourceFonte de dados do componente
cellICell{ reducerInitialValue: 0, align: 'right' }Configuração de exibição das células
rowsIField[][]Campos que serão utilizados como linhas
colsIField[][]Campos que serão utilizados como colunas
noDataTextstring'NO_DATA'Texto a ser exibido quando o datasource não possuir dados
loadingSlotIComponentRender[][{ name: 'name-loading', component: 'ZdText', text: 'Loading items...' }]Componente a ser renderizado enquanto o datasource estiver carregando
heightstring \| number'auto'Altura do componente
densebooleantrueDefine se a altura das linhas será densa

Eventos

NomeParâmetrosDescrição
cellClick{ component, event, element, value, labels }: IEventParam<Crosstab>Evento disparado ao clicar em uma célula

IField

NomeTipoPadrãoDescrição
namestringNome do campo
labelstringLabel a ser exibida no Crosstab
showFooterbooleanfalseExibe a coluna no footer
showHeaderbooleantrueExibe a coluna no header
sortstring \| ((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
valuesFilteredstring[]Filtro de valores que podem ser renderizados. Deve ser um array de strings contendo os possíveis valores

ICell

NomeTipoPadrãoDescrição
namestringNome do campo a ser utilizado para agregar as células
alignstring'right'Alinhamento dos valores das células
componentPropsIDictionaryPropriedades utilizadas para formatar as células. Elas serão formatadas de acordo com o componente utilizado
formatterstring \| ((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
reducerstring \| ((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
reducerInitialValuenumber0Valor inicial do agregador

ILabel

NomeTipo
fieldany
valuestring
1.10.2

2 days ago

1.10.1

4 days ago

1.10.0

6 days ago

1.9.0

3 months ago

1.8.0

4 months ago

1.7.0

4 months ago

1.5.3

5 months ago

1.6.0

5 months ago

1.5.2

5 months ago

1.5.1

5 months ago

1.5.0

6 months ago

1.4.1

6 months ago

1.4.0

8 months ago

1.3.0

8 months ago

1.2.1

1 year ago

1.2.0

2 years ago

1.0.2

2 years ago

1.1.0

2 years ago

1.0.3

2 years ago

1.0.1

3 years ago