diff --git a/.eslintrc.js b/.eslintrc.js index 726e4de3..c318b07c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -18,6 +18,8 @@ module.exports = { // "extends": "tslint:recommended", rules: { + "@typescript-eslint/ban-types": ['error'], + // https://eslint.org/docs/rules/indent 'indent': ['error', 2, { "FunctionDeclaration": {"parameters": "first"}, diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 4ea674a5..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "chrome", - "request": "launch", - "name": "Launch Chrome against localhost", - "url": "http://localhost:4200", - "runtimeArgs": [ - "--disable-web-security" - ], - "webRoot": "${workspaceFolder}" - } - ] -} \ No newline at end of file diff --git a/src/app/admin-management/admin-management-detail/admin-management-detail.component.html b/src/app/admin-management/admin-management-detail/admin-management-detail.component.html deleted file mode 100644 index 720ab7da..00000000 --- a/src/app/admin-management/admin-management-detail/admin-management-detail.component.html +++ /dev/null @@ -1,42 +0,0 @@ - -
- diff --git a/src/app/admin-management/admin-management-detail/admin-management-detail.component.scss b/src/app/admin-management/admin-management-detail/admin-management-detail.component.scss deleted file mode 100644 index b9484520..00000000 --- a/src/app/admin-management/admin-management-detail/admin-management-detail.component.scss +++ /dev/null @@ -1,9 +0,0 @@ -.container { - // padding-top: 16px; - border-style: groove; - width: 100%; - display: flex; /* or inline-flex */ - flex-direction: column; - justify-content: center; - align-items: stretch; -} 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 deleted file mode 100644 index e1a4ccd3..00000000 --- a/src/app/admin-management/admin-management-detail/admin-management-detail.component.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { PAUser, UserRole, UserService, UserStore } from 'src/app/core/user-management'; - -@Component({ - selector: 'pp-admin-management-detail', - templateUrl: './admin-management-detail.component.html', - styleUrls: ['./admin-management-detail.component.scss'] -}) -export class AdminManagementDetailComponent implements OnInit { - - user: PAUser; - userForm: FormGroup; - - roles: UserRole[] = [UserRole.MEMBER, UserRole.AUTHOR, UserRole.EXPERT, UserRole.LIBRARIAN, UserRole.ADMIN]; - - constructor( - private activatedRoute: ActivatedRoute, - private router: Router, - private userFormBuilder: FormBuilder, - private userStore: UserStore, - private userService: UserService, - ) { - } - - ngOnInit(): void { - - this.userStore.user.subscribe(user => { - if (user) { - this.user = user; - } else { - this.user = {} as PAUser; - this.user.roles = [UserRole.MEMBER]; - } - this.createForm() - }) - } - - 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 - }); - } - - checkPasswords(control: AbstractControl) { - console.log(control); - let pass = this.userForm.get('password').value - let confirmPass = this.userForm.get('confirmPassword').value; - - return pass === confirmPass ? null : { incorrect: true } - } - - onSubmit() { - console.log('submit'); - this.user.name = this.userForm.get('name').value; - this.user.email = this.userForm.get('email').value; - this.user.roles = this.userForm.get('userRoles').value; - this.user.password = this.userForm.get('password').value; - if (this.user.id) { - this.userService.updateUser(this.user).subscribe(result => { - console.log('updateUser: ', result); - }) - } else { - this.userService.createUser(this.user).subscribe(result => { - console.log(result); - }) - } - } - - reset() { - console.log('resetForm'); - this.createForm() - } - - exit() { - this.router.navigateByUrl('admin'); - } - -} - -export function ValidatePassword(formGroup: FormGroup) { - console.log(formGroup); - let pass = formGroup.get('password').value - let confirmPass = formGroup.get('confirmPassword').value; - pass === confirmPass ? formGroup.get('confirmPassword').setErrors(null) : formGroup.get('confirmPassword').setErrors({ incorrect: true }); - return true; -} - diff --git a/src/app/admin-management/admin-management-list/admin-management-list.component.html b/src/app/admin-management/admin-management-list/admin-management-list.component.html deleted file mode 100644 index 05292ce5..00000000 --- a/src/app/admin-management/admin-management-list/admin-management-list.component.html +++ /dev/null @@ -1,56 +0,0 @@ - - -ID | -{{element.id}} | -Name | -{{element.name}} | -{{element.email}} | -Roles | -{{element.roles}} | -Actions | -- - - - - | -
---|
PRIVILEGE | +{{element.name}} | +{{role.name}} | +
+ |
+
---|
ID | +{{element.id}} | +Name | +{{element.name}} | +{{element.email}} | +Roles | +{{element.role}} | +Actions | ++ + + | +
---|
developer-management-list works!
+Under construction, next release :)
diff --git a/src/app/developer-management/developer-management-list/developer-management-list.component.spec.ts b/src/app/developer-management/developer-management-list/developer-management-list.component.spec.ts index 24654acd..9d7c1975 100644 --- a/src/app/developer-management/developer-management-list/developer-management-list.component.spec.ts +++ b/src/app/developer-management/developer-management-list/developer-management-list.component.spec.ts @@ -19,7 +19,7 @@ describe('DeveloperManagementListComponent', () => { fixture.detectChanges(); }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + // it('should create', () => { + // expect(component).toBeTruthy(); + // }); }); diff --git a/src/app/developer-management/developer-management-list/developer-management-list.component.ts b/src/app/developer-management/developer-management-list/developer-management-list.component.ts index 65a3ea27..36f817da 100644 --- a/src/app/developer-management/developer-management-list/developer-management-list.component.ts +++ b/src/app/developer-management/developer-management-list/developer-management-list.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { AuthenticationService } from 'src/app/authentication/_services/authentication.service'; @Component({ selector: 'pp-developer-management-list', @@ -7,10 +8,12 @@ import { Component, OnInit } from '@angular/core'; }) export class DeveloperManagementListComponent implements OnInit { - constructor() { - } + constructor( + private auth: AuthenticationService + ) { } ngOnInit(): void { + this.auth.refreshToken(); } } diff --git a/src/app/issue-management/issue-create-dialog/issue-create-dialog.component.html b/src/app/issue-management/issue-create-dialog/issue-create-dialog.component.html deleted file mode 100644 index 5b2813ee..00000000 --- a/src/app/issue-management/issue-create-dialog/issue-create-dialog.component.html +++ /dev/null @@ -1,15 +0,0 @@ -{{issueDetail.description}}
-Rating {{issueDetail.rating}}
-user-management-home works!
diff --git a/src/app/user-management/user-management-list/user-management-list.component.ts b/src/app/user-management/user-management-list/user-management-list.component.ts deleted file mode 100644 index 53a4c059..00000000 --- a/src/app/user-management/user-management-list/user-management-list.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { UserService } from 'src/app/core/user-management'; - -@Component({ - selector: 'pp-user-management-list', - templateUrl: './user-management-list.component.html', - styleUrls: ['./user-management-list.component.scss'] -}) -export class UserManagementListComponent implements OnInit { - - constructor( - private userService: UserService, - ) { - } - - private data: any; - - ngOnInit(): void { - this.userService.getUserWithToken().subscribe(result => { - console.log(result) - }); - } - -} diff --git a/src/app/user-management/user-management.module.ts b/src/app/user-management/user-management.module.ts index a59e7f61..c91cbaa3 100644 --- a/src/app/user-management/user-management.module.ts +++ b/src/app/user-management/user-management.module.ts @@ -1,24 +1,40 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { UserManagementListComponent } from './user-management-list/user-management-list.component'; import { RouterModule } from '@angular/router'; import { CoreModule } from '../core/core.module'; +import { UserInfoComponent } from './user-info/user-info.component'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatListModule } from '@angular/material/list'; +import { MatIconModule } from '@angular/material/icon'; export const USER_MANAGEMENT_ROUTES = [ { - path: '', component: UserManagementListComponent, + path: '', component: UserInfoComponent, }, ]; @NgModule({ declarations: [ - UserManagementListComponent + UserInfoComponent ], imports: [ CommonModule, CoreModule, RouterModule.forChild(USER_MANAGEMENT_ROUTES), - + MatFormFieldModule, + MatCardModule, + MatListModule, + MatIconModule, + MatButtonModule, + //FORM + MatInputModule, + FormsModule, + ReactiveFormsModule, + MatButtonModule, ], exports: [], providers: [] diff --git a/src/assets/env.js b/src/assets/env.js index fd453139..ac6f01ef 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -11,4 +11,5 @@ window['env']['LATEX_RENDERER_PORT'] = 5030; window['env']['PATTERN_ATLAS_API_PORT'] = 1977; window['env']['URL_SCHEME'] = 'http'; + window['env']['AUTH_REALM_URL'] = 'http://localhost:8080/realms/patternatlas'; })(this); diff --git a/src/assets/env.js.template b/src/assets/env.js.template index ebb42c6c..1fb7f497 100644 --- a/src/assets/env.js.template +++ b/src/assets/env.js.template @@ -10,6 +10,7 @@ window['env']['LATEX_RENDERER_PORT'] = '${LATEX_RENDERER_PORT}'; window['env']['PATTERN_ATLAS_API_PORT'] = '${PATTERN_ATLAS_API_PORT}'; window['env']['URL_SCHEME'] = '${URL_SCHEME}'; + window['env']['AUTH_REALM_URL'] = '${AUTH_REALM_URL}'; })(this); diff --git a/src/assets/settings_features/default_features.json b/src/assets/settings_features/default_features.json index 6dffd774..afd1ae16 100644 --- a/src/assets/settings_features/default_features.json +++ b/src/assets/settings_features/default_features.json @@ -1,11 +1,12 @@ { "features": { "designModel": false, - "patternCandidate": false, + "patternCandidate": true, "patternViews": true, - "issue": false, + "issue": true, "editing": true, "showSettings": false, + "authentication": true, "planqkUi": true } } diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index cac8cd82..b5afe0bc 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -13,20 +13,27 @@ */ const urlScheme = `${window['env'] && window['env']['URL_SCHEME'] ? window['env']['URL_SCHEME'] : 'http'}`; +const authRealm = `${window['env'] && window['env']['AUTH_REALM_URL'] ? window['env']['AUTH_REALM_URL'] : ''}`; +const apiUrl = window['env'] && window['env']['PATTERN_ATLAS_API_HOST_NAME'] && window['env']['PATTERN_ATLAS_API_PORT'] + ? `${urlScheme}://${window['env']['PATTERN_ATLAS_API_HOST_NAME']}:${window['env']['PATTERN_ATLAS_API_PORT']}/patternatlas` + : 'http://localhost:1977/patternatlas' export const environment = { PRODUCTION: true, API_URL: window['env'] && window['env']['PATTERN_ATLAS_API_HOST_NAME'] && window['env']['PATTERN_ATLAS_API_PORT'] ? `${urlScheme}://${window['env']['PATTERN_ATLAS_API_HOST_NAME']}:${window['env']['PATTERN_ATLAS_API_PORT']}/patternatlas` : 'http://localhost:1977/patternatlas', - authorizeUrl: 'http://localhost:8081/oauth/authorize?', - tokenUrl: 'http://localhost:8081/oauth/token', - tokenRevokeUrl: 'http://localhost:8081/oauth/revoke_token', - signinUrl: 'http://localhost:8081/user/create', - userInfoUrl: 'http://localhost:8081/user_info', + repositoryUrl: 'http://localhost:1977/patternatlas', + authorizeUrl: `${authRealm}/protocol/openid-connect/auth?`, + tokenUrl: `${authRealm}/protocol/openid-connect/token`, + tokenRevokeUrl: `${authRealm}/protocol/openid-connect/revoke`, + signinUrl: `${authRealm}/clients-registrations/openid-connect`, + userInfoUrl: `${apiUrl}/users/userinfo`, + logoutUrl: `${authRealm}/protocol/openid-connect/logout?`, + // Account management + accountManagementUrl: `${authRealm}/account?referrer=patternatlas`, clientIdPrivate: 'pattern-pedia-private', - clientSecret: '', - clientIdPublic: 'pattern-pedia-public', - clientIdPKCE: 'pattern-pedia-pkce', + clientIdPublic: 'patternatlas', + clientIdPKCE: 'patternatlas', CONFIG_SERVER_URL: window['env'] && window['env']['CONFIG_SERVER_HOST_NAME'] && window['env']['CONFIG_SERVER_PORT'] ? `${urlScheme}://${window['env']['CONFIG_SERVER_HOST_NAME']}:${window['env']['CONFIG_SERVER_PORT']}/v2/keys` diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 024ace44..0545b110 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -16,26 +16,30 @@ // `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. -const urlScheme = `${window['env'] && window['env']['URL_SCHEME'] ? window['env']['URL_SCHEME'] : 'http'}` +const urlScheme = `${window['env'] && window['env']['URL_SCHEME'] ? window['env']['URL_SCHEME'] : 'http'}`; +const authRealm = `${window['env'] && window['env']['AUTH_REALM_URL'] ? window['env']['AUTH_REALM_URL'] : ''}`; +const apiUrl = window['env'] && window['env']['PATTERN_ATLAS_API_HOST_NAME'] && window['env']['PATTERN_ATLAS_API_PORT'] + ? `${urlScheme}://${window['env']['PATTERN_ATLAS_API_HOST_NAME']}:${window['env']['PATTERN_ATLAS_API_PORT']}/patternatlas` + : 'http://localhost:1977/patternatlas' export const environment = { PRODUCTION: window['env'] && window['env']['production'] || false, - API_URL: - window['env'] && window['env']['PATTERN_ATLAS_API_HOST_NAME'] && window['env']['PATTERN_ATLAS_API_PORT'] - ? `${urlScheme}://${window['env']['PATTERN_ATLAS_API_HOST_NAME']}:${window['env']['PATTERN_ATLAS_API_PORT']}/patternatlas` - : 'http://localhost:1977/patternatlas', + API_URL: apiUrl, LATEX_RENDERER_API_URL: window['env'] && window['env']['LATEX_RENDERER_HOST_NAME'] && window['env']['LATEX_RENDERER_PORT'] ? `${urlScheme}://${window['env']['LATEX_RENDERER_HOST_NAME']}:${window['env']['LATEX_RENDERER_PORT']}` : 'http://localhost:5030', - authorizeUrl: 'http://localhost:8081/oauth/authorize?', - tokenUrl: 'http://localhost:8081/oauth/token', - tokenRevokeUrl: 'http://localhost:8081/oauth/revoke_token', - signinUrl: 'http://localhost:8081/user/create', - userInfoUrl: 'http://localhost:8081/user_info', + repositoryUrl: 'http://localhost:1977/patternatlas', + authorizeUrl: `${authRealm}/protocol/openid-connect/auth?`, + tokenUrl: `${authRealm}/protocol/openid-connect/token`, + tokenRevokeUrl: `${authRealm}/protocol/openid-connect/revoke`, + signinUrl: `${authRealm}/clients-registrations/openid-connect`, + userInfoUrl: `${apiUrl}/users/userinfo`, + logoutUrl: `${authRealm}/protocol/openid-connect/logout?`, + // Account management + accountManagementUrl: `${authRealm}/account?referrer=patternatlas`, clientIdPrivate: 'pattern-pedia-private', - clientSecret: 'pattern-pedia-secret', - clientIdPublic: 'pattern-pedia-public', - clientIdPKCE: 'pattern-pedia-pkce', + clientIdPublic: 'patternatlas', + clientIdPKCE: 'patternatlas', CONFIG_SERVER_URL: window['env'] && window['env']['CONFIG_SERVER_HOST_NAME'] && window['env']['CONFIG_SERVER_PORT'] ? `${urlScheme}://${window['env']['CONFIG_SERVER_HOST_NAME']}:${window['env']['CONFIG_SERVER_PORT']}/v2/keys` diff --git a/src/styles.scss b/src/styles.scss index 0e483a8c..d7835b44 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -99,6 +99,7 @@ $planqk-theme: mat-light-theme($planqk-palette-primary, $planqk-palette-accent); body { font-family: sans-serif; margin: 0; + background-color: rgb(255, 255, 255); } .material-icons { @@ -313,6 +314,10 @@ body { background-color: #fff; } +.mat-form-field { + width: 100%; +} + .horiz-centered { display: inline-flex; align-items: center; @@ -327,3 +332,61 @@ body { margin-right: 10px !important; } +$break-small: 759px; +$break-large: 760px; + +.container-double { + display: flex; + flex-flow: row wrap; + justify-content: center; + align-items: flex-start; +} + +.left { + margin: 8px; + display: flex; + flex-direction: column; + align-items: stretch; + + @media screen and (max-width: $break-small) { + width: 100%; + } + @media screen and (min-width: $break-large) { + max-width: 60%; + flex: 2 350px; + } +} + +.right { + margin: 8px; + @media screen and (max-width: $break-small) { + width: 100%; + } + @media screen and (min-width: $break-large) { + max-width: 500px; + flex: 1 350px; + } +} + +.scrollable-double { + @media screen and (max-width: $break-small) { + height: 100%; + } + @media screen and (min-width: $break-large) { + // border: 1px solid red; + min-height: 500px; + height: calc(100vh - 64px - 48px - 64px); + } +} + +.detail-component { + height: 100%; + width: 100%; + padding: 4px 0; +} + +.buttons { + display: flex; + flex-direction: row; + justify-content: space-around; +} diff --git a/yarn.lock b/yarn.lock index 3e2d83e7..0b5b960a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6099,10 +6099,10 @@ karma@~4.0.0: tmp "0.0.33" useragent "2.3.0" -katex@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.11.1.tgz#df30ca40c565c9df01a466a00d53e079e84ffaa2" - integrity sha512-5oANDICCTX0NqYIyAiFCCwjQ7ERu3DQG2JFHLbYOf+fXaMoH8eg/zOq5WSYJsKMi/QebW+Eh3gSM+oss1H/bww== +katex@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9" + integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg== dependencies: commander "^2.19.0" @@ -6430,11 +6430,12 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== -"markdown-it-katex@github:MicroDroid/markdown-it-katex": - version "3.0.0" - resolved "https://codeload.github.com/MicroDroid/markdown-it-katex/tar.gz/d6b159a38997ba628900eb9e58e34cbe950b7ccd" +"markdown-it-katexx@3.2.0 ": + version "3.2.0" + resolved "https://registry.yarnpkg.com/markdown-it-katexx/-/markdown-it-katexx-3.2.0.tgz#8ba0bf5a81268b8b7ed694d3349f473d7ecd03eb" + integrity sha512-fR6ZHNnQa4SzAIj8jxrEAtp3olE3bnBFlcEUk460fbCAqap0ycuS3QrQ38pK+/fHmjJZD1gmSnlkM1QfkAYCZA== dependencies: - katex "^0.11.1" + katex "^0.12.0" markdown-it@10.0.0: version "10.0.0"
Comments
+ +