Skip to content

Commit 15ba832

Browse files
Add guard check for cleared closest DOM element (#24707)
* Add guard check for cleared closest DOM element * Update src/Components/Web.JS/src/Rendering/BrowserRenderer.ts Co-authored-by: Steve Sanderson <[email protected]> Co-authored-by: Steve Sanderson <[email protected]>
1 parent 24f35bc commit 15ba832

File tree

7 files changed

+44
-3
lines changed

7 files changed

+44
-3
lines changed

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/BrowserRenderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class BrowserRenderer {
5858
}
5959
}
6060

61-
const ownerDocument = getClosestDomElement(element).ownerDocument;
61+
const ownerDocument = getClosestDomElement(element)?.ownerDocument;
6262
const activeElementBefore = ownerDocument && ownerDocument.activeElement;
6363

6464
this.applyEdits(batch, componentId, element, 0, edits, referenceFrames);

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,5 +668,20 @@ public void CanPatchRenderTreeToMatchLatestDOMState()
668668
&& completeLIs[0].FindElement(By.CssSelector(".item-isdone")).Selected;
669669
});
670670
}
671+
672+
[Fact]
673+
public void CanHandleClearedChild()
674+
{
675+
var appElement = Browser.MountTestComponent<ContentEditable>();
676+
var input = appElement.FindElement(By.Id("editable-div"));
677+
var clickable = appElement.FindElement(By.Id("clickable"));
678+
679+
input.Clear();
680+
clickable.Click();
681+
682+
var log = Browser.Manage().Logs.GetLog(LogType.Browser);
683+
Assert.DoesNotContain(log, entry => entry.Level == LogLevel.Severe);
684+
Browser.Equal("", () => input.Text);
685+
}
671686
}
672687
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@using BasicTestApp.FormsTest
2+
3+
<h3 id="clickable">ContentEditable</h3>
4+
5+
<div contenteditable="true" style="border: 1px solid gray;" id="editable-div" @onblur="HandleBlur">
6+
<EditableText Content="@content"></EditableText>
7+
</div>
8+
9+
@code {
10+
public string content = "";
11+
12+
private async Task HandleBlur()
13+
{
14+
await Task.Delay(1000);
15+
Console.WriteLine("Handle blur...");
16+
}
17+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
This is the default content.
2+
3+
@Content
4+
5+
@code {
6+
[Parameter]
7+
public string Content { get; set; }
8+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<option value="BasicTestApp.VirtualizationComponent">Virtualization</option>
8787
<option value="BasicTestApp.SelectVariantsComponent">Select with component options</option>
8888
<option value="BasicTestApp.ToggleEventComponent">Toggle Event</option>
89+
<option value="BasicTestApp.ContentEditable">Content-editable</option>
8990
</select>
9091

9192
<span id="runtime-info"><code><tt>@System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription</tt></code></span>

0 commit comments

Comments
 (0)