diff --git a/src/EventLogExpert.Library/Models/FilterDateModel.cs b/src/EventLogExpert.Library/Models/FilterDateModel.cs index 2443a463..c71bb36b 100644 --- a/src/EventLogExpert.Library/Models/FilterDateModel.cs +++ b/src/EventLogExpert.Library/Models/FilterDateModel.cs @@ -8,4 +8,6 @@ public record FilterDateModel public DateTime After { get; set; } public DateTime Before { get; set; } + + public TimeZoneInfo TimeZoneInfo { get; set; } = null!; } diff --git a/src/EventLogExpert/Components/FilterPane.razor.cs b/src/EventLogExpert/Components/FilterPane.razor.cs index 48a25a9d..8258b05f 100644 --- a/src/EventLogExpert/Components/FilterPane.razor.cs +++ b/src/EventLogExpert/Components/FilterPane.razor.cs @@ -3,6 +3,8 @@ using EventLogExpert.Library.Models; using EventLogExpert.Store.FilterPane; +using EventLogExpert.Store.Settings; +using Fluxor; using Microsoft.AspNetCore.Components; using System.Linq.Dynamic.Core; @@ -10,7 +12,7 @@ namespace EventLogExpert.Components; public partial class FilterPane { - private readonly FilterDateModel _model = new(); + private readonly FilterDateModel _model = new() { TimeZoneInfo = TimeZoneInfo.Utc }; private Timer? _advancedFilterDebounceTimer = null; private string _advancedFilterErrorMessage = string.Empty; @@ -35,19 +37,31 @@ private string MenuState } } + [Inject] private IStateSelection TimeZoneState { get; set; } = null!; + + protected override void OnInitialized() + { + TimeZoneState.Select(x => x.TimeZoneId); + TimeZoneState.SelectedValueChanged += (sender, args) => { UpdateFilterDateModel(); }; + + base.OnInitialized(); + } + private void AddDateFilter() { _isFilterListVisible = true; _canEditDate = true; + _model.TimeZoneInfo = SettingsState.Value.TimeZone; + // Offset by 1 minute to make sure we don't drop events // since HTML input DateTime does not go lower than minutes _model.Before = EventLogState.Value.Events.FirstOrDefault()?.TimeCreated - .AddMinutes(1).ConvertTimeZone(SettingsState.Value.TimeZone) ?? + .AddMinutes(1).ConvertTimeZone(_model.TimeZoneInfo) ?? DateTime.Now; _model.After = EventLogState.Value.Events.LastOrDefault()?.TimeCreated - .AddMinutes(-1).ConvertTimeZone(SettingsState.Value.TimeZone) ?? + .AddMinutes(-1).ConvertTimeZone(_model.TimeZoneInfo) ?? DateTime.Now; _isDateFilterVisible = true; @@ -138,4 +152,13 @@ private bool TryParseExpression(string? expression, out string message) return false; } } + + private void UpdateFilterDateModel() + { + var temp = _model.TimeZoneInfo; + _model.TimeZoneInfo = SettingsState.Value.TimeZone; + + _model.Before = TimeZoneInfo.ConvertTime(_model.Before, temp, _model.TimeZoneInfo); + _model.After = TimeZoneInfo.ConvertTime(_model.After, temp, _model.TimeZoneInfo); + } }