From ce5eb276601ba3f66a108d64ea7855f5c0b1d28b Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 6 Nov 2020 21:56:42 +0200 Subject: [PATCH] fixed corner case on project edits --- .../add-edit-project-dialog.component.html | 10 ++++++++++ .../add-edit-project-dialog.component.ts | 15 +++++++++++++-- apps/red-ui/src/app/dialogs/dialog.service.ts | 2 +- .../project-listing-screen.component.ts | 5 ++++- apps/red-ui/src/app/state/app-state.service.ts | 6 ++++-- apps/red-ui/src/assets/i18n/en.json | 3 ++- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html index b7a0ece1f..7abd83643 100644 --- a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html +++ b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.html @@ -42,6 +42,16 @@ translate="project-listing.add-edit-dialog.actions.save" type="submit" > + + diff --git a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.ts b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.ts index 35c4f57eb..ebd0c9728 100644 --- a/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.ts +++ b/apps/red-ui/src/app/dialogs/add-edit-project-dialog/add-edit-project-dialog.component.ts @@ -30,8 +30,10 @@ export class AddEditProjectDialogComponent implements OnInit { async saveProject() { const project: Project = this._formToObject(); project.projectId = this.project?.projectId; - await this._appStateService.addOrUpdateProject(project); - this.dialogRef.close(true); + const savedProject = await this._appStateService.addOrUpdateProject(project); + if (savedProject) { + this.dialogRef.close(true); + } } private _formToObject(): Project { @@ -41,4 +43,13 @@ export class AddEditProjectDialogComponent implements OnInit { dueDate: this.projectForm.get('dueDate').value }; } + + async saveProjectAndAddMembers() { + const project: Project = this._formToObject(); + project.projectId = this.project?.projectId; + const savedProject = await this._appStateService.addOrUpdateProject(project); + if (savedProject) { + this.dialogRef.close({ addMembers: true, project: savedProject }); + } + } } diff --git a/apps/red-ui/src/app/dialogs/dialog.service.ts b/apps/red-ui/src/app/dialogs/dialog.service.ts index 95af06464..4fcb1aed4 100644 --- a/apps/red-ui/src/app/dialogs/dialog.service.ts +++ b/apps/red-ui/src/app/dialogs/dialog.service.ts @@ -212,7 +212,7 @@ export class DialogService { }); ref.afterClosed().subscribe((result) => { - if (result && cb) cb(); + if (result && cb) cb(result); }); return ref; diff --git a/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts b/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts index cef36eb57..2dd30e430 100644 --- a/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts +++ b/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts @@ -105,8 +105,11 @@ export class ProjectListingScreenComponent implements OnInit { } public openAddProjectDialog(): void { - this._dialogService.openAddProjectDialog(() => { + this._dialogService.openAddProjectDialog((addResponse) => { this._calculateData(); + if (addResponse.addMembers) { + this.openAssignProjectOwnerDialog(null, addResponse.project); + } }); } diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index 216ba8e8d..6da4094d8 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -406,15 +406,17 @@ export class AppStateService { const updatedProject = await this._projectControllerService .createProjectOrUpdateProject(project) .toPromise(); - const foundProject = this._appState.projects.find( + let foundProject = this._appState.projects.find( (p) => p.project.projectId === updatedProject.projectId ); if (foundProject) { Object.assign(foundProject.project, updatedProject); } else { - this._appState.projects.push(new ProjectWrapper(updatedProject, [])); + foundProject = new ProjectWrapper(updatedProject, []); + this._appState.projects.push(foundProject); } this._appState.projects = [...this._appState.projects]; + return foundProject.project; } catch (error) { this._notificationService.showToastNotification( this._translateService.instant('projects.add-edit-dialog.errors.save'), diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 25280d048..880603b6f 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -130,7 +130,8 @@ "due-date": "Due Date" }, "actions": { - "save": "Save Project" + "save": "Save Project", + "save-and-add-members": "Save Project & define Team" } }, "header": "Projects",