Skip to content

Commit e84aab8

Browse files
feat: Add event type filter to server events index and update related JavaScript logic
1 parent bee453c commit e84aab8

3 files changed

Lines changed: 41 additions & 24 deletions

File tree

src/XtremeIdiots.Portal.Web/ApiControllers/ServerAdminController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ private async Task<IActionResult> GetChatLogPrivate(GameType? gameType, Guid? se
156156
public async Task<IActionResult> GetServerEventsAjax(
157157
[FromQuery] string? gameType,
158158
[FromQuery] Guid? gameServerId,
159+
[FromQuery] string? eventType,
159160
CancellationToken cancellationToken = default)
160161
{
161162
return await ExecuteWithErrorHandlingAsync(async () =>
@@ -188,7 +189,7 @@ public async Task<IActionResult> GetServerEventsAjax(
188189
}
189190

190191
var eventsApiResponse = await repositoryApiClient.GameServersEvents.V1.GetGameServerEvents(
191-
parsedGameType, gameServerId, null,
192+
parsedGameType, gameServerId, string.IsNullOrWhiteSpace(eventType) ? null : eventType.Trim(),
192193
model.Start, model.Length, order, cancellationToken).ConfigureAwait(false);
193194

194195
if (!eventsApiResponse.IsSuccess || eventsApiResponse.Result?.Data is null)

src/XtremeIdiots.Portal.Web/Views/ServerAdmin/ServerEventsIndex.cshtml

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,41 @@
2424
<option value="">All Servers</option>
2525
</select>
2626
</div>
27+
<div class="filter-group">
28+
<label for="filterEventType" class="form-label">Event Type</label>
29+
<input type="text" id="filterEventType" class="form-control" placeholder="e.g. RconKickPlayer" />
30+
</div>
2731
<div class="filter-group reset-group">
2832
<label class="form-label" for="resetFilters">Reset</label>
29-
<button type="button" id="resetFilters" class="btn btn-outline-secondary btn-sm">Reset Filters</button>
33+
<button type="button" id="resetFilters" class="btn btn-outline-secondary btn-sm">Reset
34+
Filters</button>
35+
</div>
3036
</div>
31-
</div>
3237

33-
<div class="ibox">
34-
<div class="ibox-title">
35-
<i class="fa-solid fa-fw fa-timeline"></i> @ViewData["Title"]
36-
</div>
37-
<div class="ibox-content">
38-
<div class="table-responsive">
39-
<table id="dataTable" class="table table-striped table-hover w-100">
40-
<thead>
41-
<tr>
42-
<th>Timestamp</th>
43-
<th>Event Type</th>
44-
<th>Server</th>
45-
<th>Event Data</th>
46-
</tr>
47-
</thead>
48-
</table>
38+
<div class="ibox">
39+
<div class="ibox-title">
40+
<i class="fa-solid fa-fw fa-timeline"></i> @ViewData["Title"]
41+
</div>
42+
<div class="ibox-content">
43+
<div class="table-responsive">
44+
<table id="dataTable" class="table table-striped table-hover w-100">
45+
<thead>
46+
<tr>
47+
<th>Timestamp</th>
48+
<th>Event Type</th>
49+
<th>Server</th>
50+
<th>Event Data</th>
51+
</tr>
52+
</thead>
53+
</table>
54+
</div>
4955
</div>
5056
</div>
5157
</div>
5258
</div>
5359
</div>
54-
</div>
5560

56-
@section Scripts {
57-
<form id="__af" method="post" style="display:none">@Html.AntiForgeryToken()</form>
58-
<script src="~/js/server-events-index.js" asp-append-version="true"></script>
59-
}
61+
@section Scripts {
62+
<form id="__af" method="post" style="display:none">@Html.AntiForgeryToken()</form>
63+
<script src="~/js/server-events-index.js" asp-append-version="true"></script>
64+
}

src/XtremeIdiots.Portal.Web/wwwroot/js/server-events-index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ $(document).ready(function () {
22
var tableEl = $('#dataTable');
33
var gameTypeSel = document.getElementById('filterGameType');
44
var serverSel = document.getElementById('filterGameServer');
5+
var eventTypeInput = document.getElementById('filterEventType');
56
var allServers = [];
67

78
function escapeHtml(str) {
@@ -42,11 +43,13 @@ $(document).ready(function () {
4243
data._serverEventsVersion = 1;
4344
if (gameTypeSel) data.gameType = gameTypeSel.value || '';
4445
if (serverSel) data.serverId = serverSel.value || '';
46+
if (eventTypeInput) data.eventType = eventTypeInput.value || '';
4547
},
4648
stateLoadParams: function (settings, data) {
4749
if (data._serverEventsVersion !== 1) return false;
4850
if (gameTypeSel && data.gameType) gameTypeSel.value = data.gameType;
4951
if (serverSel && typeof data.serverId !== 'undefined') serverSel._pendingValue = data.serverId;
52+
if (eventTypeInput && typeof data.eventType !== 'undefined') eventTypeInput.value = data.eventType;
5053
},
5154
columnDefs: [
5255
{ targets: 0, responsivePriority: 1 },
@@ -73,6 +76,9 @@ $(document).ready(function () {
7376
var srv = serverSel?.value;
7477
if (srv) qs.push('gameServerId=' + encodeURIComponent(srv));
7578

79+
var eventType = eventTypeInput?.value?.trim();
80+
if (eventType) qs.push('eventType=' + encodeURIComponent(eventType));
81+
7682
this.url = baseUrl + (qs.length ? ('?' + qs.join('&')) : '');
7783
}
7884
},
@@ -154,9 +160,14 @@ $(document).ready(function () {
154160
table.page('first').draw(false);
155161
});
156162

163+
eventTypeInput?.addEventListener('input', function () {
164+
table.page('first').draw(false);
165+
});
166+
157167
document.getElementById('resetFilters')?.addEventListener('click', function () {
158168
if (gameTypeSel) gameTypeSel.value = '';
159169
if (serverSel) serverSel.value = '';
170+
if (eventTypeInput) eventTypeInput.value = '';
160171
rebuildServerOptions();
161172
table.search('');
162173
table.page('first').draw(false);

0 commit comments

Comments
 (0)