Skip to content

Commit 91007c7

Browse files
authored
Fix: Editor not clearing on empty TextSource (#151)
* Fix: Remove redundant `console.log` from `setValueSelectionAware` in `InfiniBlazor.js`. * Fix: Add `ClearAsync` method to `MdEditorContext` and refactor calls for source clearing in the editor * Fix: Add `clearValue` method to `ElementLib` for input value clearing
1 parent 70884dc commit 91007c7

File tree

8 files changed

+46
-20
lines changed

8 files changed

+46
-20
lines changed

dev/DevTools.MdTestHelper/Components/Pages/MdTestDataEditor/MdTestDataEditorData.razor

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@
9595
</InfiniTabContent>
9696

9797
<InfiniTabContent TabName="Blazor">
98-
<InfiniMdEditorStandalonePreview @bind-EditorContext="@EditorContext" @bind-RenderContext="@RenderContext"/>
98+
<InfiniMdEditorStandalonePreview @bind-EditorContext="@EditorContext"
99+
@bind-RenderContext="@RenderContext"/>
99100
</InfiniTabContent>
100101
</InfiniTabContainer>
101102

@@ -143,7 +144,7 @@
143144

144145
EditorContext.OnSyntaxTreeChangedAsync += OnGenerateAsync;
145146
}
146-
147+
147148
public void Dispose() {
148149
EditorContext.OnSyntaxTreeChangedAsync -= OnGenerateAsync;
149150
}
@@ -179,11 +180,11 @@
179180
IMdSyntaxTree tree = EditorContext.SyntaxTree;
180181
using var memoryStream = new MemoryStream();
181182
await MarkdownParser.Json.DeserializeToJsonStreamAsync(memoryStream, tree);
182-
183+
183184
memoryStream.Position = 0;
184185
string result = await new StreamReader(memoryStream).ReadToEndAsync();
185186
ExpectedJsonString = result.ReplaceLineEndings("\n");
186-
187+
187188
}
188189

189190
private Task GenerateMarkdown() {
@@ -215,7 +216,7 @@
215216
EditorContext.Content = testData.MdString;
216217

217218
if (testData.MdSyntaxTree is {} tree) {
218-
using MemoryStream memoryStream = new MemoryStream();
219+
using var memoryStream = new MemoryStream();
219220
await MarkdownParser.Xml.DeserializeToXmlStreamAsync(memoryStream, tree);
220221

221222
memoryStream.Position = 0;
@@ -256,8 +257,8 @@
256257
}
257258

258259
await ToastingProvider.PublishToastAsync(
259-
new ToastingData("Test was saved", TestId),
260-
ToastAppearance.Success
260+
new ToastingData("Test was saved", TestId),
261+
ToastAppearance.Success
261262
);
262263

263264
// Notify parent component about the rename
@@ -275,14 +276,14 @@
275276
FileName = string.Empty;
276277
TestId = string.Empty;
277278
DeveloperNote = string.Empty;
278-
EditorContext.Content = string.Empty;
279279
ExpectedMarkdown = string.Empty;
280280
ExpectedSyntaxTreeString = string.Empty;
281281
TestDataOrigin = null;
282+
await EditorContext.ClearAsync();
282283

283284
await ToastingProvider.PublishToastAsync(
284-
new ToastingData("Test was Deleted", TestId),
285-
ToastAppearance.Success
285+
new ToastingData("Test was Deleted", TestId),
286+
ToastAppearance.Success
286287
);
287288

288289
// Notify parent component about the rename
@@ -303,8 +304,8 @@
303304
}
304305

305306
await ToastingProvider.PublishToastAsync(
306-
new ToastingData("Test was Renamed", TestId),
307-
ToastAppearance.Success
307+
new ToastingData("Test was Renamed", TestId),
308+
ToastAppearance.Success
308309
);
309310

310311
// Re-fetch data
@@ -318,14 +319,14 @@
318319
FileName = string.Empty;
319320
TestId = string.Empty;
320321
DeveloperNote = string.Empty;
321-
EditorContext.Content = string.Empty;
322322
ExpectedMarkdown = string.Empty;
323323
ExpectedSyntaxTreeString = string.Empty;
324324
TestDataOrigin = null;
325+
await EditorContext.ClearAsync();
325326

326327
await ToastingProvider.PublishToastAsync(
327-
new ToastingData("Test Cleared"),
328-
ToastAppearance.Info
328+
new ToastingData("Test Cleared"),
329+
ToastAppearance.Info
329330
);
330331
}
331332
}

src/InfiniLore.InfiniBlazor.Contracts/JsRuntime/IInfiniBlazorJsElement.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace InfiniLore.InfiniBlazor.JsRuntime;
99
// Code
1010
// ---------------------------------------------------------------------------------------------------------------------
1111
public interface IInfiniBlazorJsElement {
12+
Task ClearValueAsync(ElementReference element, CancellationToken ct = default);
1213
Task SetValueAsync(ElementReference element, string text, CancellationToken ct = default);
1314
Task SetValueSelectionAwareAsync(ElementReference element, string text, CancellationToken ct = default);
1415

src/InfiniLore.InfiniBlazor.Core.Js/InfiniBlazorJsElement.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ ILogger<InfiniBlazorJsElement> logger
1919
// -----------------------------------------------------------------------------------------------------------------
2020
// Methods
2121
// -----------------------------------------------------------------------------------------------------------------
22+
public async Task ClearValueAsync(ElementReference element, CancellationToken ct = default) {
23+
try {
24+
await jsRuntime.InvokeVoidAsync("infiniBlazor.elements.clearValue", ct, element);
25+
}
26+
catch (Exception e) {
27+
logger.Warning(e, "Error clearing value for element {element}", element);
28+
}
29+
}
30+
2231
public async Task SetValueAsync(ElementReference element, string text, CancellationToken ct = default) {
2332
try {
2433
await jsRuntime.InvokeVoidAsync("infiniBlazor.elements.setValue", ct, element, text);

src/InfiniLore.InfiniBlazor.Core.Js/TypescriptLib/Libs/ElementLib.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import {IInputElement} from "../Contracts/IInputElement";
88
// ---------------------------------------------------------------------------------------------------------------------
99
// noinspection JSUnusedGlobalSymbols
1010
class ElementLib {
11+
public clearValue(element: IInputElement): void {
12+
if (!element) return;
13+
14+
element.value = "";
15+
}
16+
1117
public setValue(element: IInputElement, value: string): void {
1218
if (!element) return;
1319
if (!value) return;
@@ -16,7 +22,6 @@ class ElementLib {
1622
}
1723

1824
public setValueSelectionAware(element: IInputElement, text: string): void {
19-
console.log(text);
2025
if (!element) return;
2126
if (!text) return;
2227

src/InfiniLore.InfiniBlazor.Core.Markdown.Components/InfiniMarkdownEditor/InfiniMarkdownEditor.razor

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
@* ------------------------------------------------------------------------------------------------------------------ *@
44
@using InfiniLore.InfiniBlazor.JsRuntime
55
@using InfiniLore.InfiniBlazor.Markdown.Parsers.Blazor
6+
@* @using Microsoft.Extensions.Logging *@
67

78
@namespace InfiniLore.InfiniBlazor.Markdown
89
@* ------------------------------------------------------------------------------------------------------------------ *@
@@ -13,6 +14,7 @@
1314
@inject IMarkdownParser Parser
1415
@inject IInfiniBlazorJs InfiniBlazorJs
1516
@inject ITextEditor TextEditor
17+
@* @inject ILogger<InfiniMarkdownEditor> Logger *@
1618
@* ------------------------------------------------------------------------------------------------------------------ *@
1719
@* Html
1820
@* ------------------------------------------------------------------------------------------------------------------ *@
@@ -140,7 +142,8 @@
140142
}
141143

142144
private async Task OnSourceChangedAsync() {
143-
await InfiniBlazorJs.Element.SetValueSelectionAwareAsync(EditorContext.InputElementRef, EditorContext.TextSource.Text);
145+
if (EditorContext.TextSource.IsEmpty) await InfiniBlazorJs.Element.ClearValueAsync(EditorContext.InputElementRef);
146+
else await InfiniBlazorJs.Element.SetValueSelectionAwareAsync(EditorContext.InputElementRef, EditorContext.TextSource.Text);
144147

145148
EditorContext.SyntaxTree.ReturnToPool();
146149
EditorContext.SyntaxTree = Parser.Markdown.SerializeToSyntaxTree(EditorContext.TextSource.Text);

src/InfiniLore.InfiniBlazor.Core.Markdown.Components/InfiniMarkdownEditor/InfiniMdEditorInput.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
protected override bool ShouldRender() {
3838
if (!base.ShouldRender()) return false;
39-
39+
4040
int lastHashCode = _valueHashCode;
4141
_valueHashCode = EditorContext.TextSource.Text.GetHashCode();
4242
return _valueHashCode != lastHashCode;

src/InfiniLore.InfiniBlazor.Core.Markdown.Components/InfiniMarkdownEditor/MdEditorContext.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public MdEditorContext() {
4747
// -----------------------------------------------------------------------------------------------------------------
4848
// Methods
4949
// -----------------------------------------------------------------------------------------------------------------
50+
public Task ClearAsync()
51+
=> InvokeSourceChangeAsync(string.Empty);
52+
5053
public async Task InvokeSourceChangeAsync(string value) {
5154
TextSource.UpdateSource(value);
5255
if (OnSourceChangedAsync is null) return;

src/InfiniLore.InfiniBlazor/wwwroot/InfiniBlazor.js

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)