fix(uns): surface stale-row edits + dismiss modal on delete + @key rows (code-review)

This commit is contained in:
Joseph Doherty
2026-06-11 14:49:23 -04:00
parent 61ad5ab8cc
commit 1294fb6ee5
@@ -162,7 +162,7 @@ else
<tbody> <tbody>
@foreach (var t in _tags) @foreach (var t in _tags)
{ {
<tr> <tr @key="t.TagId">
<td>@t.Name</td> <td>@t.Name</td>
<td class="mono">@t.DriverInstanceId</td> <td class="mono">@t.DriverInstanceId</td>
<td>@t.DataType</td> <td>@t.DataType</td>
@@ -207,7 +207,7 @@ else
<tbody> <tbody>
@foreach (var v in _vtags) @foreach (var v in _vtags)
{ {
<tr> <tr @key="v.VirtualTagId">
<td>@v.Name</td> <td>@v.Name</td>
<td>@v.DataType</td> <td>@v.DataType</td>
<td class="mono">@v.ScriptId</td> <td class="mono">@v.ScriptId</td>
@@ -289,6 +289,7 @@ else
private async Task OpenAddTag() private async Task OpenAddTag()
{ {
_tagError = null;
_tagModalIsNew = true; _tagModalIsNew = true;
_tagModalExisting = null; _tagModalExisting = null;
_tagDriverOptions = await Svc.LoadTagDriversForEquipmentAsync(EquipmentId!); _tagDriverOptions = await Svc.LoadTagDriversForEquipmentAsync(EquipmentId!);
@@ -297,8 +298,9 @@ else
private async Task OpenEditTag(string tagId) private async Task OpenEditTag(string tagId)
{ {
_tagError = null;
var dto = await Svc.LoadTagAsync(tagId); var dto = await Svc.LoadTagAsync(tagId);
if (dto is null) { return; } if (dto is null) { _tagError = "That tag no longer exists; the list was refreshed."; await ReloadTagsAsync(); return; }
_tagModalIsNew = false; _tagModalIsNew = false;
_tagModalExisting = dto; _tagModalExisting = dto;
_tagDriverOptions = await Svc.LoadTagDriversForEquipmentAsync(EquipmentId!); _tagDriverOptions = await Svc.LoadTagDriversForEquipmentAsync(EquipmentId!);
@@ -313,6 +315,7 @@ else
private async Task DeleteTag(string tagId) private async Task DeleteTag(string tagId)
{ {
_tagModalVisible = false;
_tagError = null; _tagError = null;
// Load the tag fresh to capture its current RowVersion for the optimistic-concurrency delete. // Load the tag fresh to capture its current RowVersion for the optimistic-concurrency delete.
var dto = await Svc.LoadTagAsync(tagId); var dto = await Svc.LoadTagAsync(tagId);
@@ -331,6 +334,7 @@ else
private async Task OpenAddVirtualTag() private async Task OpenAddVirtualTag()
{ {
_vtagError = null;
_vtagModalIsNew = true; _vtagModalIsNew = true;
_vtagModalExisting = null; _vtagModalExisting = null;
_vtagScriptOptions = await Svc.LoadScriptsAsync(); _vtagScriptOptions = await Svc.LoadScriptsAsync();
@@ -339,8 +343,9 @@ else
private async Task OpenEditVirtualTag(string vtagId) private async Task OpenEditVirtualTag(string vtagId)
{ {
_vtagError = null;
var dto = await Svc.LoadVirtualTagAsync(vtagId); var dto = await Svc.LoadVirtualTagAsync(vtagId);
if (dto is null) { return; } if (dto is null) { _vtagError = "That virtual tag no longer exists; the list was refreshed."; await ReloadVirtualTagsAsync(); return; }
_vtagModalIsNew = false; _vtagModalIsNew = false;
_vtagModalExisting = dto; _vtagModalExisting = dto;
_vtagScriptOptions = await Svc.LoadScriptsAsync(); _vtagScriptOptions = await Svc.LoadScriptsAsync();
@@ -355,6 +360,7 @@ else
private async Task DeleteVirtualTag(string vtagId) private async Task DeleteVirtualTag(string vtagId)
{ {
_vtagModalVisible = false;
_vtagError = null; _vtagError = null;
// Load the virtual tag fresh to capture its current RowVersion for the concurrency-guarded delete. // Load the virtual tag fresh to capture its current RowVersion for the concurrency-guarded delete.
var dto = await Svc.LoadVirtualTagAsync(vtagId); var dto = await Svc.LoadVirtualTagAsync(vtagId);