Skip to content

Commit

Permalink
Moved event table column settings to EventTableState
Browse files Browse the repository at this point in the history
  • Loading branch information
jschick04 authored and bill-long committed Feb 14, 2024
1 parent 97d2951 commit 909f0c9
Show file tree
Hide file tree
Showing 13 changed files with 89 additions and 87 deletions.
30 changes: 13 additions & 17 deletions src/EventLogExpert.UI/Services/EventTableColumnProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,18 @@ public interface IEventTableColumnProvider
IDictionary<ColumnName, bool> GetColumns();
}

public class EventTableColumnProvider : IEventTableColumnProvider
public sealed class EventTableColumnProvider(IPreferencesProvider preferencesProvider) : IEventTableColumnProvider
{
private readonly IPreferencesProvider _preferencesProvider;

public EventTableColumnProvider(IPreferencesProvider preferencesProvider) =>
_preferencesProvider = preferencesProvider;

public IDictionary<ColumnName, bool> GetColumns() => new Dictionary<ColumnName, bool>
{
{ ColumnName.Level, _preferencesProvider.LevelColumnPreference },
{ ColumnName.DateAndTime, _preferencesProvider.DateAndTimeColumnPreference },
{ ColumnName.ActivityId, _preferencesProvider.ActivityIdColumnPreference },
{ ColumnName.LogName, _preferencesProvider.LogNameColumnPreference },
{ ColumnName.ComputerName, _preferencesProvider.ComputerNameColumnPreference },
{ ColumnName.Source, _preferencesProvider.SourceColumnPreference },
{ ColumnName.EventId, _preferencesProvider.EventIdColumnPreference },
{ ColumnName.TaskCategory, _preferencesProvider.TaskCategoryColumnPreference }
};
public IDictionary<ColumnName, bool> GetColumns() =>
new Dictionary<ColumnName, bool>
{
{ ColumnName.Level, preferencesProvider.LevelColumnPreference },
{ ColumnName.DateAndTime, preferencesProvider.DateAndTimeColumnPreference },
{ ColumnName.ActivityId, preferencesProvider.ActivityIdColumnPreference },
{ ColumnName.LogName, preferencesProvider.LogNameColumnPreference },
{ ColumnName.ComputerName, preferencesProvider.ComputerNameColumnPreference },
{ ColumnName.Source, preferencesProvider.SourceColumnPreference },
{ ColumnName.EventId, preferencesProvider.EventIdColumnPreference },
{ ColumnName.TaskCategory, preferencesProvider.TaskCategoryColumnPreference }
};
}
6 changes: 6 additions & 0 deletions src/EventLogExpert.UI/Store/EventTable/EventTableAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,16 @@ public sealed record CloseAll;

public sealed record CloseLog(string LogName);

public sealed record LoadColumns;

public sealed record LoadColumnsCompleted(IDictionary<ColumnName, bool> LoadedColumns);

public sealed record SetActiveTable(Guid TableId);

public sealed record SetOrderBy(ColumnName? OrderBy);

public sealed record ToggleColumn(ColumnName ColumnName);

public sealed record ToggleLoading(string LogName);

public sealed record ToggleSorting;
Expand Down
51 changes: 50 additions & 1 deletion src/EventLogExpert.UI/Store/EventTable/EventTableEffects.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,61 @@
// // Copyright (c) Microsoft Corporation.
// // Licensed under the MIT License.

using EventLogExpert.UI.Interfaces;
using EventLogExpert.UI.Services;
using Fluxor;

namespace EventLogExpert.UI.Store.EventTable;

public sealed class EventTableEffects(IState<EventTableState> eventTableState)
public sealed class EventTableEffects(
IEventTableColumnProvider columnProvider,
IState<EventTableState> eventTableState,
IPreferencesProvider preferencesProvider)
{
[EffectMethod(typeof(EventTableAction.LoadColumns))]
public Task HandleLoadColumns(IDispatcher dispatcher)
{
var columns = columnProvider.GetColumns();

dispatcher.Dispatch(new EventTableAction.LoadColumnsCompleted(columns));

return Task.CompletedTask;
}

[EffectMethod]
public Task HandleToggleColumn(EventTableAction.ToggleColumn action, IDispatcher dispatcher)
{
switch (action.ColumnName)
{
case ColumnName.Level :
preferencesProvider.LevelColumnPreference = !preferencesProvider.LevelColumnPreference;
break;
case ColumnName.DateAndTime :
preferencesProvider.DateAndTimeColumnPreference = !preferencesProvider.DateAndTimeColumnPreference;
break;
case ColumnName.ActivityId :
preferencesProvider.ActivityIdColumnPreference = !preferencesProvider.ActivityIdColumnPreference;
break;
case ColumnName.LogName :
preferencesProvider.LogNameColumnPreference = !preferencesProvider.LogNameColumnPreference;
break;
case ColumnName.ComputerName :
preferencesProvider.ComputerNameColumnPreference = !preferencesProvider.ComputerNameColumnPreference;
break;
case ColumnName.Source :
preferencesProvider.SourceColumnPreference = !preferencesProvider.SourceColumnPreference;
break;
case ColumnName.EventId :
preferencesProvider.EventIdColumnPreference = !preferencesProvider.EventIdColumnPreference;
break;
case ColumnName.TaskCategory :
preferencesProvider.TaskCategoryColumnPreference = !preferencesProvider.TaskCategoryColumnPreference;
break;
}

return Task.CompletedTask;
}

[EffectMethod(typeof(EventTableAction.UpdateDisplayedEvents))]
public Task HandleUpdateDisplayedEvents(IDispatcher dispatcher)
{
Expand Down
9 changes: 9 additions & 0 deletions src/EventLogExpert.UI/Store/EventTable/EventTableReducers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,15 @@ state with
};
}

[ReducerMethod]
public static EventTableState ReduceLoadColumnsCompleted(
EventTableState state,
EventTableAction.LoadColumnsCompleted action) =>
state with
{
Columns = action.LoadedColumns.ToImmutableDictionary()
};

[ReducerMethod]
public static EventTableState ReduceSetActiveTable(EventTableState state, EventTableAction.SetActiveTable action) =>
state with { ActiveTableId = state.EventTables.First(table => table.Id.Equals(action.TableId)).Id };
Expand Down
2 changes: 2 additions & 0 deletions src/EventLogExpert.UI/Store/EventTable/EventTableState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public sealed record EventTableState

public Guid? ActiveTableId { get; init; }

public IImmutableDictionary<ColumnName, bool> Columns { get; init; } = ImmutableDictionary<ColumnName, bool>.Empty;

public ColumnName? OrderBy { get; init; }

public bool IsDescending { get; init; } = true;
Expand Down
1 change: 1 addition & 0 deletions src/EventLogExpert.UI/Store/LoggingMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public override void BeforeDispatch(object action)
case EventLogAction.AddEventBuffered :
case EventLogAction.AddEventSuccess :
case EventLogAction.SetFilters :
case EventTableAction.LoadColumnsCompleted :
case EventTableAction.UpdateDisplayedEvents :
case FilterCacheAction.AddFavoriteFilterCompleted :
case FilterCacheAction.AddRecentFilterCompleted :
Expand Down
6 changes: 0 additions & 6 deletions src/EventLogExpert.UI/Store/Settings/SettingsAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ namespace EventLogExpert.UI.Store.Settings;

public sealed record SettingsAction
{
public sealed record LoadColumns;

public sealed record LoadColumnsCompleted(IDictionary<ColumnName, bool> LoadedColumns);

public sealed record LoadDatabases;

public sealed record LoadDatabasesCompleted(IEnumerable<string> LoadedDatabases);
Expand All @@ -24,6 +20,4 @@ public sealed record OpenMenu;
public sealed record Save(SettingsModel Settings);

public sealed record SaveCompleted(SettingsModel Settings);

public sealed record ToggleColumn(ColumnName ColumnName);
}
47 changes: 1 addition & 46 deletions src/EventLogExpert.UI/Store/Settings/SettingsEffects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,8 @@ namespace EventLogExpert.UI.Store.Settings;

public sealed class SettingsEffects(
IPreferencesProvider preferencesProvider,
IEnabledDatabaseCollectionProvider enabledDatabaseCollectionProvider,
IEventTableColumnProvider eventTableColumnProvider)
IEnabledDatabaseCollectionProvider enabledDatabaseCollectionProvider)
{
[EffectMethod(typeof(SettingsAction.LoadColumns))]
public Task HandleLoadColumns(IDispatcher dispatcher)
{
var columns = eventTableColumnProvider.GetColumns();

dispatcher.Dispatch(new SettingsAction.LoadColumnsCompleted(columns));

return Task.CompletedTask;
}

[EffectMethod(typeof(SettingsAction.LoadDatabases))]
public Task HandleLoadDatabases(IDispatcher dispatcher)
{
Expand Down Expand Up @@ -65,38 +54,4 @@ public Task HandleSave(SettingsAction.Save action, IDispatcher dispatcher)

return Task.CompletedTask;
}

[EffectMethod]
public Task HandleToggleColumn(SettingsAction.ToggleColumn action, IDispatcher dispatcher)
{
switch (action.ColumnName)
{
case ColumnName.Level :
preferencesProvider.LevelColumnPreference = !preferencesProvider.LevelColumnPreference;
break;
case ColumnName.DateAndTime :
preferencesProvider.DateAndTimeColumnPreference = !preferencesProvider.DateAndTimeColumnPreference;
break;
case ColumnName.ActivityId :
preferencesProvider.ActivityIdColumnPreference = !preferencesProvider.ActivityIdColumnPreference;
break;
case ColumnName.LogName :
preferencesProvider.LogNameColumnPreference = !preferencesProvider.LogNameColumnPreference;
break;
case ColumnName.ComputerName :
preferencesProvider.ComputerNameColumnPreference = !preferencesProvider.ComputerNameColumnPreference;
break;
case ColumnName.Source :
preferencesProvider.SourceColumnPreference = !preferencesProvider.SourceColumnPreference;
break;
case ColumnName.EventId :
preferencesProvider.EventIdColumnPreference = !preferencesProvider.EventIdColumnPreference;
break;
case ColumnName.TaskCategory :
preferencesProvider.TaskCategoryColumnPreference = !preferencesProvider.TaskCategoryColumnPreference;
break;
}

return Task.CompletedTask;
}
}
7 changes: 0 additions & 7 deletions src/EventLogExpert.UI/Store/Settings/SettingsReducer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,6 @@ namespace EventLogExpert.UI.Store.Settings;

public sealed partial class SettingsReducer
{
[ReducerMethod]
public static SettingsState ReduceLoadColumnsComleted(SettingsState state,
SettingsAction.LoadColumnsCompleted action) => state with
{
EventTableColumns = action.LoadedColumns.ToImmutableDictionary()
};

[ReducerMethod]
public static SettingsState ReduceLoadDatabasesCompleted(SettingsState state,
SettingsAction.LoadDatabasesCompleted action) => state with
Expand Down
3 changes: 0 additions & 3 deletions src/EventLogExpert.UI/Store/Settings/SettingsState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,5 @@ public record SettingsState
{
public SettingsModel Config { get; init; } = new();

public IImmutableDictionary<ColumnName, bool> EventTableColumns { get; init; } =
ImmutableDictionary<ColumnName, bool>.Empty;

public IImmutableList<string> LoadedDatabases { get; init; } = ImmutableList<string>.Empty;
}
2 changes: 1 addition & 1 deletion src/EventLogExpert/Components/EventTable.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ private async Task InvokeTableColumnMenu(MouseEventArgs args) =>

private bool IsColumnHidden(ColumnName columnName)
{
if (!SettingsState.Value.EventTableColumns.TryGetValue(columnName, out var enabled)) { return true; }
if (!EventTableState.Value.Columns.TryGetValue(columnName, out var enabled)) { return true; }

return !enabled;
}
Expand Down
3 changes: 2 additions & 1 deletion src/EventLogExpert/MainPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using EventLogExpert.UI.Options;
using EventLogExpert.UI.Services;
using EventLogExpert.UI.Store.EventLog;
using EventLogExpert.UI.Store.EventTable;
using EventLogExpert.UI.Store.FilterCache;
using EventLogExpert.UI.Store.FilterGroup;
using EventLogExpert.UI.Store.FilterPane;
Expand Down Expand Up @@ -104,7 +105,7 @@ public MainPage(
actionSubscriber.SubscribeToAction<SettingsAction.SaveCompleted>(this,
action => { SetCopyKeyboardAccelerator(); });

fluxorDispatcher.Dispatch(new SettingsAction.LoadColumns());
fluxorDispatcher.Dispatch(new EventTableAction.LoadColumns());
fluxorDispatcher.Dispatch(new SettingsAction.LoadSettings());
fluxorDispatcher.Dispatch(new SettingsAction.LoadDatabases());
fluxorDispatcher.Dispatch(new FilterCacheAction.LoadFilters());
Expand Down
9 changes: 4 additions & 5 deletions src/EventLogExpert/Shared/Components/TableColumnMenu.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

using EventLogExpert.UI;
using EventLogExpert.UI.Store.EventTable;
using EventLogExpert.UI.Store.Settings;
using Fluxor;
using Microsoft.AspNetCore.Components;
using System.Collections.Immutable;
Expand All @@ -18,12 +17,12 @@ public sealed partial class TableColumnMenu
[Inject] private IState<EventTableState> EventTableState { get; init; } = null!;

[Inject]
private IStateSelection<SettingsState, IImmutableDictionary<ColumnName, bool>>
private IStateSelection<EventTableState, IImmutableDictionary<ColumnName, bool>>
EventTableColumnsState { get; init; } = null!;

protected override void OnInitialized()
{
EventTableColumnsState.Select(s => s.EventTableColumns);
EventTableColumnsState.Select(s => s.Columns);

base.OnInitialized();
}
Expand All @@ -32,7 +31,7 @@ protected override void OnInitialized()

private void ToggleColumn(ColumnName columnName)
{
Dispatcher.Dispatch(new SettingsAction.ToggleColumn(columnName));
Dispatcher.Dispatch(new SettingsAction.LoadColumns());
Dispatcher.Dispatch(new EventTableAction.ToggleColumn(columnName));
Dispatcher.Dispatch(new EventTableAction.LoadColumns());
}
}

0 comments on commit 909f0c9

Please sign in to comment.