@using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @inject IStringLocalizer Loc; @inject ApiService Api; @switch (_buttonType) { case ButtonType.Follow: break; case ButtonType.Unfollow: break; case ButtonType.FollowBack: break; case ButtonType.CancelRequest: break; } @code { [Parameter] [EditorRequired] public required UserResponse User { get; set; } [Parameter] [EditorRequired] public required UserProfileResponse UserProfile { get; set; } private ButtonType _buttonType; protected override void OnInitialized() { ChooseButton(); } private enum ButtonType { Follow, Unfollow, FollowBack, FollowLocked, CancelRequest } private void Action() { switch (_buttonType) { case ButtonType.Follow: Follow(); break; case ButtonType.FollowBack: Follow(); break; case ButtonType.Unfollow or ButtonType.CancelRequest: Unfollow(); break; } } private async void Unfollow() { await Api.Users.UnfollowUser(User.Id); UserProfile.Relations -= (int)Relations.Following; ChooseButton(); StateHasChanged(); } private async void Follow() { await Api.Users.FollowUser(User.Id); UserProfile.Relations += (int)Relations.Requested; ChooseButton(); StateHasChanged(); UserProfile = await Api.Users.GetUserProfile(UserProfile.Id) ?? throw new Exception("How did it stop existing"); ChooseButton(); StateHasChanged(); } private void ChooseButton() { if (UserProfile.Relations == Relations.None) { _buttonType = ButtonType.Follow; } if (UserProfile.Relations.HasFlag(Relations.FollowedBy)) { _buttonType = ButtonType.FollowBack; } if (UserProfile.Relations.HasFlag(Relations.Following)) { _buttonType = ButtonType.Unfollow; } if (UserProfile.Relations.HasFlag(Relations.Requested)) { _buttonType = ButtonType.CancelRequest; } } }