AccessPointCardComponent.razor 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. @using RackPeek.Domain.Resources.Hardware.AccessPoints
  2. @using RackPeek.Domain.Resources.Models
  3. @using RackPeek.Domain.Resources.Hardware.Desktops
  4. @inject DeleteAccessPointUseCase DeleteUseCase
  5. @inject RenameAccessPointUseCase RenameUseCase
  6. @inject CloneAccessPointUseCase CloneUseCase
  7. @inject NavigationManager Nav
  8. <div class="border border-zinc-800 rounded p-4 bg-zinc-900">
  9. <div class="flex justify-between items-center mb-3">
  10. <div class="text-zinc-100 hover:text-emerald-300">
  11. <NavLink href="@($"resources/hardware/{AccessPoint.Name}")" class="block">
  12. @AccessPoint.Name
  13. </NavLink>
  14. </div>
  15. <div class="flex justify-between items-center mb-3">
  16. @if (!string.IsNullOrWhiteSpace(AccessPoint.Model))
  17. {
  18. <span class="text-xs text-zinc-400">
  19. @AccessPoint.Model
  20. </span>
  21. }
  22. <div class="flex items-center gap-2">
  23. <button class="text-xs text-blue-400 hover:text-blue-300 transition"
  24. title="Rename service"
  25. @onclick="OpenRename">
  26. Rename
  27. </button>
  28. <button
  29. class="text-xs text-emerald-400 hover:text-emerald-300 transition"
  30. title="Clone service"
  31. @onclick="OpenClone">
  32. Clone
  33. </button>
  34. <button
  35. class="text-xs text-red-400 hover:text-red-300 transition"
  36. title="Delete server"
  37. @onclick="ConfirmDelete">
  38. Delete
  39. </button>
  40. </div>
  41. </div>
  42. </div>
  43. <div class="text-sm">
  44. @if (AccessPoint.Speed is not null)
  45. {
  46. <div>
  47. <div class="text-zinc-400 mb-1">Speed</div>
  48. <div class="text-zinc-300">
  49. @AccessPoint.Speed Gbps
  50. </div>
  51. </div>
  52. }
  53. </div>
  54. </div>
  55. <ConfirmModal
  56. IsOpen="_confirmDeleteOpen"
  57. IsOpenChanged="v => _confirmDeleteOpen = v"
  58. Title="Delete server"
  59. ConfirmText="Delete"
  60. ConfirmClass="bg-red-600 hover:bg-red-500"
  61. OnConfirm="DeleteServer">
  62. Are you sure you want to delete <strong>@AccessPoint.Name</strong>?
  63. </ConfirmModal>
  64. <StringValueModal
  65. IsOpen="_renameOpen"
  66. IsOpenChanged="v => _renameOpen = v"
  67. Title="Rename accesspoint"
  68. Description="Enter a new name for this accesspoint"
  69. Label="New accesspoint name"
  70. Value="@AccessPoint.Name"
  71. OnSubmit="HandleRenameSubmit" />
  72. <StringValueModal
  73. IsOpen="_cloneOpen"
  74. IsOpenChanged="v => _cloneOpen = v"
  75. Title="Clone resource"
  76. Description="Enter a name for the cloned resource"
  77. Label="New resource name"
  78. Value="@($"{AccessPoint.Name}-copy")"
  79. OnSubmit="HandleCloneSubmit" />
  80. @code {
  81. [Parameter] [EditorRequired] public AccessPoint AccessPoint { get; set; } = default!;
  82. }
  83. @code {
  84. private bool _confirmDeleteOpen;
  85. [Parameter] public EventCallback<string> OnDeleted { get; set; }
  86. void ConfirmDelete()
  87. {
  88. _confirmDeleteOpen = true;
  89. }
  90. async Task DeleteServer()
  91. {
  92. _confirmDeleteOpen = false;
  93. await DeleteUseCase.ExecuteAsync(AccessPoint.Name);
  94. if (OnDeleted.HasDelegate)
  95. await OnDeleted.InvokeAsync(AccessPoint.Name);
  96. }
  97. }
  98. @code
  99. {
  100. bool _renameOpen;
  101. void OpenRename()
  102. {
  103. _renameOpen = true;
  104. }
  105. async Task HandleRenameSubmit(string newName)
  106. {
  107. await RenameUseCase.ExecuteAsync(AccessPoint.Name, newName);
  108. Nav.NavigateTo($"resources/hardware/{newName}");
  109. }
  110. }
  111. @code
  112. {
  113. bool _cloneOpen;
  114. void OpenClone()
  115. {
  116. _cloneOpen = true;
  117. }
  118. async Task HandleCloneSubmit(string newName)
  119. {
  120. await CloneUseCase.ExecuteAsync(AccessPoint.Name, newName);
  121. Nav.NavigateTo($"resources/hardware/{newName}");
  122. }
  123. }