From f26081436b54b4a62948d5fbb755e6a8dbc93e62 Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 13:03:24 +0200 Subject: [PATCH 1/7] Create dockerhub.yml --- .github/workflows/dockerhub.yml | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/dockerhub.yml diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml new file mode 100644 index 00000000..e16a008d --- /dev/null +++ b/.github/workflows/dockerhub.yml @@ -0,0 +1,44 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven +name: Push docker images to Dockerhub + +on: + push: + branches: master + tags: + - "v*.*.*" + +jobs: + multi: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set output + id: vars + run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Build and push latest Pattern Atlas UI + if: ${{ steps.vars.outputs.tag == 'master' }} + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: planqk/qc-atlas-ui:latest + + - name: Build and push version of Pattern Atlas UI + if: ${{ steps.vars.outputs.tag != 'master' }} + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: patternatlas/pattern-atlas-ui:${{ steps.vars.outputs.tag }} From 29137fcbfffa3100dd801d0c1560ec53f823d446 Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 13:06:47 +0200 Subject: [PATCH 2/7] add lint file --- .github/workflows/lint.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..749ae9ba --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,24 @@ +name: Lint + +on: [push, pull_request] + +jobs: + run-linters: + name: Run linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: 12 + + # ESLint and Prettier must be in `package.json` + - name: Install Node.js dependencies + run: npm install + + - name: Run linters + run: npm run lint From 244f41f4a1d287d799bd08539d131dd44740162a Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 13:46:33 +0200 Subject: [PATCH 3/7] add requested changes --- .github/workflows/dockerhub.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index e16a008d..e62d32de 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -1,5 +1,3 @@ -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Push docker images to Dockerhub on: @@ -33,7 +31,7 @@ jobs: with: context: . push: true - tags: planqk/qc-atlas-ui:latest + tags: patternatlas/pattern-atlas-ui:latest - name: Build and push version of Pattern Atlas UI if: ${{ steps.vars.outputs.tag != 'master' }} From 68d3a9cf5c37dc3b7ef2959d7dcf027c860097f7 Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:49:35 +0200 Subject: [PATCH 4/7] use yarn instead of npm to run lint checks for the CI --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 749ae9ba..65536c7f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,4 +21,4 @@ jobs: run: npm install - name: Run linters - run: npm run lint + run: yarn lint-ci From bc0a65691ade52cd22eb4888b5298a0fb5677f73 Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 14:54:24 +0200 Subject: [PATCH 5/7] fix codestyle --- .../_services/authentication.service.ts | 322 +++++++++--------- 1 file changed, 160 insertions(+), 162 deletions(-) diff --git a/src/app/authentication/_services/authentication.service.ts b/src/app/authentication/_services/authentication.service.ts index 357400ea..18f40e2e 100644 --- a/src/app/authentication/_services/authentication.service.ts +++ b/src/app/authentication/_services/authentication.service.ts @@ -1,14 +1,13 @@ import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable, Subject, of, EMPTY, observable } from 'rxjs'; -import { HttpClient, HttpRequest, HttpParams, HttpHeaders } from '@angular/common/http'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { HttpClient, HttpParams } from '@angular/common/http'; import { Router } from '@angular/router'; -import { switchMap, skipWhile, tap, map, catchError } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { JwtHelperService } from '@auth0/angular-jwt'; import { TokenInterceptor } from '../_interceptor/token.interceptor'; import { PAUser } from 'src/app/core/user-management'; import { environment } from 'src/environments/environment'; - const accessTokenKey = 'access_token'; const refreshTokenKey = 'refresh_token'; @@ -17,193 +16,192 @@ const stateKey = 'state'; @Injectable() export class AuthenticationService { - private regexCode: RegExp; - private regexState: RegExp; - - public accessTokenSubject: BehaviorSubject; - public userSubject: BehaviorSubject; - public roleSubject: BehaviorSubject; + private regexCode: RegExp; + private regexState: RegExp; - private jwtHelper: JwtHelperService; + public accessTokenSubject: BehaviorSubject; + public userSubject: BehaviorSubject; + public roleSubject: BehaviorSubject; - constructor( - private http: HttpClient, - private router: Router, - ) { - console.log('Init Authentication Service'); - this.jwtHelper = new JwtHelperService(); - TokenInterceptor.init(this); + private jwtHelper: JwtHelperService; - this.regexCode = /code=(\w*)/; - this.regexState = /state=(\w*)/; + constructor( + private http: HttpClient, + private router: Router, + ) { + console.log('Init Authentication Service'); + this.jwtHelper = new JwtHelperService(); + TokenInterceptor.init(this); - this.initSubjectsPipe(); + this.regexCode = /code=(\w*)/; + this.regexState = /state=(\w*)/; - } + this.initSubjectsPipe(); - private initSubjectsPipe() { - this.userSubject = new BehaviorSubject(null); - this.roleSubject = new BehaviorSubject(null); - this.accessTokenSubject = new BehaviorSubject(this.getAccesToken()); - - this.accessTokenSubject.subscribe(token => { - if (token === 'logout') { - console.log('User logout'); - this.userSubject.next(null); - this.roleSubject.next(null); - this.router.navigate(['/']); - - } else if (token && !this.jwtHelper.isTokenExpired(token)) { - console.log('Token exists && token not expired') - this.getUserInfo(); - this.router.navigate(['/issue']); - - } else if (token && this.getRefreshToken() && this.jwtHelper.isTokenExpired(this.getAccesToken())) { - console.log('Token exists && token expired'); - this.refreshToken(); - - } else { - console.log('Token does not exist'); - this.getToken(); - } - }) - } + } - public login() { - const state = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); - localStorage.setItem(stateKey, state); - this.getAccesCode(state); - } + private initSubjectsPipe() { + this.userSubject = new BehaviorSubject(null); + this.roleSubject = new BehaviorSubject(null); + this.accessTokenSubject = new BehaviorSubject(this.getAccesToken()); - private getAccesCode(state: string) { - const params = new HttpParams() - .set('response_type', 'code') - .set('client_id', environment.clientIdPublic) - .set('redirect_uri', `${window.location.origin}`) - .set('scope', 'read+write') - .set('state', state) - // outcomment IF PKCE Authentaction flow is used - // .set('client_id', environment.clientIdPKCE) - // .set('code_challenge', '4cc9b165-1230-4607-873b-3a78afcf60c5') + this.accessTokenSubject.subscribe(token => { + if (token === 'logout') { + console.log('User logout'); + this.userSubject.next(null); + this.roleSubject.next(null); + this.router.navigate(['/']); + } else if (token && !this.jwtHelper.isTokenExpired(token)) { + console.log('Token exists && token not expired') + this.getUserInfo(); + this.router.navigate(['/issue']); - window.open(environment.authorizeUrl + params, '_self'); - } - - private checkState(state: string) { - const stateLocal = localStorage.getItem(stateKey); - return state !== stateLocal - } + } else if (token && this.getRefreshToken() && this.jwtHelper.isTokenExpired(this.getAccesToken())) { + console.log('Token exists && token expired'); + this.refreshToken(); - private getToken() { - const url = window.location.search; - - if (url.includes('code=') && url.includes('state=')) { - // Checks if sended state is equal to received state, CSRF attacks - if (this.checkState(this.regexState.exec(url)[1])) { - console.error('Wrong State') - localStorage.clear(); - } else { - const code = this.regexCode.exec(url)[1]; - const params = new HttpParams() - .set('client_id', `${environment.clientIdPublic}`) - - .set('code', code) - .set('redirect_uri', `${window.location.origin}`) - .set('grant_type', 'authorization_code') - // outcomment IF PKCE Authentaction flow is used - // .set('client_id', `${environment.clientPKCE}`) - // .set('code_verifier', '4cc9b165-1230-4607-873b-3a78afcf60c5') - - this.http.post(environment.tokenUrl, params).subscribe(token => { - - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; - - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); - - this.accessTokenSubject.next(accessToken); - }, - error => console.error('Error getToken(): ', error) - ); - } + } else { + console.log('Token does not exist'); + this.getToken(); } - } + }) + } + + public login() { + const state = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + localStorage.setItem(stateKey, state); + this.getAccesCode(state); + } + + private getAccesCode(state: string) { + const params = new HttpParams() + .set('response_type', 'code') + .set('client_id', environment.clientIdPublic) + .set('redirect_uri', `${window.location.origin}`) + .set('scope', 'read+write') + .set('state', state) + // outcomment IF PKCE Authentaction flow is used + // .set('client_id', environment.clientIdPKCE) + // .set('code_challenge', '4cc9b165-1230-4607-873b-3a78afcf60c5') + + window.open(environment.authorizeUrl + params, '_self'); + } + + private checkState(state: string) { + const stateLocal = localStorage.getItem(stateKey); + return state !== stateLocal + } + + private getToken() { + const url = window.location.search; + + if (url.includes('code=') && url.includes('state=')) { + // Checks if sended state is equal to received state, CSRF attacks + if (this.checkState(this.regexState.exec(url)[1])) { + console.error('Wrong State') + localStorage.clear(); + } else { + const code = this.regexCode.exec(url)[1]; + const params = new HttpParams() + .set('client_id', `${environment.clientIdPublic}`) - refreshToken() { - console.log('Refresh Token'); - const params = new HttpParams() - .set('client_id', `${environment.clientIdPublic}`) - .set('grant_type', 'refresh_token') - .set('refresh_token', `${this.getRefreshToken()}`) - this.http.post('http://localhost:8081/oauth/token', params).subscribe(token => { + .set('code', code) + .set('redirect_uri', `${window.location.origin}`) + .set('grant_type', 'authorization_code') + // outcomment IF PKCE Authentaction flow is used + // .set('client_id', `${environment.clientPKCE}`) + // .set('code_verifier', '4cc9b165-1230-4607-873b-3a78afcf60c5') - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; + this.http.post(environment.tokenUrl, params).subscribe(token => { - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - this.accessTokenSubject.next(accessToken); - }, - error => { - console.error('Error getToken via refreshToken: ', error) + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); + this.accessTokenSubject.next(accessToken); + }, + error => console.error('Error getToken(): ', error) + ); } - ); } + } - getUserInfo() { - this.http.get('http://localhost:8081/user_info').subscribe(user => { + refreshToken() { + console.log('Refresh Token'); + const params = new HttpParams() + .set('client_id', `${environment.clientIdPublic}`) + .set('grant_type', 'refresh_token') + .set('refresh_token', `${this.getRefreshToken()}`) + this.http.post('http://localhost:8081/oauth/token', params).subscribe(token => { - console.log('UserInfo: ', user); - this.userSubject.next(user); - this.roleSubject.next(user.roles); + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - }, - error => { - console.error('Error getToken via refreshToken: ', error) + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); - } - ); - } + this.accessTokenSubject.next(accessToken); + }, + error => { + console.error('Error getToken via refreshToken: ', error) - logout() { - console.log('Logout'); - localStorage.clear(); - this.accessTokenSubject.next('logout'); } + ); + } - public getAccesToken(): string { - return localStorage.getItem(accessTokenKey); - } + getUserInfo() { + this.http.get('http://localhost:8081/user_info').subscribe(user => { - private getRefreshToken(): string { - return localStorage.getItem(refreshTokenKey); - } + console.log('UserInfo: ', user); + this.userSubject.next(user); + this.roleSubject.next(user.roles); - public isAuthenticated(): boolean { - if (!this.jwtHelper.isTokenExpired(this.getAccesToken())) { - return true; - } else if (!this.jwtHelper.isTokenExpired(this.getRefreshToken())) { - this.refreshToken(); - return true - } else { - this.logout(); - return false; - } - } + }, + error => { + console.error('Error getToken via refreshToken: ', error) - public hasRole(role: string): Observable { - return this.roleSubject.asObservable().pipe( - map(roles => { - if (roles) { - return roles.includes(role); - } - return null; - }) - ); } + ); + } + + logout() { + console.log('Logout'); + localStorage.clear(); + this.accessTokenSubject.next('logout'); + } + + public getAccesToken(): string { + return localStorage.getItem(accessTokenKey); + } + + private getRefreshToken(): string { + return localStorage.getItem(refreshTokenKey); + } + + public isAuthenticated(): boolean { + if (!this.jwtHelper.isTokenExpired(this.getAccesToken())) { + return true; + } else if (!this.jwtHelper.isTokenExpired(this.getRefreshToken())) { + this.refreshToken(); + return true + } else { + this.logout(); + return false; + } + } + + public hasRole(role: string): Observable { + return this.roleSubject.asObservable().pipe( + map(roles => { + if (roles) { + return roles.includes(role); + } + return null; + }) + ); + } } From 4648e3d79fc5ca70ce3684979729c2af829cc17d Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 15:18:21 +0200 Subject: [PATCH 6/7] reformat again --- .../_services/authentication.service.ts | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/app/authentication/_services/authentication.service.ts b/src/app/authentication/_services/authentication.service.ts index 18f40e2e..5ebecc9d 100644 --- a/src/app/authentication/_services/authentication.service.ts +++ b/src/app/authentication/_services/authentication.service.ts @@ -115,15 +115,15 @@ export class AuthenticationService { this.http.post(environment.tokenUrl, params).subscribe(token => { - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); - this.accessTokenSubject.next(accessToken); - }, - error => console.error('Error getToken(): ', error) + this.accessTokenSubject.next(accessToken); + }, + error => console.error('Error getToken(): ', error) ); } } @@ -137,33 +137,33 @@ export class AuthenticationService { .set('refresh_token', `${this.getRefreshToken()}`) this.http.post('http://localhost:8081/oauth/token', params).subscribe(token => { - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); - this.accessTokenSubject.next(accessToken); - }, - error => { - console.error('Error getToken via refreshToken: ', error) + this.accessTokenSubject.next(accessToken); + }, + error => { + console.error('Error getToken via refreshToken: ', error) - } + } ); } getUserInfo() { this.http.get('http://localhost:8081/user_info').subscribe(user => { - console.log('UserInfo: ', user); - this.userSubject.next(user); - this.roleSubject.next(user.roles); + console.log('UserInfo: ', user); + this.userSubject.next(user); + this.roleSubject.next(user.roles); - }, - error => { - console.error('Error getToken via refreshToken: ', error) + }, + error => { + console.error('Error getToken via refreshToken: ', error) - } + } ); } From b2e4480e054854e8cfa6c947e80824a0152dcf39 Mon Sep 17 00:00:00 2001 From: manuwei <44226745+manuwei@users.noreply.github.com> Date: Tue, 22 Jun 2021 15:25:42 +0200 Subject: [PATCH 7/7] fix linting --- .../admin-management-detail.component.ts | 18 ++++---- .../_services/authentication.service.ts | 46 +++++++++---------- .../cardrenderer/card-renderer.component.ts | 26 +++++------ .../default-pl-renderer.component.ts | 2 +- .../emit-event-on-added-edge.directive.ts | 10 ++-- .../emit-event-on-keyup.directive.ts | 2 +- .../create-pattern.component.ts | 12 ++--- .../pattern-view-management.component.ts | 14 +++--- 8 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/app/admin-management/admin-management-detail/admin-management-detail.component.ts b/src/app/admin-management/admin-management-detail/admin-management-detail.component.ts index 34345837..e1a4ccd3 100644 --- a/src/app/admin-management/admin-management-detail/admin-management-detail.component.ts +++ b/src/app/admin-management/admin-management-detail/admin-management-detail.component.ts @@ -39,15 +39,15 @@ export class AdminManagementDetailComponent implements OnInit { createForm() { this.userForm = this.userFormBuilder.group({ - name: [this.user.name, Validators.required], - email: [this.user.email, [Validators.required, Validators.email]], - userRoles: [this.user.roles], - password: ['', Validators.required], - confirmPassword: [''] - }, - { - validator: ValidatePassword - }); + name: [this.user.name, Validators.required], + email: [this.user.email, [Validators.required, Validators.email]], + userRoles: [this.user.roles], + password: ['', Validators.required], + confirmPassword: [''] + }, + { + validator: ValidatePassword + }); } checkPasswords(control: AbstractControl) { diff --git a/src/app/authentication/_services/authentication.service.ts b/src/app/authentication/_services/authentication.service.ts index 5ebecc9d..18f40e2e 100644 --- a/src/app/authentication/_services/authentication.service.ts +++ b/src/app/authentication/_services/authentication.service.ts @@ -115,15 +115,15 @@ export class AuthenticationService { this.http.post(environment.tokenUrl, params).subscribe(token => { - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); - this.accessTokenSubject.next(accessToken); - }, - error => console.error('Error getToken(): ', error) + this.accessTokenSubject.next(accessToken); + }, + error => console.error('Error getToken(): ', error) ); } } @@ -137,33 +137,33 @@ export class AuthenticationService { .set('refresh_token', `${this.getRefreshToken()}`) this.http.post('http://localhost:8081/oauth/token', params).subscribe(token => { - const accessToken = token[accessTokenKey]; - const refreshToken = token[refreshTokenKey]; + const accessToken = token[accessTokenKey]; + const refreshToken = token[refreshTokenKey]; - localStorage.setItem(accessTokenKey, accessToken); - localStorage.setItem(refreshTokenKey, refreshToken); + localStorage.setItem(accessTokenKey, accessToken); + localStorage.setItem(refreshTokenKey, refreshToken); - this.accessTokenSubject.next(accessToken); - }, - error => { - console.error('Error getToken via refreshToken: ', error) + this.accessTokenSubject.next(accessToken); + }, + error => { + console.error('Error getToken via refreshToken: ', error) - } + } ); } getUserInfo() { this.http.get('http://localhost:8081/user_info').subscribe(user => { - console.log('UserInfo: ', user); - this.userSubject.next(user); - this.roleSubject.next(user.roles); + console.log('UserInfo: ', user); + this.userSubject.next(user); + this.roleSubject.next(user.roles); - }, - error => { - console.error('Error getToken via refreshToken: ', error) + }, + error => { + console.error('Error getToken via refreshToken: ', error) - } + } ); } diff --git a/src/app/core/component/cardrenderer/card-renderer.component.ts b/src/app/core/component/cardrenderer/card-renderer.component.ts index 17f4b750..06741146 100644 --- a/src/app/core/component/cardrenderer/card-renderer.component.ts +++ b/src/app/core/component/cardrenderer/card-renderer.component.ts @@ -42,19 +42,19 @@ export class CardRendererComponent { } }) .afterClosed().subscribe(dialoganswer => { - if (dialoganswer) { - this.patternService.deletePattern(pattern._links.self.href) - .subscribe( - value => { - this.handlePatternDelete(pattern); - this.toasterService.pop('success', 'Pattern deleted!'); - }, - error => { - this.toasterService.pop('error', 'Could not delete pattern!', 'A Pattern can only be deleted if it is not a part of any Pattern Views'); - } - ); - } - }); + if (dialoganswer) { + this.patternService.deletePattern(pattern._links.self.href) + .subscribe( + value => { + this.handlePatternDelete(pattern); + this.toasterService.pop('success', 'Pattern deleted!'); + }, + error => { + this.toasterService.pop('error', 'Could not delete pattern!', 'A Pattern can only be deleted if it is not a part of any Pattern Views'); + } + ); + } + }); } diff --git a/src/app/core/default-pl-renderer/default-pl-renderer.component.ts b/src/app/core/default-pl-renderer/default-pl-renderer.component.ts index 9061e144..c89d2a71 100644 --- a/src/app/core/default-pl-renderer/default-pl-renderer.component.ts +++ b/src/app/core/default-pl-renderer/default-pl-renderer.component.ts @@ -225,7 +225,7 @@ export class DefaultPlRendererComponent implements OnInit, OnDestroy { description: res.description, relationType: res.type, isDelete: true, //indicates that the dialog is called from the linked removedRemoved method --> not create, - // but a delete / edit operation + // but a delete / edit operation } }); dialogRef.afterClosed().subscribe((dialogResult) => { diff --git a/src/app/core/directives/emit-event-on-added-edge.directive.ts b/src/app/core/directives/emit-event-on-added-edge.directive.ts index 8c64d2e3..97189127 100644 --- a/src/app/core/directives/emit-event-on-added-edge.directive.ts +++ b/src/app/core/directives/emit-event-on-added-edge.directive.ts @@ -7,16 +7,16 @@ import { debounceTime, takeUntil } from 'rxjs/operators'; }) export class EmitEventOnAddedEdgeDirective implements OnInit, OnDestroy { @Output('onAddedEdge') edgeAddedEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename @Output('onRemovedEdge') edgeRemovedEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename @Output('onClickedNode') nodeClickedEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename @Output('onClickedBackground') backgroundClickedEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output('onNodePositionChange') onNodePositionChangeEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename constructor() { } diff --git a/src/app/core/directives/emit-event-on-keyup.directive.ts b/src/app/core/directives/emit-event-on-keyup.directive.ts index fd25fd74..f0e10afe 100644 --- a/src/app/core/directives/emit-event-on-keyup.directive.ts +++ b/src/app/core/directives/emit-event-on-keyup.directive.ts @@ -11,7 +11,7 @@ export class EmitEventOnKeyupDirective implements OnInit, OnDestroy { } @Output('onKeyup') keyUpEventEmitter = new EventEmitter(); // eslint-disable-line - // @angular-eslint/no-output-rename + // @angular-eslint/no-output-rename private clicks = new Subject(); diff --git a/src/app/pattern-language-management/create-pattern/create-pattern.component.ts b/src/app/pattern-language-management/create-pattern/create-pattern.component.ts index 724e3241..a2d006d2 100644 --- a/src/app/pattern-language-management/create-pattern/create-pattern.component.ts +++ b/src/app/pattern-language-management/create-pattern/create-pattern.component.ts @@ -47,13 +47,13 @@ export class CreatePatternComponent implements OnInit { className: 'fa fa-subscript', title: 'Add Formula', }, { - name: 'pattern-link', - action: (editor) => { - this.addPatternReference(editor); + name: 'pattern-link', + action: (editor) => { + this.addPatternReference(editor); + }, + className: 'fa fab fa-product-hunt', + title: 'Reference Pattern', }, - className: 'fa fab fa-product-hunt', - title: 'Reference Pattern', - }, '|', // Separator MarkdownEditorUtils.helpButton ], diff --git a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts index 81d51c9d..612ec967 100644 --- a/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts +++ b/src/app/pattern-view-management/pattern-view-management/pattern-view-management.component.ts @@ -78,14 +78,14 @@ export class PatternViewManagementComponent implements OnInit { }).afterClosed().subscribe(dialogAnswer => { if (dialogAnswer) { this.patternViewService.deletePatternView(patternView).subscribe((response) => { - for (let i = 0; i < this.patternViewResponse._embedded.patternViews.length; i++) { - this.patternViewResponse._embedded.patternViews[i].id === patternView.id ? this.patternViewResponse._embedded.patternViews.splice(i, 1) : null; - } - this.toastService.pop('success', 'Pattern View deleted!'); - }, - (error) => { - this.toastService.pop('error', 'Pattern View could not be deleted!'); + for (let i = 0; i < this.patternViewResponse._embedded.patternViews.length; i++) { + this.patternViewResponse._embedded.patternViews[i].id === patternView.id ? this.patternViewResponse._embedded.patternViews.splice(i, 1) : null; } + this.toastService.pop('success', 'Pattern View deleted!'); + }, + (error) => { + this.toastService.pop('error', 'Pattern View could not be deleted!'); + } ); } })