extract button text properties to methods, show login overlay on click

This commit is contained in:
Liam DeVoe 2023-06-19 18:10:37 -04:00
parent d5d494f07b
commit 591277e0f9
3 changed files with 41 additions and 21 deletions

View File

@ -15,7 +15,6 @@
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Resources.Localisation.Web;
using osuTK;
using osuTK.Graphics;
@ -27,12 +26,6 @@ public abstract partial class CommentEditor : CompositeDrawable
protected abstract LocalisableString FooterText { get; }
protected abstract LocalisableString CommitButtonText { get; }
private LocalisableString textBoxPlaceholderLoggedOut => AuthorizationStrings.RequireLogin;
protected abstract LocalisableString TextBoxPlaceholder { get; }
protected FillFlowContainer ButtonsContainer { get; private set; } = null!;
protected readonly Bindable<string> Current = new Bindable<string>(string.Empty);
@ -47,7 +40,12 @@ public abstract partial class CommentEditor : CompositeDrawable
[Resolved]
protected IAPIProvider API { get; private set; } = null!;
private LocalisableString placeholderText => API.IsLoggedIn ? TextBoxPlaceholder : textBoxPlaceholderLoggedOut;
[Resolved]
private LoginOverlay? loginOverlay { get; set; }
protected abstract LocalisableString GetCommitButtonText(bool isLoggedIn);
protected abstract LocalisableString GetTextBoxPlaceholder(bool isLoggedIn);
protected bool ShowLoadingSpinner
{
@ -90,7 +88,7 @@ private void load(OverlayColourProvider colourProvider)
{
Height = 40,
RelativeSizeAxes = Axes.X,
PlaceholderText = placeholderText,
PlaceholderText = GetTextBoxPlaceholder(API.IsLoggedIn),
Current = Current,
ReadOnly = !API.IsLoggedIn
},
@ -128,8 +126,8 @@ private void load(OverlayColourProvider colourProvider)
Spacing = new Vector2(5, 0),
Child = commitButton = new EditorButton
{
Text = CommitButtonText,
Action = () => OnCommit(Current.Value)
Text = GetCommitButtonText(API.IsLoggedIn),
Action = () => commitOrLogIn(Current.Value)
}
},
loadingSpinner = new LoadingSpinner
@ -154,18 +152,34 @@ protected override void LoadComplete()
{
base.LoadComplete();
Current.BindValueChanged(_ => updateCommitButtonState(), true);
User.BindValueChanged(_ => updateTextBoxState());
User.BindValueChanged(_ => updateStateForLoggedIn());
}
protected abstract void OnCommit(string text);
private void updateCommitButtonState() =>
commitButton.Enabled.Value = loadingSpinner.State.Value == Visibility.Hidden && !string.IsNullOrEmpty(Current.Value);
private void updateTextBoxState()
private void commitOrLogIn(string text)
{
TextBox.PlaceholderText = placeholderText;
if (!API.IsLoggedIn)
{
loginOverlay?.Show();
return;
}
OnCommit(text);
}
private void updateCommitButtonState()
{
bool textBoxValid = loadingSpinner.State.Value == Visibility.Hidden && !string.IsNullOrEmpty(Current.Value);
commitButton.Enabled.Value = textBoxValid || !API.IsLoggedIn;
}
private void updateStateForLoggedIn()
{
TextBox.PlaceholderText = GetTextBoxPlaceholder(API.IsLoggedIn);
TextBox.ReadOnly = !API.IsLoggedIn;
commitButton.Text = GetCommitButtonText(API.IsLoggedIn);
updateCommitButtonState();
}
private partial class EditorTextBox : OsuTextBox

View File

@ -410,9 +410,11 @@ private partial class NewCommentEditor : CommentEditor
//TODO should match web, left empty due to no multiline support
protected override LocalisableString FooterText => default;
protected override LocalisableString CommitButtonText => CommonStrings.ButtonsPost;
protected override LocalisableString GetCommitButtonText(bool isLoggedIn) =>
isLoggedIn ? CommonStrings.ButtonsPost : CommentsStrings.GuestButtonNew;
protected override LocalisableString TextBoxPlaceholder => CommentsStrings.PlaceholderNew;
protected override LocalisableString GetTextBoxPlaceholder(bool isLoggedIn) =>
isLoggedIn ? CommentsStrings.PlaceholderNew : AuthorizationStrings.RequireLogin;
protected override void OnCommit(string text)
{

View File

@ -22,8 +22,12 @@ public partial class ReplyCommentEditor : CancellableCommentEditor
public Action<DrawableComment[]>? OnPost;
protected override LocalisableString FooterText => default;
protected override LocalisableString CommitButtonText => CommonStrings.ButtonsReply;
protected override LocalisableString TextBoxPlaceholder => CommentsStrings.PlaceholderReply;
protected override LocalisableString GetCommitButtonText(bool isLoggedIn) =>
isLoggedIn ? CommonStrings.ButtonsReply : CommentsStrings.GuestButtonReply;
protected override LocalisableString GetTextBoxPlaceholder(bool isLoggedIn) =>
isLoggedIn ? CommentsStrings.PlaceholderReply : AuthorizationStrings.RequireLogin;
public ReplyCommentEditor(Comment parent)
{