Skip to content

Commit 2f24410

Browse files
committed
feat: introduce PartialBase type
1 parent a51dd0a commit 2f24410

File tree

4 files changed

+38
-25
lines changed

4 files changed

+38
-25
lines changed

src/Htmxor/Components/HtmxPartial.cs

+5-23
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,16 @@
22

33
namespace Htmxor.Components;
44

5-
public sealed class HtmxPartial : IComponent
5+
public sealed class HtmxPartial : PartialBase
66
{
7-
private RenderHandle renderHandle;
7+
[Parameter] public bool Condition { get; set; } = true;
88

9-
[Parameter, EditorRequired]
10-
public required RenderFragment ChildContent { get; set; }
11-
12-
[Parameter]
13-
public bool Condition { get; set; } = true;
14-
15-
public void Attach(RenderHandle renderHandle)
16-
{
17-
this.renderHandle = renderHandle;
18-
}
19-
20-
public Task SetParametersAsync(ParameterView parameters)
9+
public override Task SetParametersAsync(ParameterView parameters)
2110
{
22-
if (!parameters.TryGetValue<RenderFragment>(nameof(ChildContent), out var childContent))
23-
{
24-
throw new ArgumentException($"{nameof(HtmxPartial)} requires a value for the parameter {nameof(ChildContent)}.");
25-
}
26-
27-
ChildContent = childContent;
2811
Condition = parameters.GetValueOrDefault(nameof(Condition), true);
29-
renderHandle.Render(childContent);
30-
return Task.CompletedTask;
12+
return base.SetParametersAsync(parameters);
3113
}
3214

33-
internal bool ShouldRender() => Condition;
15+
protected internal override bool ShouldRender() => Condition;
3416
}
3517

src/Htmxor/Components/PartialBase.cs

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Microsoft.AspNetCore.Components;
2+
3+
namespace Htmxor.Components;
4+
5+
public abstract class PartialBase : IComponent
6+
{
7+
private RenderHandle renderHandle;
8+
9+
[Parameter, EditorRequired]
10+
public required RenderFragment ChildContent { get; set; }
11+
12+
public void Attach(RenderHandle renderHandle)
13+
{
14+
this.renderHandle = renderHandle;
15+
}
16+
17+
public virtual Task SetParametersAsync(ParameterView parameters)
18+
{
19+
if (!parameters.TryGetValue<RenderFragment>(nameof(ChildContent), out var childContent))
20+
{
21+
throw new ArgumentException($"{nameof(HtmxPartial)} requires a value for the parameter {nameof(ChildContent)}.");
22+
}
23+
24+
ChildContent = childContent;
25+
renderHandle.Render(childContent);
26+
return Task.CompletedTask;
27+
}
28+
29+
protected internal abstract bool ShouldRender();
30+
}
31+

src/Htmxor/Rendering/HtmxorRenderer.HtmlWriting.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ private int RenderChildComponent(TextWriter output, ArrayRange<RenderTreeFrame>
515515
{
516516
ref var frame = ref frames.Array[position];
517517

518-
if (frame.Component is not HtmxPartial htmxPartial || htmxPartial.ShouldRender())
518+
if (frame.Component is not PartialBase htmxPartial || htmxPartial.ShouldRender())
519519
{
520520
RenderChildComponent(output, ref frame);
521521
}

src/Htmxor/Rendering/HtmxorRenderer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ internal void WriteComponentHtml(int componentId, TextWriter output)
168168

169169
if (frame.FrameType is RenderTreeFrameType.Component)
170170
{
171-
if (frame.Component is HtmxPartial partial)
171+
if (frame.Component is PartialBase partial)
172172
{
173173
if (partial.ShouldRender())
174174
{

0 commit comments

Comments
 (0)