From 70c5cfa95c02060075eedcc9f682b7534e022ce8 Mon Sep 17 00:00:00 2001 From: Jose Luis Chavez del Cid Date: Mon, 24 Jun 2024 01:59:36 -0600 Subject: [PATCH] Javascript location customization Following the pattern of other libraries from this author added support for settings the customization of the location of the javascript file. --- .../Extensions/IJSRuntimeExtensions.cs | 13 ++++++----- .../IServiceCollectionExtensions.cs | 22 +++++++++++++++++++ .../Options/StreamPipeOptions.cs | 1 - .../Options/StreamsOptions.cs | 18 +++++++++++++++ .../Options/Transformer.cs | 2 +- 5 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 src/KristofferStrube.Blazor.Streams/Extensions/IServiceCollectionExtensions.cs create mode 100644 src/KristofferStrube.Blazor.Streams/Options/StreamsOptions.cs diff --git a/src/KristofferStrube.Blazor.Streams/Extensions/IJSRuntimeExtensions.cs b/src/KristofferStrube.Blazor.Streams/Extensions/IJSRuntimeExtensions.cs index b6b41cb..615e551 100644 --- a/src/KristofferStrube.Blazor.Streams/Extensions/IJSRuntimeExtensions.cs +++ b/src/KristofferStrube.Blazor.Streams/Extensions/IJSRuntimeExtensions.cs @@ -1,17 +1,20 @@ -using Microsoft.JSInterop; +using KristofferStrube.Blazor.FileAPI.Options; +using Microsoft.JSInterop; namespace KristofferStrube.Blazor.Streams; internal static class IJSRuntimeExtensions { - internal static async Task GetHelperAsync(this IJSRuntime jSRuntime) + internal static async Task GetHelperAsync(this IJSRuntime jSRuntime, StreamsOptions? options = null) { + options ??= StreamsOptions.DefaultInstance; return await jSRuntime.InvokeAsync( - "import", "./_content/KristofferStrube.Blazor.Streams/KristofferStrube.Blazor.Streams.js"); + "import", options.FullScriptPath); } - internal static async Task GetInProcessHelperAsync(this IJSRuntime jSRuntime) + internal static async Task GetInProcessHelperAsync(this IJSRuntime jSRuntime, StreamsOptions? options = null) { + options ??= StreamsOptions.DefaultInstance; return await jSRuntime.InvokeAsync( - "import", "./_content/KristofferStrube.Blazor.Streams/KristofferStrube.Blazor.Streams.js"); + "import", options.FullScriptPath); } } diff --git a/src/KristofferStrube.Blazor.Streams/Extensions/IServiceCollectionExtensions.cs b/src/KristofferStrube.Blazor.Streams/Extensions/IServiceCollectionExtensions.cs new file mode 100644 index 0000000..14e6704 --- /dev/null +++ b/src/KristofferStrube.Blazor.Streams/Extensions/IServiceCollectionExtensions.cs @@ -0,0 +1,22 @@ +using KristofferStrube.Blazor.FileAPI.Options; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.JSInterop; + +namespace KristofferStrube.Blazor.Streams; + +public static class IServiceCollectionExtensions +{ + public static IServiceCollection AddStreams(this IServiceCollection serviceCollection, Action? configure) + { + serviceCollection.ConfigureStreamOptions(configure); + return serviceCollection; + } + + private static void ConfigureStreamOptions(this IServiceCollection services, Action? configure) + { + if (configure is null) return; + + services.Configure(configure); + configure(StreamsOptions.DefaultInstance); + } +} \ No newline at end of file diff --git a/src/KristofferStrube.Blazor.Streams/Options/StreamPipeOptions.cs b/src/KristofferStrube.Blazor.Streams/Options/StreamPipeOptions.cs index 8ac6cf0..1cde721 100644 --- a/src/KristofferStrube.Blazor.Streams/Options/StreamPipeOptions.cs +++ b/src/KristofferStrube.Blazor.Streams/Options/StreamPipeOptions.cs @@ -1,5 +1,4 @@ using KristofferStrube.Blazor.DOM; -using KristofferStrube.Blazor.DOM.Abort; using System.Text.Json.Serialization; namespace KristofferStrube.Blazor.Streams; diff --git a/src/KristofferStrube.Blazor.Streams/Options/StreamsOptions.cs b/src/KristofferStrube.Blazor.Streams/Options/StreamsOptions.cs new file mode 100644 index 0000000..440449e --- /dev/null +++ b/src/KristofferStrube.Blazor.Streams/Options/StreamsOptions.cs @@ -0,0 +1,18 @@ +using System.Reflection; + +namespace KristofferStrube.Blazor.FileAPI.Options; + +public class StreamsOptions +{ + public const string DefaultBasePath = "./_content/"; + public static readonly string DefaultNamespace = Assembly.GetExecutingAssembly().GetName().Name ?? "KristofferStrube.Blazor.Streams"; + public static readonly string DefaultScriptPath = $"{DefaultNamespace}/{DefaultNamespace}.js"; + + public string BasePath { get; set; } = DefaultBasePath; + public string ScriptPath { get; set; } = DefaultScriptPath; + + public string FullScriptPath => Path.Combine(this.BasePath, this.ScriptPath); + + internal static StreamsOptions DefaultInstance = new(); + +} \ No newline at end of file diff --git a/src/KristofferStrube.Blazor.Streams/Options/Transformer.cs b/src/KristofferStrube.Blazor.Streams/Options/Transformer.cs index 91707af..ef6775c 100644 --- a/src/KristofferStrube.Blazor.Streams/Options/Transformer.cs +++ b/src/KristofferStrube.Blazor.Streams/Options/Transformer.cs @@ -38,7 +38,7 @@ public static Task CreateAsync(IJSRuntime jSRuntime) /// An instance. protected Transformer(IJSRuntime jSRuntime) { - helperTask = new(jSRuntime.GetHelperAsync); + helperTask = new(() => jSRuntime.GetHelperAsync()); this.jSRuntime = jSRuntime; ObjRef = DotNetObjectReference.Create(this); }