|
1 | 1 | @using Component.Models |
2 | 2 | @using Microsoft.JSInterop |
3 | 3 | @using Component.Core.Shared |
| 4 | +@using System.Threading |
4 | 5 | @inject IJSRuntime JSRuntime |
5 | 6 | @implements IDisposable |
6 | 7 |
|
|
105 | 106 |
|
106 | 107 | private bool isCopied = false; |
107 | 108 | private DotNetObjectReference<JsonPathDisplay>? dotNetHelper; |
| 109 | + private CancellationTokenSource? copyCancellationTokenSource; |
108 | 110 |
|
109 | 111 | protected override async Task OnAfterRenderAsync(bool firstRender) |
110 | 112 | { |
|
151 | 153 | { |
152 | 154 | if (PathInfo == null) return; |
153 | 155 |
|
| 156 | + // Cancel any existing copy operation |
| 157 | + copyCancellationTokenSource?.Cancel(); |
| 158 | + copyCancellationTokenSource?.Dispose(); |
| 159 | + copyCancellationTokenSource = new CancellationTokenSource(); |
| 160 | + |
154 | 161 | await OnCopyPath.InvokeAsync(PathInfo.Path); |
155 | 162 | isCopied = true; |
156 | 163 | StateHasChanged(); |
157 | 164 |
|
158 | | - await Task.Delay(2000); |
159 | | - isCopied = false; |
160 | | - StateHasChanged(); |
| 165 | + try |
| 166 | + { |
| 167 | + await Task.Delay(2000, copyCancellationTokenSource.Token); |
| 168 | + isCopied = false; |
| 169 | + StateHasChanged(); |
| 170 | + } |
| 171 | + catch (OperationCanceledException) |
| 172 | + { |
| 173 | + // Operation was cancelled, ignore |
| 174 | + } |
161 | 175 | } |
162 | 176 |
|
163 | 177 | private string TruncateValue(string value, int maxLength = 200) |
|
167 | 181 | if (value.Length <= maxLength) |
168 | 182 | return value; |
169 | 183 |
|
170 | | - return value.Substring(0, maxLength) + "..."; |
| 184 | + // Use modern string slicing (more efficient) |
| 185 | + return string.Concat(value.AsSpan(0, maxLength), "..."); |
171 | 186 | } |
172 | 187 |
|
173 | 188 | public void Dispose() |
174 | 189 | { |
| 190 | + copyCancellationTokenSource?.Cancel(); |
| 191 | + copyCancellationTokenSource?.Dispose(); |
175 | 192 | dotNetHelper?.Dispose(); |
176 | 193 | } |
177 | 194 | } |
|
0 commit comments