fixed corner case on project edits

This commit is contained in:
Timo Bejan 2020-11-06 21:56:42 +02:00
parent a24e84b6fe
commit ce5eb27660
6 changed files with 34 additions and 7 deletions

View File

@ -42,6 +42,16 @@
translate="project-listing.add-edit-dialog.actions.save" translate="project-listing.add-edit-dialog.actions.save"
type="submit" type="submit"
></button> ></button>
<button
[disabled]="projectForm.invalid"
(click)="saveProjectAndAddMembers()"
*ngIf="!project?.projectId"
color="primary"
mat-flat-button
translate="project-listing.add-edit-dialog.actions.save-and-add-members"
type="button"
></button>
</div> </div>
</form> </form>

View File

@ -30,8 +30,10 @@ export class AddEditProjectDialogComponent implements OnInit {
async saveProject() { async saveProject() {
const project: Project = this._formToObject(); const project: Project = this._formToObject();
project.projectId = this.project?.projectId; project.projectId = this.project?.projectId;
await this._appStateService.addOrUpdateProject(project); const savedProject = await this._appStateService.addOrUpdateProject(project);
this.dialogRef.close(true); if (savedProject) {
this.dialogRef.close(true);
}
} }
private _formToObject(): Project { private _formToObject(): Project {
@ -41,4 +43,13 @@ export class AddEditProjectDialogComponent implements OnInit {
dueDate: this.projectForm.get('dueDate').value 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 });
}
}
} }

View File

@ -212,7 +212,7 @@ export class DialogService {
}); });
ref.afterClosed().subscribe((result) => { ref.afterClosed().subscribe((result) => {
if (result && cb) cb(); if (result && cb) cb(result);
}); });
return ref; return ref;

View File

@ -105,8 +105,11 @@ export class ProjectListingScreenComponent implements OnInit {
} }
public openAddProjectDialog(): void { public openAddProjectDialog(): void {
this._dialogService.openAddProjectDialog(() => { this._dialogService.openAddProjectDialog((addResponse) => {
this._calculateData(); this._calculateData();
if (addResponse.addMembers) {
this.openAssignProjectOwnerDialog(null, addResponse.project);
}
}); });
} }

View File

@ -406,15 +406,17 @@ export class AppStateService {
const updatedProject = await this._projectControllerService const updatedProject = await this._projectControllerService
.createProjectOrUpdateProject(project) .createProjectOrUpdateProject(project)
.toPromise(); .toPromise();
const foundProject = this._appState.projects.find( let foundProject = this._appState.projects.find(
(p) => p.project.projectId === updatedProject.projectId (p) => p.project.projectId === updatedProject.projectId
); );
if (foundProject) { if (foundProject) {
Object.assign(foundProject.project, updatedProject); Object.assign(foundProject.project, updatedProject);
} else { } else {
this._appState.projects.push(new ProjectWrapper(updatedProject, [])); foundProject = new ProjectWrapper(updatedProject, []);
this._appState.projects.push(foundProject);
} }
this._appState.projects = [...this._appState.projects]; this._appState.projects = [...this._appState.projects];
return foundProject.project;
} catch (error) { } catch (error) {
this._notificationService.showToastNotification( this._notificationService.showToastNotification(
this._translateService.instant('projects.add-edit-dialog.errors.save'), this._translateService.instant('projects.add-edit-dialog.errors.save'),

View File

@ -130,7 +130,8 @@
"due-date": "Due Date" "due-date": "Due Date"
}, },
"actions": { "actions": {
"save": "Save Project" "save": "Save Project",
"save-and-add-members": "Save Project & define Team"
} }
}, },
"header": "Projects", "header": "Projects",