Skip to content

Commit

Permalink
Added client-only fallback for RenderAsync method (#35)
Browse files Browse the repository at this point in the history
AyronK authored Nov 28, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 1b0020b commit f80eb82
Showing 2 changed files with 17 additions and 10 deletions.
4 changes: 2 additions & 2 deletions Forte.Web.React/Forte.Web.React.csproj
Original file line number Diff line number Diff line change
@@ -6,8 +6,8 @@
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<Packable>true</Packable>
<VersionPrefix>1.0.1.0</VersionPrefix>
<Version>1.0.1.0</Version>
<VersionPrefix>1.0.2.0</VersionPrefix>
<Version>1.0.2.0</Version>
</PropertyGroup>

<PropertyGroup>
23 changes: 15 additions & 8 deletions Forte.Web.React/React/ReactService.cs
Original file line number Diff line number Diff line change
@@ -118,16 +118,15 @@ public async Task<string> RenderToStringAsync(string componentName, object? prop
return WrapRenderedStringComponent(result, component);
}

public async Task RenderAsync(TextWriter writer, string componentName, object? props = null,
RenderOptions? options = null)
public async Task RenderAsync(TextWriter writer, string componentName, object? props = null, RenderOptions? options = null)
{
options ??= new RenderOptions();
var component = new Component(componentName, props, options.ServerOnly ? RenderingMode.Server : RenderingMode.ClientAndServer);
var component = new Component(componentName, props, options.RenderingMode);
Components.Add(component);

await writer.WriteAsync($"<div id=\"{component.ContainerId}\">").ConfigureAwait(false);

if (_config.IsServerSideDisabled)
if (_config.IsServerSideDisabled || component.RenderingMode == RenderingMode.Client)
{
await writer.WriteAsync("</div>").ConfigureAwait(false);
return;
@@ -136,7 +135,7 @@ public async Task RenderAsync(TextWriter writer, string componentName, object? p
var streamingOptions = new
{
options.EnableStreaming,
options.ServerOnly,
ServerOnly = component.RenderingMode == RenderingMode.Server,
IdentifierPrefix = _config.UseIdentifierPrefix ? component.ContainerId : null,
};

@@ -257,12 +256,20 @@ private string GetIdentifierPrefix(Component component) => _config.UseIdentifier

public class RenderOptions
{
public RenderOptions(bool serverOnly = false, bool enableStreaming = true)
public RenderOptions() : this(RenderingMode.ClientAndServer, true)
{
ServerOnly = serverOnly;
}

public RenderOptions(bool serverOnly, bool enableStreaming = true) : this(serverOnly ? RenderingMode.Server : RenderingMode.ClientAndServer, enableStreaming)
{
}

public RenderOptions(RenderingMode renderingMode, bool enableStreaming = true)
{
RenderingMode = renderingMode;
EnableStreaming = enableStreaming;
}

public bool ServerOnly { get; }
public RenderingMode RenderingMode { get; }
public bool EnableStreaming { get; }
}

0 comments on commit f80eb82

Please sign in to comment.