Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<BbDateRangePicker AutoApply="true" DisplayButtons="false" />
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,25 @@
<CodeBlock Source="Components/DateRangePicker/monday-first.txt" />
</div>

<!-- Auto Apply and Hidden Buttons -->
<div class="space-y-4">
<div class="space-y-2">
<h2 class="text-2xl font-semibold">Buttons reset and apply hidden and auto apply</h2>
<p class="text-sm text-muted-foreground">
The user doesn't have to click on Apply to validate the selection.
</p>
</div>
<BbDateRangePicker AutoApply="true" DisplayButtons="false" @bind-Value="_autoApply"/>
<p class="text-sm text-muted-foreground">
@if (_autoApply != null)
{
@($"Selected: {_autoApply.Start} - {_autoApply.End}")
}
</p>
<CodeBlock Source="Components/DateRangePicker/display-buttons-auto-apply.txt" />
</div>


<!-- Disabled -->
<div class="space-y-4">
<div class="space-y-2">
Expand Down Expand Up @@ -439,4 +458,7 @@
return new DateRange(quarterStart, quarterStart.AddMonths(3).AddDays(-1));
}),
};


private DateRange? _autoApply;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<BbPopover @bind-Open="_isOpen">
<BbPopoverTrigger AsChild="true">
<BbButton Variant="ButtonVariant.Outline"
Class="@ButtonCssClass"
Disabled="@Disabled">
<LucideIcon Name="calendar" Class="mr-2 h-4 w-4" />
Class="@ButtonCssClass"
Disabled="@Disabled">
<LucideIcon Name="calendar" Class="mr-2 h-4 w-4"/>
@if (Value != null)
{
<span>@FormatRange(Value)</span>
Expand Down Expand Up @@ -38,7 +38,8 @@
</div>
@* Desktop: button sidebar *@
<div class="hidden" data-drp-presets-inner>
<span class="hidden text-xs font-medium text-muted-foreground mb-1" data-drp-presets-label>@Localizer["DateRangePicker.QuickSelect"]</span>
<span class="hidden text-xs font-medium text-muted-foreground mb-1"
data-drp-presets-label>@Localizer["DateRangePicker.QuickSelect"]</span>
@foreach (var quickPick in EffectivePresets)
{
var captured = quickPick;
Expand All @@ -61,15 +62,16 @@
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="PreviousMonth">
<LucideIcon Name="chevron-left" Class="h-4 w-4" />
<LucideIcon Name="chevron-left" Class="h-4 w-4"/>
</button>
<span class="text-sm font-medium">@GetMonthName(_displayMonth1.Month) @_displayMonth1.Year</span>
<span
class="text-sm font-medium">@GetMonthName(_displayMonth1.Month) @_displayMonth1.Year</span>
@if (!ShowTwoMonths)
{
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
}
else
Expand All @@ -78,7 +80,7 @@
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
data-drp-mobile-nav
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
<div class="hidden w-7" data-drp-desktop-spacer></div>
}
Expand All @@ -92,11 +94,12 @@
<div class="hidden flex-1 border-l" data-drp-calendar-2>
<div class="flex items-center justify-between mb-3">
<div class="w-7"></div>
<span class="text-sm font-medium">@GetMonthName(_displayMonth2.Month) @_displayMonth2.Year</span>
<span
class="text-sm font-medium">@GetMonthName(_displayMonth2.Month) @_displayMonth2.Year</span>
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
</div>
@RenderMonthGridInline(_displayMonth2)
Expand All @@ -116,15 +119,16 @@
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="PreviousMonth">
<LucideIcon Name="chevron-left" Class="h-4 w-4" />
<LucideIcon Name="chevron-left" Class="h-4 w-4"/>
</button>
<span class="text-sm font-medium">@GetMonthName(_displayMonth1.Month) @_displayMonth1.Year</span>
<span
class="text-sm font-medium">@GetMonthName(_displayMonth1.Month) @_displayMonth1.Year</span>
@if (!ShowTwoMonths)
{
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
}
else
Expand All @@ -133,7 +137,7 @@
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
data-drp-mobile-nav
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
<div class="hidden w-7" data-drp-desktop-spacer></div>
}
Expand All @@ -147,11 +151,12 @@
<div class="hidden flex-1 border-l" data-drp-calendar-2>
<div class="flex items-center justify-between mb-3">
<div class="w-7"></div>
<span class="text-sm font-medium">@GetMonthName(_displayMonth2.Month) @_displayMonth2.Year</span>
<span
class="text-sm font-medium">@GetMonthName(_displayMonth2.Month) @_displayMonth2.Year</span>
<button type="button"
class="inline-flex items-center justify-center h-7 w-7 rounded-md border border-input bg-transparent hover:bg-accent hover:text-accent-foreground opacity-50 hover:opacity-100"
@onclick="NextMonth">
<LucideIcon Name="chevron-right" Class="h-4 w-4" />
<LucideIcon Name="chevron-right" Class="h-4 w-4"/>
</button>
</div>
@RenderMonthGridInline(_displayMonth2)
Expand All @@ -172,76 +177,82 @@
<span>@Localizer["DateRangePicker.DaysSelected", days]</span>
}
</div>
<div class="flex gap-2">
<button type="button"
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-8 px-3"
disabled="@(Value == null && !_selectionStart.HasValue)"
@onclick="Clear">
@Localizer["DateRangePicker.Clear"]
</button>
<button type="button"
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-8 px-3"
disabled="@(!CanApply)"
@onclick="Apply">
@Localizer["DateRangePicker.Apply"]
</button>
</div>

@if (DisplayButtons)
{
<div class="flex gap-2">
<button type="button"
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-8 px-3"
disabled="@(Value == null && !_selectionStart.HasValue)"
@onclick="Clear">
@Localizer["DateRangePicker.Clear"]
</button>
<button type="button"
class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-8 px-3"
disabled="@(!CanApply)"
@onclick="@(async () => await Apply(true))">
@Localizer["DateRangePicker.Apply"]
</button>
</div>
}
</div>
</div>
</BbPopoverContent>
</BbPopover>

@code {

private RenderFragment RenderMonthGridInline(DateTime monthDate) => __builder =>
{
var weeks = monthDate == _displayMonth1 ? GetWeeksInMonth1() : GetWeeksInMonth2();
<table class="w-full border-collapse">
<thead>
<tr class="flex">
@foreach (var dayName in DayNames)
{
<th class="text-muted-foreground w-9 flex-1 font-normal text-[0.8rem]" data-drp-cell>@dayName</th>
}
</tr>
<tr class="flex">
@foreach (var dayName in DayNames)
{
<th class="text-muted-foreground w-9 flex-1 font-normal text-[0.8rem]" data-drp-cell>@dayName</th>
}
</tr>
</thead>
<tbody>
@foreach (var week in weeks)
{
<tr class="flex w-full mt-2">
@foreach (var day in week)
@foreach (var week in weeks)
{
<tr class="flex w-full mt-2">
@foreach (var day in week)
{
@if (day.HasValue)
{
@if (day.HasValue)
{
var dateValue = day.Value;
var isDisabled = IsDateDisabled(dateValue) || dateValue.Month != monthDate.Month;
var isInRange = !isDisabled && IsInRange(dateValue);
var isRangeStart = !isDisabled && IsRangeStart(dateValue);
var isRangeEnd = !isDisabled && IsRangeEnd(dateValue);
var isToday = dateValue.Date == DateTime.Today;
var dateValue = day.Value;
var isDisabled = IsDateDisabled(dateValue) || dateValue.Month != monthDate.Month;
var isInRange = !isDisabled && IsInRange(dateValue);
var isRangeStart = !isDisabled && IsRangeStart(dateValue);
var isRangeEnd = !isDisabled && IsRangeEnd(dateValue);
var isToday = dateValue.Date == DateTime.Today;

<td class="@GetCellClass(day, isInRange, isRangeStart, isRangeEnd)" data-drp-cell>
<button type="button"
class="@GetDayClass(dateValue, isDisabled, isInRange, isRangeStart, isRangeEnd, isToday)"
data-drp-day-btn
disabled="@isDisabled"
@onclick="@(() => HandleDateClick(dateValue))">
@dateValue.Day
</button>
</td>
}
else
{
<td class="h-9 w-9 flex-1 text-center text-sm p-0" data-drp-cell></td>
}
<td class="@GetCellClass(day, isInRange, isRangeStart, isRangeEnd)" data-drp-cell>
<button type="button"
class="@GetDayClass(dateValue, isDisabled, isInRange, isRangeStart, isRangeEnd, isToday)"
data-drp-day-btn
disabled="@isDisabled"
@onclick="@(async () => await HandleDateClick(dateValue))">
@dateValue.Day
</button>
</td>
}
</tr>
}
else
{
<td class="h-9 w-9 flex-1 text-center text-sm p-0" data-drp-cell></td>
}
}
</tr>
}
</tbody>
</table>
};

private void HandleDateClick(DateTime date)
private async Task HandleDateClick(DateTime date)
{
SelectDate(date);
await SelectDate(date);
}

}
Loading