From 17bfc5ff54f0920bfcd949b876b4c2b9ec912b06 Mon Sep 17 00:00:00 2001 From: pancakes Date: Sun, 23 Feb 2025 15:54:09 +1000 Subject: [PATCH] [frontend/components] Add blocking state to FollowButton --- .../Components/FollowButton.razor | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/Iceshrimp.Frontend/Components/FollowButton.razor b/Iceshrimp.Frontend/Components/FollowButton.razor index 48fa5a10..32ce1f05 100644 --- a/Iceshrimp.Frontend/Components/FollowButton.razor +++ b/Iceshrimp.Frontend/Components/FollowButton.razor @@ -1,10 +1,12 @@ @using Iceshrimp.Assets.PhosphorIcons +@using Iceshrimp.Frontend.Core.Miscellaneous @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @inject IStringLocalizer Loc; @inject ApiService Api; +@inject GlobalComponentSvc Global; @if (_buttonType == ButtonType.Self) return; @@ -54,20 +62,31 @@ FollowBack, FollowLocked, CancelRequest, + Blocking, Self } private async Task Action() { - switch (_buttonType) + try { - case ButtonType.Follow: - case ButtonType.FollowBack: - await Follow(); - break; - case ButtonType.Unfollow or ButtonType.CancelRequest: - await Unfollow(); - break; + switch (_buttonType) + { + case ButtonType.Follow: + case ButtonType.FollowBack: + await Follow(); + break; + case ButtonType.Unfollow or ButtonType.CancelRequest: + await Unfollow(); + break; + case ButtonType.Blocking: + await Unblock(); + break; + } + } + catch (ApiException e) + { + await Global.NoticeDialog?.Display(e.Response.Message ?? Loc["An unknown error occurred"], NoticeDialog.NoticeType.Error)!; } } @@ -90,6 +109,14 @@ StateHasChanged(); } + private async Task Unblock() + { + await Api.Users.UnblockUserAsync(User.Id); + UserProfile.Relations -= (int)Relations.Blocking; + ChooseButton(); + StateHasChanged(); + } + private void ChooseButton() { if (UserProfile.Relations == Relations.None) @@ -112,6 +139,11 @@ _buttonType = ButtonType.CancelRequest; } + if (UserProfile.Relations.HasFlag(Relations.Blocking)) + { + _buttonType = ButtonType.Blocking; + } + if (UserProfile.Relations.HasFlag(Relations.Self)) { _buttonType = ButtonType.Self;