Skip to content

Commit

Permalink
feat(jira): add cfg stepper as its own modal
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesjo committed Dec 6, 2018
1 parent 0ef1596 commit 58ceab8
Show file tree
Hide file tree
Showing 11 changed files with 153 additions and 66 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<h2 mat-dialog-title>
Setup Jira for Project
</h2>
<mat-dialog-content>
<jira-cfg-stepper (onSaveCfg)="saveJiraCfg($event)"
[cfg]="jiraCfg"></jira-cfg-stepper>
</mat-dialog-content>
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { DialogJiraInitialSetupComponent } from './dialog-jira-initial-setup.component';

describe('DialogJiraInitialSetupComponent', () => {
let component: DialogJiraInitialSetupComponent;
let fixture: ComponentFixture<DialogJiraInitialSetupComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DialogJiraInitialSetupComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(DialogJiraInitialSetupComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { JiraCfg } from '../jira';

@Component({
selector: 'dialog-jira-initial-setup',
templateUrl: './dialog-jira-initial-setup.component.html',
styleUrls: ['./dialog-jira-initial-setup.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class DialogJiraInitialSetupComponent implements OnInit {
jiraCfg: JiraCfg;

constructor(
@Inject(MAT_DIALOG_DATA) public data: any,
private _matDialogRef: MatDialogRef<DialogJiraInitialSetupComponent>,
) {
this.jiraCfg = this.data.jiraCfg;
}

ngOnInit() {
}

saveJiraCfg($event) {
this._matDialogRef.close($event);
}
}
4 changes: 3 additions & 1 deletion src/app/issue/jira/jira.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { JiraCfgStepperComponent } from './jira-cfg-stepper/jira-cfg-stepper.com
import { UiModule } from '../../ui/ui.module';
import { CoreModule } from '../../core/core.module';
import { NgxElectronModule } from 'ngx-electron';
import { DialogJiraInitialSetupComponent } from './dialog-jira-initial-setup/dialog-jira-initial-setup.component';

@NgModule({
imports: [
Expand All @@ -12,7 +13,8 @@ import { NgxElectronModule } from 'ngx-electron';
UiModule,
NgxElectronModule,
],
declarations: [JiraCfgStepperComponent],
declarations: [JiraCfgStepperComponent, DialogJiraInitialSetupComponent],
entryComponents: [DialogJiraInitialSetupComponent],
exports: [JiraCfgStepperComponent],
})
export class JiraModule {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,30 @@ <h2 mat-dialog-title>
[fields]="formCfg"
[options]="formOptions"
[form]="form">
</formly-form>

<mat-accordion>
<mat-expansion-panel [expanded]="openPanelId==='JIRA'"
(opened)="openPanelId='JIRA'">
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon *ngIf="!projectData?.issueIntegrationCfgs?.JIRA">explore</mat-icon>
<mat-icon *ngIf="projectData?.issueIntegrationCfgs?.JIRA">checkmark</mat-icon>
Jira
</mat-panel-title>
<mat-panel-description>
Set up jira issue integration
</mat-panel-description>
</mat-expansion-panel-header>

<!--Todo show stepper for first setup, show config section when editing afterwards -->
<jira-cfg-stepper (onSaveCfg)="saveJiraCfg($event)"
[cfg]="projectData?.issueIntegrationCfgs?.JIRA"></jira-cfg-stepper>
</mat-expansion-panel>

<mat-expansion-panel [expanded]="openPanelId==='GIT'"
(opened)="openPanelId='GIT'">
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon *ngIf="!projectData?.issueIntegrationCfgs?.GIT">card_giftcard</mat-icon>
<mat-icon *ngIf="projectData?.issueIntegrationCfgs?.GIT">checkmark</mat-icon>
GitHub
</mat-panel-title>
<mat-panel-description>
Set up github issue integration
</mat-panel-description>
</mat-expansion-panel-header>
</mat-expansion-panel>
</mat-accordion>
<br>
</formly-form>
<div class="issue-provider-cfg">
<h3>Issue Provider Configs (optional)</h3>
<div class="item">
<button mat-raised-button=""
color="primary"
(click)="openJiraCfg()"
type="button">
<mat-icon *ngIf="!jiraCfg">explore</mat-icon>
<mat-icon *ngIf="jiraCfg">checkmark</mat-icon>
Setup Jira Integration
</button>
</div>
<!--<div class="item">-->
<!--<button mat-raised-button="" color=primary-->
<!--type="button">-->
<!--<mat-icon *ngIf="!projectData?.issueIntegrationCfgs?.GIT">card_giftcard</mat-icon>-->
<!--<mat-icon *ngIf="projectData?.issueIntegrationCfgs?.GIT">checkmark</mat-icon>-->
<!--Setup Github Issue Integration-->
<!--</button>-->
<!--</div>-->
</div>
</mat-dialog-content>


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@import '../../../../variables';

.issue-provider-cfg {
.item {
margin-bottom: $s;
display: flex;
flex-direction: column;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, Inject, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material';
import { Project } from '../../project.model';
import { FormGroup } from '@angular/forms';
import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';
Expand All @@ -8,17 +8,17 @@ import { DEFAULT_PROJECT } from '../../project.const';
import { JiraCfg } from '../../../issue/jira/jira';
import { BASIC_PROJECT_CONFIG_FORM_CONFIG } from '../../project-form-cfg.const';
import { IssueIntegrationCfgs } from '../../../issue/issue';
import { DialogJiraInitialSetupComponent } from '../../../issue/jira/dialog-jira-initial-setup/dialog-jira-initial-setup.component';
import { Subscription } from 'rxjs';

@Component({
selector: 'dialog-create-project',
templateUrl: './dialog-create-project.component.html',
styleUrls: ['./dialog-create-project.component.scss'],
})
export class DialogCreateProjectComponent implements OnInit {
public projectData: Project | Partial<Project> = DEFAULT_PROJECT;
public jiraCfg: JiraCfg;

public openPanelId: string;
export class DialogCreateProjectComponent implements OnInit, OnDestroy {
projectData: Project | Partial<Project> = DEFAULT_PROJECT;
jiraCfg: JiraCfg;

form = new FormGroup({});
formOptions: FormlyFormOptions = {
Expand All @@ -28,19 +28,33 @@ export class DialogCreateProjectComponent implements OnInit {
};
formCfg: FormlyFieldConfig[] = BASIC_PROJECT_CONFIG_FORM_CONFIG.items;

private _subs = new Subscription();

constructor(
@Inject(MAT_DIALOG_DATA) private _project: Project,
private _projectService: ProjectService,
private _matDialog: MatDialog,
private _matDialogRef: MatDialogRef<DialogCreateProjectComponent>,
private _cd: ChangeDetectorRef,
) {
}

ngOnInit() {
if (this._project) {
this.projectData = Object.assign({}, this._project);

if (this.projectData.issueIntegrationCfgs) {
if (this.projectData.issueIntegrationCfgs.JIRA) {
this.jiraCfg = this.projectData.issueIntegrationCfgs.JIRA;
}
}
}
}

ngOnDestroy(): void {
this._subs.unsubscribe();
}

submit() {
const issueIntegrationCfgs: IssueIntegrationCfgs = Object.assign(this.projectData.issueIntegrationCfgs, {
JIRA: this.jiraCfg,
Expand All @@ -60,16 +74,33 @@ export class DialogCreateProjectComponent implements OnInit {
this._matDialogRef.close();
}

saveJiraCfg(jiraCfg: JiraCfg) {
cancelEdit() {
this._matDialogRef.close();
}

openJiraCfg() {
this._subs.add(this._matDialog.open(DialogJiraInitialSetupComponent, {
restoreFocus: true,
data: {
jiraCfg: this.projectData.issueIntegrationCfgs.JIRA,
}
}).afterClosed().subscribe((jiraCfg: JiraCfg) => {
console.log('afterClosed', jiraCfg);

if (jiraCfg) {
this._saveJiraCfg(jiraCfg);
}
}));
}

private _saveJiraCfg(jiraCfg: JiraCfg) {
this.jiraCfg = jiraCfg;

console.log(this.projectData.id);

// if we're editing save right away
if (this.projectData.id) {
this._projectService.updateIssueProviderConfig(this.projectData.id, 'JIRA', this.jiraCfg);
}
this.openPanelId = undefined;
}

cancelEdit() {
this._matDialogRef.close();
}
}
8 changes: 0 additions & 8 deletions src/app/project/store/project.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export enum ProjectActionTypes {
UpdateProjectIssueProviderCfg = '[Project] Update Project Issue Provider Cfg',
DeleteProject = '[Project] Delete Project',
DeleteProjects = '[Project] Delete Projects',
SaveProjectIssueConfig = '[Project] Save Issue Config for Project',
}

export class LoadProjectState implements Action {
Expand Down Expand Up @@ -90,12 +89,6 @@ export class DeleteProjects implements Action {
}
}

export class SaveProjectIssueConfig implements Action {
readonly type = ProjectActionTypes.SaveProjectIssueConfig;

constructor(public payload: { projectId: string, issueProviderKey: IssueProviderKey, providerCfg: IssueIntegrationCfg }) {
}
}

export type ProjectActions
= LoadProjects
Expand All @@ -108,6 +101,5 @@ export type ProjectActions
| UpdateProjectIssueProviderCfg
| DeleteProject
| DeleteProjects
| SaveProjectIssueConfig
;

2 changes: 1 addition & 1 deletion src/app/project/store/project.effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export class ProjectEffects {
ProjectActionTypes.SetCurrentProject,
ProjectActionTypes.UpdateProject,
ProjectActionTypes.UpdateProjectAdvancedCfg,
ProjectActionTypes.SaveProjectIssueConfig,
ProjectActionTypes.UpdateProjectIssueProviderCfg,
),
withLatestFrom(
this._store$.pipe(select(selectProjectFeatureState))
Expand Down
24 changes: 15 additions & 9 deletions src/app/project/store/project.reducer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createEntityAdapter, EntityAdapter, EntityState, Update } from '@ngrx/entity';
import { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';
import { Project } from '../project.model';
import { ProjectActions, ProjectActionTypes } from './project.actions';
import { createFeatureSelector, createSelector } from '@ngrx/store';
Expand Down Expand Up @@ -135,16 +135,22 @@ export function projectReducer(
}, state);
}

case ProjectActionTypes.SaveProjectIssueConfig: {
const currentProject = state.entities[payload.projectId];
const issueProviderCfg = Object.assign({}, currentProject.issueIntegrationCfgs);
const update = {
id: payload.projectId,
case ProjectActionTypes.UpdateProjectIssueProviderCfg: {
const {projectId, providerCfg, issueProviderKey} = action.payload;
const currentProject = state.entities[projectId];

return projectAdapter.updateOne({
id: projectId,
changes: {
issueProviderCfg: issueProviderCfg
issueIntegrationCfgs: {
...currentProject.issueIntegrationCfgs,
[issueProviderKey]: {
...currentProject.issueIntegrationCfgs[issueProviderKey],
...providerCfg,
}
}
}
} as Update<Project>;
return projectAdapter.updateOne(update, state);
}, state);
}

default: {
Expand Down

0 comments on commit 58ceab8

Please sign in to comment.