1 <cd-alert-panel type=
"error"
3 i18n
>Failed to load data.
</cd-alert-panel>
5 <div class=
"dataTables_wrapper">
7 <div *
ngIf=
"onlyActionHeader"
8 class=
"dataTables_header clearfix">
9 <div class=
"cd-datatable-actions">
10 <ng-content select=
".only-table-actions"></ng-content>
13 <div class=
"dataTables_header clearfix"
16 <div class=
"cd-datatable-actions">
17 <ng-content select=
".table-actions"></ng-content>
22 <ng-content select=
".table-filters"></ng-content>
25 <!-- column filters -->
26 <div *
ngIf=
"columnFilters.length !== 0"
27 class=
"btn-group widget-toolbar">
29 class=
"btn-group tc_filter_name">
31 class=
"btn btn-light dropdown-toggle"
32 data-toggle=
"dropdown">
33 <i [ngClass]=
"[icons.large, icons.filter]"></i>
34 {{ selectedFilter.column.name }}
37 class=
"dropdown-menu dropdown-menu-right px-1"
39 <li *
ngFor=
"let filter of columnFilters"
43 (click)=
"onSelectFilter(filter); false">{{ filter.column.name }}
</a>
48 class=
"btn-group tc_filter_option">
50 class=
"btn btn-light dropdown-toggle"
51 [class.disabled]=
"selectedFilter.options.length === 0"
52 data-toggle=
"dropdown">
53 {{ selectedFilter.value ? selectedFilter.value.formatted: 'Any' }}
56 class=
"dropdown-menu dropdown-menu-right px-1"
58 <li *
ngFor=
"let option of selectedFilter.options"
62 (click)=
"onChangeFilter(selectedFilter, option); false">{{ option.formatted }}
63 <i *
ngIf=
"selectedFilter.value !== undefined && (selectedFilter.value.raw === option.raw)"
64 [ngClass]=
"[icons.check]"></i>
70 <!-- end column filters -->
73 <div class=
"input-group search"
75 <span class=
"input-group-prepend">
76 <span class=
"input-group-text">
77 <i [ngClass]=
"[icons.search]"></i>
80 <input class=
"form-control"
83 (keyup)=
"updateFilter()">
84 <div class=
"input-group-append">
87 (click)=
"onClearSearch()">
88 <i class=
"icon-prepend {{ icons.destroy }}"></i>
94 <!-- pagination limit -->
95 <div class=
"input-group dataTables_paginate"
97 <input class=
"form-control"
101 [value]=
"userConfig.limit"
102 (click)=
"setLimit($event)"
103 (keyup)=
"setLimit($event)"
104 (blur)=
"setLimit($event)">
106 <!-- end pagination limit-->
108 <!-- show hide columns -->
109 <div class=
"widget-toolbar">
112 class=
"dropdown tc_menuitem tc_menuitem_cluster">
114 class=
"btn btn-light dropdown-toggle tc_columnBtn"
115 data-toggle=
"dropdown">
116 <i [ngClass]=
"[icons.large, icons.table]"></i>
119 class=
"dropdown-menu px-3">
120 <ng-container *
ngFor=
"let column of columns">
121 <li *
ngIf=
"column.name !== ''" >
122 <div class=
"custom-control custom-checkbox">
123 <input class=
"custom-control-input"
125 (change)=
"toggleColumn($event)"
128 [checked]=
"!column.isHidden">
129 <label class=
"custom-control-label"
130 [for]=
"column.prop">{{ column.name }}
</label>
137 <!-- end show hide columns -->
139 <!-- refresh button -->
140 <div class=
"widget-toolbar tc_refreshBtn"
141 *
ngIf=
"fetchData.observers.length > 0">
143 <button type=
"button"
144 class=
"btn btn-light"
145 (click)=
"refreshBtn()">
146 <i [ngClass]=
"[icons.large, icons.refresh]"
147 [class.fa-spin]=
"updating || loadingIndicator"></i>
150 <!-- end refresh button -->
152 <div class=
"dataTables_header clearfix"
153 *
ngIf=
"toolHeader && columnFiltered">
154 <!-- filter chips for column filters -->
155 <div class=
"filter-chips">
156 <span *
ngFor=
"let filter of columnFilters">
157 <span *
ngIf=
"filter.value"
158 class=
"badge badge-info mr-2">
159 <span class=
"mr-2">{{ filter.column.name }}: {{ filter.value.formatted }}
</span>
160 <a class=
"badge-remove"
161 (click)=
"onChangeFilter(filter); false">
162 <i [ngClass]=
"[icons.destroy]"
163 aria-hidden=
"true"></i>
167 <a class=
"tc_clearSelections"
169 (click)=
"onClearFilters(); false">
170 <ng-container i18n
>Clear filters
</ng-container>
173 <!-- end filter chips for column filters -->
175 <ngx-datatable #table
176 class=
"bootstrap cd-datatable"
177 [cssClasses]=
"paginationClasses"
178 [selectionType]=
"selectionType"
179 [selected]=
"selection.selected"
180 (select)=
"onSelect($event)"
181 [sorts]=
"userConfig.sorts"
182 (sort)=
"changeSorting($event)"
183 [columns]=
"tableColumns"
184 [columnMode]=
"columnMode"
186 [rowClass]=
"getRowClass()"
187 [headerHeight]=
"header ? 'auto' : 0"
188 [footerHeight]=
"footer ? 'auto' : 0"
189 [limit]=
"userConfig.limit > 0 ? userConfig.limit : undefined"
190 [loadingIndicator]=
"loadingIndicator"
191 [rowIdentity]=
"rowIdentity()"
192 [rowHeight]=
"'auto'">
194 <!-- Row Detail Template -->
195 <ngx-datatable-row-detail rowHeight=
"auto"
197 <ng-template let-row=
"row"
198 let-expanded=
"expanded"
199 ngx-datatable-row-detail-template
>
200 <!-- Table Details -->
201 <ng-content select=
"[cdTableDetail]"></ng-content>
203 </ngx-datatable-row-detail>
205 <ngx-datatable-footer>
206 <ng-template ngx-datatable-footer-template
207 let-rowCount=
"rowCount"
208 let-pageSize=
"pageSize"
209 let-selectedCount=
"selectedCount"
210 let-curPage=
"curPage"
212 let-isVisible=
"isVisible">
213 <div class=
"page-count">
214 <span *
ngIf=
"selectionType">
215 {{ selectedCount }}
<ng-container i18n=
"X selected">selected
</ng-container> /
217 <span *
ngIf=
"rowCount != data?.length">
218 {{ rowCount }}
<ng-container i18n=
"X found">found
</ng-container> /
221 {{ data?.length ||
0 }}
<ng-container i18n=
"X total">total
</ng-container>
224 <datatable-pager [pagerLeftArrowIcon]=
"paginationClasses.pagerLeftArrow"
225 [pagerRightArrowIcon]=
"paginationClasses.pagerRightArrow"
226 [pagerPreviousIcon]=
"paginationClasses.pagerPrevious"
227 [pagerNextIcon]=
"paginationClasses.pagerNext"
231 [hidden]=
"!((rowCount / pageSize) > 1)"
232 (change)=
"table.onFooterPage($event)">
235 </ngx-datatable-footer>
239 <!-- cell templates that can be accessed from outside -->
240 <ng-template #tableCellBoldTpl
242 <strong>{{ value }}
</strong>
245 <ng-template #sparklineTpl
248 <cd-sparkline [data]=
"value"
249 [isBinary]=
"row.cdIsBinary"></cd-sparkline>
252 <ng-template #routerLinkTpl
255 <a [routerLink]=
"[row.cdLink]"
256 [queryParams]=
"row.cdParams">{{ value }}
</a>
259 <ng-template #checkIconTpl
261 <i [ngClass]=
"[icons.check]"
262 [hidden]=
"!(value | boolean)"></i>
265 <ng-template #perSecondTpl
271 <ng-template #executingTpl
274 <i [ngClass]=
"[icons.spinner, icons.spin]"
275 *
ngIf=
"row.cdExecuting"></i>
277 <span *
ngIf=
"row.cdExecuting"
278 class=
"text-muted italic">({{ row.cdExecuting }})
</span>
281 <ng-template #classAddingTpl
283 <span class=
"{{useCustomClass(value)}}">{{ value }}
</span>
286 <ng-template #badgeTpl
289 <span *
ngFor=
"let item of (value | array); last as last">
291 [ngClass]=
"(column?.customTemplateConfig?.map && column?.customTemplateConfig?.map[item]?.class) ? column.customTemplateConfig.map[item].class : (column?.customTemplateConfig?.class ? column.customTemplateConfig.class : 'badge-primary')"
292 *
ngIf=
"(column?.customTemplateConfig?.map && column?.customTemplateConfig?.map[item]?.value) ? column.customTemplateConfig.map[item].value : column?.customTemplateConfig?.prefix ? column.customTemplateConfig.prefix + item : item">
293 {{ (column?.customTemplateConfig?.map && column?.customTemplateConfig?.map[item]?.value) ? column.customTemplateConfig.map[item].value : column?.customTemplateConfig?.prefix ? column.customTemplateConfig.prefix + item : item }}
295 <span *
ngIf=
"!last"> </span>
302 <span>{{ value | map:column?.customTemplateConfig }}
</span>
305 <ng-template #truncateTpl
308 <span data-toggle=
"tooltip"
309 [title]=
"value">{{ value | truncate:column?.customTemplateConfig?.length:column?.customTemplateConfig?.omission }}
</span>
312 <ng-template #rowDetailsTpl
314 let-isExpanded=
"expanded"
315 ngx-datatable-cell-template
>
316 <a href=
"javascript:void(0)"
317 [class.expand-collapse-icon-right]=
"!isExpanded"
318 [class.expand-collapse-icon-down]=
"isExpanded"
319 class=
"expand-collapse-icon tc_expand-collapse"
320 title=
"Expand/Collapse Row"
322 (click)=
"toggleExpandRow(row, isExpanded)">