AddAccessPointComponent.razor 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. @using RackPeek.Domain.Resources.Hardware.AccessPoints
  2. @inject AddAccessPointUseCase AddAccessPoint
  3. <div class="border border-zinc-800 rounded p-4 bg-zinc-900">
  4. <div class="text-zinc-100 mb-3">
  5. Add AP
  6. </div>
  7. <div class="flex gap-2">
  8. <input
  9. class="flex-1 bg-zinc-950 border border-zinc-800 rounded px-3 py-2 text-sm text-zinc-200 placeholder-zinc-600 focus:outline-none focus:border-zinc-600"
  10. placeholder="AP name"
  11. @bind="_name"
  12. @bind:event="oninput"/>
  13. <button
  14. class="px-4 py-2 text-sm rounded bg-zinc-800 hover:bg-zinc-700 text-zinc-100 disabled:opacity-50"
  15. disabled="@_isSubmitting"
  16. @onclick="CreateAsync">
  17. add
  18. </button>
  19. </div>
  20. @if (_error is not null)
  21. {
  22. <div class="mt-2 text-sm text-red-400">
  23. @_error
  24. </div>
  25. }
  26. </div>
  27. @code {
  28. [Parameter] public EventCallback<string> OnCreated { get; set; }
  29. private string _name = string.Empty;
  30. private string? _error;
  31. private bool _isSubmitting;
  32. private async Task CreateAsync()
  33. {
  34. _error = null;
  35. if (string.IsNullOrWhiteSpace(_name))
  36. {
  37. _error = "name is required";
  38. return;
  39. }
  40. try
  41. {
  42. _isSubmitting = true;
  43. var name = _name.Trim();
  44. await AddAccessPoint.ExecuteAsync(name);
  45. _name = string.Empty;
  46. await OnCreated.InvokeAsync(name);
  47. }
  48. catch (Exception ex)
  49. {
  50. _error = ex.Message;
  51. }
  52. finally
  53. {
  54. _isSubmitting = false;
  55. }
  56. }
  57. }