|
56 | 56 | Variant="Variant.Outlined" |
57 | 57 | Size="Size.Large" |
58 | 58 | Icon="@Icons.Material.Filled.Info" |
59 | | - OnClick="() => ShowPropertiesDialog(SelectedTask)"> |
| 59 | + OnClick="async () => await ShowPropertiesDialog(SelectedTask)"> |
60 | 60 | Selected Task: <b>@SelectedTask.Name</b> |
61 | 61 | </MudChip> |
62 | 62 | </MudTooltip> |
|
90 | 90 | private string _newValue; |
91 | 91 | private DotNetObjectReference<WorkflowDesigner> _selfRef; |
92 | 92 | private bool IsPaletteVisible = false; |
| 93 | + private bool _isPropertiesOpen; |
93 | 94 |
|
94 | 95 | private void TogglePalette() |
95 | 96 | { |
|
203 | 204 | private Task UpdateNodeTitle() => |
204 | 205 | SelectedTask != null ? JSRuntime.InvokeVoidAsync("fsDrawflow.updateNodeTitle", SelectedTask.NodeId, SelectedTask.Name, SelectedTask.Type).AsTask() : Task.CompletedTask; |
205 | 206 |
|
206 | | - private async void ShowPropertiesDialog(WorkflowTask task) |
| 207 | + private async Task ShowPropertiesDialog(WorkflowTask task) |
207 | 208 | { |
208 | | - var options = new DialogOptions |
| 209 | + if (task is null) |
| 210 | + return; |
| 211 | + |
| 212 | + if (_isPropertiesOpen) |
| 213 | + return; |
| 214 | + |
| 215 | + _isPropertiesOpen = true; |
| 216 | + |
| 217 | + try |
| 218 | + { |
| 219 | + var options = new DialogOptions |
209 | 220 | { |
210 | 221 | CloseButton = false, |
211 | 222 | MaxWidth = MaxWidth.Small, |
|
214 | 225 | BackgroundClass = "blur-dialog-background" |
215 | 226 | }; |
216 | 227 |
|
217 | | - var parameters = new DialogParameters |
| 228 | + var parameters = new DialogParameters |
218 | 229 | { |
219 | 230 | ["SelectedTask"] = task, |
220 | 231 | ["OnUpdated"] = EventCallback.Factory.Create(this, async () => |
|
224 | 235 | }) |
225 | 236 | }; |
226 | 237 |
|
227 | | - await DialogService.ShowAsync<WorkflowNodeProperties>("Properties", parameters, options); |
| 238 | + var dialogRef = await DialogService.ShowAsync<WorkflowNodeProperties>("Properties", parameters, options); |
| 239 | + |
| 240 | + // Await the dialog close before allowing another to open |
| 241 | + await dialogRef.Result; |
| 242 | + } |
| 243 | + finally |
| 244 | + { |
| 245 | + _isPropertiesOpen = false; |
| 246 | + } |
228 | 247 | } |
229 | 248 |
|
230 | 249 | private void UpdateDepsFromText() => |
|
286 | 305 | if (task != null) |
287 | 306 | { |
288 | 307 | SelectedTask = task; |
289 | | - ShowPropertiesDialog(task); |
| 308 | + return ShowPropertiesDialog(task); |
290 | 309 | } |
291 | 310 | return Task.CompletedTask; |
292 | 311 | } |
|
298 | 317 | if (task != null) |
299 | 318 | { |
300 | 319 | SelectedTask = task; |
301 | | - ShowPropertiesDialog(task); |
| 320 | + return ShowPropertiesDialog(task); |
302 | 321 | } |
303 | 322 | return Task.CompletedTask; |
304 | 323 | } |
|
0 commit comments