I am experiencing an issue with the Kendo DateRange functionality in my Angular project. I am dynamically assigning the kendodaterangestartinput and kendodaterangeendinput attributes using a directive. While the attributes are correctly applied to the <kendo-dateinput> elements (verified in the DOM), the calendar is not showing when interacting with the input fields.
Here’s the directive I am using to dynamically assign the attributes
import { Directive, Input, Renderer2, ElementRef, OnInit } from '@angular/core';
@Directive({
selector: '[dynamicDateRange]',
standalone: true
})
export class DynamicDateRangeDirective implements OnInit {
@Input() dynamicDateRange: 'start' | 'end' | null = null;
constructor(private renderer: Renderer2, private el: ElementRef) {}
ngOnInit(): void {
if (this.dynamicDateRange === 'start') {
this.renderer.setAttribute(this.el.nativeElement, 'kendodaterangestartinput', '');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangeendinput');
} else if (this.dynamicDateRange === 'end') {
this.renderer.setAttribute(this.el.nativeElement, 'kendodaterangeendinput', '');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangestartinput');
} else {
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangestartinput');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangeendinput');
}
}
}
<kendo-formfield [showHints]="showHints" [showErrors]="showErrors" [orientation]="orientation">
<kendo-label [text]="label" [for]="dateinput" [hidden]="!showLabel"></kendo-label>
<kendo-dateinput
#dateinput
[formControl]="control"
[allowCaretMode]="allowCaretMode!"
[autoCorrectParts]="autoCorrectParts"
[autoFill]="autoFill"
[autoSwitchKeys]="autoSwitchKeys"
[autoSwitchParts]="autoSwitchParts"
[clearButton]="clearButton"
[disabled]="disabled"
[enableMouseWheel]="enableMouseWheel"
[fillMode]="fillMode"
[format]="format"
[formatPlaceholder]="formatPlaceholder"
[incompleteDateValidation]="incompleteDateValidation"
[inputAttributes]="inputAttributes!"
[max]="max"
[min]="min"
[placeholder]="placeholder"
[rangeValidation]="rangeValidation"
[readonly]="readonly"
[rounded]="rounded"
[size]="size"
[steps]="steps"
[tabindex]="tabindex"
[dynamicDateRange]="dateRangeType"
[title]="title"
[twoDigitYearMax]="twoDigitYearMax"
[value]="value"
(blur)="blur.emit($event)"
(valueChange)="valueChange.emit($event)"
(focus)="focus.emit($event)">
</kendo-dateinput>
<kendo-formhint [align]="hintAlign">
<ng-content select="[hint]"></ng-content>
</kendo-formhint>
<kendo-formerror [align]="errorAlign">
<ng-content select="[error]"></ng-content>
</kendo-formerror>
</kendo-formfield>
Here’s how I use it in the template:
<kendo-daterange id="feed-filter-date-range" class="k-mt-4 k-justify-content-between">
<mnp-date-input
label="start"
[dynamicDateRange]="'start'"
[control]="fromDate">
</mnp-date-input>
<div>
<kendo-formfield>
<mnp-label text="End" class="k-d-flex k-flex-col"></mnp-label>
<kendo-dateinput
formControlName="toDate"
kendodaterangeendinput>
</kendo-dateinput>
</kendo-formfield>
</div>
</kendo-daterange>
kendodaterangestartinput or kendodaterangeendinput fields. However, when I used the <kendo-dateinput> directly the attributes directly in the template, the calendar works as expected.<kendo-daterange>
<kendo-dateinput
formControlName="fromDate"
kendodaterangestartinput>
</kendo-dateinput>
<kendo-dateinput
formControlName="toDate"
kendodaterangeendinput>
</kendo-dateinput>
</kendo-daterange>
Hello,
I am trying to implement a directive to prevent changing the values on the client side when an input is disabled. It works perfectly on a native HTML element, but not completely when used on a Kendo UI element such as datetime picker or numeric textbox.
@HostListener('keydown', ['$event'])
onKeydown(event: KeyboardEvent): void {
if (this.appCustomDisabled) {
// Prevent arrow keys (Up/Down) from changing the value
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
event.preventDefault();
event.stopImmediatePropagation();
}
// Prevent any other key presses or changes
event.preventDefault();
event.stopImmediatePropagation();
}
}
@HostListener('input', ['$event'])
onInput(event: Event): void {
if (this.appCustomDisabled) {
event.preventDefault(); // Prevent any changes to the input
event.stopImmediatePropagation();
}
}
@HostListener('wheel', ['$event'])
onWheel(event: WheelEvent): void {
if (this.appCustomDisabled) {
event.preventDefault(); // Prevent the mouse wheel action
event.stopImmediatePropagation();
}
}mouse wheel and key inputs are successfully prevented, but arrow up/down keys are still changing the value. How do I prevent them from changing the value?
My main goal is to prevent the user as much as possible from modifying the value of a disabled input because the disabled=true approach can be easily bypassed from the devtools.
I am experiencing an issue with the Kendo DateRange functionality in my Angular project. I am dynamically assigning the kendodaterangestartinput and kendodaterangeendinput attributes using a directive. While the attributes are correctly applied to the <kendo-dateinput> elements (verified in the DOM), the calendar is not showing when interacting with the input fields.
Here’s the directive I am using to dynamically assign the attributes
import { Directive, Input, Renderer2, ElementRef, OnInit } from '@angular/core';
@Directive({
selector: '[dynamicDateRange]',
standalone: true
})
export class DynamicDateRangeDirective implements OnInit {
@Input() dynamicDateRange: 'start' | 'end' | null = null;
constructor(private renderer: Renderer2, private el: ElementRef) {}
ngOnInit(): void {
if (this.dynamicDateRange === 'start') {
this.renderer.setAttribute(this.el.nativeElement, 'kendodaterangestartinput', '');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangeendinput');
} else if (this.dynamicDateRange === 'end') {
this.renderer.setAttribute(this.el.nativeElement, 'kendodaterangeendinput', '');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangestartinput');
} else {
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangestartinput');
this.renderer.removeAttribute(this.el.nativeElement, 'kendodaterangeendinput');
}
}
}
<kendo-formfield [showHints]="showHints" [showErrors]="showErrors" [orientation]="orientation">
<kendo-label [text]="label" [for]="dateinput" [hidden]="!showLabel"></kendo-label>
<kendo-dateinput
#dateinput
[formControl]="control"
[allowCaretMode]="allowCaretMode!"
[autoCorrectParts]="autoCorrectParts"
[autoFill]="autoFill"
[autoSwitchKeys]="autoSwitchKeys"
[autoSwitchParts]="autoSwitchParts"
[clearButton]="clearButton"
[disabled]="disabled"
[enableMouseWheel]="enableMouseWheel"
[fillMode]="fillMode"
[format]="format"
[formatPlaceholder]="formatPlaceholder"
[incompleteDateValidation]="incompleteDateValidation"
[inputAttributes]="inputAttributes!"
[max]="max"
[min]="min"
[placeholder]="placeholder"
[rangeValidation]="rangeValidation"
[readonly]="readonly"
[rounded]="rounded"
[size]="size"
[steps]="steps"
[tabindex]="tabindex"
[dynamicDateRange]="dateRangeType"
[title]="title"
[twoDigitYearMax]="twoDigitYearMax"
[value]="value"
(blur)="blur.emit($event)"
(valueChange)="valueChange.emit($event)"
(focus)="focus.emit($event)">
</kendo-dateinput>
<kendo-formhint [align]="hintAlign">
<ng-content select="[hint]"></ng-content>
</kendo-formhint>
<kendo-formerror [align]="errorAlign">
<ng-content select="[error]"></ng-content>
</kendo-formerror>
</kendo-formfield>
Here’s how I use it in the template:
<kendo-daterange id="feed-filter-date-range" class="k-mt-4 k-justify-content-between">
<mnp-date-input
label="start"
[dynamicDateRange]="'start'"
[control]="fromDate">
</mnp-date-input>
<div>
<kendo-formfield>
<mnp-label text="End" class="k-d-flex k-flex-col"></mnp-label>
<kendo-dateinput
formControlName="toDate"
kendodaterangeendinput>
</kendo-dateinput>
</kendo-formfield>
</div>
</kendo-daterange>
kendodaterangestartinput or kendodaterangeendinput fields. However, when I used the <kendo-dateinput> directly the attributes directly in the template, the calendar works as expected.<kendo-daterange>
<kendo-dateinput
formControlName="fromDate"
kendodaterangestartinput>
</kendo-dateinput>
<kendo-dateinput
formControlName="toDate"
kendodaterangeendinput>
</kendo-dateinput>
</kendo-daterange>

I use a kendo-grid component that has a dynamic list,. When I press Add it adds a new row and each row can be removed from the list. My problem is when I remove an item, it always removes the last row from UI. I saw that the values are correct, only the UI is the problem because it removes the last element from the list and it keeps visible the one I selected to remove.
After some debugging, I saw that it is because of the filteredPermission list that updates at every changes but I do not know how to fix th problem.
Thank you!
</kendo-grid-column>
}
}
</kendo-grid>
hi,
can you please tell me how to apply bootstrap table style,i.e table-primary,table-secondary...,please see the below:
<table class="table-primary">...</table>
<table class="table-secondary">...</table> <table class="table-success">...</table> <table class="table-danger">...</table> <table class="table-warning">...</table> <table class="table-info">...</table> <table class="table-light">...</table> <table class="table-dark">...</table>
the grid i am using is descripted as below web page:https://www.telerik.com/kendo-angular-ui/components/grid
thank you.
david
Once Kendo loader is shown and hidden, it resets the textbox type from password to text.
Can I get a solution to it.
As I need the kendoTextBoxPrefixTemplate and cant use the kendoTextBox API inside <input/> to use a [type] variable and
control the textBox type
Here is the sample code:
import { Component, AfterViewInit, OnInit, ViewChild } from'@angular/core';
import {
LoaderType,
LoaderThemeColor,
LoaderSize,
} from '@progress/kendo-angular-indicators';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { TextBoxComponent } from '@progress/kendo-angular-inputs';
@Component({
selector: 'my-app',
template: `
<div class="login-page--main-container">
<kendo-card class="login-page--kendo-card" *ngIf="!showLoader">
<div class="login-page--form-container">
<form [formGroup]="loginForm" class="login-page--login-form" (ngSubmit)="onSubmit()">
<div class="login-page--formfield">
<div class="login-page--formfield-user">
<kendo-formfield>
<kendo-textbox
class="login-page--textbox"
formControlName="username"
#username
required
placeholder="Username">
<ng-template kendoTextBoxPrefixTemplate>
<img src="assets/content/images/login-images/profile.svg" alt="new" class="login-page--user-img" />
</ng-template>
</kendo-textbox>
<kendo-formerror class="login-page-kendo-form-error">
Username is required
</kendo-formerror>
</kendo-formfield>
</div>
<kendo-formfield>
<kendo-textbox
#textbox
placeholder="Password"
[clearButton]="true"
class="login-page--textbox"
formControlName="password">
<ng-template kendoTextBoxSuffixTemplate>
<button kendoButton look="clear" (click)="togglePasswordVisibility()"> Eye </button>
</ng-template>
<ng-template kendoTextBoxPrefixTemplate>
<img src="assets/content/images/login-images/password.svg" alt="new" class="login-page--profile-img" />
</ng-template>
</kendo-textbox>
<kendo-formerror class="login-page-kendo-form-error">
Password is required
</kendo-formerror>
</kendo-formfield>
<div class="login-page--forgot-div">
<!-- Optional forgot password link -->
</div>
</div>
<div>
<button kendoButton class="login-page--signin-button" [disabled]="loginForm.invalid">
Sign In
</button>
</div>
</form>
</div>
</kendo-card>
<div class="app-screen--loader" *ngIf="showLoader">
<div class="example-item" *ngFor="let loader of loaders">
<div class="example-item-title">{{ loader.type | titlecase }}</div>
<div class="k-block">
<kendo-loader
[type]="loader.type"
[themeColor]="loader.themeColor"
[size]="loader.size"
>
</kendo-loader>
</div>
</div>
<div>Signing in....</div>
</div>
</div>
`,
})
export class AppComponent implements AfterViewInit {
public loginForm: FormGroup;
public showLoader = false;
public loaders = [
{
type: <LoaderType>'pulsing',
themeColor: <LoaderThemeColor>'primary',
size: <LoaderSize>'medium',
},
{
type: <LoaderType>'infinite-spinner',
themeColor: <LoaderThemeColor>'secondary',
size: <LoaderSize>'medium',
},
{
type: <LoaderType>'converging-spinner',
themeColor: <LoaderThemeColor>'info',
size: <LoaderSize>'medium',
},
];
@ViewChild('textbox') public textbox!: TextBoxComponent;
constructor() {
this.loginForm = new FormGroup({
username: new FormControl('', Validators.required),
password: new FormControl('', Validators.required),
});
}
public ngAfterViewInit(): void {
this.textbox.input.nativeElement.type = 'password';
}
public togglePasswordVisibility(): void {
const inputEl = this.textbox.input.nativeElement;
inputEl.type = inputEl.type === 'password' ? 'text' : 'password';
}
public async onSubmit() {
if (this.loginForm.valid) {
this.showLoader = true;
await new Promise((resolve) => setTimeout(resolve, 1000));
this.showLoader = false;
}
}
}Hi, can we use directives or something similar to change the appearance of the Kendo-Grid like
<kendo-grid NewApparenceDirective [kendoGridBinding]="data()">
I need to create a reusable, very lightweight grid.
Removing the background (set it transparent), removing some borders, changing text size, and so on.
What is the way to accomplish and reuse it on a lot of our components
Thanks

how to change the click function of the ellipsis in kendo ui kendo-scheduler-month-view?
i need to change the click function of the ellipsis on the shown screenshot below:
<kendo-scheduler
[resources]="[]"
[kendoSchedulerBinding]="events"
[(selectedViewIndex)]="schedulerView"
[slotClass]="getSlotClass"
[selectedDate]="selectedDate"
[slotDivisions]="1"
[selectable]="true"
[isSlotSelected]="isSlotSelected"
(slotDragStart)="onSlotDragStart($event)"
(slotDrag)="onSlotDrag($event)">
<kendo-scheduler-month-view [eventHeight]="18" [eventClass]="getEventClass">
<ng-template kendoSchedulerEventTemplate let-event="event" let-resources="resources">
<ng-template *ngTemplateOutlet="eventTemplate; context: { $implicit: event.dataItem }"></ng-template>
</ng-template>
</kendo-scheduler-month-view>
</kendo-scheduler>
<kendo-scheduler
[resources]="[]"
[kendoSchedulerBinding]="events"
[(selectedViewIndex)]="schedulerView"
[slotClass]="getSlotClass"
[selectedDate]="selectedDate"
[slotDivisions]="1"
[selectable]="true"
[isSlotSelected]="isSlotSelected"
(slotDragStart)="onSlotDragStart($event)"
(slotDrag)="onSlotDrag($event)">
<kendo-scheduler-month-view [eventHeight]="18" [eventClass]="getEventClass">
<ng-template kendoSchedulerEventTemplate let-event="event" let-resources="resources">
<ng-template *ngTemplateOutlet="eventTemplate; context: { $implicit: event.dataItem }"></ng-template>
</ng-template>
</kendo-scheduler-month-view>
</kendo-scheduler>

Is there a built-in Kendo form class for a grid-type layout? I know that the GridLayout component is available, was hoping that there was something built-in already that would be more straightforward to implement.
Thanks
