blob: 31395762053aa4c1e197d175980f7d34e4b91741 [file] [log] [blame]
<!--
~ 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>