From 1d5c792ae17586416e7d92f3c4034d565f69e5d3 Mon Sep 17 00:00:00 2001 From: IvashchenkoCW Date: Tue, 14 Jul 2020 12:55:04 +0300 Subject: [PATCH 1/3] deploy dialog component --- src/composer/src/app/app.module.ts | 4 +- .../deploy-dialog.component.html | 133 ++++++++++++++++++ .../deploy-dialog.component.scss | 0 .../deploy-dialog.component.spec.ts | 25 ++++ .../deploy-dialog/deploy-dialog.component.ts | 87 ++++++++++++ src/composer/src/app/core/store/models.ts | 3 +- 6 files changed, 250 insertions(+), 2 deletions(-) create mode 100644 src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html create mode 100644 src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.scss create mode 100644 src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.spec.ts create mode 100644 src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.ts diff --git a/src/composer/src/app/app.module.ts b/src/composer/src/app/app.module.ts index 0083051..f570e33 100644 --- a/src/composer/src/app/app.module.ts +++ b/src/composer/src/app/app.module.ts @@ -68,6 +68,7 @@ import { GlobalDialogComponent } from './core/components/dialogs/global-dialog/g import { CodemirrorModule } from '@ctrl/ngx-codemirror'; import { RecipeComponent, DialogPublishRecipe, DialogRecipeDetails } from './core/components/recipe/recipe.component'; import { BuildDialogComponent } from './core/components/dialogs/build-dialog/build-dialog.component'; +import { DeployDialogComponent } from './core/components/dialogs/deploy-dialog/deploy-dialog.component'; export function getHighlightLanguages() { return { @@ -105,7 +106,8 @@ export function getHighlightLanguages() { RecipeComponent, DialogPublishRecipe, DialogRecipeDetails, - BuildDialogComponent + BuildDialogComponent, + DeployDialogComponent ], imports: [ BrowserModule, diff --git a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html new file mode 100644 index 0000000..5ad3e9d --- /dev/null +++ b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html @@ -0,0 +1,133 @@ +

Deploy Config

+ + + +
+ + Mode + + + + + Replicas + + + +
+

Update config

+ + Parallelism + + + + + Delay + + + + + Order + + +
+ +
+ + + Rollback config + + + +
+

Restart policy

+ + Condition + + + + + Delay + + + + + Parallelism + + + + + Window + + +
+ +
+ + + Endpoint mode + + + + + Max replicas per node + + + +
+

Limits

+ + Cpus + + + + + Memory + + +
+ +
+

Limits

+ + Cpus + + + + + Memory + + +
+
+
+ +
+ + Command + + +

Preferences

+ +
+
+ + +

Labels

+ +
+
+
+ + + + + + diff --git a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.scss b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.spec.ts b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.spec.ts new file mode 100644 index 0000000..320adbe --- /dev/null +++ b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DeployDialogComponent } from './deploy-dialog.component'; + +describe('DeployDialogComponent', () => { + let component: DeployDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DeployDialogComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DeployDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.ts b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.ts new file mode 100644 index 0000000..274d4b7 --- /dev/null +++ b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.ts @@ -0,0 +1,87 @@ +import { Component, OnInit, ViewChild, Inject } from '@angular/core' +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog' +import { FormControl, Validators, FormGroup, FormBuilder, AbstractControl } from '@angular/forms' +import { KeyValueComponent } from '../../common/key-value/key-value/key-value.component' +import { Service, ServiceDeploy } from '../../../store/models' +import { CheckCircleComponent } from '../../widgets/check-circle/check-circle.component' +import { Store } from '@ngrx/store' +import * as ProjectActions from './../../../store/project.actions' +import { EventEmitterService } from 'src/app/core/services/event-emitter.service' + +@Component({ + selector: 'app-deploy-dialog', + templateUrl: './deploy-dialog.component.html', + styleUrls: ['./deploy-dialog.component.scss'] +}) +export class DeployDialogComponent implements OnInit { + @ViewChild(CheckCircleComponent) checkCircle: CheckCircleComponent + @ViewChild('preferences') preferences: KeyValueComponent + @ViewChild('labels') labels: KeyValueComponent + + formGeneral: FormGroup + currentPreferences: [] = [] + currentLabels: [] = [] + constructor(public dialogRef: MatDialogRef, private formBuilder: FormBuilder, @Inject(MAT_DIALOG_DATA) public data: Service, private store: Store, private eventEmitterService: EventEmitterService,) { } + + ngOnInit(): void { + this.formGeneral = this.formBuilder.group({ + mode: new FormControl(''), + replicas: new FormControl(''), + update_config: this.formBuilder.group({ + parallelism: new FormControl('', [Validators.pattern('^[0-9]+$')]), + delay: new FormControl(''), + order: new FormControl('') + }), + rollback_config: new FormControl(''), + restart_policy: this.formBuilder.group({ + condition: new FormControl(''), + delay: new FormControl(''), + parallelism: new FormControl('', [Validators.pattern('^[0-9]+$')]), + window: new FormControl(''), + }), + endpoint_mode: new FormControl(''), + placement: new FormControl(''), + max_replicas_per_node: new FormControl('', [Validators.pattern('^[0-9]+$')]), + resources: this.formBuilder.group({ + limits: this.formBuilder.group({ + cpus: new FormControl(''), + memory: new FormControl('') + }), + reservations: this.formBuilder.group({ + cpus: new FormControl(''), + memory: new FormControl('') + }) + }) + }) + + if(this.data.deploy) { + this.data.deploy.labels.forEach(val => this.currentLabels.push(val)) + this.data.deploy.placement.preferences.forEach(val => this.currentPreferences.push(val)) + + this.formGeneral.patchValue({ + ...this.data.deploy, + placement: this.data.deploy.placement.constraints.join(',') + }) + } + } + + onSave(): void { + const fields: ServiceDeploy = { + ...this.formGeneral.getRawValue(), + placement: { + constraints: this.formGeneral.get('placement').value.split(','), + preferences: this.preferences.getKeyValuePaies() + }, + labels: this.labels.getKeyValuePaies(), + } + + this.store.dispatch(ProjectActions.UpdateService({data: {...this.data, deploy: fields}})) + this.checkCircle.showCircle() + this.eventEmitterService.broadcast('save:project', {}) + } + + closeModal(): void { + this.dialogRef.close() + } + +} diff --git a/src/composer/src/app/core/store/models.ts b/src/composer/src/app/core/store/models.ts index 7549ca1..d4a1a87 100644 --- a/src/composer/src/app/core/store/models.ts +++ b/src/composer/src/app/core/store/models.ts @@ -47,6 +47,7 @@ export interface ServiceDeploy { delay: string order: string } + rollback_config: string restart_policy: { condition: string delay: string @@ -88,7 +89,7 @@ export interface Service { init: boolean isolation: string container_name?: string - deploy: object + deploy: ServiceDeploy build: ServiceBuildObject image: string restart: string From 6ed49738344548b93baa4f72830e93ec35f36efa Mon Sep 17 00:00:00 2001 From: IvashchenkoCW Date: Tue, 14 Jul 2020 12:56:22 +0300 Subject: [PATCH 2/3] add open deploy dialog controller --- .../canvas/jsplumb/node/node.component.html | 13 +++++++++---- .../canvas/jsplumb/node/node.component.scss | 2 +- .../canvas/jsplumb/node/node.component.ts | 9 +++++++++ .../repo-search/repo-search.component.scss | 4 ---- src/composer/src/styles.scss | 4 ++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.html b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.html index 58a3f8f..6372138 100644 --- a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.html +++ b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.html @@ -25,14 +25,19 @@
- - -
+
+ +
diff --git a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.scss b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.scss index cd64e0f..3ff62ad 100644 --- a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.scss +++ b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.scss @@ -1,7 +1,7 @@ .node { position: absolute; width: 135px; - height: 125px; + height: 135px; padding: 4px; background: white; box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); diff --git a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.ts b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.ts index 36b7e5d..0cb1de3 100644 --- a/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.ts +++ b/src/composer/src/app/core/components/canvas/jsplumb/node/node.component.ts @@ -7,6 +7,7 @@ import { MatDialog } from '@angular/material/dialog' import { ManageProjectDialogComponent } from '../../../dialogs/manage-project-dialog/manage-project-dialog.component' import { ConfirmDialogComponent } from '../../../dialogs/confirm-dialog/confirm-dialog.component' import { BuildDialogComponent } from '../../../dialogs/build-dialog/build-dialog.component' +import { DeployDialogComponent } from '../../../dialogs/deploy-dialog/deploy-dialog.component' import * as ProjectActions from './../../../../store/project.actions' import { NodeService } from '../node.service' import { EventEmitterService } from 'src/app/core/services/event-emitter.service' @@ -135,6 +136,14 @@ export class NodeComponent implements AfterViewInit, OnDestroy { }) } + deployDialogOpen() { + this.dialog.open(DeployDialogComponent, { + width: '50%', + minWidth: '740px', + data: this.currentService, + }) + } + ngOnDestroy() { this.unSubscribe$.next(true) this.unSubscribe$.complete() diff --git a/src/composer/src/app/core/components/repo-search/repo-search.component.scss b/src/composer/src/app/core/components/repo-search/repo-search.component.scss index 3fcb213..4eb0a64 100644 --- a/src/composer/src/app/core/components/repo-search/repo-search.component.scss +++ b/src/composer/src/app/core/components/repo-search/repo-search.component.scss @@ -20,10 +20,6 @@ } } - .splitter { - border-bottom: 1px solid #e8e8e8; - } - .search-results { padding: 20px; position: relative; diff --git a/src/composer/src/styles.scss b/src/composer/src/styles.scss index 6f477bf..d732060 100644 --- a/src/composer/src/styles.scss +++ b/src/composer/src/styles.scss @@ -260,4 +260,8 @@ as-split > .code-viewer { padding-top: 10px; } } +} + +.splitter { + border-bottom: 1px solid #e8e8e8; } \ No newline at end of file From 3b4a6f0fe6e56d813240461a70156d7f625e6da4 Mon Sep 17 00:00:00 2001 From: IvashchenkoCW Date: Tue, 14 Jul 2020 13:10:07 +0300 Subject: [PATCH 3/3] minor changes --- .../dialogs/deploy-dialog/deploy-dialog.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html index 5ad3e9d..07193bf 100644 --- a/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html +++ b/src/composer/src/app/core/components/dialogs/deploy-dialog/deploy-dialog.component.html @@ -103,7 +103,7 @@
- Command + Constraints