Intelligent GridDocumentação em português

Agrupamento e subtotais

new IntelligentGrid('#grid', {
    groupBy: ['region', 'city'],      // o mais externo primeiro
    columns: [
        { field: 'city' },
        { field: 'region' },
        { field: 'sales', type: 'currency', footer: 'sum' },              // subtotal: soma, como o rodapé
        { field: 'orders', type: 'integer', footer: 'sum', subtotal: 'count' },
        { field: 'note', subtotal: false }
    ],
    ...
});

Cada grupo ganha uma linha com o título da coluna, o valor, o número de linhas e um subtotal abaixo de cada coluna que tiver um. Clique em uma linha de grupo para recolhê-la ou expandi-la.

▾ Region: South (3)                    $60.00
    ▾ City: Curitiba (1)               $20.00
        Curitiba   South               $20.00
    ▾ City: Porto Alegre (2)           $40.00
        ...
▸ Region: (blank) (1)                   $1.00

Subtotais

subtotal aceita os mesmos valores que footer: um atalho ('sum', 'avg', 'count', 'counta', 'min', 'max', 'median'), uma fórmula como '=SUM([sales])*0.9' ou uma função (rows, column, grid) => value. Ele é calculado sobre as linhas do grupo. Sem subtotal, é usado o footer da coluna; subtotal: false não mostra nada. A linha de rodapé continua totalizando todas as linhas filtradas.

A primeira coluna visível contém o rótulo do grupo, então um subtotal nessa coluna não é exibido.

Ordem

Os grupos são ordenados pelos seus valores (crescente, vazios por último). Ordenar por um campo agrupado muda a direção dos seus grupos; ordenar por outros campos ordena as linhas dentro de cada grupo. Os filtros e a busca são aplicados antes do agrupamento, então as contagens e os subtotais acompanham esses filtros.

Editar um campo agrupado move a linha para o seu novo grupo na hora; editar outros valores atualiza os subtotais.

API

grid.setGroupBy(['region']);      // [] ou null desagrupa
grid.getGroupBy();                // ['region']
grid.getGroups();                 // [{ key, level, field, value, count, collapsed }] na ordem de exibição
grid.toggleGroup(key);            // ou toggleGroup(key, true / false) para abrir / fechar
grid.expandGroups();
grid.collapseGroups();

grid.on('groupChange', e => e.detail.groupBy);
grid.on('groupToggle', e => console.log(e.detail.key, e.detail.collapsed));

groupsCollapsed: true começa com todos os grupos fechados (grupos que aparecem depois, após um filtro ou novos dados, também começam fechados). As chaves são strings opacas; pegue-as em getGroups().

Com outros recursos

Editar esta página no GitHub