igniteui-angular-sovn
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
141 lines (126 loc) • 7.4 kB
HTML
<div role="rowgroup" class="igx-grid-thead__wrapper" [style.width.px]="width"
[class.igx-grid__tr--mrl]="hasMRL">
<!-- Column headers area -->
<div class="igx-grid__tr" role="row" [style.width.px]="width">
<!-- Left column moving area -->
<ng-container *ngIf="grid.moving && grid.columnInDrag && pinnedColumnCollection.length <= 0">
<span id="left" class="igx-grid__scroll-on-drag-left" droppable="true" [style.left.px]="grid.pinnedWidth"
[igxColumnMovingDrop]="headerContainer"></span>
</ng-container>
<ng-container *ngIf="grid.moving && grid.columnInDrag && pinnedColumnCollection.length > 0">
<span id="left" class="igx-grid__scroll-on-drag-pinned" droppable="true" [style.left.px]="grid.pinnedWidth"
[igxColumnMovingDrop]="headerContainer"></span>
</ng-container>
<!-- Row dragging area -->
<ng-container *ngIf="grid.rowDraggable">
<div #headerDragContainer class="igx-grid__drag-indicator igx-grid__tr-action" (pointerdown)="$event.preventDefault()" [class.igx-grid__drag-indicator--header]="!grid.isRowSelectable">
<div style="visibility: hidden;">
<ng-container *ngTemplateOutlet="grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase"></ng-container>
</div>
</div>
</ng-container>
<!-- Row selectors area -->
<ng-container *ngIf="grid.showRowSelectors">
<div #headerSelectorContainer class="igx-grid__cbx-selection igx-grid__tr-action"
[class.igx-grid__cbx-selection--push]="grid.filteringService.isFilterRowVisible"
(click)="headerRowSelection($event)"
(pointerdown)="$event.preventDefault()">
<ng-container #headSelector
*ngTemplateOutlet="grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext">
</ng-container>
</div>
</ng-container>
<!-- Hierarchical grids expand all area -->
<ng-container *ngIf="isHierarchicalGrid">
<div #headerHierarchyExpander
(click)="grid.toggleAll()"
(pointerdown)="$event.preventDefault()"
[hidden]="!grid.hasExpandableChildren || !grid.hasVisibleColumns"
[ngClass]="{
'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,
'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,
'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable
}">
<ng-container *ngTemplateOutlet="grid.iconTemplate; context: { $implicit: grid }"></ng-container>
</div>
</ng-container>
<!-- Grouping icon toggle area -->
<ng-container *ngIf="grid?.groupingExpressions?.length">
<div #headerGroupContainer class="{{ indentationCSSClasses }}"
(click)="grid.toggleAllGroupRows()"
(pointerdown)="$event.preventDefault()">
<ng-container *ngTemplateOutlet="grid.iconTemplate; context: { $implicit: grid }"></ng-container>
</div>
</ng-container>
<!-- Pinned columns collection from the start -->
<ng-container *ngIf="pinnedColumnCollection.length && grid.isPinningToStart">
<ng-container *ngFor="let column of pinnedColumnCollection | igxTopLevel">
<igx-grid-header-group
[ngClass]="column.headerGroupClasses"
[ngStyle]="column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger"
[column]="column"
[style.min-width]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
[style.flex-basis]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL">
</igx-grid-header-group>
</ng-container>
</ng-container>
<!-- Unpinned columns collection -->
<ng-template igxGridFor #headerVirtualContainer let-column
[igxGridForOf]="unpinnedColumnCollection | igxTopLevel"
[igxForScrollContainer]="grid.parentVirtDir"
[igxForContainerSize]="grid.unpinnedWidth"
[igxForTrackBy]="grid.trackColumnChanges"
[igxForSizePropName]="'calcPixelWidth'"
[igxForScrollOrientation]="'horizontal'"
>
<igx-grid-header-group
[ngClass]="column.headerGroupClasses"
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger"
[column]="column"
[style.min-width]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
[style.flex-basis]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL">
</igx-grid-header-group>
</ng-template>
<!-- Pinned columns collection at the end -->
<ng-container *ngIf="pinnedColumnCollection.length && !grid.isPinningToStart">
<ng-container *ngFor="let column of pinnedColumnCollection | igxTopLevel">
<igx-grid-header-group
[ngClass]="column.headerGroupClasses"
[ngStyle]="column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger"
[column]="column"
[style.min-width]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
[style.flex-basis]="column.width | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL"
[style.left]="column.rightPinnedOffset">
</igx-grid-header-group>
</ng-container>
</ng-container>
</div>
<!-- Filter row area -->
<ng-container *ngIf="grid.filteringService.isFilterRowVisible">
<igx-grid-filtering-row #filteringRow
[column]="grid.filteringService.filteredColumn"
[style.width.px]="width">
</igx-grid-filtering-row>
</ng-container>
<!-- Right column moving area -->
<ng-container *ngIf="grid.moving && grid.columnInDrag">
<span id="right" class="igx-grid__scroll-on-drag-right" droppable="true" [igxColumnMovingDrop]="headerContainer"></span>
</ng-container>
</div>
<!-- Header thumb area -->
<div class="igx-grid-thead__thumb" [hidden]="!grid.hasVerticalScroll()" [style.width.px]="grid.scrollSize"></div>
<!-- Default row selection header checkbox template -->
<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>
<div class="igx-grid__cbx-padding">
<igx-checkbox
[tabindex]="-1"
[readonly]="true"
[checked]="context.selectedCount > 0 && grid.selectionService.areAllRowSelected()"
[disableRipple]="true"
[ngStyle]="{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }"
[indeterminate]="context.selectedCount > 0 && grid.selectionService.hasSomeRowSelected()"
[aria-label]="grid.headSelectorBaseAriaLabel"
#headerCheckbox>
</igx-checkbox>
</div>
</ng-template>