@using MudBlazor @using RobotNet10.ScriptEngine.Shared Edit Variable: @VariableName Type: @TypeName Cancel Save @code { [CascadingParameter] IMudDialogInstance Dialog { get; set; } = null!; [Parameter] public string VariableName { get; set; } = string.Empty; [Parameter] public string TypeName { get; set; } = string.Empty; [Parameter] public string CurrentValue { get; set; } = string.Empty; private string NewValue { get; set; } = string.Empty; private string ErrorMessage { get; set; } = string.Empty; private bool IsValid => string.IsNullOrEmpty(ErrorMessage) && !string.IsNullOrWhiteSpace(NewValue); protected override void OnInitialized() { NewValue = CurrentValue; ValidateValue(); } private string HelperText => GetHelperText(); private string GetHelperText() { var type = ScriptHelpers.ResolveTypeFromString(TypeName); if (type == null) return ""; return type switch { _ when type == typeof(bool) => "Enter 'true' or 'false'", _ when type == typeof(int) => "Enter an integer value", _ when type == typeof(long) => "Enter a long integer value", _ when type == typeof(float) => "Enter a float value (e.g., 3.14)", _ when type == typeof(double) => "Enter a double value (e.g., 3.14)", _ when type == typeof(decimal) => "Enter a decimal value (e.g., 3.14)", _ when type == typeof(char) => "Enter a single character", _ when type == typeof(string) => "Enter a string value", _ when type.IsEnum => $"Enter one of: {string.Join(", ", Enum.GetNames(type))}", _ => "Enter a valid value" }; } private void ValidateValue() { ErrorMessage = string.Empty; if (string.IsNullOrWhiteSpace(NewValue)) { return; // Will be handled by Required validation } var type = ScriptHelpers.ResolveTypeFromString(TypeName); if (type == null) { ErrorMessage = "Unknown type"; return; } // Check if type is supported if (!ScriptHelpers.SupportedTypes.Values.Contains(type) && !type.IsEnum) { ErrorMessage = "Type not supported for editing"; return; } // Validate value can be converted to the type try { if (type.IsEnum) { // Handle enum validation separately since ResolveValueFromString doesn't handle enums correctly Enum.Parse(type, NewValue.Trim(), ignoreCase: true); } else if (!ScriptHelpers.ResolveValueFromString(NewValue.Trim(), type, out _)) { ErrorMessage = $"Invalid value for type {TypeName}"; } } catch (ArgumentException) { ErrorMessage = $"Invalid value for type {TypeName}"; } catch (Exception) { ErrorMessage = $"Failed to validate value for type {TypeName}"; } } private void Cancel() => Dialog.Cancel(); private void Submit() { if (!IsValid) { return; } Dialog.Close(DialogResult.Ok(NewValue.Trim())); } private void HandleKeyDown(KeyboardEventArgs e) { if (e.Key == "Enter" && IsValid) { Submit(); } else if (e.Key == "Escape") { Cancel(); } } }