Sort operations

    The Grid Lite supports sorting operations on its data source. Data sorting is controlled on per-column level, allowing you to have sortable and non-sortable columns, while the grid itself controls certain sort behaviors. By default, sorting on a column is disabled unless explicitly configured with the sortable property of the column.

    <igc-grid-lite .data=${data}>
      <igc-grid-lite-column field="price" sortable></igc-grid-lite-column>
    </igc-grid-lite>
    

    You can also control whether the sort operations for string columns should be case sensitive by using the sortingCaseSensitive property or sorting-case-sensitive attribute.

    <igc-grid-lite-column 
      field="name" 
      sortable
      sorting-case-sensitive
    ></igc-grid-lite-column>
    

    For custom comparison logic, set the sortConfiguration property with a comparer function:

    const column = document.querySelector('igc-grid-lite-column[field="name"]');
    column.sortConfiguration = {
      /**
       * Custom comparer function which will be used for sort operations for this column.
       * In the following sample, we compare the `name` values based on their length.
       */
      comparer: (a, b) => a.length - b.length
    };
    

    Single and multi-sorting

    The Grid Lite supports both single and multi-column sorting. Multi-column is enabled by default and can be configured through the sortingOptions property of the grid. The mode property accepts 'single' or 'multiple' as values.

    // Enable single-column sorting
    grid.sortingOptions = { mode: 'single' };
    

    [!NOTE] The single/multi-column sorting behavior controls how end-users interact with the Grid Lite. Sorting through the API with multiple expression will still work when single sorting is enabled.

    Tri-state sorting

    The Grid Lite supports tri-state sorting and it is always enabled. End-users will cycle through the following direction states when clicking on sortable column headers:

    ascending -> descending -> none -> ascending
    

    ondenone é o estado inicial dos dados, ou seja, sem ordenação aplicada pela grade.

    Sorting Indicators

    Quando a ordenação por múltiplas colunas é ativada, os cabeçalhos das colunas exibirão um indicador de ordenação, que é um número que representa a ordem em que as operações de ordenação foram aplicadas.

    The following sample shows the grid sortingOptions property and how it controls the grid sorting behavior.

    Sort Model

    O bloco de construção para operações de ordenação no Grid Lite é oSortingExpression<T> que possui as seguintes propriedades:

    type SortingExpression<T> = {
      /**
       * The `key` of the target column for the sort operation.
       */
      key: keyof T;
      /**
       * The sort direction for the operation.
       */
      direction: 'ascending' | 'descending' | 'none';
      /**
       * Should the operation be case sensitive. Applies to the default string type.
       * If not explicitly passed, it will use the value from the target column sort configuration if applicable.
       */
      caseSensitive?: boolean;
      /**
       * Specifies a custom comparer function for the operation.
       * Will use the value from the target column sort configuration if applicable.
       */
      comparer?: SortComparer<T, T[keyof T]>;
    };
    

    A grade consome essas expressões para seus métodos e configuração da API de sortação e as produz para eventos e seu estado de ordenação quando um usuário final interage com o componente. Veja abaixo para informações adicionais.

    Sort API

    O Grid Lite expõe duas abordagens principais para aplicar operações de ordenação a partir de sua API. Seja pelossort() métodosclearSort() ou pela propriedadesortingExpressions.

    Osort() método aceita uma única expressão ou um array de expressões de ordenação e então ordena os dados da grade com base nessas expressões.

    // Single
    grid.sort({ key: 'price', direction: 'descending' });
    
    // Multiple
    grid.sort([
      { key: 'price', direction: 'descending' },
      { key: 'name', direction: 'descending' },
    ]);
    

    OclearSort() método, como o nome indica, limpa o estado de tipo de uma única coluna ou de todo o componente da grade, dependendo dos argumentos aprovados.

    // Clear the sort state for the `price` column.
    grid.clearSort('price');
    
    // Clear the sort state of the grid.
    grid.clearSort();
    

    Initial Sorting State

    AsortingExpressions propriedade é muito semelhante em comportamento àsort() chamada de método. Ele expõe uma forma declarativa de controlar o estado de ordenação na grade, mas a propriedade mais útil é a capacidade de definir o estado inicial de ordenação quando o Grid Lite é renderizado pela primeira vez.

    Por exemplo, aqui está uma amostra baseada em literatura:

    {
      sortState: SortingExpression<Products>[] = [
        { key: 'price', direction: 'descending' },
        { key: 'name', direction: 'ascending', caseSensitive: true },
      ];
    
      render() {
        return html`<igc-grid-lite .sortingExpressions=${sortState}></igc-grid-lite>`
      }
    }
    

    Ele pode ser usado para obter o estado atual de sortagem do componente e fazer processamento adicional dependendo de outro estado na sua aplicação.

    const state = grid.sortingExpressions;
    // Save the current sort state
    saveUserSortState(state);
    

    Eventos

    Quando uma operação de ordenação é realizada pela interface, o componente emite um evento personalizadosorting. Adetail propriedade é a expressão de ordenação que será aplicada pelo Grid Lite. O evento pode ser cancelado e, se cancelado, interrompe a operação de ordenação atual.

    Após a grade aplicar o novo estado de ordenação, umsorted evento é emitido. Ele contém a expressão usada na última operação de ordenação e não é cancelável.

    grid.addEventListener('sorting', (event: CustomEvent<SortingExpression<T>>) => { ... });
    grid.addEventListener('sorted', (event: CustomEvent<SortingExpression<T>>) => { ... });
    

    No exemplo a seguir, quando você tentar ordenar as colunas Nome e Classificação, a operação será cancelada. Assista ao registro de eventos abaixo para ver isso em ação.

    Remote sort operations

    Em casos em que a ordenação precisa ser feita remotamente ou você quer salvar o estado/dados atuais em algum servidor, o Grid Lite expõe um hook onde você pode implementar e personalizar esse comportamento.

    Usando adataPipelineConfiguration propriedade, você pode fornecer um hook personalizado que será chamado toda vez que uma operação de ordenação estiver prestes a ser executada. O callback recebe umDataPipelineParams objeto.

    export type DataPipelineParams<T extends object> = {
      /**
       * The current data state of the grid.
       */
      data: T[];
      /**
       * The grid component itself.
       */
      grid: IgcGridLite<T>;
      /**
       * The type of data operation being performed.
       */
      type: 'sort' | 'filter';
    };
    
    grid.dataPipelineConfiguration = { sort: (params: DataPipelineParams<T>) => T[] | Promise<T[]> };
    

    O callback personalizado pode ser assíncrono, pois a grade espera até que resolva.

    O exemplo a seguir simula a operação de ordenação remota, refletindo o endpoint REST gerado com base no estado de ordenação do componente.

    Additional Resources

    Nossa comunidade é ativa e sempre acolhedora para novas ideias.