using System.Linq; using Content.Client.Eui; using Content.Shared.Administration; using Content.Shared.Administration.Logs; using Content.Shared.Eui; using JetBrains.Annotations; using static Content.Shared.Administration.AdminLogsEuiMsg; namespace Content.Client.Administration.UI.Logs; [UsedImplicitly] public class AdminLogsEui : BaseEui { public AdminLogsEui() { Window = new AdminLogsWindow(); Window.OnClose += () => SendMessage(new Close()); Window.LogSearch.OnTextEntered += _ => RequestLogs(); Window.RefreshButton.OnPressed += _ => RequestLogs(); Window.NextButton.OnPressed += _ => NextLogs(); } private AdminLogsWindow Window { get; } private bool FirstState { get; set; } = true; private void RequestLogs() { var request = new LogsRequest( Window.SelectedRoundId, Window.SelectedTypes.ToList(), null, null, null, Window.SelectedPlayers.ToArray(), null, null, DateOrder.Descending); SendMessage(request); } private void NextLogs() { var request = new NextLogsRequest(); SendMessage(request); } private bool TrySetFirstState(AdminLogsEuiState state) { if (!FirstState) { return false; } FirstState = false; Window.SetCurrentRound(state.RoundId); Window.SetRoundSpinBox(state.RoundId); return true; } public override void Opened() { Window.OpenCentered(); } public override void HandleState(EuiStateBase state) { var s = (AdminLogsEuiState) state; var first = TrySetFirstState(s); if (s.IsLoading) { return; } Window.SetCurrentRound(s.RoundId); Window.SetPlayers(s.Players); if (first) { RequestLogs(); } } public override void HandleMessage(EuiMessageBase msg) { base.HandleMessage(msg); switch (msg) { case NewLogs {Replace: true} newLogs: Window.SetLogs(newLogs.Logs); break; case NewLogs {Replace: false} newLogs: Window.AddLogs(newLogs.Logs); break; } } public override void Closed() { base.Closed(); Window.Close(); Window.Dispose(); } }