This commit is contained in:
6d486f49
2026-08-17 00:45:08 -04:00
parent 3a2f112a73
commit 1d6207fbfe
154 changed files with 126007 additions and 47385 deletions
@@ -31,8 +31,9 @@
<div class="d-flex align-items-center justify-content-between mb-3 gap-3">
<div class="input-group" style="max-width: 400px;">
<span class="input-group-text bg-dark border-secondary text-secondary"><i class="bi bi-search"></i></span>
<input type="text" class="form-control form-control-chrono" placeholder="Search by card name or note content..."
@bind="searchTerm" @bind:event="oninput" @bind:after="FilterNotes" />
<input type="text" class="form-control form-control-chrono"
placeholder="Search by card name or note content..."
@bind="searchTerm" @bind:event="oninput" @bind:after="FilterNotes"/>
@if (!string.IsNullOrEmpty(searchTerm))
{
<button class="btn btn-outline-secondary" @onclick="ClearSearch"><i class="bi bi-x-lg"></i></button>
@@ -72,37 +73,44 @@
<div class="table-responsive">
<table class="chrono-table">
<thead>
<tr>
<th style="width: 25%;">Card Name (Primary Key)</th>
<th>Note Content</th>
<th style="width: 140px;" class="text-end">Actions</th>
</tr>
<tr>
<th style="width: 20%;">User</th>
<th style="width: 25%;">Card Name</th>
<th>Note Content</th>
<th style="width: 140px;" class="text-end">Actions</th>
</tr>
</thead>
<tbody>
@foreach (var note in notes)
{
<tr>
<td>
<div class="fw-semibold text-white d-flex align-items-center gap-2">
<i class="bi bi-card-heading text-primary"></i>
@note.CardName
</div>
</td>
<td>
<div class="text-light text-break">@note.Note</div>
</td>
<td class="text-end">
<div class="btn-group btn-group-sm">
<button class="btn btn-chrono-secondary" @onclick="() => OpenEditModal(note)" title="Edit Note">
<i class="bi bi-pencil-fill"></i>
</button>
<button class="btn btn-chrono-danger" @onclick="() => OpenDeleteModal(note)" title="Delete Note">
<i class="bi bi-trash3-fill"></i>
</button>
</div>
</td>
</tr>
}
@foreach (var note in notes)
{
<tr>
<td>
<span
class="badge bg-secondary font-monospace">@(string.IsNullOrEmpty(note.Username) ? "global" : note.Username)</span>
</td>
<td>
<div class="fw-semibold text-white d-flex align-items-center gap-2">
<i class="bi bi-card-heading text-primary"></i>
@note.CardName
</div>
</td>
<td>
<div class="text-light text-break">@note.Note</div>
</td>
<td class="text-end">
<div class="btn-group btn-group-sm">
<button class="btn btn-chrono-secondary" @onclick="() => OpenEditModal(note)"
title="Edit Note">
<i class="bi bi-pencil-fill"></i>
</button>
<button class="btn btn-chrono-danger" @onclick="() => OpenDeleteModal(note)"
title="Delete Note">
<i class="bi bi-trash3-fill"></i>
</button>
</div>
</td>
</tr>
}
</tbody>
</table>
</div>
@@ -122,24 +130,44 @@
<button type="button" class="btn-close btn-close-white" @onclick="CloseModal"></button>
</div>
<div class="modal-body-custom">
<div class="mb-3">
<label class="form-label text-secondary small fw-bold">USERNAME</label>
@if (isEditing)
{
<input type="text" class="form-control form-control-chrono" value="@currentNote.Username"
disabled/>
}
else
{
<input type="text" class="form-control form-control-chrono"
placeholder="Enter username (e.g. player1)..." @bind="currentNote.Username"/>
<div class="form-text text-secondary">The username this note is associated with.</div>
}
</div>
<div class="mb-3">
<label class="form-label text-secondary small fw-bold">CARD NAME</label>
@if (isEditing)
{
<input type="text" class="form-control form-control-chrono" value="@currentNote.CardName" disabled />
<div class="form-text text-secondary">Card name acts as the primary key and cannot be altered.</div>
<input type="text" class="form-control form-control-chrono" value="@currentNote.CardName"
disabled/>
<div class="form-text text-secondary">Card name acts as part of the primary key and cannot be
altered.
</div>
}
else
{
<input type="text" class="form-control form-control-chrono" list="cardSuggestions"
placeholder="Enter or select card name..." @bind="currentNote.CardName" />
placeholder="Enter or select card name..." @bind="currentNote.CardName"/>
<datalist id="cardSuggestions">
@foreach (var c in availableCardNames.Take(50))
{
<option value="@c" />
<option value="@c"/>
}
</datalist>
<div class="form-text text-secondary">Select an existing card from the database or enter a custom name.</div>
<div class="form-text text-secondary">Select an existing card from the database or enter a
custom name.
</div>
}
</div>
@@ -170,17 +198,20 @@
<i class="bi bi-exclamation-triangle-fill me-2"></i>
Confirm Delete Note
</h5>
<button type="button" class="btn-close btn-close-white" @onclick="() => showDeleteModal = false"></button>
<button type="button" class="btn-close btn-close-white"
@onclick="() => showDeleteModal = false"></button>
</div>
<div class="modal-body-custom">
<p class="text-white mb-2">Are you sure you want to delete the note for:</p>
<div class="p-2 rounded bg-dark border border-secondary fw-bold text-primary mb-3">
@noteToDelete.CardName
</div>
<p class="text-secondary small mb-0">This action will remove the record from the database permanently.</p>
<p class="text-secondary small mb-0">This action will remove the record from the database
permanently.</p>
</div>
<div class="modal-footer-custom">
<button type="button" class="btn btn-chrono-secondary" @onclick="() => showDeleteModal = false">Cancel</button>
<button type="button" class="btn btn-chrono-secondary" @onclick="() => showDeleteModal = false">Cancel
</button>
<button type="button" class="btn btn-chrono-danger" @onclick="ConfirmDeleteAsync" disabled="@isSaving">
@(isSaving ? "Deleting..." : "Delete Permanently")
</button>
@@ -194,7 +225,7 @@
private List<string> availableCardNames = [];
private string searchTerm = "";
private bool isLoading = true;
private bool isSaving = false;
private bool isSaving;
private string? alertMessage;
private bool alertIsSuccess;
@@ -208,7 +239,7 @@
protected override async Task OnInitializedAsync()
{
ConfigService.OnConfigurationChanged += HandleConfigChanged;
try
{
availableCardNames = CardDatabase.Cards
@@ -272,6 +303,7 @@
isEditing = true;
currentNote = new CardNote
{
Username = note.Username,
CardName = note.CardName,
Note = note.Note
};
@@ -317,7 +349,7 @@
if (noteToDelete == null) return;
isSaving = true;
var result = await DbService.DeleteCardNoteAsync(noteToDelete.CardName);
var result = await DbService.DeleteCardNoteAsync(noteToDelete.CardName, noteToDelete.Username);
isSaving = false;
alertIsSuccess = result.Success;
@@ -340,4 +372,5 @@
{
ConfigService.OnConfigurationChanged -= HandleConfigChanged;
}
}