private IObservable <IThreadSafeClient> pickClient() { return(currentWorkspace.FirstAsync() .SelectMany(currentWorkspace => currentClient.FirstAsync() .SelectMany(currentClient => clientFromViewModel(currentClient, currentWorkspace)))); IObservable <IThreadSafeClient> clientFromViewModel(IThreadSafeClient currentClient, IThreadSafeWorkspace currentWorkspace) => Navigate <SelectClientViewModel, SelectClientParameters, long?>( SelectClientParameters.WithIds(currentWorkspace.Id, currentClient?.Id)) .ToObservable() .SelectMany(clientFromId); IObservable <IThreadSafeClient> clientFromId(long?selectedClientId) { if (selectedClientId == null) { return(Observable.Empty <IThreadSafeClient>()); } if (selectedClientId.Value == 0) { return(Observable.Return <IThreadSafeClient>(null)); } return(interactorFactory.GetClientById(selectedClientId.Value).Execute()); } }
private async Task pickClient() { var parameter = SelectClientParameters.WithIds(workspaceId, clientId); var selectedClientId = await navigationService.Navigate <SelectClientViewModel, SelectClientParameters, long?>(parameter); if (selectedClientId == null) { return; } if (selectedClientId.Value == 0) { clientId = null; ClientName = ""; updateIsNameAlreadyTaken(); return; } var client = await interactorFactory.GetClientById(selectedClientId.Value).Execute(); clientId = client.Id; ClientName = client.Name; updateIsNameAlreadyTaken(); }