Skip to content

Commit 842a0db

Browse files
authored
🐛 fix issue causing rte to remain uninitialized (#42)
Introduced a new .NET invokable method for the JS script to call once it is done initializing an editor, this removes the dependency on actual content being provided on initialization of the rich text editor. Fixes: #41
1 parent 7c7a697 commit 842a0db

4 files changed

Lines changed: 24 additions & 9 deletions

File tree

src/Spillgebees.Blazor.RichTextEditor.Assets/src/rich-text-editor.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export function bootstrap() {
3030

3131
const createEditor = async (
3232
dotNetHelper: DotNetObject,
33+
invokableDotNetMethodName: string,
3334
quillContainer: Element,
3435
toolbar: any,
3536
isEditorEnabled: boolean,
@@ -79,6 +80,8 @@ const createEditor = async (
7980
dotNetHelper,
8081
eventDebounceIntervalInMilliseconds);
8182
}
83+
84+
await dotNetHelper.invokeMethodAsync(invokableDotNetMethodName);
8285
};
8386

8487
const getContent = (quillReference: QuillReference | null): string | undefined => quillReference?.__quill?.root.innerHTML;

src/Spillgebees.Blazor.RichTextEditor/Components/BaseRichTextEditor.razor.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,18 @@ public async Task UpdateSelectionAsync()
241241
SelectionChanged.InvokeAsync(InternalSelection).AndForget(Logger.Value);
242242
}
243243

244+
[JSInvokable]
245+
public void OnEditorInitialized()
246+
{
247+
if (IsInitialized)
248+
{
249+
return;
250+
}
251+
252+
_initializationCompletionSource.TrySetResult();
253+
IsInitialized = true;
254+
}
255+
244256
[JSInvokable]
245257
public Task OnContentChangedAsync(TextChangeEvent args)
246258
=> OnContentChangedAction(args);
@@ -290,6 +302,7 @@ await RichTextEditorJs.CreateEditorAsync(
290302
JsRuntime,
291303
Logger.Value,
292304
DotNetObjectReference,
305+
nameof(OnEditorInitialized),
293306
QuillReference,
294307
ToolbarReference,
295308
IsEditorEnabled,
@@ -322,17 +335,13 @@ protected async Task InsertImageAsync(string imageSource)
322335

323336
protected virtual Task OnContentChangedAction(TextChangeEvent args)
324337
{
325-
if (args.Source is EventSource.User)
338+
if (args.Source is not EventSource.User)
326339
{
327-
IsTouched = true;
328-
IsTouchedChanged.InvokeAsync(IsTouched).AndForget(Logger.Value);
340+
return Task.CompletedTask;
329341
}
330342

331-
if (IsInitialized is false)
332-
{
333-
_initializationCompletionSource.SetResult();
334-
IsInitialized = true;
335-
}
343+
IsTouched = true;
344+
IsTouchedChanged.InvokeAsync(IsTouched).AndForget(Logger.Value);
336345

337346
return Task.CompletedTask;
338347
}

src/Spillgebees.Blazor.RichTextEditor/Components/RichTextEditorJs.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ internal static ValueTask CreateEditorAsync(
1212
IJSRuntime jsRuntime,
1313
ILogger logger,
1414
DotNetObjectReference<BaseRichTextEditor>? dotNetObjectReference,
15+
string onAfterCreateEditorCallback,
1516
ElementReference quillReference,
1617
ElementReference toolbar,
1718
bool isEditorEnabled,
@@ -25,6 +26,7 @@ internal static ValueTask CreateEditorAsync(
2526
logger,
2627
$"{JsNamespace}.createEditor",
2728
dotNetObjectReference,
29+
onAfterCreateEditorCallback,
2830
quillReference,
2931
toolbar,
3032
isEditorEnabled,

src/Spillgebees.Blazor.RichTextEditor/TaskExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public static async void AndForget(this Task task, ILogger logger)
1414
{
1515
logger.LogError(e, "An unexpected error occurred");
1616
}
17-
1817
}
18+
1919
public static async void AndForget(this ValueTask task, ILogger logger)
2020
{
2121
try
@@ -28,3 +28,4 @@ public static async void AndForget(this ValueTask task, ILogger logger)
2828
}
2929
}
3030
}
31+

0 commit comments

Comments
 (0)