There is a bug where DialogFactory is not resetting custom button text. In this example, if you click Show Prompt, the buttons are OK/CANCEL, then click Show Prompt with Title, Default Input Text and Custom Buttons, the buttons show READY/REJECT, clicking Show Prompt a second time will show the button text as READY/REJECT.
Pressing Espace in a focused SearchBox throws an "Error: System.ObjectDisposedException: The CancellationTokenSource has been disposed." exception.
<AdminEdit>
A workaround that will solve the issue until the fix is released.
<TelerikDialog @bind-Visible="@Visible"
Title="@Title">
<DialogContent>
<TelerikGrid Data=@GridData Pageable="true" Height="400px" Width="700px">
<GridToolBar>
<span class="k-toolbar-spacer"></span> @* add this spacer to keep the searchbox on the right *@
<div onkeydown="event.stopPropagation()">
<GridSearchBox />
</div>
</GridToolBar>
<GridColumns>
<GridColumn Field="@(nameof(Employee.EmployeeId))" />
<GridColumn Field=@nameof(Employee.Name) />
<GridColumn Field=@nameof(Employee.Team) Title="Team" />
<GridColumn Field=@nameof(Employee.IsOnLeave) Title="On Vacation" />
</GridColumns>
</TelerikGrid>
</DialogContent>
</TelerikDialog>
@code {
private bool Visible { get; set; } = true;
private string Title { get; set; } = "Software Update";
public List<Employee> GridData { get; set; }
protected override void OnInitialized()
{
GridData = new List<Employee>();
var rand = new Random();
for (int i = 0; i < 15; i++)
{
GridData.Add(new Employee()
{
EmployeeId = i,
Name = "Employee " + i.ToString(),
Team = "Team " + i % 3,
IsOnLeave = i % 2 == 0
});
}
}
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string Team { get; set; }
public bool IsOnLeave { get; set; }
}
}
</AdminEdit>
https://blazorrepl.telerik.com/cGEHOxYU12TavfAP41
Dialog component does not recalculate its z-index based on the existing window components. Thus, it is displayed behind the window.
ADMIN EDIT
You can use the code snippet below to test this behavior in your app. At the end of the post you will find two sample apps attached that use that same code - one is OK, the other exhibits the issue. The difference in them is the layout. The one that works OK has the old MS template from over a year ago where there is an <app> element above the root of the blazor components, and that element has display: flex. The problematic app has the newer template without such a parent element - the parent element is not the <body> and it does not have display:flex. You can add in the following rule to it to see it will fix the dialog overlay error (but it can damage the layout of the app).
sample rule to fix the issue in the problematic app
body {
display:flex;
}
sample code to test the behavior
<TelerikWindow Modal="true" @bind-Visible="@isModalVisible">
<WindowTitle>
<strong>The Title</strong>
</WindowTitle>
<WindowContent>
I am modal so the page behind me is not available to the user.
<br />
<TelerikButton OnClick="@( _ => isSecondModalVisible = true )">Open the SECOND window</TelerikButton>
<TelerikButton OnClick="@ShowConfirmWithTitle">Show Confirm</TelerikButton>
</WindowContent>
<WindowActions>
<WindowAction Name="Minimize" />
<WindowAction Name="Maximize" />
<WindowAction Name="Close" />
</WindowActions>
</TelerikWindow>
<TelerikWindow Modal="true" @bind-Visible="@isSecondModalVisible">
<WindowTitle>
<strong>The SECOND</strong>
</WindowTitle>
<WindowContent>
Second modal!
</WindowContent>
<WindowActions>
<WindowAction Name="Minimize" />
<WindowAction Name="Maximize" />
<WindowAction Name="Close" />
</WindowActions>
</TelerikWindow>
<TelerikButton OnClick="@( _ => isModalVisible = true )">Open the window</TelerikButton>
@code{
[CascadingParameter]
public DialogFactory Dialogs { get; set; }
bool isModalVisible { get; set; }
bool isSecondModalVisible { get; set; }
async Task ShowConfirmWithTitle()
{
bool isConfirmed = await Dialogs.ConfirmAsync("Are you sure?", "Confirmation!");
Console.WriteLine($"The user is sure: {isConfirmed}.");
}
}