@progress/kendo-angular-grid 20.1.0-develop.8 → 20.1.0
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/columns/column.component.d.ts +8 -1
- package/esm2022/columns/column.component.mjs +9 -1
- package/esm2022/common/clipboard.directive.mjs +3 -0
- package/esm2022/filtering/menu/filter-menu-container.component.mjs +120 -31
- package/esm2022/filtering/menu/filter-menu.component.mjs +4 -6
- package/esm2022/filtering/multicheckbox-filter.component.mjs +313 -0
- package/esm2022/grid.component.mjs +25 -12
- package/esm2022/index.mjs +1 -0
- package/esm2022/localization/messages.mjs +28 -1
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/pdf/pdf.component.mjs +8 -3
- package/esm2022/rendering/cell.component.mjs +2 -2
- package/esm2022/rendering/common/field-accessor.pipe.mjs +1 -1
- package/esm2022/rendering/common/format.pipe.mjs +37 -0
- package/esm2022/rendering/header/header.component.mjs +1 -1
- package/esm2022/rendering/list.component.mjs +2 -2
- package/esm2022/rendering/table-body.component.mjs +4 -2
- package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +4 -3
- package/esm2022/scrolling/scroller.service.mjs +0 -3
- package/fesm2022/progress-kendo-angular-grid.mjs +1965 -1500
- package/filtering/filterable.d.ts +23 -0
- package/filtering/menu/filter-menu-container.component.d.ts +5 -1
- package/filtering/menu/filter-menu.component.d.ts +3 -4
- package/filtering/multicheckbox-filter.component.d.ts +50 -0
- package/grid.component.d.ts +4 -6
- package/index.d.ts +1 -0
- package/localization/messages.d.ts +22 -1
- package/package.json +21 -21
- package/rendering/common/format.pipe.d.ts +17 -0
- package/schematics/ngAdd/index.js +4 -4
|
@@ -14,6 +14,7 @@ import { FilterCellTemplateDirective } from '../filtering/cell/filter-cell-templ
|
|
|
14
14
|
import { FilterMenuTemplateDirective } from '../filtering/menu/filter-menu-template.directive';
|
|
15
15
|
import { IdService } from '../common/id.service';
|
|
16
16
|
import { FieldDataType } from '../common/field-datatype';
|
|
17
|
+
import { FilterVariant, FilterVariantSettings } from '../filtering/filterable';
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
19
|
/**
|
|
19
20
|
* @hidden
|
|
@@ -72,6 +73,12 @@ export declare class ColumnComponent extends ColumnBase {
|
|
|
72
73
|
* @default 'text'
|
|
73
74
|
*/
|
|
74
75
|
filter: FieldDataType;
|
|
76
|
+
/**
|
|
77
|
+
* Specifies the filter type for the filter menu UI.
|
|
78
|
+
*
|
|
79
|
+
* @default 'default'
|
|
80
|
+
*/
|
|
81
|
+
filterVariant: FilterVariant | FilterVariantSettings;
|
|
75
82
|
/**
|
|
76
83
|
* Shows or hides the filter UI for this column. [See example](slug:filtering_grid).
|
|
77
84
|
*
|
|
@@ -101,5 +108,5 @@ export declare class ColumnComponent extends ColumnBase {
|
|
|
101
108
|
get filterMenuTemplateRef(): TemplateRef<any>;
|
|
102
109
|
get displayTitle(): string;
|
|
103
110
|
static ɵfac: i0.ɵɵFactoryDeclaration<ColumnComponent, [{ optional: true; host: true; skipSelf: true; }, { optional: true; }]>;
|
|
104
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ColumnComponent, "kendo-grid-column", never, { "field": { "alias": "field"; "required": false; }; "format": { "alias": "format"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "groupable": { "alias": "groupable"; "required": false; }; "editor": { "alias": "editor"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "editable": { "alias": "editable"; "required": false; }; }, {}, ["template", "groupHeaderTemplate", "groupHeaderColumnTemplate", "groupFooterTemplate", "editTemplate", "filterCellTemplate", "filterMenuTemplate"], never, true, never>;
|
|
111
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ColumnComponent, "kendo-grid-column", never, { "field": { "alias": "field"; "required": false; }; "format": { "alias": "format"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "groupable": { "alias": "groupable"; "required": false; }; "editor": { "alias": "editor"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "filterVariant": { "alias": "filterVariant"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "editable": { "alias": "editable"; "required": false; }; }, {}, ["template", "groupHeaderTemplate", "groupHeaderColumnTemplate", "groupFooterTemplate", "editTemplate", "filterCellTemplate", "filterMenuTemplate"], never, true, never>;
|
|
105
112
|
}
|
|
@@ -75,6 +75,12 @@ export class ColumnComponent extends ColumnBase {
|
|
|
75
75
|
* @default 'text'
|
|
76
76
|
*/
|
|
77
77
|
filter = 'text';
|
|
78
|
+
/**
|
|
79
|
+
* Specifies the filter type for the filter menu UI.
|
|
80
|
+
*
|
|
81
|
+
* @default 'default'
|
|
82
|
+
*/
|
|
83
|
+
filterVariant = 'default';
|
|
78
84
|
/**
|
|
79
85
|
* Shows or hides the filter UI for this column. [See example](slug:filtering_grid).
|
|
80
86
|
*
|
|
@@ -122,7 +128,7 @@ export class ColumnComponent extends ColumnBase {
|
|
|
122
128
|
return this.title === undefined ? this.field : this.title;
|
|
123
129
|
}
|
|
124
130
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnComponent, deps: [{ token: i1.ColumnBase, host: true, optional: true, skipSelf: true }, { token: i2.IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
125
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnComponent, isStandalone: true, selector: "kendo-grid-column", inputs: { field: "field", format: "format", sortable: "sortable", groupable: "groupable", editor: "editor", filter: "filter", filterable: "filterable", editable: "editable" }, providers: [
|
|
131
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnComponent, isStandalone: true, selector: "kendo-grid-column", inputs: { field: "field", format: "format", sortable: "sortable", groupable: "groupable", editor: "editor", filter: "filter", filterVariant: "filterVariant", filterable: "filterable", editable: "editable" }, providers: [
|
|
126
132
|
{
|
|
127
133
|
provide: ColumnBase,
|
|
128
134
|
useExisting: forwardRef(() => ColumnComponent)
|
|
@@ -162,6 +168,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
162
168
|
type: Input
|
|
163
169
|
}], filter: [{
|
|
164
170
|
type: Input
|
|
171
|
+
}], filterVariant: [{
|
|
172
|
+
type: Input
|
|
165
173
|
}], filterable: [{
|
|
166
174
|
type: Input
|
|
167
175
|
}], editable: [{
|
|
@@ -136,6 +136,9 @@ export class GridClipboardDirective {
|
|
|
136
136
|
const isPaste = operationType === 'paste';
|
|
137
137
|
const pastedData = args.clipboardData.getData('text');
|
|
138
138
|
const visibleCols = this.host.columns.toArray().filter(c => c.isVisible);
|
|
139
|
+
if (visibleCols.some(c => c.orderIndex > 0)) { // columns have been reordered
|
|
140
|
+
visibleCols.sort((a, b) => a.orderIndex - b.orderIndex);
|
|
141
|
+
}
|
|
139
142
|
const data = isPaste ?
|
|
140
143
|
{
|
|
141
144
|
dataString: pastedData,
|
|
@@ -14,6 +14,10 @@ import { FilterMenuHostDirective } from './filter-menu-host.directive';
|
|
|
14
14
|
import { NgSwitch, NgSwitchCase, NgIf, NgTemplateOutlet, NgClass } from '@angular/common';
|
|
15
15
|
import { FormsModule } from '@angular/forms';
|
|
16
16
|
import { AdaptiveGridService } from '../../common/adaptiveness.service';
|
|
17
|
+
import { MultiCheckboxFilterComponent } from '../multicheckbox-filter.component';
|
|
18
|
+
import { ButtonComponent } from '@progress/kendo-angular-buttons';
|
|
19
|
+
import { filterClearIcon, filterIcon } from '@progress/kendo-svg-icons';
|
|
20
|
+
import { areObjectsEqual } from '@progress/kendo-angular-common';
|
|
17
21
|
import * as i0 from "@angular/core";
|
|
18
22
|
import * as i1 from "../filter.service";
|
|
19
23
|
import * as i2 from "../../common/provider.service";
|
|
@@ -104,11 +108,11 @@ export class FilterMenuContainerComponent {
|
|
|
104
108
|
return this._childFilter;
|
|
105
109
|
}
|
|
106
110
|
resetButton;
|
|
107
|
-
filterButton;
|
|
108
111
|
_childFilter;
|
|
109
112
|
subscription;
|
|
110
113
|
_templateContext = {};
|
|
111
114
|
_filter;
|
|
115
|
+
checkboxFilter;
|
|
112
116
|
constructor(parentService, childService, ctx, cd, menuTabbingService, adaptiveGridService) {
|
|
113
117
|
this.parentService = parentService;
|
|
114
118
|
this.childService = childService;
|
|
@@ -134,7 +138,7 @@ export class FilterMenuContainerComponent {
|
|
|
134
138
|
this.menuTabbingService.lastFocusable = undefined;
|
|
135
139
|
}
|
|
136
140
|
get disabled() {
|
|
137
|
-
return !this.childFilter.filters.some(validFilters);
|
|
141
|
+
return this.isMultiFilter ? this.areFiltersEqual : !this.childFilter.filters.some(validFilters);
|
|
138
142
|
}
|
|
139
143
|
get templateContext() {
|
|
140
144
|
this._templateContext.column = this.column;
|
|
@@ -147,15 +151,20 @@ export class FilterMenuContainerComponent {
|
|
|
147
151
|
return isPresent(this.column) && isPresent(this.column.filterMenuTemplateRef);
|
|
148
152
|
}
|
|
149
153
|
submit() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
if (this.isMultiFilter) {
|
|
155
|
+
this.parentService.filter(this.checkboxFilter);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const filter = trimFilters(this.childFilter);
|
|
159
|
+
if (filter.filters.length) {
|
|
160
|
+
const root = this.filter || {
|
|
161
|
+
filters: [],
|
|
162
|
+
logic: "and"
|
|
163
|
+
};
|
|
164
|
+
removeFilter(root, this.column.field);
|
|
165
|
+
root.filters.push(filter);
|
|
166
|
+
this.parentService.filter(root);
|
|
167
|
+
}
|
|
159
168
|
}
|
|
160
169
|
this.close.emit();
|
|
161
170
|
return false;
|
|
@@ -183,29 +192,100 @@ export class FilterMenuContainerComponent {
|
|
|
183
192
|
}
|
|
184
193
|
}
|
|
185
194
|
}
|
|
195
|
+
onCheckboxFilterChange(filter) {
|
|
196
|
+
this.checkboxFilter = filter;
|
|
197
|
+
}
|
|
198
|
+
getButtonIcon(buttonType, iconType) {
|
|
199
|
+
if (!this.isMultiFilter) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const icons = {
|
|
203
|
+
filter: {
|
|
204
|
+
icon: 'filter',
|
|
205
|
+
svgIcon: filterIcon
|
|
206
|
+
},
|
|
207
|
+
reset: {
|
|
208
|
+
icon: 'filter-clear',
|
|
209
|
+
svgIcon: filterClearIcon
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
return icons[buttonType]?.[iconType];
|
|
213
|
+
}
|
|
186
214
|
get clearText() {
|
|
187
215
|
return this.ctx.localization.get("filterClearButton");
|
|
188
216
|
}
|
|
189
217
|
get filterText() {
|
|
190
218
|
return this.ctx.localization.get("filterFilterButton");
|
|
191
219
|
}
|
|
220
|
+
get isMultiFilter() {
|
|
221
|
+
if (!isPresent(this.column?.filterVariant)) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
const filterVariant = this.column?.filterVariant;
|
|
225
|
+
return isPresent(filterVariant) && (filterVariant === 'multiCheckbox' || typeof filterVariant === 'object' && filterVariant.variant === 'multiCheckbox');
|
|
226
|
+
}
|
|
227
|
+
get areFiltersEqual() {
|
|
228
|
+
const checkboxFilter = this.checkboxFilter;
|
|
229
|
+
const gridFilter = this.filter;
|
|
230
|
+
const isComposite = (f) => !!f && Array.isArray(f.filters);
|
|
231
|
+
// Treat undefined and "empty (no inner filters)" as equivalent
|
|
232
|
+
const isEmptyComposite = (f) => isComposite(f) && f.filters.length === 0;
|
|
233
|
+
if (!checkboxFilter && !gridFilter) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
if ((!checkboxFilter && isEmptyComposite(gridFilter)) || (!gridFilter && isEmptyComposite(checkboxFilter))) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
if (!checkboxFilter || !gridFilter) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
const eq = (x, y) => {
|
|
243
|
+
const xIsComp = isComposite(x);
|
|
244
|
+
const yIsComp = isComposite(y);
|
|
245
|
+
if (xIsComp !== yIsComp) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
if (xIsComp) {
|
|
249
|
+
const xLogic = x.logic || 'and';
|
|
250
|
+
const yLogic = y.logic || 'and';
|
|
251
|
+
if (xLogic !== yLogic) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
if (x.filters.length !== y.filters.length) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
for (let i = 0; i < x.filters.length; i++) {
|
|
258
|
+
if (!eq(x.filters[i], y.filters[i])) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
return areObjectsEqual(x, y);
|
|
265
|
+
};
|
|
266
|
+
return eq(checkboxFilter, gridFilter);
|
|
267
|
+
}
|
|
192
268
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuContainerComponent, deps: [{ token: i1.FilterService, skipSelf: true }, { token: i1.FilterService }, { token: i2.ContextService }, { token: i0.ChangeDetectorRef }, { token: i3.MenuTabbingService }, { token: i4.AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
|
|
193
269
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuContainerComponent, isStandalone: true, selector: "kendo-grid-filter-menu-container", inputs: { column: "column", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", filter: "filter", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
|
|
194
270
|
FilterService,
|
|
195
271
|
MenuTabbingService
|
|
196
|
-
], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }
|
|
272
|
+
], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }], ngImport: i0, template: `
|
|
197
273
|
<form (submit)="submit()" (reset)="reset()"
|
|
198
|
-
class="k-filter-menu"
|
|
274
|
+
class="k-filter-menu"
|
|
275
|
+
[ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
|
|
199
276
|
<div class="k-filter-menu-container">
|
|
200
277
|
<ng-container [ngSwitch]="hasTemplate">
|
|
201
278
|
<ng-container *ngSwitchCase="false">
|
|
202
|
-
<ng-container
|
|
279
|
+
<ng-container *ngIf="!isMultiFilter; else multiFilter"
|
|
203
280
|
kendoFilterMenuHost
|
|
204
281
|
[filterService]="childService"
|
|
205
282
|
[column]="column"
|
|
206
283
|
[filter]="childFilter"
|
|
207
284
|
[menuTabbingService]="menuTabbingService">
|
|
208
285
|
</ng-container>
|
|
286
|
+
<ng-template #multiFilter>
|
|
287
|
+
<kendo-grid-multicheckbox-filter [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
|
|
288
|
+
</ng-template>
|
|
209
289
|
</ng-container>
|
|
210
290
|
<ng-container *ngSwitchCase="true">
|
|
211
291
|
<ng-template
|
|
@@ -217,20 +297,24 @@ export class FilterMenuContainerComponent {
|
|
|
217
297
|
</ng-container>
|
|
218
298
|
</ng-container>
|
|
219
299
|
<div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
|
|
220
|
-
<button #filterButton
|
|
300
|
+
<button #filterButton kendoButton
|
|
301
|
+
themeColor="primary"
|
|
221
302
|
type="submit"
|
|
222
|
-
|
|
303
|
+
[ngClass]="{'k-button-rectangle': !isMultiFilter}"
|
|
223
304
|
[disabled]="disabled"
|
|
305
|
+
[icon]="getButtonIcon('filter', 'icon')"
|
|
306
|
+
[svgIcon]="getButtonIcon('filter', 'svgIcon')"
|
|
224
307
|
(keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
|
|
225
|
-
<button
|
|
226
|
-
#resetButton
|
|
308
|
+
<button #resetButton kendoButton
|
|
227
309
|
type="reset"
|
|
228
|
-
|
|
310
|
+
[ngClass]="{'k-button-rectangle': !isMultiFilter}"
|
|
311
|
+
[icon]="getButtonIcon('reset', 'icon')"
|
|
312
|
+
[svgIcon]="getButtonIcon('reset', 'svgIcon')"
|
|
229
313
|
(keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
|
|
230
314
|
</div>
|
|
231
315
|
</div>
|
|
232
316
|
</form>
|
|
233
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
317
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiCheckboxFilterComponent, selector: "kendo-grid-multicheckbox-filter", inputs: ["column"], outputs: ["filterChange"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
|
|
234
318
|
}
|
|
235
319
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
|
|
236
320
|
type: Component,
|
|
@@ -242,17 +326,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
242
326
|
selector: 'kendo-grid-filter-menu-container',
|
|
243
327
|
template: `
|
|
244
328
|
<form (submit)="submit()" (reset)="reset()"
|
|
245
|
-
class="k-filter-menu"
|
|
329
|
+
class="k-filter-menu"
|
|
330
|
+
[ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
|
|
246
331
|
<div class="k-filter-menu-container">
|
|
247
332
|
<ng-container [ngSwitch]="hasTemplate">
|
|
248
333
|
<ng-container *ngSwitchCase="false">
|
|
249
|
-
<ng-container
|
|
334
|
+
<ng-container *ngIf="!isMultiFilter; else multiFilter"
|
|
250
335
|
kendoFilterMenuHost
|
|
251
336
|
[filterService]="childService"
|
|
252
337
|
[column]="column"
|
|
253
338
|
[filter]="childFilter"
|
|
254
339
|
[menuTabbingService]="menuTabbingService">
|
|
255
340
|
</ng-container>
|
|
341
|
+
<ng-template #multiFilter>
|
|
342
|
+
<kendo-grid-multicheckbox-filter [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
|
|
343
|
+
</ng-template>
|
|
256
344
|
</ng-container>
|
|
257
345
|
<ng-container *ngSwitchCase="true">
|
|
258
346
|
<ng-template
|
|
@@ -264,22 +352,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
264
352
|
</ng-container>
|
|
265
353
|
</ng-container>
|
|
266
354
|
<div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
|
|
267
|
-
<button #filterButton
|
|
355
|
+
<button #filterButton kendoButton
|
|
356
|
+
themeColor="primary"
|
|
268
357
|
type="submit"
|
|
269
|
-
|
|
358
|
+
[ngClass]="{'k-button-rectangle': !isMultiFilter}"
|
|
270
359
|
[disabled]="disabled"
|
|
360
|
+
[icon]="getButtonIcon('filter', 'icon')"
|
|
361
|
+
[svgIcon]="getButtonIcon('filter', 'svgIcon')"
|
|
271
362
|
(keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
|
|
272
|
-
<button
|
|
273
|
-
#resetButton
|
|
363
|
+
<button #resetButton kendoButton
|
|
274
364
|
type="reset"
|
|
275
|
-
|
|
365
|
+
[ngClass]="{'k-button-rectangle': !isMultiFilter}"
|
|
366
|
+
[icon]="getButtonIcon('reset', 'icon')"
|
|
367
|
+
[svgIcon]="getButtonIcon('reset', 'svgIcon')"
|
|
276
368
|
(keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
|
|
277
369
|
</div>
|
|
278
370
|
</div>
|
|
279
371
|
</form>
|
|
280
372
|
`,
|
|
281
373
|
standalone: true,
|
|
282
|
-
imports: [FormsModule, NgSwitch, NgSwitchCase, FilterMenuHostDirective, NgIf, NgTemplateOutlet, NgClass]
|
|
374
|
+
imports: [FormsModule, NgSwitch, NgSwitchCase, FilterMenuHostDirective, NgIf, NgTemplateOutlet, NgClass, MultiCheckboxFilterComponent, ButtonComponent]
|
|
283
375
|
}]
|
|
284
376
|
}], ctorParameters: function () { return [{ type: i1.FilterService, decorators: [{
|
|
285
377
|
type: SkipSelf
|
|
@@ -300,7 +392,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
300
392
|
}], resetButton: [{
|
|
301
393
|
type: ViewChild,
|
|
302
394
|
args: ['resetButton', { static: false }]
|
|
303
|
-
}], filterButton: [{
|
|
304
|
-
type: ViewChild,
|
|
305
|
-
args: ['filterButton', { static: false }]
|
|
306
395
|
}] } });
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { NavigationService } from './../../navigation/navigation.service';
|
|
6
|
-
import { ChangeDetectorRef, Component, ElementRef, Input,
|
|
6
|
+
import { ChangeDetectorRef, Component, ElementRef, Input, Optional, Renderer2, TemplateRef, ViewChild } from '@angular/core';
|
|
7
7
|
import { FilterService } from "../filter.service";
|
|
8
8
|
import { ColumnComponent } from '../../columns/column.component';
|
|
9
9
|
import { SinglePopupService } from '../../common/single-popup.service';
|
|
@@ -35,7 +35,6 @@ export class FilterMenuComponent {
|
|
|
35
35
|
renderer;
|
|
36
36
|
cdr;
|
|
37
37
|
adaptiveGridService;
|
|
38
|
-
zone;
|
|
39
38
|
idService;
|
|
40
39
|
filterIcon = filterIcon;
|
|
41
40
|
/**
|
|
@@ -53,7 +52,7 @@ export class FilterMenuComponent {
|
|
|
53
52
|
tabIndex = '-1';
|
|
54
53
|
popupRef;
|
|
55
54
|
popupSubs;
|
|
56
|
-
constructor(filterService, popupService, ctx, navigationService, renderer, cdr, adaptiveGridService,
|
|
55
|
+
constructor(filterService, popupService, ctx, navigationService, renderer, cdr, adaptiveGridService, idService) {
|
|
57
56
|
this.filterService = filterService;
|
|
58
57
|
this.popupService = popupService;
|
|
59
58
|
this.ctx = ctx;
|
|
@@ -61,7 +60,6 @@ export class FilterMenuComponent {
|
|
|
61
60
|
this.renderer = renderer;
|
|
62
61
|
this.cdr = cdr;
|
|
63
62
|
this.adaptiveGridService = adaptiveGridService;
|
|
64
|
-
this.zone = zone;
|
|
65
63
|
this.idService = idService;
|
|
66
64
|
}
|
|
67
65
|
ngOnDestroy() {
|
|
@@ -147,7 +145,7 @@ export class FilterMenuComponent {
|
|
|
147
145
|
this.anchor.nativeElement.focus({ preventScroll: true });
|
|
148
146
|
}
|
|
149
147
|
}
|
|
150
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: i1.FilterService }, { token: i2.SinglePopupService }, { token: i3.ContextService }, { token: i4.NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.AdaptiveGridService }, { token:
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: i1.FilterService }, { token: i2.SinglePopupService }, { token: i3.ContextService }, { token: i4.NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.AdaptiveGridService }, { token: i6.IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
149
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuComponent, isStandalone: true, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
|
|
152
150
|
<a #anchor
|
|
153
151
|
class="k-grid-filter-menu k-grid-header-menu"
|
|
@@ -206,7 +204,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
206
204
|
standalone: true,
|
|
207
205
|
imports: [IconWrapperComponent, FilterMenuContainerComponent],
|
|
208
206
|
}]
|
|
209
|
-
}], ctorParameters: function () { return [{ type: i1.FilterService }, { type: i2.SinglePopupService }, { type: i3.ContextService }, { type: i4.NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.AdaptiveGridService }, { type:
|
|
207
|
+
}], ctorParameters: function () { return [{ type: i1.FilterService }, { type: i2.SinglePopupService }, { type: i3.ContextService }, { type: i4.NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.AdaptiveGridService }, { type: i6.IdService, decorators: [{
|
|
210
208
|
type: Optional
|
|
211
209
|
}] }]; }, propDecorators: { column: [{
|
|
212
210
|
type: Input
|