public CoinJoinHistoryItemViewModel( int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger, bool isSingleCoinJoinTransaction) : base(orderIndex, transactionSummary) { IsConfirmed = transactionSummary.IsConfirmed(); Date = transactionSummary.DateTime.ToLocalTime(); Balance = balance; IsCoinJoin = true; CoinJoinTransaction = transactionSummary; IsSingleCoinJoinTransaction = isSingleCoinJoinTransaction; var amount = transactionSummary.Amount; if (amount < Money.Zero) { OutgoingAmount = amount * -1; } else { IncomingAmount = amount; } ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To( new CoinJoinDetailsViewModel(this, updateTrigger))); DateString = $"{Date.ToLocalTime():MM/dd/yyyy HH:mm}"; }
public HistoryItemViewModel(int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger) { TransactionSummary = transactionSummary; Date = transactionSummary.DateTime.ToLocalTime(); IsCoinJoin = transactionSummary.IsLikelyCoinJoinOutput; OrderIndex = orderIndex; Balance = balance; var wallet = walletViewModel.Wallet; var confirmations = transactionSummary.Height.Type == HeightType.Chain ? (int)wallet.BitcoinStore.SmartHeaderChain.TipHeight - transactionSummary.Height.Value + 1 : 0; IsConfirmed = confirmations > 0; var amount = transactionSummary.Amount; if (amount < Money.Zero) { OutgoingAmount = amount * -1; } else { IncomingAmount = amount; } ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new TransactionDetailsViewModel(transactionSummary, wallet, updateTrigger))); }
public TransactionHistoryItemViewModel( int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger) : base(orderIndex, transactionSummary) { Label = transactionSummary.Label.Take(1).FirstOrDefault(); FilteredLabel = transactionSummary.Label.Skip(1).ToList(); IsConfirmed = transactionSummary.IsConfirmed(); Date = transactionSummary.DateTime.ToLocalTime(); Balance = balance; var amount = transactionSummary.Amount; if (amount < Money.Zero) { OutgoingAmount = amount * -1; } else { IncomingAmount = amount; } ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To( new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger))); DateString = $"{Date.ToLocalTime():MM/dd/yy HH:mm}"; }
public CoinJoinsHistoryItemViewModel(int orderIndex, TransactionSummary firstItem) : base(orderIndex, firstItem) { CoinJoinTransactions = new List <TransactionSummary>(); Label = "Coinjoins"; FilteredLabel = new List <string>(); IsCoinJoin = true; ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new CoinJoinDetailsViewModel(this))); Add(firstItem); }
public void WhenNavigatedToObservableFiresWhenViewModelAddedToNavigationStack() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); vm.WhenNavigatedToObservable().Subscribe(_ => { count++; }); screen.Router.Navigate.Execute(vm); Assert.Equal(1, count); }
public void WhenNavigatingFromObservableFiresWhenViewModelLosesFocus() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); var vm2 = new RoutableViewModel(screen); vm.WhenNavigatingFromObservable().Subscribe(_ => { count++; }); screen.Router.Navigate.Execute(vm); screen.Router.Navigate.Execute(vm2); Assert.Equal(1, count); }
public void WhenNavigatingFromObservableCompletesWhenViewModelIsRemovedFromNavigationStack() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); vm.WhenNavigatingFromObservable().Subscribe( _ => {}, () => { count++; }); screen.Router.Navigate.Execute(vm); screen.Router.NavigateBack.Execute(); Assert.Equal(1, count); }
public void WhenNavigatingFromObservableCompletesWhenNavigationStackIsReset() { var count = 0; var screen = new TestScreen(); var vm1 = new RoutableViewModel(screen); var vm2 = new RoutableViewModel(screen); vm1.WhenNavigatingFromObservable().Subscribe( _ => { }, () => { count++; }); screen.Router.Navigate.Execute(vm1); screen.Router.NavigateAndReset.Execute(vm2); Assert.Equal(1, count); }
public void WhenNavigatedToCallsOnNavigatedToWhenViewModelIsFirstAdded() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); vm.WhenNavigatedTo(() => { count++; return(Disposable.Empty); }); screen.Router.Navigate.Execute(vm); Assert.Equal(1, count); }
public CoinJoinsHistoryItemViewModel( int orderIndex, TransactionSummary firstItem, WalletViewModel walletViewModel, IObservable <Unit> updateTrigger) : base(orderIndex, firstItem) { _walletViewModel = walletViewModel; _updateTrigger = updateTrigger; CoinJoinTransactions = new List <TransactionSummary>(); Label = "Coinjoins"; IsCoinJoin = true; ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new CoinJoinDetailsViewModel(this))); Add(firstItem); }
public TermsAndConditionsViewModel(LegalDocuments legalDocuments, RoutableViewModel next) { Title = "Welcome to Wasabi Wallet"; ViewTermsCommand = ReactiveCommand.CreateFromTask( async() => { var content = await File.ReadAllTextAsync(legalDocuments.FilePath); var legalDocs = new LegalDocumentsViewModel(content); Navigate().To(legalDocs); }); NextCommand = ReactiveCommand.Create( () => Navigate().BackTo(next), this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler)); }
public void WhenNavigatedToCallsDisposeWhenViewModelLosesFocus() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); var vm2 = new RoutableViewModel(screen); vm.WhenNavigatedTo(() => { return(Disposable.Create(() => count++)); }); screen.Router.Navigate.Execute(vm); Assert.Equal(0, count); screen.Router.Navigate.Execute(vm2); Assert.Equal(1, count); }
public TermsAndConditionsViewModel(LegalChecker legalChecker, RoutableViewModel next) { ViewTermsCommand = ReactiveCommand.Create( () => { if (legalChecker.TryGetNewLegalDocs(out _)) { var legalDocs = new LegalDocumentsViewModel(legalChecker); Navigate().To(legalDocs); } }); NextCommand = ReactiveCommand.CreateFromTask( async() => { await legalChecker.AgreeAsync(); Navigate().To(next, NavigationMode.Clear); }, this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler)); }
public TransactionHistoryItemViewModel( int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger) : base(orderIndex, transactionSummary) { Label = transactionSummary.Label; IsConfirmed = transactionSummary.IsConfirmed(); Date = transactionSummary.DateTime.ToLocalTime(); Balance = balance; var amount = transactionSummary.Amount; if (amount < Money.Zero) { OutgoingAmount = amount * -1; } else { IncomingAmount = amount; } ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To( new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger))); var speedUpTransactionCommandCanExecute = this.WhenAnyValue(x => x.IsConfirmed) .Select(x => !x) .ObserveOn(RxApp.MainThreadScheduler); SpeedUpTransactionCommand = ReactiveCommand.Create( () => { // TODO: Show speed up transaction dialog. }, speedUpTransactionCommandCanExecute); DateString = $"{Date.ToLocalTime():MM/dd/yyyy HH:mm}"; }
public void WhenNavigatedToCallsOnNavigatedToWhenViewModelReturnsToTopOfStack() { var count = 0; var screen = new TestScreen(); var vm = new RoutableViewModel(screen); var vm2 = new RoutableViewModel(screen); vm.WhenNavigatedTo(() => { count++; return Disposable.Empty; }); screen.Router.Navigate.Execute(vm); screen.Router.Navigate.Execute(vm2); screen.Router.Navigate.Execute(vm); Assert.Equal(2, count); }
public void WhenNavigatedToCallsDisposeWhenNavigationStackIsReset() { var count = 0; var screen = new TestScreen(); var vm1 = new RoutableViewModel(screen); var vm2 = new RoutableViewModel(screen); vm1.WhenNavigatedTo(() => { return(Disposable.Create(() => count++)); }); screen.Router.Navigate.Execute(vm1); Assert.Equal(0, count); screen.Router.NavigateAndReset.Execute(vm2); Assert.Equal(1, count); }
public HistoryItemViewModel(int orderIndex, TransactionSummary transactionSummary, WalletViewModel walletViewModel, Money balance, IObservable <Unit> updateTrigger) { TransactionSummary = transactionSummary; Date = transactionSummary.DateTime.ToLocalTime(); IsCoinJoin = transactionSummary.IsLikelyCoinJoinOutput; OrderIndex = orderIndex; Balance = balance; var confirmations = transactionSummary.Height.Type == HeightType.Chain ? (int)Services.BitcoinStore.SmartHeaderChain.TipHeight - transactionSummary.Height.Value + 1 : 0; IsConfirmed = confirmations > 0; var amount = transactionSummary.Amount; if (amount < Money.Zero) { OutgoingAmount = amount * -1; } else { IncomingAmount = amount; } Label = transactionSummary.Label.Take(1).ToList(); FilteredLabel = transactionSummary.Label.Skip(1).ToList(); ShowDetailsCommand = ReactiveCommand.Create(() => RoutableViewModel.Navigate(NavigationTarget.DialogScreen).To(new TransactionDetailsViewModel(transactionSummary, walletViewModel.Wallet, updateTrigger))); this.WhenAnyValue(x => x.IsFlashing) .Where(x => x) .Subscribe(async _ => { await Task.Delay(1260); IsFlashing = false; }); }
public InstanceGenerator(RoutableViewModel generate) { Generate = generate; }
public TermsAndConditionsViewModel(NavigationStateViewModel navigationState, LegalDocuments legalDocuments, RoutableViewModel next) : base(navigationState) { ViewTermsCommand = ReactiveCommand.CreateFromTask( async() => { var content = await File.ReadAllTextAsync(legalDocuments.FilePath); var legalDocs = new LegalDocumentsViewModel( navigationState, content); legalDocs.NavigateToSelf(CurrentTarget); }); NextCommand = ReactiveCommand.Create( () => { NavigateTo(next); }, this.WhenAnyValue(x => x.IsAgreed).ObserveOn(RxApp.MainThreadScheduler)); }