novo-elements 5.11.0 → 5.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/novo-elements.umd.js +72 -10
- package/bundles/novo-elements.umd.js.map +1 -1
- package/bundles/novo-elements.umd.min.js +1 -1
- package/bundles/novo-elements.umd.min.js.map +1 -1
- package/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.d.ts +2 -0
- package/elements/data-table/data-table.component.d.ts +5 -0
- package/elements/date-picker/DatePicker.scss +7 -1
- package/elements/date-picker/DatePickerInput.d.ts +5 -0
- package/elements/form/Form.scss +2 -1
- package/esm2015/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.js +27 -2
- package/esm2015/elements/data-table/data-table.component.js +10 -2
- package/esm2015/elements/date-picker/DatePickerInput.js +27 -3
- package/esm2015/services/date-format/DateFormat.js +4 -2
- package/esm2015/services/novo-label-service.js +5 -1
- package/fesm2015/novo-elements.js +68 -5
- package/fesm2015/novo-elements.js.map +1 -1
- package/novo-elements.metadata.json +1 -1
- package/package.json +1 -1
- package/services/date-format/DateFormat.d.ts +2 -2
- package/services/novo-label-service.d.ts +2 -0
|
@@ -3168,6 +3168,7 @@
|
|
|
3168
3168
|
this.noItems = 'There are no items';
|
|
3169
3169
|
this.dateFormat = 'MM/dd/yyyy';
|
|
3170
3170
|
this.dateFormatPlaceholder = 'MM/DD/YYYY';
|
|
3171
|
+
this.localDatePlaceholder = 'mm/dd/yyyy';
|
|
3171
3172
|
this.timeFormatPlaceholderAM = 'hh:mm AM';
|
|
3172
3173
|
this.timeFormatPlaceholder24Hour = 'HH:mm';
|
|
3173
3174
|
this.timeFormatAM = 'AM';
|
|
@@ -3216,6 +3217,9 @@
|
|
|
3216
3217
|
NovoLabelService.prototype.dateFormatString = function () {
|
|
3217
3218
|
return this.dateFormat;
|
|
3218
3219
|
};
|
|
3220
|
+
NovoLabelService.prototype.localizedDatePlaceholder = function () {
|
|
3221
|
+
return this.localDatePlaceholder;
|
|
3222
|
+
};
|
|
3219
3223
|
NovoLabelService.prototype.tabbedGroupClearSuggestion = function (tabLabelPlural) {
|
|
3220
3224
|
return "Clear your search to see all " + tabLabelPlural + ".";
|
|
3221
3225
|
};
|
|
@@ -8030,8 +8034,10 @@
|
|
|
8030
8034
|
this.templates = {};
|
|
8031
8035
|
this.fixedHeader = false;
|
|
8032
8036
|
this.maxSelected = undefined;
|
|
8037
|
+
this.canSelectAll = false;
|
|
8033
8038
|
this._hideGlobalSearch = true;
|
|
8034
8039
|
this.preferencesChanged = new core.EventEmitter();
|
|
8040
|
+
this.allSelected = new core.EventEmitter();
|
|
8035
8041
|
this.loading = true;
|
|
8036
8042
|
this.columnToTemplate = {};
|
|
8037
8043
|
this.columnsLoaded = false;
|
|
@@ -8371,6 +8377,10 @@
|
|
|
8371
8377
|
this.state.onSelectionChange();
|
|
8372
8378
|
};
|
|
8373
8379
|
NovoDataTable.prototype.allCurrentRowsSelected = function () {
|
|
8380
|
+
var _a, _b;
|
|
8381
|
+
if (!((_b = (_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
8382
|
+
return false;
|
|
8383
|
+
}
|
|
8374
8384
|
for (var i = 0; i < (this.dataSource.data || []).length; i++) {
|
|
8375
8385
|
if (!this.isSelected((this.dataSource.data || [])[i])) {
|
|
8376
8386
|
return false;
|
|
@@ -8458,11 +8468,11 @@
|
|
|
8458
8468
|
this.ref.markForCheck();
|
|
8459
8469
|
};
|
|
8460
8470
|
NovoDataTable.prototype.performInteractions = function (event) {
|
|
8461
|
-
var e_1,
|
|
8471
|
+
var e_1, _c;
|
|
8462
8472
|
if (this.listInteractions) {
|
|
8463
8473
|
try {
|
|
8464
|
-
for (var
|
|
8465
|
-
var column =
|
|
8474
|
+
for (var _d = __values(this.columns), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
8475
|
+
var column = _e.value;
|
|
8466
8476
|
var allListColumnInteractions = this.listInteractions[column.id];
|
|
8467
8477
|
var listColumnInteraction = allListColumnInteractions && allListColumnInteractions.find(function (int) { return int.event.includes(event); });
|
|
8468
8478
|
if (listColumnInteraction) {
|
|
@@ -8473,7 +8483,7 @@
|
|
|
8473
8483
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
8474
8484
|
finally {
|
|
8475
8485
|
try {
|
|
8476
|
-
if (
|
|
8486
|
+
if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
|
|
8477
8487
|
}
|
|
8478
8488
|
finally { if (e_1) throw e_1.error; }
|
|
8479
8489
|
}
|
|
@@ -8491,7 +8501,7 @@
|
|
|
8491
8501
|
animations.transition('void <=> *', animations.animate('70ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
8492
8502
|
]),
|
|
8493
8503
|
],
|
|
8494
|
-
template: "\n <header\n *ngIf=\"(!(dataSource?.totallyEmpty && !state.userFiltered) && !loading) || forceShowHeader\"\n [class.empty]=\"hideGlobalSearch && !paginationOptions && !templates['customActions']\"\n >\n <ng-container *ngTemplateOutlet=\"templates['customHeader']\"></ng-container>\n <novo-search\n alwaysOpen=\"true\"\n (searchChanged)=\"onSearchChange($event)\"\n [(ngModel)]=\"state.globalSearch\"\n *ngIf=\"!hideGlobalSearch\"\n [placeholder]=\"searchOptions?.placeholder\"\n [hint]=\"searchOptions?.tooltip\"\n >\n </novo-search>\n <novo-data-table-pagination\n *ngIf=\"paginationOptions\"\n [theme]=\"paginationOptions.theme\"\n [length]=\"dataSource?.currentTotal\"\n [page]=\"paginationOptions.page\"\n [pageSize]=\"paginationOptions.pageSize\"\n [pageSizeOptions]=\"paginationOptions.pageSizeOptions\"\n [dataFeatureId]=\"paginatorDataFeatureId\"\n >\n </novo-data-table-pagination>\n <div class=\"novo-data-table-actions\" *ngIf=\"templates['customActions']\">\n <ng-container *ngTemplateOutlet=\"templates['customActions']\"></ng-container>\n </div>\n </header>\n <div class=\"novo-data-table-loading-mask\" *ngIf=\"dataSource?.loading || loading\" data-automation-id=\"novo-data-table-loading\">\n <novo-loading></novo-loading>\n </div>\n <div class=\"novo-data-table-outside-container\" [ngClass]=\"{ 'novo-data-table-outside-container-fixed': fixedHeader }\">\n <div class=\"novo-data-table-custom-filter\" *ngIf=\"customFilter\">\n <ng-container *ngTemplateOutlet=\"templates['customFilter']\"></ng-container>\n </div>\n <div\n #novoDataTableContainer\n class=\"novo-data-table-container\"\n [ngClass]=\"{ 'novo-data-table-container-fixed': fixedHeader }\"\n [class.empty-user-filtered]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [class.empty]=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <cdk-table\n *ngIf=\"columns?.length > 0 && columnsLoaded && dataSource\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByFn\"\n novoDataTableSortFilter\n [class.expandable]=\"expandable\"\n [class.empty]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [hidden]=\"dataSource?.totallyEmpty && !state.userFiltered\"\n >\n <ng-container cdkColumnDef=\"selection\">\n <novo-data-table-checkbox-header-cell *cdkHeaderCellDef [maxSelected]=\"maxSelected\"></novo-data-table-checkbox-header-cell>\n <novo-data-table-checkbox-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\" [maxSelected]=\"maxSelected\"></novo-data-table-checkbox-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"expand\">\n <novo-data-table-expand-header-cell *cdkHeaderCellDef></novo-data-table-expand-header-cell>\n <novo-data-table-expand-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\"></novo-data-table-expand-cell>\n </ng-container>\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumnsBy\" [cdkColumnDef]=\"column.id\">\n <novo-data-table-header-cell\n *cdkHeaderCellDef\n [column]=\"column\"\n [filterTemplate]=\"templates['column-filter-' + column.id]\"\n [novo-data-table-cell-config]=\"column\"\n [resized]=\"resized\"\n [defaultSort]=\"defaultSort\"\n [allowMultipleFilters]=\"allowMultipleFilters\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-header-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-header-cell]=\"column?.type === 'action' && column?.action?.options\"\n [class.fixed-header]=\"fixedHeader\"\n ></novo-data-table-header-cell>\n <novo-data-table-cell\n *cdkCellDef=\"let row\"\n [resized]=\"resized\"\n [column]=\"column\"\n [row]=\"row\"\n [template]=\"columnToTemplate[column.id]\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-cell]=\"column?.type === 'action' && column?.action?.options\"\n ></novo-data-table-cell>\n </ng-container>\n <novo-data-table-header-row\n *cdkHeaderRowDef=\"displayedColumns\"\n [fixedHeader]=\"fixedHeader\"\n data-automation-id=\"novo-data-table-header-row\"\n ></novo-data-table-header-row>\n <novo-data-table-row\n *cdkRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{ active: row[rowIdentifier] == activeRowIdentifier }\"\n [novoDataTableExpand]=\"detailRowTemplate\"\n [row]=\"row\"\n [id]=\"name + '-' + row[rowIdentifier]\"\n [dataAutomationId]=\"row[rowIdentifier]\"\n ></novo-data-table-row>\n </cdk-table>\n <div class=\"novo-data-table-footer\" *ngIf=\"templates['footer']\">\n <ng-container *ngTemplateOutlet=\"templates['footer']; context: { $implicit: columns, data: dataSource.data }\"></ng-container>\n </div>\n <div\n class=\"novo-data-table-no-results-container\"\n [style.left.px]=\"scrollLeft\"\n *ngIf=\"dataSource?.currentlyEmpty && state.userFiltered && !dataSource?.loading && !loading && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['noResultsMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"novo-data-table-empty-container\"\n *ngIf=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['emptyMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <!-- DEFAULT CELL TEMPLATE -->\n <ng-template novoTemplate=\"textCellTemplate\" let-row let-col=\"col\">\n <span [style.width.px]=\"col?.width\" [style.min-width.px]=\"col?.width\" [style.max-width.px]=\"col?.width\">{{\n row[col.id] | dataTableInterpolate: col\n }}</span>\n </ng-template>\n <ng-template novoTemplate=\"dateCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"datetimeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"timeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"currencyCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableCurrencyRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"bigdecimalCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableBigDecimalRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"numberCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"percentCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col:true }}</span>\n </ng-template>\n <ng-template novoTemplate=\"linkCellTemplate\" let-row let-col=\"col\">\n <a\n [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [style.width.px]=\"col?.width\"\n [style.min-width.px]=\"col?.width\"\n [style.max-width.px]=\"col?.width\"\n >{{ row[col.id] | dataTableInterpolate: col }}</a\n >\n </ng-template>\n <ng-template novoTemplate=\"telCellTemplate\" let-row let-col=\"col\">\n <a href=\"tel:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"mailtoCellTemplate\" let-row let-col=\"col\">\n <a href=\"mailto:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"buttonCellTemplate\" let-row let-col=\"col\">\n <p [tooltip]=\"col?.action?.tooltip\" tooltipPosition=\"right\" [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\">\n <i\n class=\"bhi-{{ col?.action?.icon }} data-table-icon\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [class.disabled]=\"isDisabled(col, row)\"\n ></i>\n </p>\n </ng-template>\n <ng-template novoTemplate=\"dropdownCellTemplate\" let-row let-col=\"col\">\n <novo-dropdown parentScrollSelector=\".novo-data-table-container\" containerClass=\"novo-data-table-dropdown\">\n <button type=\"button\" theme=\"dialogue\" [icon]=\"col.action.icon\" inverse>{{ col.label }}</button>\n <list>\n <item\n *ngFor=\"let option of col?.action?.options\"\n (action)=\"option.handlers.click({ originalEvent: $event?.originalEvent, row: row })\"\n [disabled]=\"isDisabled(option, row)\"\n >\n <span [attr.data-automation-id]=\"option.label\">{{ option.label }}</span>\n </item>\n </list>\n </novo-dropdown>\n </ng-template>\n <ng-template novoTemplate=\"defaultNoResultsMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"defaultEmptyMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"expandedRow\"> You did not provide an \"expandedRow\" template! </ng-template>\n <ng-template #detailRowTemplate let-row>\n <div class=\"novo-data-table-detail-row\" [@expand] style=\"overflow: hidden\">\n <ng-container *ngTemplateOutlet=\"templates['expandedRow']; context: { $implicit: row }\"></ng-container>\n </div>\n </ng-template>\n <!-- CUSTOM CELLS PASSED IN -->\n <ng-content></ng-content>\n ",
|
|
8504
|
+
template: "\n <header\n *ngIf=\"(!(dataSource?.totallyEmpty && !state.userFiltered) && !loading) || forceShowHeader\"\n [class.empty]=\"hideGlobalSearch && !paginationOptions && !templates['customActions']\"\n >\n <ng-container *ngTemplateOutlet=\"templates['customHeader']\"></ng-container>\n <novo-search\n alwaysOpen=\"true\"\n (searchChanged)=\"onSearchChange($event)\"\n [(ngModel)]=\"state.globalSearch\"\n *ngIf=\"!hideGlobalSearch\"\n [placeholder]=\"searchOptions?.placeholder\"\n [hint]=\"searchOptions?.tooltip\"\n >\n </novo-search>\n <novo-data-table-pagination\n *ngIf=\"paginationOptions\"\n [theme]=\"paginationOptions.theme\"\n [length]=\"dataSource?.currentTotal\"\n [page]=\"paginationOptions.page\"\n [pageSize]=\"paginationOptions.pageSize\"\n [pageSizeOptions]=\"paginationOptions.pageSizeOptions\"\n [dataFeatureId]=\"paginatorDataFeatureId\"\n >\n </novo-data-table-pagination>\n <div class=\"novo-data-table-actions\" *ngIf=\"templates['customActions']\">\n <ng-container *ngTemplateOutlet=\"templates['customActions']\"></ng-container>\n </div>\n </header>\n <div class=\"novo-data-table-loading-mask\" *ngIf=\"dataSource?.loading || loading\" data-automation-id=\"novo-data-table-loading\">\n <novo-loading></novo-loading>\n </div>\n <div class=\"novo-data-table-outside-container\" [ngClass]=\"{ 'novo-data-table-outside-container-fixed': fixedHeader }\">\n <div class=\"novo-data-table-custom-filter\" *ngIf=\"customFilter\">\n <ng-container *ngTemplateOutlet=\"templates['customFilter']\"></ng-container>\n </div>\n <div\n #novoDataTableContainer\n class=\"novo-data-table-container\"\n [ngClass]=\"{ 'novo-data-table-container-fixed': fixedHeader }\"\n [class.empty-user-filtered]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [class.empty]=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <cdk-table\n *ngIf=\"columns?.length > 0 && columnsLoaded && dataSource\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByFn\"\n novoDataTableSortFilter\n [class.expandable]=\"expandable\"\n [class.empty]=\"dataSource?.currentlyEmpty && state.userFiltered\"\n [hidden]=\"dataSource?.totallyEmpty && !state.userFiltered\"\n >\n <ng-container cdkColumnDef=\"selection\">\n <novo-data-table-checkbox-header-cell *cdkHeaderCellDef [maxSelected]=\"maxSelected\" [canSelectAll]=\"canSelectAll\"></novo-data-table-checkbox-header-cell>\n <novo-data-table-checkbox-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\" [maxSelected]=\"maxSelected\"></novo-data-table-checkbox-cell>\n </ng-container>\n <ng-container cdkColumnDef=\"expand\">\n <novo-data-table-expand-header-cell *cdkHeaderCellDef></novo-data-table-expand-header-cell>\n <novo-data-table-expand-cell *cdkCellDef=\"let row; let i = index\" [row]=\"row\"></novo-data-table-expand-cell>\n </ng-container>\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumnsBy\" [cdkColumnDef]=\"column.id\">\n <novo-data-table-header-cell\n *cdkHeaderCellDef\n [column]=\"column\"\n [filterTemplate]=\"templates['column-filter-' + column.id]\"\n [novo-data-table-cell-config]=\"column\"\n [resized]=\"resized\"\n [defaultSort]=\"defaultSort\"\n [allowMultipleFilters]=\"allowMultipleFilters\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-header-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-header-cell]=\"column?.type === 'action' && column?.action?.options\"\n [class.fixed-header]=\"fixedHeader\"\n ></novo-data-table-header-cell>\n <novo-data-table-cell\n *cdkCellDef=\"let row\"\n [resized]=\"resized\"\n [column]=\"column\"\n [row]=\"row\"\n [template]=\"columnToTemplate[column.id]\"\n [class.empty]=\"column?.type === 'action' && !column?.label\"\n [class.button-cell]=\"column?.type === 'expand' || (column?.type === 'action' && !column?.action?.options)\"\n [class.dropdown-cell]=\"column?.type === 'action' && column?.action?.options\"\n ></novo-data-table-cell>\n </ng-container>\n <novo-data-table-header-row\n *cdkHeaderRowDef=\"displayedColumns\"\n [fixedHeader]=\"fixedHeader\"\n data-automation-id=\"novo-data-table-header-row\"\n ></novo-data-table-header-row>\n <novo-data-table-row\n *cdkRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{ active: row[rowIdentifier] == activeRowIdentifier }\"\n [novoDataTableExpand]=\"detailRowTemplate\"\n [row]=\"row\"\n [id]=\"name + '-' + row[rowIdentifier]\"\n [dataAutomationId]=\"row[rowIdentifier]\"\n ></novo-data-table-row>\n </cdk-table>\n <div class=\"novo-data-table-footer\" *ngIf=\"templates['footer']\">\n <ng-container *ngTemplateOutlet=\"templates['footer']; context: { $implicit: columns, data: dataSource.data }\"></ng-container>\n </div>\n <div\n class=\"novo-data-table-no-results-container\"\n [style.left.px]=\"scrollLeft\"\n *ngIf=\"dataSource?.currentlyEmpty && state.userFiltered && !dataSource?.loading && !loading && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['noResultsMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"novo-data-table-empty-container\"\n *ngIf=\"dataSource?.totallyEmpty && !dataSource?.loading && !loading && !state.userFiltered && !dataSource.pristine\"\n >\n <div class=\"novo-data-table-empty-message\">\n <ng-container *ngTemplateOutlet=\"templates['emptyMessage'] || templates['defaultNoResultsMessage']\"></ng-container>\n </div>\n </div>\n </div>\n <!-- DEFAULT CELL TEMPLATE -->\n <ng-template novoTemplate=\"textCellTemplate\" let-row let-col=\"col\">\n <span [style.width.px]=\"col?.width\" [style.min-width.px]=\"col?.width\" [style.max-width.px]=\"col?.width\">{{\n row[col.id] | dataTableInterpolate: col\n }}</span>\n </ng-template>\n <ng-template novoTemplate=\"dateCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"datetimeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableDateTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"timeCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableTimeRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"currencyCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableCurrencyRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"bigdecimalCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableBigDecimalRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"numberCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col }}</span>\n </ng-template>\n <ng-template novoTemplate=\"percentCellTemplate\" let-row let-col=\"col\">\n <span>{{ row[col.id] | dataTableInterpolate: col | dataTableNumberRenderer: col:true }}</span>\n </ng-template>\n <ng-template novoTemplate=\"linkCellTemplate\" let-row let-col=\"col\">\n <a\n [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [style.width.px]=\"col?.width\"\n [style.min-width.px]=\"col?.width\"\n [style.max-width.px]=\"col?.width\"\n >{{ row[col.id] | dataTableInterpolate: col }}</a\n >\n </ng-template>\n <ng-template novoTemplate=\"telCellTemplate\" let-row let-col=\"col\">\n <a href=\"tel:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"mailtoCellTemplate\" let-row let-col=\"col\">\n <a href=\"mailto:{{ row[col.id] | dataTableInterpolate: col }}\" [target]=\"col?.attributes?.target\">{{\n row[col.id] | dataTableInterpolate: col\n }}</a>\n </ng-template>\n <ng-template novoTemplate=\"buttonCellTemplate\" let-row let-col=\"col\">\n <p [tooltip]=\"col?.action?.tooltip\" tooltipPosition=\"right\" [attr.data-feature-id]=\"col?.attributes?.dataFeatureId\">\n <i\n class=\"bhi-{{ col?.action?.icon }} data-table-icon\"\n (click)=\"col.handlers?.click({ originalEvent: $event, row: row })\"\n [class.disabled]=\"isDisabled(col, row)\"\n ></i>\n </p>\n </ng-template>\n <ng-template novoTemplate=\"dropdownCellTemplate\" let-row let-col=\"col\">\n <novo-dropdown parentScrollSelector=\".novo-data-table-container\" containerClass=\"novo-data-table-dropdown\">\n <button type=\"button\" theme=\"dialogue\" [icon]=\"col.action.icon\" inverse>{{ col.label }}</button>\n <list>\n <item\n *ngFor=\"let option of col?.action?.options\"\n (action)=\"option.handlers.click({ originalEvent: $event?.originalEvent, row: row })\"\n [disabled]=\"isDisabled(option, row)\"\n >\n <span [attr.data-automation-id]=\"option.label\">{{ option.label }}</span>\n </item>\n </list>\n </novo-dropdown>\n </ng-template>\n <ng-template novoTemplate=\"defaultNoResultsMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.noMatchingRecordsMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"defaultEmptyMessage\">\n <h4><i class=\"bhi-search-question\"></i> {{ labels.emptyTableMessage }}</h4>\n </ng-template>\n <ng-template novoTemplate=\"expandedRow\"> You did not provide an \"expandedRow\" template! </ng-template>\n <ng-template #detailRowTemplate let-row>\n <div class=\"novo-data-table-detail-row\" [@expand] style=\"overflow: hidden\">\n <ng-container *ngTemplateOutlet=\"templates['expandedRow']; context: { $implicit: row }\"></ng-container>\n </div>\n </ng-template>\n <!-- CUSTOM CELLS PASSED IN -->\n <ng-content></ng-content>\n ",
|
|
8495
8505
|
changeDetection: core.ChangeDetectionStrategy.OnPush,
|
|
8496
8506
|
providers: [DataTableState]
|
|
8497
8507
|
},] }
|
|
@@ -8522,6 +8532,7 @@
|
|
|
8522
8532
|
fixedHeader: [{ type: core.Input }],
|
|
8523
8533
|
paginatorDataFeatureId: [{ type: core.Input }],
|
|
8524
8534
|
maxSelected: [{ type: core.Input }],
|
|
8535
|
+
canSelectAll: [{ type: core.Input }],
|
|
8525
8536
|
dataTableService: [{ type: core.Input }],
|
|
8526
8537
|
rows: [{ type: core.Input }],
|
|
8527
8538
|
outsideFilter: [{ type: core.Input }],
|
|
@@ -8532,6 +8543,7 @@
|
|
|
8532
8543
|
forceShowHeader: [{ type: core.Input }],
|
|
8533
8544
|
hideGlobalSearch: [{ type: core.Input }],
|
|
8534
8545
|
preferencesChanged: [{ type: core.Output }],
|
|
8546
|
+
allSelected: [{ type: core.Output }],
|
|
8535
8547
|
empty: [{ type: core.HostBinding, args: ['class.empty',] }],
|
|
8536
8548
|
loadingClass: [{ type: core.HostBinding, args: ['class.loading',] }],
|
|
8537
8549
|
listInteractions: [{ type: core.Input }]
|
|
@@ -28252,6 +28264,7 @@
|
|
|
28252
28264
|
var month;
|
|
28253
28265
|
var day;
|
|
28254
28266
|
var date = new Date();
|
|
28267
|
+
var isInvalidDate = true;
|
|
28255
28268
|
if (Helpers.isEmpty(dateFormat)) {
|
|
28256
28269
|
// Default to MM/dd/yyyy
|
|
28257
28270
|
dateFormat = 'mm/dd/yyyy';
|
|
@@ -28275,6 +28288,7 @@
|
|
|
28275
28288
|
}
|
|
28276
28289
|
if (month >= 0 && month <= 11 && year > 1900 && day > 0 && day <= 31) {
|
|
28277
28290
|
date = new Date(year, month, day);
|
|
28291
|
+
isInvalidDate = false;
|
|
28278
28292
|
}
|
|
28279
28293
|
}
|
|
28280
28294
|
else if (dateFormatTokens && dateFormatTokens.length === 4 && dateString.length >= 1) {
|
|
@@ -28289,7 +28303,7 @@
|
|
|
28289
28303
|
dateString = "" + dateString + delimiter[1];
|
|
28290
28304
|
}
|
|
28291
28305
|
}
|
|
28292
|
-
return [date, dateString];
|
|
28306
|
+
return [date, dateString, isInvalidDate];
|
|
28293
28307
|
};
|
|
28294
28308
|
DateFormatService.prototype.parseTimeString = function (timeString, militaryTime) {
|
|
28295
28309
|
var e_2, _a;
|
|
@@ -28410,6 +28424,7 @@
|
|
|
28410
28424
|
this._changeDetectorRef = _changeDetectorRef;
|
|
28411
28425
|
this.dateFormatService = dateFormatService;
|
|
28412
28426
|
this.formattedValue = '';
|
|
28427
|
+
this.invalidDateErrorMessage = '';
|
|
28413
28428
|
/** View -> model callback called when value changes */
|
|
28414
28429
|
this._onChange = function () { };
|
|
28415
28430
|
/** View -> model callback called when autocomplete has been touched */
|
|
@@ -28421,7 +28436,7 @@
|
|
|
28421
28436
|
this.blurEvent = new core.EventEmitter();
|
|
28422
28437
|
this.focusEvent = new core.EventEmitter();
|
|
28423
28438
|
this.changeEvent = new core.EventEmitter();
|
|
28424
|
-
this.placeholder = this.labels.
|
|
28439
|
+
this.placeholder = this.labels.localizedDatePlaceholder();
|
|
28425
28440
|
}
|
|
28426
28441
|
NovoDatePickerInputElement.prototype.ngOnInit = function () {
|
|
28427
28442
|
this.userDefinedFormat = this.format ? !this.format.match(/^(DD\/MM\/YYYY|MM\/DD\/YYYY)$/g) : false;
|
|
@@ -28436,6 +28451,7 @@
|
|
|
28436
28451
|
else {
|
|
28437
28452
|
this.maskOptions = { mask: false };
|
|
28438
28453
|
}
|
|
28454
|
+
this.setupInvalidDateErrorMessage();
|
|
28439
28455
|
};
|
|
28440
28456
|
/** BEGIN: Convenient Panel Methods. */
|
|
28441
28457
|
NovoDatePickerInputElement.prototype.openPanel = function () {
|
|
@@ -28467,9 +28483,11 @@
|
|
|
28467
28483
|
}
|
|
28468
28484
|
};
|
|
28469
28485
|
NovoDatePickerInputElement.prototype._handleBlur = function (event) {
|
|
28486
|
+
this.handleInvalidDate();
|
|
28470
28487
|
this.blurEvent.emit(event);
|
|
28471
28488
|
};
|
|
28472
28489
|
NovoDatePickerInputElement.prototype._handleFocus = function (event) {
|
|
28490
|
+
this.showInvalidDateError = false;
|
|
28473
28491
|
this.openPanel();
|
|
28474
28492
|
this.focusEvent.emit(event);
|
|
28475
28493
|
};
|
|
@@ -28486,7 +28504,8 @@
|
|
|
28486
28504
|
};
|
|
28487
28505
|
NovoDatePickerInputElement.prototype.formatDate = function (value, blur) {
|
|
28488
28506
|
try {
|
|
28489
|
-
var _a = __read(this.dateFormatService.parseString(value, false, 'date'),
|
|
28507
|
+
var _a = __read(this.dateFormatService.parseString(value, false, 'date'), 3), dateTimeValue = _a[0], formatted = _a[1], isInvalidDate = _a[2];
|
|
28508
|
+
this.isInvalidDate = isInvalidDate;
|
|
28490
28509
|
if (!isNaN(dateTimeValue.getUTCDate())) {
|
|
28491
28510
|
var dt = new Date(dateTimeValue);
|
|
28492
28511
|
this.dispatchOnChange(dt, blur);
|
|
@@ -28510,6 +28529,24 @@
|
|
|
28510
28529
|
NovoDatePickerInputElement.prototype.setDisabledState = function (disabled) {
|
|
28511
28530
|
this.disabled = disabled;
|
|
28512
28531
|
};
|
|
28532
|
+
NovoDatePickerInputElement.prototype.handleInvalidDate = function () {
|
|
28533
|
+
if (this.isInvalidDate && this.value) {
|
|
28534
|
+
this.showInvalidDateError = true;
|
|
28535
|
+
this.clearValue();
|
|
28536
|
+
this.closePanel();
|
|
28537
|
+
}
|
|
28538
|
+
};
|
|
28539
|
+
NovoDatePickerInputElement.prototype.setupInvalidDateErrorMessage = function () {
|
|
28540
|
+
var dateFormat = this.labels.dateFormatString();
|
|
28541
|
+
if (Helpers.isEmpty(dateFormat)) {
|
|
28542
|
+
// Default to mm/dd/yyyy
|
|
28543
|
+
dateFormat = 'mm/dd/yyyy';
|
|
28544
|
+
}
|
|
28545
|
+
else {
|
|
28546
|
+
dateFormat = dateFormat.toLowerCase();
|
|
28547
|
+
}
|
|
28548
|
+
this.invalidDateErrorMessage = "Invalid date field entered. Date format of " + dateFormat + " is required.";
|
|
28549
|
+
};
|
|
28513
28550
|
NovoDatePickerInputElement.prototype.dispatchOnChange = function (newValue, blur, skip) {
|
|
28514
28551
|
if (blur === void 0) { blur = false; }
|
|
28515
28552
|
if (skip === void 0) { skip = false; }
|
|
@@ -28602,7 +28639,7 @@
|
|
|
28602
28639
|
{ type: core.Component, args: [{
|
|
28603
28640
|
selector: 'novo-date-picker-input',
|
|
28604
28641
|
providers: [DATE_VALUE_ACCESSOR],
|
|
28605
|
-
template: "\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"formattedValue\"\n [textMask]=\"maskOptions\"\n [placeholder]=\"placeholder\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"date-input\"\n [disabled]=\"disabled\"\n />\n <i *ngIf=\"!hasValue\" (click)=\"openPanel()\" class=\"bhi-calendar\"></i>\n <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <novo-date-picker\n [start]=\"start\"\n [end]=\"end\"\n inline=\"true\"\n (onSelect)=\"setValueAndClose($event)\"\n [disabledDateMessage]=\"disabledDateMessage\"\n [ngModel]=\"value\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </novo-overlay-template>\n "
|
|
28642
|
+
template: "\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"formattedValue\"\n [textMask]=\"maskOptions\"\n [placeholder]=\"placeholder\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"date-input\"\n [disabled]=\"disabled\"\n />\n <span class=\"error-text\" *ngIf=\"showInvalidDateError\">{{invalidDateErrorMessage}}</span>\n <i *ngIf=\"!hasValue\" (click)=\"openPanel()\" class=\"bhi-calendar\"></i>\n <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <novo-date-picker\n [start]=\"start\"\n [end]=\"end\"\n inline=\"true\"\n (onSelect)=\"setValueAndClose($event)\"\n [disabledDateMessage]=\"disabledDateMessage\"\n [ngModel]=\"value\"\n [weekStart]=\"weekStart\"\n ></novo-date-picker>\n </novo-overlay-template>\n "
|
|
28606
28643
|
},] }
|
|
28607
28644
|
];
|
|
28608
28645
|
NovoDatePickerInputElement.ctorParameters = function () { return [
|
|
@@ -29123,28 +29160,41 @@
|
|
|
29123
29160
|
_this.toaster = toaster;
|
|
29124
29161
|
_this.role = 'columnheader';
|
|
29125
29162
|
_this.maxSelected = undefined;
|
|
29163
|
+
_this.canSelectAll = false;
|
|
29126
29164
|
_this.checked = false;
|
|
29127
29165
|
renderer.setAttribute(elementRef.nativeElement, 'data-automation-id', "novo-checkbox-column-header-" + columnDef.cssClassFriendlyName);
|
|
29128
29166
|
renderer.addClass(elementRef.nativeElement, "novo-checkbox-column-" + columnDef.cssClassFriendlyName);
|
|
29129
29167
|
renderer.addClass(elementRef.nativeElement, 'novo-data-table-checkbox-header-cell');
|
|
29130
29168
|
_this.selectionSubscription = _this.dataTable.state.selectionSource.subscribe(function () {
|
|
29131
29169
|
_this.checked = _this.dataTable.allCurrentRowsSelected();
|
|
29170
|
+
if (_this.canSelectAll) {
|
|
29171
|
+
_this.selectAllChanged();
|
|
29172
|
+
}
|
|
29132
29173
|
_this.ref.markForCheck();
|
|
29133
29174
|
});
|
|
29134
29175
|
_this.paginationSubscription = _this.dataTable.state.paginationSource.subscribe(function (event) {
|
|
29135
29176
|
if (event.isPageSizeChange) {
|
|
29136
29177
|
_this.checked = false;
|
|
29178
|
+
if (_this.canSelectAll) {
|
|
29179
|
+
_this.selectAllChanged();
|
|
29180
|
+
}
|
|
29137
29181
|
_this.dataTable.selectRows(false);
|
|
29138
29182
|
_this.dataTable.state.checkRetainment('pageSize');
|
|
29139
29183
|
_this.dataTable.state.reset(false, true);
|
|
29140
29184
|
}
|
|
29141
29185
|
else {
|
|
29142
29186
|
_this.checked = _this.dataTable.allCurrentRowsSelected();
|
|
29187
|
+
if (_this.canSelectAll) {
|
|
29188
|
+
_this.selectAllChanged();
|
|
29189
|
+
}
|
|
29143
29190
|
}
|
|
29144
29191
|
_this.ref.markForCheck();
|
|
29145
29192
|
});
|
|
29146
29193
|
_this.resetSubscription = _this.dataTable.state.resetSource.subscribe(function () {
|
|
29147
29194
|
_this.checked = false;
|
|
29195
|
+
if (_this.canSelectAll) {
|
|
29196
|
+
_this.selectAllChanged();
|
|
29197
|
+
}
|
|
29148
29198
|
_this.ref.markForCheck();
|
|
29149
29199
|
});
|
|
29150
29200
|
return _this;
|
|
@@ -29179,6 +29229,17 @@
|
|
|
29179
29229
|
else {
|
|
29180
29230
|
this.dataTable.selectRows(!this.checked);
|
|
29181
29231
|
}
|
|
29232
|
+
if (this.canSelectAll) {
|
|
29233
|
+
this.selectAllChanged();
|
|
29234
|
+
}
|
|
29235
|
+
};
|
|
29236
|
+
NovoDataTableCheckboxHeaderCell.prototype.selectAllChanged = function () {
|
|
29237
|
+
var _a, _b, _c;
|
|
29238
|
+
var allSelectedEvent = {
|
|
29239
|
+
allSelected: this.checked,
|
|
29240
|
+
selectedCount: (_c = (_b = (_a = this.dataTable) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.selected) === null || _c === void 0 ? void 0 : _c.length,
|
|
29241
|
+
};
|
|
29242
|
+
this.dataTable.allSelected.emit(allSelectedEvent);
|
|
29182
29243
|
};
|
|
29183
29244
|
return NovoDataTableCheckboxHeaderCell;
|
|
29184
29245
|
}(table.CdkHeaderCell));
|
|
@@ -29199,7 +29260,8 @@
|
|
|
29199
29260
|
]; };
|
|
29200
29261
|
NovoDataTableCheckboxHeaderCell.propDecorators = {
|
|
29201
29262
|
role: [{ type: core.HostBinding, args: ['attr.role',] }],
|
|
29202
|
-
maxSelected: [{ type: core.Input }]
|
|
29263
|
+
maxSelected: [{ type: core.Input }],
|
|
29264
|
+
canSelectAll: [{ type: core.Input }]
|
|
29203
29265
|
};
|
|
29204
29266
|
|
|
29205
29267
|
var NovoDataTableHeaderCell = /** @class */ (function (_super) {
|