Files
Htmx/Htmx.ApiDemo/Templates/Components/Calendar.htmx.cs
T

44 lines
2.2 KiB
C#

namespace Htmx.ApiDemo.Templates.Components;
/// <summary>
/// shadcn-style Calendar (date-picker) component driven entirely by HyperScript.
/// Pass a selected date to pre-highlight a day; defaults to today.
/// </summary>
public sealed class Calendar : CalendarBase
{
private readonly byte[] _idData;
private readonly byte[] _nameData;
private readonly byte[] _yearData;
private readonly byte[] _monthData; // 0-based JS month
private readonly byte[] _selectedDayData;
private readonly byte[] _selectedMonthData; // 0-based
private readonly byte[] _selectedYearData;
private readonly byte[] _defaultValueData;
public Calendar(
string id,
string name = "date",
DateOnly? selected = null)
{
var date = selected ?? DateOnly.FromDateTime(DateTime.Today);
_idData = id.ToUtf8Bytes();
_nameData = name.ToUtf8Bytes();
_yearData = date.Year.ToString().ToUtf8Bytes();
_monthData = (date.Month - 1).ToString().ToUtf8Bytes(); // JS months are 0-based
_selectedDayData = date.Day.ToString().ToUtf8Bytes();
_selectedMonthData= (date.Month - 1).ToString().ToUtf8Bytes();
_selectedYearData = date.Year.ToString().ToUtf8Bytes();
_defaultValueData = date.ToString("yyyy-MM-dd").ToUtf8Bytes();
}
protected override void RenderId(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_idData);
protected override void RenderName(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_nameData);
protected override void RenderYear(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_yearData);
protected override void RenderMonth(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_monthData);
protected override void RenderSelectedDay(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedDayData);
protected override void RenderSelectedMonth(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedMonthData);
protected override void RenderSelectedYear(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedYearData);
protected override void RenderDefaultValue(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_defaultValueData);
}