Angular Hierarchical Grid Column Hiding

    La Ignite UI for Angular Hierarchical Grid proporciona un IgxColumnActionsComponent con un IgxColumnHidingDirective que permite a los usuarios ocultar columnas directamente a través de la interfaz de usuario o utilizando el componente Angular. Material UI Grid tiene una interfaz de usuario integrada para ocultar columnas, que se puede usar a través de la barra de herramientas de Hierarchical Grid para cambiar el estado visible de las columnas. Además, los desarrolladores siempre pueden definir la interfaz de usuario que oculta columnas como un componente separado y colocarla en cualquier lugar de la página que deseen.

    Angular Hierarchical Grid Column Hiding Example

    Hierarchical Grid Setup

    Comencemos creando nuestra cuadrícula jerárquica y vinculándola a nuestros datos. También habilitaremos el filtrado y la clasificación de las columnas.

    <igx-hierarchical-grid class="hgrid" [data]="localdata"
            [height]="'560px'" [width]="'100%'" columnWidth="200px" [allowFiltering]="true" #hGrid>
    
        <igx-column field="Artist" [sortable]="true" [disableHiding]="true"></igx-column>
        <igx-column field="Photo">
            <ng-template igxCell let-cell="cell">
                <div class="cell__inner_2">
                    <img [src]="cell.value" class="photo" />
                </div>
            </ng-template>
        </igx-column>
        <igx-column field="Debut" [sortable]="true" [hidden]="true"></igx-column>
        <igx-column field="Grammy Nominations" [sortable]="true" [hidden]="true"></igx-column>
        <igx-column field="Grammy Awards" [sortable]="true"></igx-column>
    
        <igx-row-island [key]="'Albums'" [autoGenerate]="false" #layout1 >
            <igx-column field="Album" [sortable]="true"></igx-column>
            <igx-column field="Launch Date" [sortable]="true"></igx-column>
            <igx-column field="Billboard Review" [sortable]="true"></igx-column>
            <igx-column field="US Billboard 200" [sortable]="true"></igx-column>
            <igx-row-island [key]="'Songs'" [autoGenerate]="false">
                <igx-column field="No."></igx-column>
                <igx-column field="Title"></igx-column>
                <igx-column field="Released"></igx-column>
                <igx-column field="Genre"></igx-column>
            </igx-row-island>
        </igx-row-island>
    
        <igx-row-island [key]="'Tours'" [autoGenerate]="false">
            <igx-column field="Tour"></igx-column>
            <igx-column field="Started on"></igx-column>
            <igx-column field="Location"></igx-column>
            <igx-column field="Headliner"></igx-column>
        </igx-row-island>
    
    </igx-hierarchical-grid>
    

    Toolbar's Column Hiding UI

    La interfaz de usuario integrada para ocultar columnas se coloca dentro de un IgxDropDownComponent en la barra de herramientas de la cuadrícula jerárquica. Podemos mostrar/ocultar la interfaz de usuario de ocultación de columnas usando este menú desplegable exacto. Para ello, todo lo que tenemos que hacer es configurar tanto IgxGridToolbarActionsComponent como IgxGridToolbarHidingComponent dentro de la cuadrícula jerárquica. También agregaremos un título a nuestra barra de herramientas usando IgxGridToolbarTitleComponent y un estilo personalizado para el contenedor de nuestra cuadrícula jerárquica.

    <!--columnHiding.component.html-->
    <div class="hgrid-sample">
        <igx-hierarchical-grid class="hgrid" [data]="localdata">
        <igx-grid-toolbar>
                <igx-grid-toolbar-title>Singers</igx-grid-toolbar-title>
                <igx-grid-toolbar-actions>
                    <igx-grid-toolbar-hiding></igx-grid-toolbar-hiding>
                </igx-grid-toolbar-actions>
        </igx-grid-toolbar>
        ...
     </igx-hierarchical-grid>
    </div>
    
    /* columnHiding.component.css */
    .photo {
        vertical-align: middle;
        max-height: 62px;
    }
    .cell__inner_2 {
        margin: 1px
    }
    

    La cuadrícula jerárquica nos proporciona algunas propiedades útiles cuando se trata de utilizar la interfaz de usuario para ocultar columnas de la barra de herramientas. Al utilizar el igx-grid-toolbar-hiding title propiedad, estableceremos el título que se muestra dentro del botón desplegable en la barra de herramientas.

    <div class="hgrid-sample">
        <igx-hierarchical-grid class="hgrid" [data]="localdata">
        <igx-grid-toolbar>
                <igx-grid-toolbar-title>Singers</igx-grid-toolbar-title>
                <igx-grid-toolbar-actions>
                    <igx-grid-toolbar-hiding #hidingActionRef title="Column Hiding"></igx-grid-toolbar-hiding>
                </igx-grid-toolbar-actions>
        </igx-grid-toolbar>
     </igx-hierarchical-grid>
    </div>
    

    Al utilizar la propiedad columnsAreaMaxHeight de IgxGridToolbarHidingComponent, podemos establecer la altura máxima del área que contiene las acciones de la columna. De esta forma si tenemos muchas acciones y no caben todas en el contenedor, aparecerá una barra de desplazamiento, que nos permitirá desplazarnos a cualquier acción que queramos.

    // columnHiding.component.ts
    
    public ngAfterViewInit() {        
        this.hidingActionRef.columnsAreaMaxHeight = "200px";
    }
    

    Para utilizar el conjunto ampliado de funcionalidades para la interfaz de usuario que oculta columnas, podemos utilizar la propiedad columnsAreaMaxHeight de IgxColumnActionsComponent. De esta manera podremos utilizarlo según los requisitos de nuestra aplicación.

    Puede ver el resultado del código anterior al comienzo de este artículo en la sección Ejemplo de ocultación de columnas Angular.

    Estilismo

    Para comenzar a diseñar el componente de acciones de columna, necesitamos importar el archivo de índice, donde se encuentran todas las funciones del tema y los mixins de componentes:

    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    

    Al utilizar el enfoque más simple, creamos un nuevo tema que extiende el column-actions-theme y acepta los parámetros $title-color y $background-color.

    $custom-column-actions-theme: column-actions-theme(
        $background-color: steelblue,
        $title-color: gold
    );
    

    Como se ve, el column-actions-theme solo controla los colores del contenedor de acciones de columna, pero no afecta los botones, las casillas de verificación ni el grupo de entrada dentro de él. Digamos que también queremos darle estilo a los botones, así que crearemos un nuevo tema de botón:

    $custom-button: button-theme($flat-text-color: gold, $disabled-color: black);
    

    En este ejemplo solo cambiamos el color del texto de los botones planos y el color deshabilitado del botón, pero el button-theme proporciona muchos más parámetros para controlar el estilo del botón.

    El último paso es incluir los mixins de componentes, cada uno con su respectiva temática:

    @include column-actions($custom-column-actions-theme);
    .igx-column-actions {
        @include button($custom-button);
    }
    
    Note

    Ajustamos el alcance del mixin igx-button dentro de.igx-column-actions, de modo que solo se apliquen estilos a los botones que ocultan las columnas. De lo contrario, otros botones de la cuadrícula también se verían afectados.

    Note

    Si el componente utiliza una ViewEncapsulation Emulated, es necesario penetrate esta encapsulación usando::ng-deep:

    :host {
        ::ng-deep {
            @include column-actions($custom-column-actions-theme);
            .igx-column-actions {
                @include button($custom-button);
            }
        }
    }
    

    Defining a color palette

    En lugar de codificar los valores de color como acabamos de hacer, podemos lograr una mayor flexibilidad en términos de colores utilizando las funciones igx-palette e igx-color.

    igx-palette genera una paleta de colores basada en los colores primarios y secundarios que se pasan:

    $yellow-color: gold;
    $blue-color: steelblue;
    
    $custom-palette: palette($primary: $blue-color, $secondary: $yellow-color);
    

    Y luego con igx-color podemos recuperar fácilmente el color de la paleta.

    $custom-column-actions-theme: column-actions-theme(
        $palette: $custom-palette,
        $title-color: color($custom-palette, "secondary", 400),
        $background-color: color($custom-palette, "primary", 200)
    );
    
    $custom-button: button-theme(
        $palette: $custom-palette,
        $flat-text-color: color($custom-palette, "secondary", 400),
        $disabled-color: black
    );
    
    Note

    igx-color e igx-palette son funciones potentes para generar y recuperar colores. Consulte el tema Palettes para obtener orientación detallada sobre cómo utilizarlas.

    Using Schemas

    Yendo más allá con el motor de temas, puede crear una estructura sólida y flexible que se beneficie de los esquemas. Un esquema es una receta de un tema.

    // Extending the dark column actions schema
    $custom-column-actions-schema: extend($_dark-column-actions,
        (
            title-color:(
               color: ("secondary", 400)
            ),
            background-color:(
               color: ("primary", 200)
            )
        )
    );
    // Extending the dark button schema
    $custom-button-schema: extend($_dark-button,
        (           
            flat-text-color:(
               color:("secondary", 500)
            ),
            disabled-color:(
               color:("primary", 700)
            )
        )
    );
    

    Para aplicar nuestros esquemas personalizados, tenemos que extender uno de los globales (light u dark), que básicamente señala los componentes con un esquema personalizado, y luego agregarlo a los respectivos temas de los componentes:

    // Extending the global dark-schema
    $custom-dark-schema: extend($dark-schema,(
        igx-column-actions: $custom-column-actions-schema,
        igx-button: $custom-button-schema
    ));
    
    // Defining column-actions-theme with the global dark schema
    $custom-column-actions-theme: column-actions-theme(
      $palette: $custom-palette,
      $schema: $custom-dark-schema
    );
    
    // Defining button-theme with the global dark schema
    $custom-button: button-theme(
      $palette: $custom-palette,
      $schema: $custom-dark-schema
    );
    

    No olvide incluir los temas de la misma manera que se demostró anteriormente.

    Demo

    API References

    En este artículo, aprendimos cómo utilizar la interfaz de usuario integrada para ocultar columnas en la barra de herramientas de la cuadrícula jerárquica.

    La interfaz de usuario que oculta columnas tiene algunas API más para explorar, que se enumeran a continuación.

    Componentes adicionales y/o directivas con API relativas que se utilizaron:

    IgxHierarchicalGridComponent properties:

    IgxColumnComponent properties:

    IgxGridToolbarComponent properties:

    IgxGridToolbarComponent components:

    IgxGridToolbarComponent methods:

    IgxHierarchicalGridComponent events:

    Componente IgxRadio

    Styles:

    Additional Resources

    Nuestra comunidad es activa y siempre da la bienvenida a nuevas ideas.