Skip to content

Commit 1455aae

Browse files
authored
Blazor: add support for ontoggle event (#24036)
Summary of the changes - Implemented `@ontoggle` event - Added test component to BasicTestApp Fix Issue: #20859
1 parent 28b8a39 commit 1455aae

File tree

10 files changed

+55
-3
lines changed

10 files changed

+55
-3
lines changed

src/Components/Shared/src/WebEventData.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ private static EventArgs ParseEventArgsJson(ulong eventHandlerId, string eventAr
7171
"touch" => Deserialize<TouchEventArgs>(eventArgsJson),
7272
"unknown" => EventArgs.Empty,
7373
"wheel" => Deserialize<WheelEventArgs>(eventArgsJson),
74+
"toggle" => Deserialize<EventArgs>(eventArgsJson),
7475
_ => throw new InvalidOperationException($"Unsupported event type '{eventArgsType}'. EventId: '{eventHandlerId}'."),
7576
};
7677
}

src/Components/Web.JS/dist/Release/blazor.server.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/dist/Release/blazor.webassembly.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/src/Rendering/EventDelegator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const nonBubblingEvents = toLookup([
1717
'scroll',
1818
'submit',
1919
'unload',
20+
'toggle',
2021
'DOMNodeInsertedIntoDocument',
2122
'DOMNodeRemovedFromDocument',
2223
]);

src/Components/Web.JS/src/Rendering/EventForDotNet.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ export class EventForDotNet<TData extends UIEventArgs> {
8989
case 'mousewheel':
9090
return new EventForDotNet<UIWheelEventArgs>('wheel', parseWheelEvent(event as WheelEvent));
9191

92+
case 'toggle':
93+
return new EventForDotNet<UIEventArgs>('toggle', { type: event.type });
94+
9295
default:
9396
return new EventForDotNet<UIEventArgs>('unknown', { type: event.type });
9497
}
@@ -248,7 +251,7 @@ function normalizeTimeBasedValue(element: HTMLInputElement): string {
248251

249252
// The following interfaces must be kept in sync with the UIEventArgs C# classes
250253

251-
export type EventArgsType = 'change' | 'clipboard' | 'drag' | 'error' | 'focus' | 'keyboard' | 'mouse' | 'pointer' | 'progress' | 'touch' | 'unknown' | 'wheel';
254+
export type EventArgsType = 'change' | 'clipboard' | 'drag' | 'error' | 'focus' | 'keyboard' | 'mouse' | 'pointer' | 'progress' | 'touch' | 'unknown' | 'wheel' | 'toggle';
252255

253256
export interface UIEventArgs {
254257
type: string;

src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netcoreapp.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ public ErrorEventArgs() { }
345345
[Microsoft.AspNetCore.Components.EventHandlerAttribute("onsuspend", typeof(System.EventArgs), true, true)]
346346
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeout", typeof(Microsoft.AspNetCore.Components.Web.ProgressEventArgs), true, true)]
347347
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontimeupdate", typeof(System.EventArgs), true, true)]
348+
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontoggle", typeof(System.EventArgs), true, true)]
348349
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchcancel", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)]
349350
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchend", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)]
350351
[Microsoft.AspNetCore.Components.EventHandlerAttribute("ontouchenter", typeof(Microsoft.AspNetCore.Components.Web.TouchEventArgs), true, true)]

src/Components/Web/src/Web/EventHandlers.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ namespace Microsoft.AspNetCore.Components.Web
122122
[EventHandler("onpointerlockerror", typeof(EventArgs), true, true)]
123123
[EventHandler("onreadystatechange", typeof(EventArgs), true, true)]
124124
[EventHandler("onscroll", typeof(EventArgs), true, true)]
125+
126+
[EventHandler("ontoggle", typeof(EventArgs), true, true)]
125127
public static class EventHandlers
126128
{
127129
}

src/Components/test/E2ETest/Tests/EventTest.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,24 @@ public void MouseDownAndMouseUp_CanTrigger()
115115
Browser.Equal("onmousedown,onmouseup,", () => output.Text);
116116
}
117117

118+
119+
[Fact]
120+
public void Toggle_CanTrigger()
121+
{
122+
Browser.MountTestComponent<ToggleEventComponent>();
123+
124+
var detailsToggle = Browser.FindElement(By.Id("details-toggle"));
125+
126+
var output = Browser.FindElement(By.Id("output"));
127+
Assert.Equal(string.Empty, output.Text);
128+
129+
// Click
130+
var actions = new Actions(Browser).Click(detailsToggle);
131+
132+
actions.Perform();
133+
Browser.Equal("ontoggle,", () => output.Text);
134+
}
135+
118136
[Fact]
119137
public void PointerDown_CanTrigger()
120138
{

src/Components/test/testassets/BasicTestApp/Index.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
<option value="BasicTestApp.TextOnlyComponent">Plain text</option>
8383
<option value="BasicTestApp.TouchEventComponent">Touch events</option>
8484
<option value="BasicTestApp.SelectVariantsComponent">Select with component options</option>
85+
<option value="BasicTestApp.ToggleEventComponent">Toggle Event</option>
8586
</select>
8687

8788
<span id="runtime-info"><code><tt>@System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription</tt></code></span>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<div>
2+
<p>
3+
Output: <span id="output">@message</span>
4+
</p>
5+
6+
7+
<p>Open the details.</p>
8+
9+
<details id="details-toggle" @ontoggle="OnToggle">
10+
<summary>Summary</summary>
11+
<p></p>
12+
<p>Detailed content</p>
13+
</details>
14+
15+
</div>
16+
17+
@code {
18+
string message { get; set; }
19+
20+
void OnToggle(EventArgs e)
21+
{
22+
message += "ontoggle,";
23+
StateHasChanged();
24+
}
25+
}

0 commit comments

Comments
 (0)