| <!-- | |
| ~ Licensed under the Apache License, Version 2.0 (the "License"); | |
| ~ you may not use this file except in compliance with the License. | |
| ~ You may obtain a copy of the License at | |
| ~ http://www.apache.org/licenses/LICENSE-2.0 | |
| ~ Unless required by applicable law or agreed to in writing, software | |
| ~ distributed under the License is distributed on an "AS IS" BASIS, | |
| ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| ~ See the License for the specific language governing permissions and | |
| ~ limitations under the License. | |
| --> | |
| <button class="export-dropdown" nz-button nz-dropdown nzSize="small" [nzDropdownMenu]="menu"> | |
| <span>Export</span> | |
| <i nz-icon nzType="down"></i> | |
| </button> | |
| <nz-dropdown-menu #menu="nzDropdownMenu"> | |
| <ul nz-menu> | |
| <li nz-menu-item> | |
| <a (click)="exportFile('csv')">Export all data as csv</a> | |
| </li> | |
| <li nz-menu-item> | |
| <a (click)="exportFile('xlsx')">Export all data as excel</a> | |
| </li> | |
| <li nz-menu-item> | |
| <a (click)="exportFile('csv', false)">Export visible data as csv</a> | |
| </li> | |
| <li nz-menu-item> | |
| <a (click)="exportFile('xlsx', false)">Export visible data as excel</a> | |
| </li> | |
| </ul> | |
| </nz-dropdown-menu> | |
| <nz-table | |
| #table | |
| nzSize="small" | |
| nzShowSizeChanger | |
| [nzScroll]="{ x: '1300px' }" | |
| [nzData]="rows" | |
| [nzFooter]="aggregatesFooter" | |
| > | |
| <thead> | |
| <tr> | |
| <th | |
| *ngFor="let col of columns" | |
| nzWidth="200px" | |
| nzShowSort | |
| nzCustomFilter | |
| (nzSortOrderChange)="onSortChange(col, $event)" | |
| > | |
| {{ col }} | |
| <i | |
| #dropdown="nzDropdown" | |
| nz-icon | |
| nzType="down" | |
| nzTrigger="click" | |
| nzPlacement="bottomRight" | |
| [nzClickHide]="false" | |
| [nzDropdownMenu]="filterMenu" | |
| nzTableFilter | |
| [nzRotate]="dropdown.nzVisible ? 180 : 0" | |
| class="ant-table-filter-icon filter-icon" | |
| [class.ant-table-filter-open]="dropdown.nzVisible" | |
| nz-dropdown | |
| ></i> | |
| <nz-dropdown-menu #filterMenu="nzDropdownMenu"> | |
| <ul nz-menu class="th-dropdown"> | |
| <li nz-menu-group class="search-bar"> | |
| <nz-input-group nzSearch [nzAddOnAfter]="suffixIconButton"> | |
| <input | |
| type="text" | |
| nz-input | |
| placeholder="Search..." | |
| (blur)="onSearch()" | |
| (keydown.enter)="onSearch()" | |
| [ngModel]="getColOptionOrThrow(col).term" | |
| (ngModelChange)="onTermChange(col, $event)" | |
| /> | |
| </nz-input-group> | |
| <ng-template #suffixIconButton> | |
| <button nz-button nzSearch nzType="primary" (click)="onSearch()"> | |
| <i nz-icon nzType="search" nzTheme="outline"></i> | |
| </button> | |
| </ng-template> | |
| </li> | |
| <li nz-menu-divider></li> | |
| <li nz-menu-group> | |
| <span title>Type</span> | |
| <ul> | |
| <li | |
| *ngFor="let type of types" | |
| nz-menu-item | |
| [nzSelected]="getColOptionOrThrow(col).type === type" | |
| (click)="onChangeType(type, col)" | |
| > | |
| {{ type | titlecase }} | |
| </li> | |
| </ul> | |
| </li> | |
| <li nz-menu-divider></li> | |
| <li nz-menu-group> | |
| <span title>Aggregation</span> | |
| <ul> | |
| <li | |
| *ngFor="let aggregation of aggregations" | |
| nz-menu-item | |
| [nzSelected]="getColOptionOrThrow(col).aggregation === aggregation" | |
| (click)="onChangeAggregation(aggregation, col)" | |
| > | |
| {{ aggregation | titlecase }} | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </nz-dropdown-menu> | |
| </th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr *ngFor="let data of table.data"> | |
| <td *ngFor="let col of columns">{{ data[col] }}</td> | |
| </tr> | |
| </tbody> | |
| </nz-table> | |
| <ng-template #aggregatesFooter> | |
| <div class="aggregation-wrap"> | |
| <span *ngFor="let col of columns"> | |
| <span class="aggregation-item" *ngIf="getColOptionOrThrow(col).aggregation as aggregation"> | |
| {{ aggregation }}( | |
| <strong>{{ col }}</strong> | |
| ): | |
| <span>{{ getColOptionOrThrow(col).aggregationValue }}</span> | |
| </span> | |
| </span> | |
| </div> | |
| </ng-template> |