public override async Task Initialize() { await base.Initialize(); startTimeEntryStopwatch = stopwatchProvider.Get(MeasuredOperation.OpenStartView); stopwatchProvider.Remove(MeasuredOperation.OpenStartView); defaultWorkspace = await interactorFactory.GetDefaultWorkspace() .TrackException <InvalidOperationException, IThreadSafeWorkspace>("StartTimeEntryViewModel.Initialize") .Execute(); canCreateProjectsInWorkspace = await interactorFactory.GetAllWorkspaces().Execute().Select(allWorkspaces => allWorkspaces.Any(ws => ws.IsEligibleForProjectCreation())); if (initialParameters != null) { var spans = new List <ISpan>(); spans.Add(new TextSpan(initialParameters.EntryDescription)); if (initialParameters.ProjectId != null) { try { var project = await interactorFactory.GetProjectById((long)initialParameters.ProjectId).Execute(); spans.Add(new ProjectSpan(project)); } catch { // Intentionally left blank } } if (initialParameters.TagIds != null) { try { var tags = initialParameters.TagIds.ToObservable() .SelectMany <long, IThreadSafeTag>(tagId => interactorFactory.GetTagById(tagId).Execute()) .ToEnumerable(); spans.AddRange(tags.Select(tag => new TagSpan(tag))); } catch { // Intentionally left blank } } textFieldInfo.Accept(textFieldInfo.Value.ReplaceSpans(spans.ToImmutableList())); } else { textFieldInfo.Accept(Autocomplete.TextFieldInfo.Empty(parameter?.WorkspaceId ?? defaultWorkspace.Id)); } hasAnyTags = (await DataSource.Tags.GetAll()).Any(); hasAnyProjects = (await DataSource.Projects.GetAll()).Any(); }
private async Task selectProject() { analyticsService.EditEntrySelectProject.Track(); analyticsService.EditViewTapped.Track(EditViewTapSource.Project); OnboardingStorage.SelectsProject(); var chosenProject = await Navigate <SelectProjectViewModel, SelectProjectParameter, SelectProjectParameter>( new SelectProjectParameter(projectId, taskId, workspaceId)); if (chosenProject.WorkspaceId == workspaceId && chosenProject.ProjectId == projectId && chosenProject.TaskId == taskId) { return; } projectId = chosenProject.ProjectId; taskId = chosenProject.TaskId; if (projectId == null) { projectClientTaskSubject.OnNext(ProjectClientTaskInfo.Empty); clearTagsIfNeeded(workspaceId, chosenProject.WorkspaceId); workspaceIdSubject.OnNext(chosenProject.WorkspaceId); var workspace = await interactorFactory.GetWorkspaceById(chosenProject.WorkspaceId).Execute(); isInaccessibleSubject.OnNext(workspace.IsInaccessible); return; } var project = await interactorFactory.GetProjectById(projectId.Value).Execute(); clearTagsIfNeeded(workspaceId, project.WorkspaceId); var task = chosenProject.TaskId.HasValue ? await interactorFactory.GetTaskById(taskId.Value).Execute() : null; var taskName = task?.Name ?? string.Empty; projectClientTaskSubject.OnNext(new ProjectClientTaskInfo( project.DisplayName(), project.DisplayColor(), project.Client?.Name, taskName, project.IsPlaceholder(), task?.IsPlaceholder() ?? false)); workspaceIdSubject.OnNext(chosenProject.WorkspaceId); isInaccessibleSubject.OnNext(project.IsInaccessible); }
private async Task selectProject() { if (!(Workspace.Value?.Id is long workspaceId)) { return; } var chosenProjectParams = await Navigate <SelectProjectViewModel, SelectProjectParameter, SelectProjectParameter>( new SelectProjectParameter(Project.Value?.Id, TaskId.Value, workspaceId, false)); if (chosenProjectParams.WorkspaceId == workspaceId && chosenProjectParams.ProjectId == Project.Value?.Id && chosenProjectParams.TaskId == TaskId.Value) { return; } TaskId.Accept(chosenProjectParams.TaskId); var chosenWorkspace = await interactorFactory.GetWorkspaceById(chosenProjectParams.WorkspaceId).Execute(); if (!(chosenProjectParams.ProjectId is long chosenProjectProjectId)) { projectClientTaskInfo.OnNext(EditTimeEntryViewModel.ProjectClientTaskInfo.Empty); clearTagsIfNeeded(workspaceId, chosenProjectParams.WorkspaceId); Workspace.Accept(chosenWorkspace); Project.Accept(null); return; } var project = await interactorFactory.GetProjectById(chosenProjectProjectId).Execute(); clearTagsIfNeeded(workspaceId, project.WorkspaceId); var task = chosenProjectParams.TaskId.HasValue ? await interactorFactory.GetTaskById(chosenProjectParams.TaskId.Value).Execute() : null; var taskName = task?.Name ?? string.Empty; projectClientTaskInfo.OnNext(new EditTimeEntryViewModel.ProjectClientTaskInfo( project.DisplayName(), project.DisplayColor(), project.Client?.Name, taskName, project.IsPlaceholder(), task?.IsPlaceholder() ?? false)); Workspace.Accept(chosenWorkspace); Project.Accept(project); }
private async Task createProject(string name) { var createdProjectId = await navigationService.Navigate <EditProjectViewModel, string, long?>(name); if (createdProjectId == null) { return; } var project = await interactorFactory.GetProjectById(createdProjectId.Value).Execute(); var parameter = SelectProjectParameter.WithIds(project.Id, null, project.WorkspaceId); await navigationService.Close(this, parameter); }
private async Task createProject(string name) { var createdProjectId = await Navigate <EditProjectViewModel, string, long?>(name); if (createdProjectId == null) { return; } var project = await interactorFactory.GetProjectById(createdProjectId.Value).Execute(); var parameter = new SelectProjectParameter(project.Id, null, project.WorkspaceId); Close(parameter); }
public IObservable <bool> Execute() => interactorFactory.GetProjectById(projectId) .Execute() .Select(project => project.Billable ?? false);
public IObservable <IThreadSafeProject> GetProject(long projectId) => interactorFactory.GetProjectById(projectId).Execute() .ObserveOn(schedulerProvider.MainScheduler);
public override async Task Initialize(StartTimeEntryParameters parameter) { await base.Initialize(parameter); this.parameter = parameter; startTime = parameter.StartTime; duration = parameter.Duration; PlaceholderText = parameter.PlaceholderText; if (!string.IsNullOrEmpty(parameter.EntryDescription)) { initialParameters = parameter; } displayedTime.Accept(duration ?? TimeSpan.Zero); timeService.CurrentDateTimeObservable .Where(_ => isRunning) .Subscribe(currentTime => displayedTime.Accept(currentTime - startTime)) .DisposedBy(disposeBag); defaultWorkspace = await interactorFactory.GetDefaultWorkspace() .TrackException <InvalidOperationException, IThreadSafeWorkspace>("StartTimeEntryViewModel.Initialize") .Execute(); canCreateProjectsInWorkspace = await interactorFactory.GetAllWorkspaces().Execute().Select(allWorkspaces => allWorkspaces.Any(ws => ws.IsEligibleForProjectCreation())); if (initialParameters != null) { var spans = new List <ISpan>(); spans.Add(new TextSpan(initialParameters.EntryDescription)); if (initialParameters.ProjectId != null) { try { var project = await interactorFactory.GetProjectById((long)initialParameters.ProjectId).Execute(); spans.Add(new ProjectSpan(project)); } catch { // Intentionally left blank } } if (initialParameters.TagIds != null) { try { var tags = initialParameters.TagIds.ToObservable() .SelectMany <long, IThreadSafeTag>(tagId => interactorFactory.GetTagById(tagId).Execute()) .ToEnumerable(); spans.AddRange(tags.Select(tag => new TagSpan(tag))); } catch { // Intentionally left blank } } textFieldInfo.Accept(textFieldInfo.Value.ReplaceSpans(spans.ToImmutableList())); } else { textFieldInfo.Accept(Autocomplete.TextFieldInfo.Empty(parameter?.WorkspaceId ?? defaultWorkspace.Id)); } hasAnyTags = (await DataSource.Tags.GetAll()).Any(); hasAnyProjects = (await DataSource.Projects.GetAll()).Any(); }