using System; using System.Threading.Tasks; using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.WinUI; using Microsoft.Extensions.DependencyInjection; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Messaging.UI; namespace Wino.Mail.WinUI.Controls; public sealed partial class AccountCreationDialogControl : UserControl, IRecipient { private string copyClipboardURL; public event EventHandler CancelClicked; public AccountCreationDialogState State { get { return (AccountCreationDialogState)GetValue(StateProperty); } set { SetValue(StateProperty, value); } } public static readonly DependencyProperty StateProperty = DependencyProperty.Register(nameof(State), typeof(AccountCreationDialogState), typeof(AccountCreationDialogControl), new PropertyMetadata(AccountCreationDialogState.Idle, new PropertyChangedCallback(OnStateChanged))); public AccountCreationDialogControl() { InitializeComponent(); } private static void OnStateChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { if (obj is AccountCreationDialogControl dialog) { dialog.UpdateVisualStates(); } } private void UpdateVisualStates() => VisualStateManager.GoToState(this, State.ToString(), false); public async void Receive(CopyAuthURLRequested message) { copyClipboardURL = message.AuthURL; await Task.Delay(2000); await DispatcherQueue.EnqueueAsync(async () => { AuthHelpDialogButton.Visibility = Microsoft.UI.Xaml.Visibility.Collapsed; }); } private void ControlLoaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { WeakReferenceMessenger.Default.Register(this); } private void ControlUnloaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { WeakReferenceMessenger.Default.UnregisterAll(this); } private async void CopyClicked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) { if (string.IsNullOrEmpty(copyClipboardURL)) return; var clipboardService = WinoApplication.Current.Services.GetService(); await clipboardService.CopyClipboardAsync(copyClipboardURL); } private void CancelButtonClicked(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) => CancelClicked?.Invoke(this, null); }