Skip to content

Commit

Permalink
Improve timestamp filtering efficiency and update UI in WorkflowInsta…
Browse files Browse the repository at this point in the history
…nceList

Timestamp filtering within WorkflowInstanceList is refactored using System.Linq.Dynamic.Core for more compact expression. This change results in simpler and more efficient code, reducing repetitive code lines. The UI updates include changing the MudGrid structure to table for timestamp filters display, offering a more organized view. Also, protection against null or minimum date values during parsing and comparisons is added, increasing stability and safety of operations.
  • Loading branch information
sfmskywalker committed Feb 18, 2024
1 parent 59c68e4 commit 062018c
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -124,37 +124,41 @@
Date Filters
</MudButton>
<MudPopover Open="@IsDateRangePopoverOpen" AnchorOrigin="Origin.BottomRight" OverflowBehavior="OverflowBehavior.FlipAlways" Class="px-4 pt-4">
<MudGrid>
<table>
<tbody>
@foreach (var timestampFilter in TimestampFilters)
{
<MudItem>
<MudIconButton Icon="@Icons.Material.Outlined.Remove"/>
</MudItem>
<MudItem>
<MudSelect Label="Column" Variant="Variant.Outlined" @bind-Value="@timestampFilter.Column">
<MudSelectItem Value="@nameof(WorkflowInstance.CreatedAt)">Created</MudSelectItem>
<MudSelectItem Value="@nameof(WorkflowInstance.UpdatedAt)">Updated</MudSelectItem>
<MudSelectItem Value="@nameof(WorkflowInstance.FinishedAt)">Finished</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem>
<MudSelect Label="Operator" Variant="Variant.Outlined" @bind-Value="@timestampFilter.Operator" Class="timespan-operator">
<MudSelectItem Value="@TimestampFilterOperator.Is">Is</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.IsNot">Is Not</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.GreaterThan">Is After</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.GreaterThanOrEqual">Is on or After</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.LessThan">Is Before</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.LessThanOrEqual">Is on or Before</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem>
<MudDatePicker Label="Date" Variant="Variant.Outlined" Clearable="true" @bind-Text="timestampFilter.Date" />
</MudItem>
<MudItem>
<MudTimePicker Label="Time" Variant="Variant.Outlined" Clearable="true" @bind-Text="timestampFilter.Time" />
</MudItem>
<tr>
<td>
<MudIconButton Icon="@Icons.Material.Outlined.Remove" OnClick="@(() => OnRemoveTimestampFilterClicked(timestampFilter))"/>
</td>
<td>
<MudSelect Label="Column" Variant="Variant.Outlined" @bind-Value="@timestampFilter.Column">
<MudSelectItem Value="@nameof(WorkflowInstance.CreatedAt)">Created</MudSelectItem>
<MudSelectItem Value="@nameof(WorkflowInstance.UpdatedAt)">Updated</MudSelectItem>
<MudSelectItem Value="@nameof(WorkflowInstance.FinishedAt)">Finished</MudSelectItem>
</MudSelect>
</td>
<td>
<MudSelect Label="Operator" Variant="Variant.Outlined" @bind-Value="@timestampFilter.Operator" Class="timespan-operator">
<MudSelectItem Value="@TimestampFilterOperator.Is">Is</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.IsNot">Is Not</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.GreaterThan">Is After</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.GreaterThanOrEqual">Is on or After</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.LessThan">Is Before</MudSelectItem>
<MudSelectItem Value="@TimestampFilterOperator.LessThanOrEqual">Is on or Before</MudSelectItem>
</MudSelect>
</td>
<td>
<MudDatePicker Label="Date" Variant="Variant.Outlined" Clearable="true" @bind-Text="timestampFilter.Date"/>
</td>
<td>
<MudTimePicker Label="Time" Variant="Variant.Outlined" Clearable="true" @bind-Text="timestampFilter.Time"/>
</td>
</tr>
}
</MudGrid>
</tbody>
</table>
<MudStack Row="true" Class="ma-3 pa-3">
<MudButton StartIcon="@Icons.Material.Outlined.Add" OnClick="@OnAddTimestampFilterClicked">Add</MudButton>
<MudButton StartIcon="@Icons.Material.Outlined.Clear" OnClick="@OnClearTimestampFiltersClicked" Disabled="@(!TimestampFilters.Any())">Clear</MudButton>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private async Task<TableData<WorkflowInstanceRow>> LoadData(TableState state)
SubStatuses = SelectedSubStatuses,
OrderBy = GetOrderBy(state.SortLabel),
OrderDirection = state.SortDirection == SortDirection.Descending ? OrderDirection.Descending : OrderDirection.Ascending,
TimestampFilters = TimestampFilters.Select(Map).ToList()
TimestampFilters = TimestampFilters.Select(Map).Where(x => x.Timestamp.Date > DateTime.MinValue && !string.IsNullOrWhiteSpace(x.Column)).ToList()
};

var workflowInstancesResponse = await InvokeWithBlazorServiceContext(() => WorkflowInstanceService.ListAsync(request));
Expand Down Expand Up @@ -111,10 +111,10 @@ private async Task<TableData<WorkflowInstanceRow>> LoadData(TableState state)

private TimestampFilter Map(TimestampFilterModel source)
{
var date = DateTime.Parse(source.Date);
var date = !string.IsNullOrWhiteSpace(source.Date) ? DateTime.Parse(source.Date) : DateTime.MinValue;
var time = !string.IsNullOrWhiteSpace(source.Time) ? TimeSpan.Parse(source.Time) : TimeSpan.Zero;
var dateTime = date.Add(time);
var timestamp = new DateTimeOffset(dateTime);
var timestamp = dateTime == DateTime.MinValue ? DateTimeOffset.MinValue : new DateTimeOffset(dateTime);

return new TimestampFilter
{
Expand Down Expand Up @@ -184,8 +184,8 @@ private void ToggleDateRangePopover()
IsDateRangePopoverOpen = !IsDateRangePopoverOpen;
}

private void OnViewClicked(string instanceId) => ViewAsync(instanceId);
private void OnRowClick(TableRowClickEventArgs<WorkflowInstanceRow> e) => ViewAsync(e.Item.WorkflowInstanceId);
private void OnViewClicked(string instanceId) => _ = ViewAsync(instanceId);
private void OnRowClick(TableRowClickEventArgs<WorkflowInstanceRow> e) => _ = ViewAsync(e.Item.WorkflowInstanceId);

private async Task OnDeleteClicked(WorkflowInstanceRow row)
{
Expand Down Expand Up @@ -292,5 +292,6 @@ private void OnClearTimestampFiltersClicked()
private async Task OnApplyTimestampFiltersClicked()
{
await _table.ReloadServerData();
ToggleDateRangePopover();
}
}

0 comments on commit 062018c

Please sign in to comment.