UNPKG

@progress/kendo-angular-grid

Version:

Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.

218 lines (217 loc) 9.95 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { Component, Input, HostBinding } from '@angular/core'; import { FilterService } from '../filter.service'; import { NumericFilterComponent } from '../numeric-filter.component'; import { setFilter, logicOperators } from '../base-filter-cell.component'; import { replaceMessagePlaceholder } from '../../utils'; import { MenuTabbingService } from './menu-tabbing.service'; import { ContextService } from '../../common/provider.service'; import { FilterMenuDropDownListDirective } from './filter-menu-dropdownlist.directive'; import { NgIf } from '@angular/common'; import { NumericFilterMenuInputComponent } from './numeric-filter-menu-input.component'; import { DropDownListComponent } from '@progress/kendo-angular-dropdowns'; import * as i0 from "@angular/core"; import * as i1 from "../../common/provider.service"; /** * Represents a numeric filter-menu component. * * @example * ```html * <kendo-grid-column field="UnitPrice"> * <ng-template kendoGridFilterMenuTemplate let-filter let-column="column" let-filterService="filterService"> * <kendo-grid-numeric-filter-menu * [column]="column" * [filter]="filter" * [filterService]="filterService"> * </kendo-grid-numeric-filter-menu> * </ng-template> * </kendo-grid-column> * ``` */ export class NumericFilterMenuComponent extends NumericFilterComponent { logicOperators = logicOperators(this.ctx.localization); /** * @hidden */ get hostClasses() { return false; } /** * The current menu filter. * @type {CompositeFilterDescriptor} */ filter = { filters: [], logic: "and" }; /** * Determines if the inputs of second criteria will displayed. * @default true */ extra = true; /** * The `FilterService` instance which is responsible for handling the changes in the filter descriptor. */ filterService; /** * Determines the delay (in milliseconds) before creating a filter descriptor based on the value. A value of 0 indicates no delay. The default value is 500. * * @default 500 */ filterDelay = 500; /** * The placeholder text for the filter input. * @type {string} */ placeholder = ''; /** * The placeholder text for the extra filter input. Applies when `extra` is set to `true`. * @type {string} */ extraPlaceholder = ''; /** * @hidden */ menuTabbingService; constructor(ctx) { super(null, ctx); } get firstFilter() { return setFilter(0, this.filter, (this.column || {}).field, this.operator); } get secondFilter() { return setFilter(1, this.filter, (this.column || {}).field, this.operator); } logicChange(value) { this.filter.logic = value; } get filterMenuDropDownLabel() { const localizationMsg = this.ctx.localization.get('filterMenuLogicDropDownLabel') || ''; const columnName = this.column ? this.column.title || this.column.field : ''; return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName); } localizationChange() { this.logicOperators = logicOperators(this.ctx.localization); super.localizationChange(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumericFilterMenuComponent, deps: [{ token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NumericFilterMenuComponent, isStandalone: true, selector: "kendo-grid-numeric-filter-menu", inputs: { filter: "filter", extra: "extra", filterService: "filterService", filterDelay: "filterDelay", placeholder: "placeholder", extraPlaceholder: "extraPlaceholder", menuTabbingService: "menuTabbingService" }, host: { properties: { "class.k-filtercell": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: ` <kendo-grid-numeric-filter-menu-input [currentFilter]="firstFilter" [operators]="operators" [filterService]="filterService" [column]="column" [filter]="filter" [filterDelay]="filterDelay" [format]="format" [decimals]="decimals" [spinners]="spinners" [min]="min" [max]="max" [step]="step" [menuTabbingService]="menuTabbingService" [isFirstDropDown]="true" [placeholder]="placeholder"> </kendo-grid-numeric-filter-menu-input> <kendo-dropdownlist *ngIf="extra" kendoFilterMenuDropDown [filterMenuDropDownLabel]="filterMenuDropDownLabel" class="k-filter-and" [data]="logicOperators" [valuePrimitive]="true" (valueChange)="logicChange($event)" [value]="filter?.logic" textField="text" valueField="value"> </kendo-dropdownlist> <kendo-grid-numeric-filter-menu-input *ngIf="extra" [operators]="operators" [currentFilter]="secondFilter" [filterService]="filterService" [column]="column" [filter]="filter" [format]="format" [decimals]="decimals" [spinners]="spinners" [min]="min" [max]="max" [step]="step" [menuTabbingService]="menuTabbingService" [placeholder]="extraPlaceholder"> </kendo-grid-numeric-filter-menu-input> `, isInline: true, dependencies: [{ kind: "component", type: NumericFilterMenuInputComponent, selector: "kendo-grid-numeric-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "filterDelay", "isFirstDropDown", "menuTabbingService", "step", "min", "max", "spinners", "decimals", "format", "placeholder"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumericFilterMenuComponent, decorators: [{ type: Component, args: [{ selector: 'kendo-grid-numeric-filter-menu', template: ` <kendo-grid-numeric-filter-menu-input [currentFilter]="firstFilter" [operators]="operators" [filterService]="filterService" [column]="column" [filter]="filter" [filterDelay]="filterDelay" [format]="format" [decimals]="decimals" [spinners]="spinners" [min]="min" [max]="max" [step]="step" [menuTabbingService]="menuTabbingService" [isFirstDropDown]="true" [placeholder]="placeholder"> </kendo-grid-numeric-filter-menu-input> <kendo-dropdownlist *ngIf="extra" kendoFilterMenuDropDown [filterMenuDropDownLabel]="filterMenuDropDownLabel" class="k-filter-and" [data]="logicOperators" [valuePrimitive]="true" (valueChange)="logicChange($event)" [value]="filter?.logic" textField="text" valueField="value"> </kendo-dropdownlist> <kendo-grid-numeric-filter-menu-input *ngIf="extra" [operators]="operators" [currentFilter]="secondFilter" [filterService]="filterService" [column]="column" [filter]="filter" [format]="format" [decimals]="decimals" [spinners]="spinners" [min]="min" [max]="max" [step]="step" [menuTabbingService]="menuTabbingService" [placeholder]="extraPlaceholder"> </kendo-grid-numeric-filter-menu-input> `, standalone: true, imports: [NumericFilterMenuInputComponent, NgIf, DropDownListComponent, FilterMenuDropDownListDirective] }] }], ctorParameters: function () { return [{ type: i1.ContextService }]; }, propDecorators: { hostClasses: [{ type: HostBinding, args: ['class.k-filtercell'] }], filter: [{ type: Input }], extra: [{ type: Input }], filterService: [{ type: Input }], filterDelay: [{ type: Input }], placeholder: [{ type: Input }], extraPlaceholder: [{ type: Input }], menuTabbingService: [{ type: Input }] } });