UNPKG

novo-elements

Version:

Bullhorn's NOVO Element Repository for Angular 2

1 lines 39.8 kB
[{"__symbolic":"module","version":3,"metadata":{"NovoTableConfig":{"__symbolic":"interface"},"NovoTableMode":{"VIEW":1,"EDIT":2},"NovoTableElement":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component"},"arguments":[{"selector":"novo-table","host":{"[attr.theme]":"theme","[class.editing]":"mode === NovoTableMode.EDIT","[class.novo-table-loading]":"loading","$quoted$":["[attr.theme]","[class.editing]","[class.novo-table-loading]"]},"template":"\n <header *ngIf=\"columns.length\">\n <ng-content select=\"novo-table-header\"></ng-content>\n <div class=\"header-actions\">\n <novo-pagination *ngIf=\"config.paging && !(dataProvider.isEmpty() && !dataProvider.isFiltered())\"\n [rowOptions]=\"config.paging.rowOptions\"\n [disablePageSelection]=\"config.paging.disablePageSelection\"\n [(page)]=\"dataProvider.page\"\n [(itemsPerPage)]=\"dataProvider.pageSize\"\n [totalItems]=\"dataProvider.total\"\n (onPageChange)=\"onPageChange($event)\">\n </novo-pagination>\n <ng-content select=\"novo-table-actions\"></ng-content>\n </div>\n </header>\n <div class=\"novo-table-loading-overlay\" *ngIf=\"loading\">\n <novo-loading></novo-loading>\n </div>\n <novo-toast *ngIf=\"toast\" [theme]=\"toast?.theme\" [icon]=\"toast?.icon\" [message]=\"toast?.message\"></novo-toast>\n <div class=\"table-container\" *ngIf=\"!grossFlagToAvoidTheTableFromBeingUglyWhenHidingTheToast\">\n <novo-form hideHeader=\"true\" [form]=\"tableForm\">\n <table class=\"table table-striped dataTable\" [class.table-details]=\"config.hasDetails\" role=\"grid\">\n <!-- skipSortAndFilterClear is a hack right now, will be removed once Canvas is refactored -->\n <thead *ngIf=\"columns.length && (!dataProvider.isEmpty() || dataProvider.isFiltered() || skipSortAndFilterClear || editing)\">\n <tr role=\"row\">\n <!-- DETAILS -->\n <th class=\"row-actions\" *ngIf=\"config.hasDetails\">\n <button theme=\"icon\" icon=\"next\" (click)=\"expandAllOnPage(config.expandAll)\" *ngIf=\"!config.expandAll\" data-automation-id=\"expand-all\"></button>\n <button theme=\"icon\" icon=\"sort-desc\" (click)=\"expandAllOnPage(config.expandAll)\" *ngIf=\"config.expandAll\" data-automation-id=\"collapse-all\"></button>\n </th>\n <!-- CHECKBOX -->\n <th class=\"row-actions checkbox mass-action\" *ngIf=\"config.rowSelectionStyle === 'checkbox'\">\n <novo-checkbox [(ngModel)]=\"master\" [indeterminate]=\"pageSelected.length > 0 && pageSelected.length < pagedData.length\" (ngModelChange)=\"selectPage($event)\" data-automation-id=\"select-all-checkbox\" [tooltip]=\"master ? labels.deselectAll : labels.selectAllOnPage\" tooltipPosition=\"right\"></novo-checkbox>\n </th>\n <!-- TABLE HEADERS -->\n <th *ngFor=\"let column of columns\" [ngClass]=\"{ 'mass-action': config?.rowSelectionStyle === 'checkbox', 'actions': column?.actions?.items?.length > 0, 'preview': column?.name === 'preview' }\" [novoThOrderable]=\"column\" (onOrderChange)=\"onOrderChange($event)\" [hidden]=\"isColumnHidden(column)\">\n <div class=\"th-group\" [attr.data-automation-id]=\"column.id || column.name\" *ngIf=\"!column.hideHeader\">\n <!-- LABEL & SORT ARROWS -->\n <div class=\"th-title\" [ngClass]=\"(config.sorting !== false && column.sorting !== false) ? 'sortable' : ''\" [novoThSortable]=\"config\" [column]=\"column\" (onSortChange)=\"onSortChange($event)\">\n <label>{{ column.title || column.label }}</label>\n <div class=\"table-sort-icons\" tooltipPosition=\"bottom\" [tooltip]=\"labels.sort\" [ngClass]=\"column.sort || ''\" *ngIf=\"config.sorting !== false && column.sorting !== false\">\n <i class=\"bhi-arrow-up\"></i>\n <i class=\"bhi-arrow-down\"></i>\n </div>\n </div>\n <!-- FILTER DROP-DOWN -->\n <novo-dropdown side=\"right\" *ngIf=\"config.filtering !== false && column.filtering !== false\" class=\"column-filters\" (toggled)=\"onDropdownToggled($event, column.name)\" appendToBody=\"true\" parentScrollSelector=\".table-container\" containerClass=\"table-dropdown\">\n <button type=\"button\" theme=\"icon\" icon=\"filter\" tooltipPosition=\"bottom\" [tooltip]=\"labels.filters\" [class.filtered]=\"column.filter || column.filter===false\"></button>\n <!-- FILTER OPTIONS LIST -->\n <list *ngIf=\"(column?.options?.length || column?.originalOptions?.length) && column?.type !== 'date' && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter || column.filter===false\">{{ labels.clear }}</button>\n </div>\n <input type=\"text\" *ngIf=\"!!column.allowCustomTextOption\" [attr.id]=\"column.name + '-input'\" [novoTableFilter]=\"column\" (onFilterChange)=\"onFilterKeywords($event)\" [(ngModel)]=\"column.freetextFilter\" keepFilterFocused/>\n </item>\n <item [ngClass]=\"{ active: isFilterActive(column, option) }\" *ngFor=\"let option of column.options\" (click)=\"onFilterClick(column, option)\" [attr.data-automation-id]=\"getOptionDataAutomationId(option)\">\n <span>{{ option?.label || option }}</span> <i class=\"bhi-check\" *ngIf=\"isFilterActive(column, option)\"></i>\n </item>\n </list>\n <!-- FILTER SEARCH INPUT -->\n <list *ngIf=\"!(column?.options?.length || column?.originalOptions?.length) && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter\">{{ labels.clear }}</button>\n </div>\n <input type=\"text\" [attr.id]=\"column.name + '-input'\" [novoTableFilter]=\"column\" (onFilterChange)=\"onFilterChange($event)\" [(ngModel)]=\"column.filter\" keepFilterFocused/>\n </item>\n </list>\n <!-- FILTER DATE OPTIONS -->\n <list *ngIf=\"column?.options?.length && column?.type === 'date' && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\" *ngIf=\"!column.calenderShow\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter\">{{ labels.clear }}</button>\n </div>\n </item>\n <item [ngClass]=\"{ active: isFilterActive(column, option) }\" *ngFor=\"let option of column.options\" (click)=\"onFilterClick(column, option)\" [keepOpen]=\"option.range\" [hidden]=\"column.calenderShow\" [attr.data-automation-id]=\"(option?.label || option)\">\n {{ option?.label || option }} <i class=\"bhi-check\" *ngIf=\"isFilterActive(column, option)\"></i>\n </item>\n <div class=\"calender-container\" [hidden]=\"!column.calenderShow\">\n <div (click)=\"column.calenderShow=false\"><i class=\"bhi-previous\"></i>{{ labels.backToPresetFilters }}</div>\n <novo-date-picker #rangePicker (onSelect)=\"onCalenderSelect(column, $event)\" [(ngModel)]=\"column.filter\" range=\"true\"></novo-date-picker>\n </div>\n </list>\n </novo-dropdown>\n </div>\n </th>\n </tr>\n </thead>\n <!-- TABLE DATA -->\n <tbody *ngIf=\"!dataProvider.isEmpty() || editing\">\n <tr class=\"table-selection-row\" *ngIf=\"config.rowSelectionStyle === 'checkbox' && showSelectAllMessage && config.selectAllEnabled\" data-automation-id=\"table-selection-row\">\n <td colspan=\"100%\">\n {{labels.selectedRecords(selected.length)}} <a (click)=\"selectAll(true)\" data-automation-id=\"all-matching-records\">{{labels.totalRecords(dataProvider.total)}}</a>\n </td>\n </tr>\n <ng-template ngFor let-row=\"$implicit\" let-i=\"index\" [ngForOf]=\"rows\">\n <tr class=\"table-row\" [ngClass]=\"row.customClass || ''\" [attr.data-automation-id]=\"row.id\" (click)=\"rowClickHandler(row)\" [class.active]=\"row.id === activeId\">\n <td class=\"row-actions\" *ngIf=\"config.hasDetails\">\n <button theme=\"icon\" icon=\"next\" (click)=\"row._expanded=!row._expanded\" *ngIf=\"!row._expanded\"></button>\n <button theme=\"icon\" icon=\"sort-desc\" (click)=\"row._expanded=!row._expanded\" *ngIf=\"row._expanded\"></button>\n </td>\n <td class=\"row-actions checkbox\" *ngIf=\"config.rowSelectionStyle === 'checkbox'\">\n <novo-checkbox [(ngModel)]=\"row._selected\" (ngModelChange)=\"rowSelectHandler(row)\" data-automation-id=\"select-row-checkbox\"></novo-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" [attr.data-automation-id]=\"column.id || column.name\" [class.novo-form-row]=\"editable\" [hidden]=\"isColumnHidden(column)\">\n <novo-table-cell *ngIf=\"row._editing && !row._editing[column.name]\" [hasEditor]=\"editable\" [column]=\"column\" [row]=\"row\" [form]=\"tableForm.controls.rows.controls[i]\"></novo-table-cell>\n <novo-control *ngIf=\"row._editing && row._editing[column.name]\" condensed=\"true\" [form]=\"tableForm.controls.rows.controls[i]\" [control]=\"row.controls[column.name]\"></novo-control>\n </td>\n </tr>\n <tr class=\"details-row\" *ngIf=\"config.hasDetails\" [hidden]=\"!row._expanded\" [attr.data-automation-id]=\"'details-row-'+row.id\">\n <td class=\"row-actions\"></td>\n <td [attr.colspan]=\"columns.length\">\n <novo-row-details [data]=\"row\" [renderer]=\"config.detailsRenderer\"></novo-row-details>\n </td>\n </tr>\n </ng-template>\n </tbody>\n <!-- NO TABLE DATA PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isEmpty() && !dataProvider.isFiltered() && !editing\" data-automation-id=\"empty-table\">\n <tr>\n <td colspan=\"100%\">\n <div #emptymessage><ng-content select=\"[table-empty-message]\"></ng-content></div>\n <div class=\"table-empty-message\" *ngIf=\"emptymessage.childNodes.length == 0\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- NO MATCHING RECORDS -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isEmpty() && dataProvider.isFiltered()\" data-automation-id=\"empty-table\">\n <tr>\n <td colspan=\"100%\">\n <div #nomatchmessage><ng-content select=\"[table-no-matching-records-message]\"></ng-content></div>\n <div class=\"no-matching-records\" *ngIf=\"nomatchmessage.childNodes.length == 0\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- TABLE DATA ERROR PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.hasErrors()\" data-automation-id=\"table-errors\">\n <tr>\n <td colspan=\"100%\">\n <div #errormessage><ng-content select=\"[table-error-message]\"></ng-content></div>\n <div class=\"table-error-message\" *ngIf=\"errormessage.childNodes.length == 0\">\n <h4><i class=\"bhi-caution\"></i> {{ labels.erroredTableMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- TABLE LOADING PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isLoading()\" data-automation-id=\"table-loading\">\n <tr>\n <td colspan=\"100%\">\n <div #loader><ng-content select=\"[table-loader]\"></ng-content></div>\n <div class=\"table-loading\" *ngIf=\"loader.childNodes.length == 0\">\n <novo-loading></novo-loading>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot *ngIf=\"!config.footers\" [ngClass]=\"dataProvider.length % 2 == 0 ? 'odd' : 'even'\">\n <tr>\n <td colspan=\"100%\">\n <ng-content select=\"novo-table-footer\"></ng-content>\n </td>\n </tr>\n </tfoot>\n <tfoot *ngFor=\"let footer of footers;let i = index;\" class=\"novo-table-total-footer\">\n <tr>\n <td *ngFor=\"let column of columns\" [attr.data-automation-id]=\"(column.id || column.name) + '-total-' + i\">{{ footer[column.name] }}</td>\n </tr>\n </tfoot>\n </table>\n </novo-form>\n </div>\n "}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"columns":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"skipSortAndFilterClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"editable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"onRowClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"onRowSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"onTableChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"rows":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"dataProvider":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../services/novo-label-service","name":"NovoLabelService"},{"__symbolic":"reference","module":"../../utils/form-utils/FormUtils","name":"FormUtils"},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder"}]}],"onDropdownToggled":[{"__symbolic":"method"}],"onPageChange":[{"__symbolic":"method"}],"getOptionDataAutomationId":[{"__symbolic":"method"}],"setupColumnDefaults":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"getPageStart":[{"__symbolic":"method"}],"getPageEnd":[{"__symbolic":"method"}],"onFilterClick":[{"__symbolic":"method"}],"onFilterClear":[{"__symbolic":"method"}],"clearAllSortAndFilters":[{"__symbolic":"method"}],"onFilterChange":[{"__symbolic":"method"}],"escapeCharacters":[{"__symbolic":"method"}],"isFilterActive":[{"__symbolic":"method"}],"onSortChange":[{"__symbolic":"method"}],"fireTableChangeEvent":[{"__symbolic":"method"}],"findColumnIndex":[{"__symbolic":"method"}],"onOrderChange":[{"__symbolic":"method"}],"expandAllOnPage":[{"__symbolic":"method"}],"selectPage":[{"__symbolic":"method"}],"selectAll":[{"__symbolic":"method"}],"rowSelectHandler":[{"__symbolic":"method"}],"emitSelected":[{"__symbolic":"method"}],"rowClickHandler":[{"__symbolic":"method"}],"getDefaultOptions":[{"__symbolic":"method"}],"onCalenderSelect":[{"__symbolic":"method"}],"onFilterKeywords":[{"__symbolic":"method"}],"setTableEdit":[{"__symbolic":"method"}],"leaveEditMode":[{"__symbolic":"method"}],"addEditableRow":[{"__symbolic":"method"}],"validateAndGetUpdatedData":[{"__symbolic":"method"}],"cancelEditing":[{"__symbolic":"method"}],"saveChanges":[{"__symbolic":"method"}],"displayToastMessage":[{"__symbolic":"method"}],"hideToastMessage":[{"__symbolic":"method"}],"toggleLoading":[{"__symbolic":"method"}],"isColumnHidden":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"NovoTableConfig":{"__symbolic":"interface"},"NovoTableMode":{"VIEW":1,"EDIT":2},"NovoTableElement":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component"},"arguments":[{"selector":"novo-table","host":{"[attr.theme]":"theme","[class.editing]":"mode === NovoTableMode.EDIT","[class.novo-table-loading]":"loading"},"template":"\n <header *ngIf=\"columns.length\">\n <ng-content select=\"novo-table-header\"></ng-content>\n <div class=\"header-actions\">\n <novo-pagination *ngIf=\"config.paging && !(dataProvider.isEmpty() && !dataProvider.isFiltered())\"\n [rowOptions]=\"config.paging.rowOptions\"\n [disablePageSelection]=\"config.paging.disablePageSelection\"\n [(page)]=\"dataProvider.page\"\n [(itemsPerPage)]=\"dataProvider.pageSize\"\n [totalItems]=\"dataProvider.total\"\n (onPageChange)=\"onPageChange($event)\">\n </novo-pagination>\n <ng-content select=\"novo-table-actions\"></ng-content>\n </div>\n </header>\n <div class=\"novo-table-loading-overlay\" *ngIf=\"loading\">\n <novo-loading></novo-loading>\n </div>\n <novo-toast *ngIf=\"toast\" [theme]=\"toast?.theme\" [icon]=\"toast?.icon\" [message]=\"toast?.message\"></novo-toast>\n <div class=\"table-container\" *ngIf=\"!grossFlagToAvoidTheTableFromBeingUglyWhenHidingTheToast\">\n <novo-form hideHeader=\"true\" [form]=\"tableForm\">\n <table class=\"table table-striped dataTable\" [class.table-details]=\"config.hasDetails\" role=\"grid\">\n <!-- skipSortAndFilterClear is a hack right now, will be removed once Canvas is refactored -->\n <thead *ngIf=\"columns.length && (!dataProvider.isEmpty() || dataProvider.isFiltered() || skipSortAndFilterClear || editing)\">\n <tr role=\"row\">\n <!-- DETAILS -->\n <th class=\"row-actions\" *ngIf=\"config.hasDetails\">\n <button theme=\"icon\" icon=\"next\" (click)=\"expandAllOnPage(config.expandAll)\" *ngIf=\"!config.expandAll\" data-automation-id=\"expand-all\"></button>\n <button theme=\"icon\" icon=\"sort-desc\" (click)=\"expandAllOnPage(config.expandAll)\" *ngIf=\"config.expandAll\" data-automation-id=\"collapse-all\"></button>\n </th>\n <!-- CHECKBOX -->\n <th class=\"row-actions checkbox mass-action\" *ngIf=\"config.rowSelectionStyle === 'checkbox'\">\n <novo-checkbox [(ngModel)]=\"master\" [indeterminate]=\"pageSelected.length > 0 && pageSelected.length < pagedData.length\" (ngModelChange)=\"selectPage($event)\" data-automation-id=\"select-all-checkbox\" [tooltip]=\"master ? labels.deselectAll : labels.selectAllOnPage\" tooltipPosition=\"right\"></novo-checkbox>\n </th>\n <!-- TABLE HEADERS -->\n <th *ngFor=\"let column of columns\" [ngClass]=\"{ 'mass-action': config?.rowSelectionStyle === 'checkbox', 'actions': column?.actions?.items?.length > 0, 'preview': column?.name === 'preview' }\" [novoThOrderable]=\"column\" (onOrderChange)=\"onOrderChange($event)\" [hidden]=\"isColumnHidden(column)\">\n <div class=\"th-group\" [attr.data-automation-id]=\"column.id || column.name\" *ngIf=\"!column.hideHeader\">\n <!-- LABEL & SORT ARROWS -->\n <div class=\"th-title\" [ngClass]=\"(config.sorting !== false && column.sorting !== false) ? 'sortable' : ''\" [novoThSortable]=\"config\" [column]=\"column\" (onSortChange)=\"onSortChange($event)\">\n <label>{{ column.title || column.label }}</label>\n <div class=\"table-sort-icons\" tooltipPosition=\"bottom\" [tooltip]=\"labels.sort\" [ngClass]=\"column.sort || ''\" *ngIf=\"config.sorting !== false && column.sorting !== false\">\n <i class=\"bhi-arrow-up\"></i>\n <i class=\"bhi-arrow-down\"></i>\n </div>\n </div>\n <!-- FILTER DROP-DOWN -->\n <novo-dropdown side=\"right\" *ngIf=\"config.filtering !== false && column.filtering !== false\" class=\"column-filters\" (toggled)=\"onDropdownToggled($event, column.name)\" appendToBody=\"true\" parentScrollSelector=\".table-container\" containerClass=\"table-dropdown\">\n <button type=\"button\" theme=\"icon\" icon=\"filter\" tooltipPosition=\"bottom\" [tooltip]=\"labels.filters\" [class.filtered]=\"column.filter || column.filter===false\"></button>\n <!-- FILTER OPTIONS LIST -->\n <list *ngIf=\"(column?.options?.length || column?.originalOptions?.length) && column?.type !== 'date' && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter || column.filter===false\">{{ labels.clear }}</button>\n </div>\n <input type=\"text\" *ngIf=\"!!column.allowCustomTextOption\" [attr.id]=\"column.name + '-input'\" [novoTableFilter]=\"column\" (onFilterChange)=\"onFilterKeywords($event)\" [(ngModel)]=\"column.freetextFilter\" keepFilterFocused/>\n </item>\n <item [ngClass]=\"{ active: isFilterActive(column, option) }\" *ngFor=\"let option of column.options\" (click)=\"onFilterClick(column, option)\" [attr.data-automation-id]=\"getOptionDataAutomationId(option)\">\n <span>{{ option?.label || option }}</span> <i class=\"bhi-check\" *ngIf=\"isFilterActive(column, option)\"></i>\n </item>\n </list>\n <!-- FILTER SEARCH INPUT -->\n <list *ngIf=\"!(column?.options?.length || column?.originalOptions?.length) && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter\">{{ labels.clear }}</button>\n </div>\n <input type=\"text\" [attr.id]=\"column.name + '-input'\" [novoTableFilter]=\"column\" (onFilterChange)=\"onFilterChange($event)\" [(ngModel)]=\"column.filter\" keepFilterFocused/>\n </item>\n </list>\n <!-- FILTER DATE OPTIONS -->\n <list *ngIf=\"column?.options?.length && column?.type === 'date' && toggledDropdownMap[column.name]\">\n <item class=\"filter-search\" *ngIf=\"!column.calenderShow\">\n <div class=\"header\">\n <span>{{ labels.filters }}</span>\n <button theme=\"dialogue\" color=\"negative\" icon=\"times\" (click)=\"onFilterClear(column)\" *ngIf=\"column.filter\">{{ labels.clear }}</button>\n </div>\n </item>\n <item [ngClass]=\"{ active: isFilterActive(column, option) }\" *ngFor=\"let option of column.options\" (click)=\"onFilterClick(column, option)\" [keepOpen]=\"option.range\" [hidden]=\"column.calenderShow\" [attr.data-automation-id]=\"(option?.label || option)\">\n {{ option?.label || option }} <i class=\"bhi-check\" *ngIf=\"isFilterActive(column, option)\"></i>\n </item>\n <div class=\"calender-container\" [hidden]=\"!column.calenderShow\">\n <div (click)=\"column.calenderShow=false\"><i class=\"bhi-previous\"></i>{{ labels.backToPresetFilters }}</div>\n <novo-date-picker #rangePicker (onSelect)=\"onCalenderSelect(column, $event)\" [(ngModel)]=\"column.filter\" range=\"true\"></novo-date-picker>\n </div>\n </list>\n </novo-dropdown>\n </div>\n </th>\n </tr>\n </thead>\n <!-- TABLE DATA -->\n <tbody *ngIf=\"!dataProvider.isEmpty() || editing\">\n <tr class=\"table-selection-row\" *ngIf=\"config.rowSelectionStyle === 'checkbox' && showSelectAllMessage && config.selectAllEnabled\" data-automation-id=\"table-selection-row\">\n <td colspan=\"100%\">\n {{labels.selectedRecords(selected.length)}} <a (click)=\"selectAll(true)\" data-automation-id=\"all-matching-records\">{{labels.totalRecords(dataProvider.total)}}</a>\n </td>\n </tr>\n <ng-template ngFor let-row=\"$implicit\" let-i=\"index\" [ngForOf]=\"rows\">\n <tr class=\"table-row\" [ngClass]=\"row.customClass || ''\" [attr.data-automation-id]=\"row.id\" (click)=\"rowClickHandler(row)\" [class.active]=\"row.id === activeId\">\n <td class=\"row-actions\" *ngIf=\"config.hasDetails\">\n <button theme=\"icon\" icon=\"next\" (click)=\"row._expanded=!row._expanded\" *ngIf=\"!row._expanded\"></button>\n <button theme=\"icon\" icon=\"sort-desc\" (click)=\"row._expanded=!row._expanded\" *ngIf=\"row._expanded\"></button>\n </td>\n <td class=\"row-actions checkbox\" *ngIf=\"config.rowSelectionStyle === 'checkbox'\">\n <novo-checkbox [(ngModel)]=\"row._selected\" (ngModelChange)=\"rowSelectHandler(row)\" data-automation-id=\"select-row-checkbox\"></novo-checkbox>\n </td>\n <td *ngFor=\"let column of columns\" [attr.data-automation-id]=\"column.id || column.name\" [class.novo-form-row]=\"editable\" [hidden]=\"isColumnHidden(column)\">\n <novo-table-cell *ngIf=\"row._editing && !row._editing[column.name]\" [hasEditor]=\"editable\" [column]=\"column\" [row]=\"row\" [form]=\"tableForm.controls.rows.controls[i]\"></novo-table-cell>\n <novo-control *ngIf=\"row._editing && row._editing[column.name]\" condensed=\"true\" [form]=\"tableForm.controls.rows.controls[i]\" [control]=\"row.controls[column.name]\"></novo-control>\n </td>\n </tr>\n <tr class=\"details-row\" *ngIf=\"config.hasDetails\" [hidden]=\"!row._expanded\" [attr.data-automation-id]=\"'details-row-'+row.id\">\n <td class=\"row-actions\"></td>\n <td [attr.colspan]=\"columns.length\">\n <novo-row-details [data]=\"row\" [renderer]=\"config.detailsRenderer\"></novo-row-details>\n </td>\n </tr>\n </ng-template>\n </tbody>\n <!-- NO TABLE DATA PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isEmpty() && !dataProvider.isFiltered() && !editing\" data-automation-id=\"empty-table\">\n <tr>\n <td colspan=\"100%\">\n <div #emptymessage><ng-content select=\"[table-empty-message]\"></ng-content></div>\n <div class=\"table-empty-message\" *ngIf=\"emptymessage.childNodes.length == 0\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- NO MATCHING RECORDS -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isEmpty() && dataProvider.isFiltered()\" data-automation-id=\"empty-table\">\n <tr>\n <td colspan=\"100%\">\n <div #nomatchmessage><ng-content select=\"[table-no-matching-records-message]\"></ng-content></div>\n <div class=\"no-matching-records\" *ngIf=\"nomatchmessage.childNodes.length == 0\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- TABLE DATA ERROR PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.hasErrors()\" data-automation-id=\"table-errors\">\n <tr>\n <td colspan=\"100%\">\n <div #errormessage><ng-content select=\"[table-error-message]\"></ng-content></div>\n <div class=\"table-error-message\" *ngIf=\"errormessage.childNodes.length == 0\">\n <h4><i class=\"bhi-caution\"></i> {{ labels.erroredTableMessage }}</h4>\n </div>\n </td>\n </tr>\n </tbody>\n <!-- TABLE LOADING PLACEHOLDER -->\n <tbody class=\"table-message\" *ngIf=\"dataProvider.isLoading()\" data-automation-id=\"table-loading\">\n <tr>\n <td colspan=\"100%\">\n <div #loader><ng-content select=\"[table-loader]\"></ng-content></div>\n <div class=\"table-loading\" *ngIf=\"loader.childNodes.length == 0\">\n <novo-loading></novo-loading>\n </div>\n </td>\n </tr>\n </tbody>\n <tfoot *ngIf=\"!config.footers\" [ngClass]=\"dataProvider.length % 2 == 0 ? 'odd' : 'even'\">\n <tr>\n <td colspan=\"100%\">\n <ng-content select=\"novo-table-footer\"></ng-content>\n </td>\n </tr>\n </tfoot>\n <tfoot *ngFor=\"let footer of footers;let i = index;\" class=\"novo-table-total-footer\">\n <tr>\n <td *ngFor=\"let column of columns\" [attr.data-automation-id]=\"(column.id || column.name) + '-total-' + i\">{{ footer[column.name] }}</td>\n </tr>\n </tfoot>\n </table>\n </novo-form>\n </div>\n "}]}],"members":{"config":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"columns":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"skipSortAndFilterClear":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"editable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"onRowClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"onRowSelect":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"onTableChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output"}}]}],"rows":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"dataProvider":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input"}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../services/novo-label-service","name":"NovoLabelService"},{"__symbolic":"reference","module":"../../utils/form-utils/FormUtils","name":"FormUtils"},{"__symbolic":"reference","module":"@angular/forms","name":"FormBuilder"}]}],"onDropdownToggled":[{"__symbolic":"method"}],"onPageChange":[{"__symbolic":"method"}],"getOptionDataAutomationId":[{"__symbolic":"method"}],"setupColumnDefaults":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"getPageStart":[{"__symbolic":"method"}],"getPageEnd":[{"__symbolic":"method"}],"onFilterClick":[{"__symbolic":"method"}],"onFilterClear":[{"__symbolic":"method"}],"clearAllSortAndFilters":[{"__symbolic":"method"}],"onFilterChange":[{"__symbolic":"method"}],"escapeCharacters":[{"__symbolic":"method"}],"isFilterActive":[{"__symbolic":"method"}],"onSortChange":[{"__symbolic":"method"}],"fireTableChangeEvent":[{"__symbolic":"method"}],"findColumnIndex":[{"__symbolic":"method"}],"onOrderChange":[{"__symbolic":"method"}],"expandAllOnPage":[{"__symbolic":"method"}],"selectPage":[{"__symbolic":"method"}],"selectAll":[{"__symbolic":"method"}],"rowSelectHandler":[{"__symbolic":"method"}],"emitSelected":[{"__symbolic":"method"}],"rowClickHandler":[{"__symbolic":"method"}],"getDefaultOptions":[{"__symbolic":"method"}],"onCalenderSelect":[{"__symbolic":"method"}],"onFilterKeywords":[{"__symbolic":"method"}],"setTableEdit":[{"__symbolic":"method"}],"leaveEditMode":[{"__symbolic":"method"}],"addEditableRow":[{"__symbolic":"method"}],"validateAndGetUpdatedData":[{"__symbolic":"method"}],"cancelEditing":[{"__symbolic":"method"}],"saveChanges":[{"__symbolic":"method"}],"displayToastMessage":[{"__symbolic":"method"}],"hideToastMessage":[{"__symbolic":"method"}],"toggleLoading":[{"__symbolic":"method"}],"isColumnHidden":[{"__symbolic":"method"}]}}}}]