From 6ec3c568834c416e29a413fb44ed343d56b8d975 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 23 May 2022 08:43:03 +0200 Subject: [PATCH] fix(console-v2): app detail layout, create layout stepper (#3680) * app detail * app-detail layout * app layout, create layout component, cleanup * lint --- .../app-auth-method-radio.component.html | 60 +- .../app-auth-method-radio.component.scss | 18 + .../app-auth-method-radio.component.ts | 11 +- .../create-layout.component.html | 17 + .../create-layout.component.scss | 23 + .../create-layout.component.spec.ts} | 12 +- .../create-layout/create-layout.component.ts | 18 + .../create-layout/create-layout.module.ts | 15 + .../idp-create/idp-create.component.html | 314 +++++---- .../idp-create/idp-create.component.scss | 99 ++- .../modules/idp-create/idp-create.module.ts | 4 +- .../app/modules/links/links.component.html | 36 - .../app/modules/links/links.component.scss | 67 -- .../src/app/modules/links/links.component.ts | 20 - console/src/app/modules/links/links.module.ts | 24 - .../privacy-policy.component.ts | 2 - .../private-labeling-policy.component.ts | 8 +- .../org-create/org-create.component.html | 383 ++++++----- .../org-create/org-create.component.scss | 18 - .../app/pages/org-create/org-create.module.ts | 2 + .../apps/app-create/app-create.component.html | 629 +++++++++--------- .../apps/app-create/app-create.component.scss | 185 +++--- .../apps/app-detail/app-detail.component.html | 469 ++++++++----- .../apps/app-detail/app-detail.component.scss | 63 +- .../apps/app-detail/app-detail.component.ts | 120 ++-- .../auth-method-dialog.component.html | 31 + .../auth-method-dialog.component.scss | 25 + .../auth-method-dialog.component.spec.ts | 24 + .../auth-method-dialog.component.ts | 22 + .../app/pages/projects/apps/apps.module.ts | 6 +- .../project-grant-create.component.html | 104 ++- .../project-grant-create.component.scss | 34 +- .../project-grant-create.component.ts | 2 +- .../project-grant-create.module.ts | 2 + .../project-role-create.component.html | 42 +- .../project-role-create.component.scss | 33 +- .../project-role-create.component.ts | 2 - .../project-role-create.module.ts | 28 +- .../project-create.component.html | 53 +- .../project-create.component.scss | 15 - .../project-create/project-create.module.ts | 26 +- .../user-grant-create.component.html | 147 ++-- .../user-grant-create.component.scss | 83 +-- .../user-grant-create.component.ts | 2 +- .../user-grant-create.module.ts | 4 +- .../user-create-machine.component.html | 88 +-- .../user-create-machine.component.scss | 18 - .../user-create-machine.component.ts | 6 + .../user-create-machine.module.ts | 40 +- .../user-create/user-create.component.html | 308 +++++---- .../user-create/user-create.component.scss | 12 - .../user-create/user-create.component.ts | 6 + .../users/user-create/user-create.module.ts | 2 + console/src/assets/i18n/de.json | 7 +- console/src/assets/i18n/en.json | 7 +- console/src/assets/i18n/it.json | 7 +- 56 files changed, 1897 insertions(+), 1906 deletions(-) create mode 100644 console/src/app/modules/create-layout/create-layout.component.html create mode 100644 console/src/app/modules/create-layout/create-layout.component.scss rename console/src/app/modules/{links/links.component.spec.ts => create-layout/create-layout.component.spec.ts} (53%) create mode 100644 console/src/app/modules/create-layout/create-layout.component.ts create mode 100644 console/src/app/modules/create-layout/create-layout.module.ts delete mode 100644 console/src/app/modules/links/links.component.html delete mode 100644 console/src/app/modules/links/links.component.scss delete mode 100644 console/src/app/modules/links/links.component.ts delete mode 100644 console/src/app/modules/links/links.module.ts create mode 100644 console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.html create mode 100644 console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.scss create mode 100644 console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.spec.ts create mode 100644 console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.ts diff --git a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.html b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.html index ed5a5fa71..5ab289448 100644 --- a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.html +++ b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.html @@ -1,39 +1,51 @@ -
+
- -
diff --git a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.scss b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.scss index 6d6b4e520..f7ddc2d14 100644 --- a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.scss +++ b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.scss @@ -9,6 +9,13 @@ margin: 0; padding-bottom: 0.5rem; padding-top: 1rem; + + &.compact { + display: grid; + grid-template-columns: 1fr 1fr; + column-gap: 1rem; + row-gap: 1rem; + } } @mixin app-auth-method-radio-theme($theme) { @@ -108,6 +115,17 @@ } } + &.compact { + margin: 0; + width: 230px; + + .cnsl-radio-header { + span { + margin: 1rem 0 1.5rem 0; + } + } + } + p { text-align: center; padding: 0 1rem; diff --git a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.ts b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.ts index b719116c5..08a4f49d9 100644 --- a/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.ts +++ b/console/src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component.ts @@ -1,9 +1,9 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { - APIAuthMethodType, - OIDCAuthMethodType, - OIDCGrantType, - OIDCResponseType, + APIAuthMethodType, + OIDCAuthMethodType, + OIDCGrantType, + OIDCResponseType, } from 'src/app/proto/generated/zitadel/app_pb'; export interface RadioItemAuthType { @@ -16,7 +16,7 @@ export interface RadioItemAuthType { responseType?: OIDCResponseType; grantType?: OIDCGrantType; authMethod?: OIDCAuthMethodType; - apiAuthMethod?: | APIAuthMethodType; + apiAuthMethod?: APIAuthMethodType; recommended?: boolean; notRecommended?: boolean; } @@ -31,6 +31,7 @@ export class AppAuthMethodRadioComponent { @Input() selected: string = ''; @Input() authMethods!: RadioItemAuthType[]; @Input() isOIDC: boolean = false; + @Input() compact: boolean = false; @Output() selectedMethod: EventEmitter = new EventEmitter(); public emitChange(): void { diff --git a/console/src/app/modules/create-layout/create-layout.component.html b/console/src/app/modules/create-layout/create-layout.component.html new file mode 100644 index 000000000..958578f3f --- /dev/null +++ b/console/src/app/modules/create-layout/create-layout.component.html @@ -0,0 +1,17 @@ +
+
+
+ + {{ title }}{{ 'ACTIONS.STEP' | translate }} {{ currentCreateStep }} {{ 'ACTIONS.OF' | translate }} {{ createSteps }} +
+ +
+ +
+
+
diff --git a/console/src/app/modules/create-layout/create-layout.component.scss b/console/src/app/modules/create-layout/create-layout.component.scss new file mode 100644 index 000000000..63696fcb2 --- /dev/null +++ b/console/src/app/modules/create-layout/create-layout.component.scss @@ -0,0 +1,23 @@ +.create-layout-container { + display: flex; + align-items: center; + margin-bottom: 2rem; + + .abort { + font-size: 1.2rem; + margin-left: 2rem; + } + + .abort-2 { + margin-left: 2rem; + white-space: nowrap; + font-size: 12px; + padding: 0.25rem 1rem; + border: 1px solid rgba(#8795a1, 0.2); + border-radius: 50vw; + } +} + +.create-layout-content { + padding-left: 4.5rem; +} diff --git a/console/src/app/modules/links/links.component.spec.ts b/console/src/app/modules/create-layout/create-layout.component.spec.ts similarity index 53% rename from console/src/app/modules/links/links.component.spec.ts rename to console/src/app/modules/create-layout/create-layout.component.spec.ts index 6de4124c1..5352745c4 100644 --- a/console/src/app/modules/links/links.component.spec.ts +++ b/console/src/app/modules/create-layout/create-layout.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { LinksComponent } from './links.component'; +import { CreateLayoutComponent } from './create-layout.component'; -describe('LinksComponent', () => { - let component: LinksComponent; - let fixture: ComponentFixture; +describe('CreateLayoutComponent', () => { + let component: CreateLayoutComponent; + let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ LinksComponent ], + declarations: [ CreateLayoutComponent ] }) .compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(LinksComponent); + fixture = TestBed.createComponent(CreateLayoutComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/console/src/app/modules/create-layout/create-layout.component.ts b/console/src/app/modules/create-layout/create-layout.component.ts new file mode 100644 index 000000000..f9494a9eb --- /dev/null +++ b/console/src/app/modules/create-layout/create-layout.component.ts @@ -0,0 +1,18 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'cnsl-create-layout', + templateUrl: './create-layout.component.html', + styleUrls: ['./create-layout.component.scss'], +}) +export class CreateLayoutComponent { + @Input() currentCreateStep: number = 1; + @Input() createSteps: number = 1; + @Input() title: string = ''; + @Output() closed: EventEmitter = new EventEmitter(); + constructor() {} + + close() { + this.closed.emit(); + } +} diff --git a/console/src/app/modules/create-layout/create-layout.module.ts b/console/src/app/modules/create-layout/create-layout.module.ts new file mode 100644 index 000000000..346ae7157 --- /dev/null +++ b/console/src/app/modules/create-layout/create-layout.module.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { TranslateModule } from '@ngx-translate/core'; + +import { CreateLayoutComponent } from './create-layout.component'; + +@NgModule({ + declarations: [CreateLayoutComponent], + imports: [CommonModule, MatIconModule, MatButtonModule, TranslateModule, MatTooltipModule], + exports: [CreateLayoutComponent], +}) +export class CreateLayoutModule {} diff --git a/console/src/app/modules/idp-create/idp-create.component.html b/console/src/app/modules/idp-create/idp-create.component.html index 7b3eee5af..341b1a4b7 100644 --- a/console/src/app/modules/idp-create/idp-create.component.html +++ b/console/src/app/modules/idp-create/idp-create.component.html @@ -1,179 +1,161 @@ -
-
-
- - {{ 'IDP.CREATE.TITLE' | translate }}Step {{ currentCreateStep }} of {{ createSteps }} -
+ +
+

{{ 'IDP.CREATE.TITLE' | translate }}

-
-

{{ 'IDP.CREATE.TITLE' | translate }}

+ - + +

{{ 'IDP.CREATE.DESCRIPTION' | translate }}

- -

{{ 'IDP.CREATE.DESCRIPTION' | translate }}

+ - - +
+ +
+
-
- +
-
+ + - -

{{ 'IDP.OIDC.DESCRIPTION' | translate }}

+ +

{{ 'IDP.JWT.DESCRIPTION' | translate }}

-
-
- - {{ 'IDP.NAME' | translate }} - - - - {{ 'IDP.ISSUER' | translate }} - - + +
+ + {{ 'IDP.NAME' | translate }} + + + + {{ 'IDP.JWT.HEADERNAME' | translate }} + + + + {{ 'IDP.ISSUER' | translate }} + + +
+ + +
+

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

+ + {{ 'IDP.AUTOREGISTER' | translate }} +
+
- -
-

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

- - {{ 'IDP.AUTOREGISTER' | translate }} - -
-
+
+ + {{ 'IDP.JWT.JWTENDPOINT' | translate }} + + + + {{ 'IDP.JWT.JWTKEYSENDPOINT' | translate }} + + +
-
- - {{ 'IDP.CLIENTID' | translate }} - - - - {{ 'IDP.CLIENTSECRET' | translate }} - - -
-
- - {{ 'IDP.SCOPESLIST' | translate }} - - - {{ scope }} cancel - - - - -
-
- - {{ 'IDP.IDPDISPLAYNAMMAPPING' | translate }} - - - {{ 'IDP.MAPPINGFIELD.' + field | translate }} - - - - - {{ 'IDP.USERNAMEMAPPING' | translate }} - - - {{ 'IDP.MAPPINGFIELD.' + field | translate }} - - - -
- -
- - -
- - - - -

{{ 'IDP.JWT.DESCRIPTION' | translate }}

- -
-
- - {{ 'IDP.NAME' | translate }} - - - - {{ 'IDP.JWT.HEADERNAME' | translate }} - - - - {{ 'IDP.ISSUER' | translate }} - - -
- - -
-

{{ 'IDP.AUTOREGISTER_DESC' | translate }}

- - {{ 'IDP.AUTOREGISTER' | translate }} - -
-
- -
- - {{ 'IDP.JWT.JWTENDPOINT' | translate }} - - - - {{ 'IDP.JWT.JWTKEYSENDPOINT' | translate }} - - -
- -
- - -
-
-
-
+
+ + +
+ +
-
+
diff --git a/console/src/app/modules/idp-create/idp-create.component.scss b/console/src/app/modules/idp-create/idp-create.component.scss index d60eec788..bfa2b64f2 100644 --- a/console/src/app/modules/idp-create/idp-create.component.scss +++ b/console/src/app/modules/idp-create/idp-create.component.scss @@ -2,75 +2,54 @@ font-size: 14px; } -.abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } -} - .add-line-btn { margin-bottom: 1rem; } -.idp-create-content { - padding: 0 0 0 72px; +.first-step-actions { + margin-top: 1rem; +} - .first-step-actions { - margin-top: 1rem; +.auto-reg-info { + display: block; + width: 100%; + + .auto-reg-desc { + margin: 0 0 1rem 0; + } +} + +.idp-content { + display: flex; + margin: 0 -0.5rem; + flex-wrap: wrap; + + .desc { + flex-basis: 100%; + margin: 0 0.5rem; + margin-bottom: 1rem; } - .auto-reg-info { - display: block; - width: 100%; + .formfield { + flex: 1; + margin: 0 0.5rem; - .auto-reg-desc { - margin: 0 0 1rem 0; - } - } - - .idp-content { - display: flex; - margin: 0 -0.5rem; - flex-wrap: wrap; - - .desc { + @media only screen and (max-width: 450px) { flex-basis: 100%; - margin: 0 0.5rem; - margin-bottom: 1rem; - } - - .formfield { - flex: 1; - margin: 0 0.5rem; - - @media only screen and (max-width: 450px) { - flex-basis: 100%; - } - } - } - - .idp-create-actions { - display: flex; - justify-content: space-between; - margin-top: 1rem; - - button[mat-stroked-button] { - border-radius: 0.5rem; - } - - button[mat-raised-button] { - border-radius: 0.5rem; } } } + +.idp-create-actions { + display: flex; + justify-content: space-between; + margin-top: 1rem; + + button[mat-stroked-button] { + border-radius: 0.5rem; + } + + button[mat-raised-button] { + border-radius: 0.5rem; + } +} diff --git a/console/src/app/modules/idp-create/idp-create.module.ts b/console/src/app/modules/idp-create/idp-create.module.ts index 315975a16..075fd858f 100644 --- a/console/src/app/modules/idp-create/idp-create.module.ts +++ b/console/src/app/modules/idp-create/idp-create.module.ts @@ -11,6 +11,7 @@ import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; import { InputModule } from 'src/app/modules/input/input.module'; +import { CreateLayoutModule } from '../create-layout/create-layout.module'; import { InfoSectionModule } from '../info-section/info-section.module'; import { IdpCreateRoutingModule } from './idp-create-routing.module'; import { IdpCreateComponent } from './idp-create.component'; @@ -23,6 +24,7 @@ import { IdpTypeRadioComponent } from './idp-type-radio/idp-type-radio.component CommonModule, FormsModule, ReactiveFormsModule, + CreateLayoutModule, InfoSectionModule, InputModule, MatButtonModule, @@ -35,4 +37,4 @@ import { IdpTypeRadioComponent } from './idp-type-radio/idp-type-radio.component MatProgressBarModule, ], }) -export class IdpCreateModule { } +export class IdpCreateModule {} diff --git a/console/src/app/modules/links/links.component.html b/console/src/app/modules/links/links.component.html deleted file mode 100644 index f67fc38c2..000000000 --- a/console/src/app/modules/links/links.component.html +++ /dev/null @@ -1,36 +0,0 @@ -
-
-
{{'NEXTSTEPS.TITLE' | translate}}
- -
-
- - -
- -
{{ link.i18nTitle | translate }}
-

{{link.i18nDesc | translate}}

- - - {{'ACTIONS.CONTINUE' | translate}} - - - {{'ACTIONS.CONTINUE' | translate}} - -
-
-
- -
{{ link.i18nTitle | translate }}
-

{{link.i18nDesc | translate}}

- - - {{'ACTIONS.CONTINUE' | translate}} - - - {{'ACTIONS.CONTINUE' | translate}} - -
-
-
-
\ No newline at end of file diff --git a/console/src/app/modules/links/links.component.scss b/console/src/app/modules/links/links.component.scss deleted file mode 100644 index 6c8c7f466..000000000 --- a/console/src/app/modules/links/links.component.scss +++ /dev/null @@ -1,67 +0,0 @@ -.next-steps { - margin-top: 4rem; - - .title-row { - display: flex; - align-items: center; - - h5 { - text-transform: uppercase; - font-size: 14px; - letter-spacing: 0.05em; - font-weight: 400; - margin-right: 1rem; - } - } - - .row { - display: grid; - row-gap: 1rem; - column-gap: 1rem; - grid-template-columns: 1fr 1fr 1fr; - padding-bottom: 0.5rem; - - @media only screen and (max-width: 1300px) { - grid-template-columns: 1fr 1fr; - } - - @media only screen and (max-width: 500px) { - grid-template-columns: 1fr; - } - - .step { - padding: 1rem; - width: 100%; - display: flex; - flex-direction: column; - box-sizing: border-box; - align-items: flex-start; - - i { - font-size: 2.5rem; - margin-bottom: 1rem; - } - - h6 { - font-size: 1.1rem; - text-align: center; - font-weight: 400; - margin: 0; - } - - p { - font-size: 14px; - margin: 1rem 0; - } - - .fill-space { - flex: 1; - } - - button { - display: block; - margin: auto; - } - } - } -} diff --git a/console/src/app/modules/links/links.component.ts b/console/src/app/modules/links/links.component.ts deleted file mode 100644 index 2592e1e6b..000000000 --- a/console/src/app/modules/links/links.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component, Input } from '@angular/core'; - - -export interface CnslLinks { - i18nTitle: string; - i18nDesc: string; - routerLink?: any; - href?: string; - iconClasses?: string; - withRole?: string[] | RegExp[]; -} - -@Component({ - selector: 'cnsl-links', - templateUrl: './links.component.html', - styleUrls: ['./links.component.scss'], -}) -export class LinksComponent { - @Input() links: Array = []; -} diff --git a/console/src/app/modules/links/links.module.ts b/console/src/app/modules/links/links.module.ts deleted file mode 100644 index f38c867b9..000000000 --- a/console/src/app/modules/links/links.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { LinksComponent } from './links.component'; -import { TranslateModule } from '@ngx-translate/core'; -import { RouterModule } from '@angular/router'; -import { MatButton, MatButtonModule } from '@angular/material/button'; -import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; - - - -@NgModule({ - declarations: [LinksComponent], - imports: [ - CommonModule, - TranslateModule, - RouterModule, - MatButtonModule, - HasRoleModule, - ], - exports: [ - LinksComponent, - ], -}) -export class LinksModule { } diff --git a/console/src/app/modules/policies/privacy-policy/privacy-policy.component.ts b/console/src/app/modules/policies/privacy-policy/privacy-policy.component.ts index 6b474cd35..ceecf4775 100644 --- a/console/src/app/modules/policies/privacy-policy/privacy-policy.component.ts +++ b/console/src/app/modules/policies/privacy-policy/privacy-policy.component.ts @@ -19,7 +19,6 @@ import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; import { InfoSectionType } from '../../info-section/info-section.component'; -import { CnslLinks } from '../../links/links.component'; import { WarnDialogComponent } from '../../warn-dialog/warn-dialog.component'; import { PolicyComponentServiceType } from '../policy-component-types.enum'; @@ -33,7 +32,6 @@ export class PrivacyPolicyComponent implements OnInit, OnDestroy { public PolicyComponentServiceType: any = PolicyComponentServiceType; @Input() public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; - public nextLinks: CnslLinks[] = []; private sub: Subscription = new Subscription(); public privacyPolicy: PrivacyPolicy.AsObject | undefined = undefined; diff --git a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts index fd68aa25c..866884d5a 100644 --- a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts +++ b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.ts @@ -118,7 +118,7 @@ export class PrivateLabelingPolicyComponent implements OnInit, OnDestroy { case PolicyComponentServiceType.MGMT: return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTDARKLOGO, formData, this.org.id)); case PolicyComponentServiceType.ADMIN: - return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKLOGO, formData, this.org.id)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKLOGO, formData)); } } if (theme === Theme.LIGHT) { @@ -126,7 +126,7 @@ export class PrivateLabelingPolicyComponent implements OnInit, OnDestroy { case PolicyComponentServiceType.MGMT: return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTLOGO, formData, this.org.id)); case PolicyComponentServiceType.ADMIN: - return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMLOGO, formData, this.org.id)); + return this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMLOGO, formData)); } } } @@ -273,7 +273,7 @@ export class PrivateLabelingPolicyComponent implements OnInit, OnDestroy { this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTDARKICON, formData, this.org.id)); break; case PolicyComponentServiceType.ADMIN: - this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKICON, formData, this.org.id)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMDARKICON, formData)); break; } } @@ -283,7 +283,7 @@ export class PrivateLabelingPolicyComponent implements OnInit, OnDestroy { this.handleUploadPromise(this.assetService.upload(AssetEndpoint.MGMTICON, formData, this.org.id)); break; case PolicyComponentServiceType.ADMIN: - this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMICON, formData, this.org.id)); + this.handleUploadPromise(this.assetService.upload(AssetEndpoint.IAMICON, formData)); break; } } diff --git a/console/src/app/pages/org-create/org-create.component.html b/console/src/app/pages/org-create/org-create.component.html index f86a163c7..c7f3d4bcc 100644 --- a/console/src/app/pages/org-create/org-create.component.html +++ b/console/src/app/pages/org-create/org-create.component.html @@ -1,225 +1,214 @@ -
-
-
- - {{ 'ORG.PAGES.CREATE' | translate }} - Step {{ currentCreateStep }} of {{ createSteps }} -
+ +
+ + + {{ 'ORG.PAGES.USERSELFACCOUNT' | translate }} + -
- - - {{ 'ORG.PAGES.USERSELFACCOUNT' | translate }} - + + +

{{ 'ORG.PAGES.ORGDETAIL_TITLE' | translate }}

- - -

{{ 'ORG.PAGES.ORGDETAIL_TITLE' | translate }}

+
+
+ + {{ 'ORG_DETAIL.DETAIL.NAME' | translate }} + + + + {{ 'ORG_DETAIL.DETAIL.DOMAIN' | translate }} + + +
- +
+ + +
+
+
+ + +

{{ 'ORG.PAGES.ORGDETAILUSER_TITLE' | translate }}

+ +
+
+

{{ 'USER.CREATE.NAMEANDEMAILSECTION' | translate }}

- {{ 'ORG_DETAIL.DETAIL.NAME' | translate }} - + {{ 'USER.PROFILE.USERNAME' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + - {{ 'ORG_DETAIL.DETAIL.DOMAIN' | translate }} - + {{ 'USER.PROFILE.EMAIL' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.FIRSTNAME' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.LASTNAME' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.NICKNAME' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + -
-
- - -
-
- - -

{{ 'ORG.PAGES.ORGDETAILUSER_TITLE' | translate }}

+ +

{{ 'USER.CREATE.PASSWORDSECTION' | translate }}

-
-
-
-

{{ 'USER.CREATE.NAMEANDEMAILSECTION' | translate }}

- - {{ 'USER.PROFILE.USERNAME' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.EMAIL' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.FIRSTNAME' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.LASTNAME' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.NICKNAME' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - + + -

{{ 'USER.CREATE.GENDERLANGSECTION' | translate }}

+ + + {{ 'USER.PASSWORD.NEW' | translate }} + - - {{ 'USER.PROFILE.GENDER' | translate }} - - - {{ 'GENDERS.' + gender | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.PREFERRED_LANGUAGE' | translate }} - - - {{ 'LANGUAGES.' + language | translate }} - - + {{ 'USER.VALIDATION.REQUIRED' | translate }} - - + + + {{ 'USER.PASSWORD.CONFIRM' | translate }} + - - {{ 'ORG.PAGES.USEPASSWORD' | translate }} - - -

{{ 'USER.CREATE.PASSWORDSECTION' | translate }}

- - - - - - - {{ 'USER.PASSWORD.NEW' | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PASSWORD.CONFIRM' | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - {{ 'USER.PASSWORD.NOTEQUAL' | translate }} - - - -
-
-
- - - -
- -
-
-
- - -
- -

{{ 'ORG.PAGES.ORGDETAIL_TITLE_WITHOUT_DOMAIN' | translate }}

- -
-
- - {{ 'ORG_DETAIL.DETAIL.NAME' | translate }} - - + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + {{ 'USER.PASSWORD.NOTEQUAL' | translate }} + + + +
-
+
-
-
-
-
+
+ + +
+ +
+ +

{{ 'ORG.PAGES.ORGDETAIL_TITLE_WITHOUT_DOMAIN' | translate }}

+ +
+
+ + {{ 'ORG_DETAIL.DETAIL.NAME' | translate }} + + +
+ +
+ + +
+
+
+
+
-
+ diff --git a/console/src/app/pages/org-create/org-create.component.scss b/console/src/app/pages/org-create/org-create.component.scss index 67eeda3fc..6c1b3e686 100644 --- a/console/src/app/pages/org-create/org-create.component.scss +++ b/console/src/app/pages/org-create/org-create.component.scss @@ -2,25 +2,7 @@ h1 { font-weight: 500; } -.abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } -} - .org-create-main-content { - padding-left: 4.5rem; max-width: 35rem; .content { diff --git a/console/src/app/pages/org-create/org-create.module.ts b/console/src/app/pages/org-create/org-create.module.ts index 411aec252..d007e0fb8 100644 --- a/console/src/app/pages/org-create/org-create.module.ts +++ b/console/src/app/pages/org-create/org-create.module.ts @@ -8,6 +8,7 @@ import { MatSelectModule } from '@angular/material/select'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { PasswordComplexityViewModule } from 'src/app/modules/password-complexity-view/password-complexity-view.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; @@ -26,6 +27,7 @@ import { OrgCreateComponent } from './org-create.component'; MatButtonModule, MatIconModule, MatSelectModule, + CreateLayoutModule, HasRolePipeModule, TranslateModule, HasRoleModule, diff --git a/console/src/app/pages/projects/apps/app-create/app-create.component.html b/console/src/app/pages/projects/apps/app-create/app-create.component.html index 1c367ee4e..7453cc972 100644 --- a/console/src/app/pages/projects/apps/app-create/app-create.component.html +++ b/console/src/app/pages/projects/apps/app-create/app-create.component.html @@ -1,133 +1,313 @@ -
-
-
- - {{ 'APP.PAGES.CREATE_OIDC' | translate }}Step {{ currentCreateStep }} of {{ createSteps }} -
+ +

{{ 'APP.PAGES.CREATE_OIDC_DESC_TITLE' | translate }}

+ -
-

{{ 'APP.PAGES.CREATE_OIDC_DESC_TITLE' | translate }}

- + + {{ 'APP.OIDC.PROSWITCH' | translate }} + - - {{ 'APP.OIDC.PROSWITCH' | translate }} - + + +
+ {{ 'APP.OIDC.NAMEANDTYPESECTION' | translate }} - - - - {{ 'APP.OIDC.NAMEANDTYPESECTION' | translate }} +

{{ 'APP.OIDC.TITLEFIRST' | translate }}

+ + {{ 'APP.NAME' | translate }} + + {{ 'PROJECT.APP.NAMEREQUIRED' | translate }} + -

{{ 'APP.OIDC.TITLEFIRST' | translate }}

- - {{ 'APP.NAME' | translate }} - - {{ 'PROJECT.APP.NAMEREQUIRED' | translate }} - +

{{ 'APP.OIDC.TYPETITLE' | translate }}

-

{{ 'APP.OIDC.TYPETITLE' | translate }}

- - - -
- -
- -
- - - -
- {{ 'APP.AUTHMETHODSECTION' | translate }} - - - - -
- - -
-
-
- - - - {{ 'APP.OIDC.REDIRECTSECTION' | translate }} - -

{{ 'APP.OIDC.REDIRECTTITLE' | translate }}

-

+ +

+ +
+ +
+ + +
+ {{ 'APP.AUTHMETHODSECTION' | translate }} + + + + +
+ + +
+
+
+ + + + {{ 'APP.OIDC.REDIRECTSECTION' | translate }} + +

{{ 'APP.OIDC.REDIRECTTITLE' | translate }}

+

+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONNATIVE' | translate }} +

+

+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate }} +

+ + + + +

{{ 'APP.OIDC.POSTREDIRECTTITLE' | translate }}

+

+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONNATIVE' | translate }} +

+

+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate }} +

+ + + + +
+ + +
+
+ + + {{ 'APP.OIDC.OVERVIEWSECTION' | translate }} +

{{ 'APP.OIDC.OVERVIEWTITLE' | translate }}

+
+ + {{ 'APP.NAME' | translate }} + + + {{ oidcAppRequest.name }} + +
+ + +
+ + {{ 'APP.TYPE' | translate }} + + + {{ 'APP.OIDC.APPTYPE.' + oidcAppRequest.appType | translate }} + +
+
+ + {{ 'APP.GRANT' | translate }} + + + [ + {{ 'APP.OIDC.GRANT.' + element | translate }} + {{ i < oidcAppRequest.grantTypesList.length - 1 ? ', ' : '' }} ] + +
+
+ + {{ 'APP.OIDC.RESPONSETYPE' | translate }} + + + [ + {{ 'APP.OIDC.RESPONSE.' + element | translate }} + {{ i < oidcAppRequest.responseTypesList.length - 1 ? ', ' : '' }} ] + +
+ +
+ + {{ 'APP.AUTHMETHOD' | translate }} + + + + {{ 'APP.OIDC.AUTHMETHOD.' + oidcAppRequest?.authMethodType | translate }} + + +
+ +
+ + {{ 'APP.OIDC.REDIRECT' | translate }} + + + [ + {{ redirect }} + {{ i < oidcAppRequest.redirectUrisList.length - 1 ? ', ' : '' }} ] + +
+ +
+ + {{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }} + + + [ + {{ redirect }} + {{ i < oidcAppRequest.postLogoutRedirectUrisList.length - 1 ? ', ' : '' }} ] + +
+
+ + +
+ + {{ 'APP.AUTHMETHOD' | translate }} + + + + {{ 'APP.API.AUTHMETHOD.' + apiAppRequest?.authMethodType | translate }} + + +
+
+ +
+ + +
+
+
+ +
+
+
+ + {{ 'APP.NAME' | translate }} + + + + + {{ 'APP.TYPE' | translate }} + + + {{ appType.titleI18nKey | translate }} + + + + + + + {{ 'APP.OIDC.GRANTTYPE' | translate }} + + + {{ 'APP.OIDC.GRANT.' + grant.type | translate }} + + + + + + {{ 'APP.OIDC.RESPONSETYPE' | translate }} + + + {{ 'APP.OIDC.RESPONSE.' + type.type | translate }} + + + + + + + {{ 'APP.AUTHMETHOD' | translate }} + + + {{ 'APP.OIDC.AUTHMETHOD.' + type.type | translate }} + {{ 'APP.API.AUTHMETHOD.' + type.type | translate }} + + + +
+ +
+
-

{{ 'APP.OIDC.POSTREDIRECTTITLE' | translate }}

-

- {{ 'APP.OIDC.REDIRECTDESCRIPTIONNATIVE' | translate }} -

-

- {{ 'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate }} -

- - -
- - -
- - - - {{ 'APP.OIDC.OVERVIEWSECTION' | translate }} -

{{ 'APP.OIDC.OVERVIEWTITLE' | translate }}

-
- - {{ 'APP.NAME' | translate }} - - - {{ oidcAppRequest.name }} - -
- - -
- - {{ 'APP.TYPE' | translate }} - - - {{ 'APP.OIDC.APPTYPE.' + oidcAppRequest.appType | translate }} - -
-
- - {{ 'APP.GRANT' | translate }} - - - [ - {{ 'APP.OIDC.GRANT.' + element | translate }} - {{ i < oidcAppRequest.grantTypesList.length - 1 ? ', ' : '' }} ] - -
-
- - {{ 'APP.OIDC.RESPONSETYPE' | translate }} - - - [ - {{ 'APP.OIDC.RESPONSE.' + element | translate }} - {{ i < oidcAppRequest.responseTypesList.length - 1 ? ', ' : '' }} ] - -
- -
- - {{ 'APP.AUTHMETHOD' | translate }} - - - - {{ 'APP.OIDC.AUTHMETHOD.' + oidcAppRequest?.authMethodType | translate }} - - -
- -
- - {{ 'APP.OIDC.REDIRECT' | translate }} - - - [ - {{ redirect }} - {{ i < oidcAppRequest.redirectUrisList.length - 1 ? ', ' : '' }} ] - -
- -
- - {{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }} - - - [ - {{ redirect }} - {{ i < oidcAppRequest.postLogoutRedirectUrisList.length - 1 ? ', ' : '' }} ] - -
-
- - -
- - {{ 'APP.AUTHMETHOD' | translate }} - - - - {{ 'APP.API.AUTHMETHOD.' + apiAppRequest?.authMethodType | translate }} - - -
-
- -
- - -
-
- - -
- -
- - {{ 'APP.NAME' | translate }} - - - - - {{ 'APP.TYPE' | translate }} - - - {{ appType.titleI18nKey | translate }} - - - - - - - {{ 'APP.OIDC.GRANTTYPE' | translate }} - - - {{ 'APP.OIDC.GRANT.' + grant.type | translate }} - - - - - - {{ 'APP.OIDC.RESPONSETYPE' | translate }} - - - {{ 'APP.OIDC.RESPONSE.' + type.type | translate }} - - - - - - - {{ 'APP.AUTHMETHOD' | translate }} - - - {{ 'APP.OIDC.AUTHMETHOD.' + type.type | translate }} - {{ 'APP.API.AUTHMETHOD.' + type.type | translate }} - - - -
- -
-
- - - - - -
-
- - - +
-
+ + +
-
+
diff --git a/console/src/app/pages/projects/apps/app-create/app-create.component.scss b/console/src/app/pages/projects/apps/app-create/app-create.component.scss index 07a7a1ec5..a040ea3e5 100644 --- a/console/src/app/pages/projects/apps/app-create/app-create.component.scss +++ b/console/src/app/pages/projects/apps/app-create/app-create.component.scss @@ -12,122 +12,101 @@ p.desc { display: block; } -.abort-container { +.name-formfield { + max-width: 400px; + display: block; +} + +.app-create-container { + padding-top: 2rem; + + .progress-bar { + margin-bottom: 1rem; + } +} + +.margin-right { + margin-right: 0.5rem; +} + +.full-width { + width: 100%; +} + +.stepper { + background: inherit !important; + margin: 0 -1.5rem; + + .formfield { + max-width: 400px; + } + + .step-title { + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .step-description { + font-size: 0.9rem; + } +} + +.checkbox-container { + display: flex; + flex-direction: column; + + .checkbox { + margin: 0.5rem 0; + } +} + +.row { + display: flex; + justify-content: space-between; + + .left, + .right { + margin-bottom: 0.5rem; + font-size: 14px; + } +} + +.app-create-actions { + margin-top: 1rem; display: flex; align-items: center; - margin-bottom: 2rem; - .abort { - font-size: 1.2rem; - margin-left: 2rem; + .bck-button { + margin-right: 1rem; } - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; + .create-button { + padding: 0.5rem 4rem; } } -.app-create-content { - padding-left: 4.5rem; - - .name-formfield { - max-width: 400px; - display: block; - } - - .app-create-container { - padding-top: 2rem; - - .progress-bar { - margin-bottom: 1rem; - } - } - - .margin-right { - margin-right: 0.5rem; - } - - .full-width { - width: 100%; - } - - .stepper { - background: inherit !important; - margin: 0 -1.5rem; +.dev { + .content { + display: flex; + margin: 0 -0.5rem; + flex-wrap: wrap; + flex-direction: row; .formfield { - max-width: 400px; - } + flex: 1; + box-sizing: border-box; + margin: 0 0.5rem; - .step-title { - font-size: 1rem; - text-transform: uppercase; - letter-spacing: 0.05em; - } - - .step-description { - font-size: 0.9rem; - } - } - - .checkbox-container { - display: flex; - flex-direction: column; - - .checkbox { - margin: 0.5rem 0; - } - } - - .row { - display: flex; - justify-content: space-between; - - .left, - .right { - margin-bottom: 0.5rem; - font-size: 14px; - } - } - - .app-create-actions { - margin-top: 1rem; - display: flex; - align-items: center; - - .bck-button { - margin-right: 1rem; - } - - .create-button { - padding: 0.5rem 4rem; - } - } - - .dev { - .content { - display: flex; - margin: 0 -0.5rem; - flex-wrap: wrap; - flex-direction: row; - - .formfield { - flex: 1; - box-sizing: border-box; - margin: 0 0.5rem; - - &.full-width { - flex-basis: 80%; - } + &.full-width { + flex-basis: 80%; } } + } - .continue-button { - margin-top: 3rem; - display: block; - padding: 0.5rem 4rem; - } + .continue-button { + margin-top: 3rem; + display: block; + padding: 0.5rem 4rem; } } diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html index ea153af43..5848f103b 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html @@ -1,150 +1,90 @@ - - -
- + + +
+
- +
- - - -
- {{errorMessage}} + {{ errorMessage }}
- - +
+

{{ 'APP.COMPLIANCE' | translate }}

+ +
    +
  • + {{ problem.localizedMessage }} +
  • +
+
+
- - - -
- {{'APP.OIDC.REDIRECTDESCRIPTIONNATIVE' | translate}} - - {{ 'APP.OIDC.DEVMODE' | translate }} - -
-
- -
- {{'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate}} - - {{ 'APP.OIDC.DEVMODE' | translate }} - -
-
- - - - - - - -
- -
-
-
- - - -

{{'APP.ADDITIONALORIGINSDESC' | translate}}

- - - -
- -
-
-
- - - -
-
-

{{environmentV.key}}

-
-
- -
-
-
-
-
-
- -
-
-

{{'APP.COMPLIANCE' | translate}}

- -
    -
  • - {{problem.localizedMessage}}
  • -
-
-
+
+

{{ currentRadioItemAuthType.titleI18nKey | translate }}

+

{{ currentRadioItemAuthType.descI18nKey | translate }}

+ + +
+
@@ -156,7 +96,7 @@ {{ 'APP.TYPE' | translate }} - {{ 'APP.OIDC.APPTYPE.'+type | translate }} + {{ 'APP.OIDC.APPTYPE.' + type | translate }} @@ -165,7 +105,7 @@ {{ 'APP.OIDC.RESPONSETYPE' | translate }} - {{ 'APP.OIDC.RESPONSE.'+type | translate }} + {{ 'APP.OIDC.RESPONSE.' + type | translate }} @@ -174,7 +114,7 @@ {{ 'APP.AUTHMETHOD' | translate }} - {{ 'APP.OIDC.AUTHMETHOD.'+type | translate }} + {{ 'APP.OIDC.AUTHMETHOD.' + type | translate }} @@ -183,62 +123,31 @@ {{ 'APP.OIDC.GRANTTYPE' | translate }} - {{ 'APP.OIDC.GRANT.'+grant | translate }} + {{ 'APP.OIDC.GRANT.' + grant | translate }} - + [checked]="this.grantTypesList?.value.includes(OIDCGrantType.OIDC_GRANT_TYPE_REFRESH_TOKEN)" + > {{ 'APP.OIDC.REFRESHTOKEN' | translate }}
- -

{{'APP.OIDC.TOKENSECTIONTITLE' | translate}}

- - - {{ 'APP.OIDC.TOKENTYPE' | translate }} - - - {{ 'APP.OIDC.TOKENTYPE'+type | translate }} - - - - - - {{'APP.OIDC.ACCESSTOKENROLEASSERTION' | translate}} - - - {{'APP.OIDC.ACCESSTOKENROLEASSERTION_DESCRIPTION' | translate}} - - - {{'APP.OIDC.IDTOKENROLEASSERTION' | translate}} - - {{'APP.OIDC.IDTOKENROLEASSERTION_DESCRIPTION' | translate}} - - - - {{'APP.OIDC.IDTOKENUSERINFOASSERTION' | translate}} - - {{'APP.OIDC.IDTOKENUSERINFOASSERTION_DESCRIPTION' | translate}} - - -

ClockSkew

- - - - {{'APP.OIDC.CLOCKSKEW' | translate}} -
-
@@ -246,14 +155,220 @@ + + + + + {{ 'APP.OIDC.TOKENTYPE' | translate }} + + + {{ 'APP.OIDC.TOKENTYPE' + type | translate }} + + + + + + {{ 'APP.OIDC.ACCESSTOKENROLEASSERTION' | translate }} + + + {{ 'APP.OIDC.ACCESSTOKENROLEASSERTION_DESCRIPTION' | translate }} + + + + {{ 'APP.OIDC.IDTOKENROLEASSERTION' | translate }} + + {{ 'APP.OIDC.IDTOKENROLEASSERTION_DESCRIPTION' | translate }} + + + + {{ 'APP.OIDC.IDTOKENUSERINFOASSERTION' | translate }} + + {{ 'APP.OIDC.IDTOKENUSERINFOASSERTION_DESCRIPTION' | translate }} + + +

ClockSkew

+ + + + {{ 'APP.OIDC.CLOCKSKEW' | translate }} + + +
+ +
+ +
+
+ + + + +
+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONNATIVE' | translate }} + + {{ 'APP.OIDC.DEVMODE' | translate }} + +
+
+ +
+ {{ 'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate }} + + {{ 'APP.OIDC.DEVMODE' | translate }} + +
+
+ + + + + + + +
+ +
+
+
+ + + +

{{ 'APP.ADDITIONALORIGINSDESC' | translate }}

+ + + +
+ +
+
+
+ + + +
+
+

{{ environmentV.key }}

+
+
+ +
+
+
+
+
+
+ - +
-
@@ -261,11 +376,9 @@
- -
-
\ No newline at end of file +
diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss b/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss index 040e16236..e2926272a 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss @@ -44,11 +44,6 @@ flex-direction: column; margin: 0 -0.5rem; - @media only screen and (min-width: 500px) { - flex-direction: row; - flex-wrap: wrap; - } - .app-info-wrapper { display: flex; flex-direction: column; @@ -77,6 +72,7 @@ flex-direction: column; width: 100%; align-items: stretch; + margin-bottom: 0.5rem; button { transition: opacity 0.15s ease-in-out; @@ -109,22 +105,53 @@ } } + .compliance { + padding-bottom: 1rem; + padding-top: 0.5rem; + border-bottom: 1px solid $divider-color; + + .compliance-title { + margin: 1rem 0 1rem 0; + font-size: 16px; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .problem { + font-size: 14px; + margin: 0 0 0.5rem 0; + display: block; + } + } + .app-main-content { - border-top: 1px solid $divider-color; - margin-top: 1.5rem; - } -} + margin-top: 0.5rem; -.compliance { - .compliance-title { - margin: 1rem 0 1rem 0; - font-size: 16px; - } + .current-auth-method { + display: flex; + align-items: center; + border: 1px solid if($is-dark-theme, rgba(#8795a1, 0.2), rgba(#8795a1, 0.2)); + border-radius: 0.5rem; + padding: 0.5rem 1rem; + margin-bottom: 1rem; - .problem { - font-size: 14px; - margin: 0 0 0.5rem 0; - display: block; + h3 { + margin: 0 1rem 0 0; + } + + p { + font-size: 14px; + margin: 0; + } + + .fill-space { + flex: 1; + } + + button { + margin-left: 1rem; + } + } } } diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts b/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts index 5851f3dad..6a1761313 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts @@ -5,7 +5,6 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { AbstractControl, FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { MatDialog } from '@angular/material/dialog'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Duration } from 'google-protobuf/google/protobuf/duration_pb'; @@ -14,7 +13,6 @@ import { take } from 'rxjs/operators'; import { RadioItemAuthType } from 'src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component'; import { ChangeType } from 'src/app/modules/changes/changes.component'; import { InfoSectionType } from 'src/app/modules/info-section/info-section.component'; -import { CnslLinks } from 'src/app/modules/links/links.component'; import { NameDialogComponent } from 'src/app/modules/name-dialog/name-dialog.component'; import { SidenavSetting } from 'src/app/modules/sidenav/sidenav.component'; import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; @@ -52,6 +50,7 @@ import { PKCE_METHOD, POST_METHOD, } from '../authmethods'; +import { AuthMethodDialogComponent } from './auth-method-dialog/auth-method-dialog.component'; @Component({ selector: 'cnsl-app-detail', @@ -103,6 +102,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { public AppState: any = AppState; public oidcForm!: FormGroup; + public oidcTokenForm!: FormGroup; public apiForm!: FormGroup; public redirectUrisList: string[] = []; @@ -122,7 +122,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { public requestRedirectValuesSubject$: Subject = new Subject(); public copiedKey: any = ''; - public nextLinks: Array = []; public InfoSectionType: any = InfoSectionType; public copied: string = ''; @@ -139,7 +138,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { private mgmtService: ManagementService, private authService: GrpcAuthService, private router: Router, - private snackbar: MatSnackBar, private breadcrumbService: BreadcrumbService, private http: HttpClient, ) { @@ -150,6 +148,9 @@ export class AppDetailComponent implements OnInit, OnDestroy { grantTypesList: [{ value: [], disabled: true }], appType: [{ value: '', disabled: true }], authMethodType: [{ value: '', disabled: true }], + }); + + this.oidcTokenForm = this.fb.group({ accessTokenType: [{ value: '', disabled: true }], accessTokenRoleAssertion: [{ value: false, disabled: true }], idTokenRoleAssertion: [{ value: false, disabled: true }], @@ -212,32 +213,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.subscription?.unsubscribe(); } - private initLinks(): void { - this.nextLinks = [ - { - i18nTitle: 'APP.PAGES.NEXTSTEPS.0.TITLE', - i18nDesc: 'APP.PAGES.NEXTSTEPS.0.DESC', - routerLink: ['/projects', this.projectId, 'roles'], - iconClasses: 'las la-user-tag', - }, - { - i18nTitle: 'APP.PAGES.NEXTSTEPS.1.TITLE', - i18nDesc: 'APP.PAGES.NEXTSTEPS.1.DESC', - routerLink: ['/users', 'create'], - iconClasses: 'las la-user-plus', - }, - { - i18nTitle: 'APP.PAGES.NEXTSTEPS.2.TITLE', - i18nDesc: 'APP.PAGES.NEXTSTEPS.2.DESC', - href: 'https://docs.zitadel.comm', - iconClasses: 'las la-people-carry', - }, - ]; - } - private async getData(projectId: string, appId: string): Promise { - this.initLinks(); - this.mgmtService.getIAM().then((iam) => { this.isZitadel = iam.iamProjectId === this.projectId; }); @@ -277,6 +253,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.settingsList = [ { id: 'configuration', i18nKey: 'APP.CONFIGURATION' }, + { id: 'token', i18nKey: 'APP.TOKEN' }, { id: 'redirect-uris', i18nKey: 'APP.OIDC.REDIRECTSECTIONTITLE' }, { id: 'additional-origins', i18nKey: 'APP.ADDITIONALORIGINS' }, { id: 'urls', i18nKey: 'APP.URLS' }, @@ -317,6 +294,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { if (allowed) { this.oidcForm.enable(); + this.oidcTokenForm.enable(); this.apiForm.enable(); } @@ -332,10 +310,11 @@ export class AppDetailComponent implements OnInit, OnDestroy { if (this.app.oidcConfig?.clockSkew) { const inSecs = this.app.oidcConfig?.clockSkew.seconds + this.app.oidcConfig?.clockSkew.nanos / 100000; - this.oidcForm.controls['clockSkewSeconds'].setValue(inSecs); + this.oidcTokenForm.controls['clockSkewSeconds'].setValue(inSecs); } if (this.app.oidcConfig) { this.oidcForm.patchValue(this.app.oidcConfig); + this.oidcTokenForm.patchValue(this.app.oidcConfig); } if (this.app.apiConfig) { this.apiForm.patchValue(this.app.apiConfig); @@ -350,8 +329,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { } else { this.authMethods = this.authMethods.filter((element) => element !== CUSTOM_METHOD); } - - this.showSaveSnack(); }); this.apiForm.valueChanges.subscribe((apiConfig) => { @@ -363,8 +340,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { } else { this.authMethods = this.authMethods.filter((element) => element !== CUSTOM_METHOD); } - - this.showSaveSnack(); }); } }) @@ -377,20 +352,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.docs = await this.mgmtService.getOIDCInformation(); } - private async showSaveSnack(): Promise { - const message = await this.translate.get('APP.TOAST.CONFIGCHANGED').toPromise(); - const action = await this.translate.get('ACTIONS.SAVENOW').toPromise(); - - const snackRef = this.snackbar.open(message, action, { duration: 5000, verticalPosition: 'top' }); - snackRef.onAction().subscribe(() => { - if (this.app.oidcConfig) { - this.saveOIDCApp(); - } else if (this.app.apiConfig) { - this.saveAPIApp(); - } - }); - } - private getAuthMethodOptions(type: string): void { if (type === 'OIDC') { switch (this.app.oidcConfig?.appType) { @@ -426,6 +387,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { (partialConfig.oidc as Partial).authMethodType ?? OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE; this.oidcForm.patchValue(this.app.oidcConfig); + this.oidcTokenForm.patchValue(this.app.oidcConfig); } else if (partialConfig && partialConfig.api && this.app.apiConfig) { this.app.apiConfig.authMethodType = (partialConfig.api as Partial).authMethodType ?? APIAuthMethodType.API_AUTH_METHOD_TYPE_BASIC; @@ -444,6 +406,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { }, width: '400px', }); + dialogRef.afterClosed().subscribe((resp) => { if (resp && this.projectId && this.app.id) { this.mgmtService @@ -519,40 +482,53 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.requestRedirectValuesSubject$.next(); if (this.oidcForm.valid) { if (this.app.oidcConfig) { + // configuration this.app.oidcConfig.responseTypesList = this.responseTypesList?.value; this.app.oidcConfig.grantTypesList = this.grantTypesList?.value; this.app.oidcConfig.appType = this.appType?.value; this.app.oidcConfig.authMethodType = this.authMethodType?.value; - this.app.oidcConfig.redirectUrisList = this.redirectUrisList; - this.app.oidcConfig.postLogoutRedirectUrisList = this.postLogoutRedirectUrisList; - this.app.oidcConfig.additionalOriginsList = this.additionalOriginsList; - this.app.oidcConfig.devMode = this.devMode?.value; + + // token this.app.oidcConfig.accessTokenType = this.accessTokenType?.value; this.app.oidcConfig.accessTokenRoleAssertion = this.accessTokenRoleAssertion?.value; this.app.oidcConfig.idTokenRoleAssertion = this.idTokenRoleAssertion?.value; this.app.oidcConfig.idTokenUserinfoAssertion = this.idTokenUserinfoAssertion?.value; + // redirects + this.app.oidcConfig.redirectUrisList = this.redirectUrisList; + this.app.oidcConfig.postLogoutRedirectUrisList = this.postLogoutRedirectUrisList; + this.app.oidcConfig.additionalOriginsList = this.additionalOriginsList; + this.app.oidcConfig.devMode = this.devMode?.value; + const req = new UpdateOIDCAppConfigRequest(); req.setProjectId(this.projectId); req.setAppId(this.app.id); - req.setRedirectUrisList(this.app.oidcConfig.redirectUrisList); + + // configuration req.setResponseTypesList(this.app.oidcConfig.responseTypesList); - req.setAdditionalOriginsList(this.app.oidcConfig.additionalOriginsList); req.setAuthMethodType(this.app.oidcConfig.authMethodType); - req.setPostLogoutRedirectUrisList(this.app.oidcConfig.postLogoutRedirectUrisList); req.setGrantTypesList(this.app.oidcConfig.grantTypesList); req.setAppType(this.app.oidcConfig.appType); - req.setDevMode(this.app.oidcConfig.devMode); + + // token req.setAccessTokenType(this.app.oidcConfig.accessTokenType); req.setAccessTokenRoleAssertion(this.app.oidcConfig.accessTokenRoleAssertion); req.setIdTokenRoleAssertion(this.app.oidcConfig.idTokenRoleAssertion); req.setIdTokenUserinfoAssertion(this.app.oidcConfig.idTokenUserinfoAssertion); + + // redirects + req.setRedirectUrisList(this.app.oidcConfig.redirectUrisList); + req.setAdditionalOriginsList(this.app.oidcConfig.additionalOriginsList); + req.setPostLogoutRedirectUrisList(this.app.oidcConfig.postLogoutRedirectUrisList); + req.setDevMode(this.app.oidcConfig.devMode); + if (this.clockSkewSeconds?.value) { const dur = new Duration(); dur.setSeconds(Math.floor(this.clockSkewSeconds?.value)); dur.setNanos(Math.floor(this.clockSkewSeconds?.value % 1) * 10000); req.setClockSkew(dur); } + this.mgmtService .updateOIDCAppConfig(req) .then(() => { @@ -622,6 +598,24 @@ export class AppDetailComponent implements OnInit, OnDestroy { }); } + public changeAuthMethod(): void { + const ref = this.dialog.open(AuthMethodDialogComponent, { + data: { + radioItemAuthType: this.currentRadioItemAuthType, + initialAuthMethod: this.initialAuthMethod, + currentAuthMethod: this.currentAuthMethod, + authMethods: this.authMethods, + isOIDC: this.app?.oidcConfig !== undefined, + }, + }); + + ref.afterClosed().subscribe((authMethod: string) => { + if (authMethod) { + this.setPartialConfigFromAuthMethod(authMethod); + } + }); + } + public regenerateAPIClientSecret(): void { this.mgmtService .regenerateAPIClientSecret(this.app.id, this.projectId) @@ -639,6 +633,10 @@ export class AppDetailComponent implements OnInit, OnDestroy { }); } + public get currentRadioItemAuthType(): RadioItemAuthType | undefined { + return this.authMethods.find((i) => i.key === this.initialAuthMethod); + } + public navigateBack(): void { this._location.back(); } @@ -672,22 +670,22 @@ export class AppDetailComponent implements OnInit, OnDestroy { } public get accessTokenType(): AbstractControl | null { - return this.oidcForm.get('accessTokenType'); + return this.oidcTokenForm.get('accessTokenType'); } public get idTokenRoleAssertion(): AbstractControl | null { - return this.oidcForm.get('idTokenRoleAssertion'); + return this.oidcTokenForm.get('idTokenRoleAssertion'); } public get accessTokenRoleAssertion(): AbstractControl | null { - return this.oidcForm.get('accessTokenRoleAssertion'); + return this.oidcTokenForm.get('accessTokenRoleAssertion'); } public get idTokenUserinfoAssertion(): AbstractControl | null { - return this.oidcForm.get('idTokenUserinfoAssertion'); + return this.oidcTokenForm.get('idTokenUserinfoAssertion'); } public get clockSkewSeconds(): AbstractControl | null { - return this.oidcForm.get('clockSkewSeconds'); + return this.oidcTokenForm.get('clockSkewSeconds'); } } diff --git a/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.html b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.html new file mode 100644 index 000000000..7e1d1ce84 --- /dev/null +++ b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.html @@ -0,0 +1,31 @@ +

+ {{ 'USER.CODEDIALOG.TITLE' | translate }} {{ data?.number }} +

+

{{ 'USER.CODEDIALOG.DESCRIPTION' | translate }}

+
+ + +
+
+ + + +
diff --git a/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.scss b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.scss new file mode 100644 index 000000000..e5b1b3b77 --- /dev/null +++ b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.scss @@ -0,0 +1,25 @@ +h1 { + font-size: 1.5rem; + margin: 0; +} + +.desc { + font-size: 14px; +} + +.formfield { + width: 100%; +} + +.action { + display: flex; + justify-content: flex-end; + + .ok-button { + margin-left: 0.5rem; + } + + button { + border-radius: 0.5rem; + } +} diff --git a/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.spec.ts b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.spec.ts new file mode 100644 index 000000000..ac6c6cf97 --- /dev/null +++ b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; + +import { AuthMethodDialogComponent } from './auth-method-dialog.component'; + +describe('AuthMethodDialogComponent', () => { + let component: AuthMethodDialogComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [AuthMethodDialogComponent], + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AuthMethodDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.ts b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.ts new file mode 100644 index 000000000..2199b298d --- /dev/null +++ b/console/src/app/pages/projects/apps/app-detail/auth-method-dialog/auth-method-dialog.component.ts @@ -0,0 +1,22 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'cnsl-auth-method-dialog', + templateUrl: './auth-method-dialog.component.html', + styleUrls: ['./auth-method-dialog.component.scss'], +}) +export class AuthMethodDialogComponent { + public authmethod: string = ''; + constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) { + this.authmethod = data.initialAuthMethod; + } + + public closeDialog(): void { + this.dialogRef.close(); + } + + public closeDialogWithMethod(): void { + this.dialogRef.close(this.authmethod); + } +} diff --git a/console/src/app/pages/projects/apps/apps.module.ts b/console/src/app/pages/projects/apps/apps.module.ts index 08becc22b..f89102160 100644 --- a/console/src/app/pages/projects/apps/apps.module.ts +++ b/console/src/app/pages/projects/apps/apps.module.ts @@ -23,10 +23,10 @@ import { AppRadioModule } from 'src/app/modules/app-radio/app-radio.module'; import { CardModule } from 'src/app/modules/card/card.module'; import { ChangesModule } from 'src/app/modules/changes/changes.module'; import { ClientKeysModule } from 'src/app/modules/client-keys/client-keys.module'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InfoRowModule } from 'src/app/modules/info-row/info-row.module'; import { InfoSectionModule } from 'src/app/modules/info-section/info-section.module'; import { InputModule } from 'src/app/modules/input/input.module'; -import { LinksModule } from 'src/app/modules/links/links.module'; import { MetaLayoutModule } from 'src/app/modules/meta-layout/meta-layout.module'; import { NameDialogModule } from 'src/app/modules/name-dialog/name-dialog.module'; import { SidenavModule } from 'src/app/modules/sidenav/sidenav.module'; @@ -38,6 +38,7 @@ import { RedirectPipeModule } from 'src/app/pipes/redirect-pipe/redirect-pipe.mo import { AdditionalOriginsComponent } from './additional-origins/additional-origins.component'; import { AppCreateComponent } from './app-create/app-create.component'; import { AppDetailComponent } from './app-detail/app-detail.component'; +import { AuthMethodDialogComponent } from './app-detail/auth-method-dialog/auth-method-dialog.component'; import { AppSecretDialogComponent } from './app-secret-dialog/app-secret-dialog.component'; import { AppsRoutingModule } from './apps-routing.module'; import { RedirectUrisComponent } from './redirect-uris/redirect-uris.component'; @@ -49,12 +50,12 @@ import { RedirectUrisComponent } from './redirect-uris/redirect-uris.component'; AppSecretDialogComponent, RedirectUrisComponent, AdditionalOriginsComponent, + AuthMethodDialogComponent, ], imports: [ CommonModule, A11yModule, RedirectPipeModule, - LinksModule, NameDialogModule, AppRadioModule, AppsRoutingModule, @@ -66,6 +67,7 @@ import { RedirectUrisComponent } from './redirect-uris/redirect-uris.component'; HasRoleModule, SidenavModule, MatChipsModule, + CreateLayoutModule, ClientKeysModule, HasRolePipeModule, MatIconModule, diff --git a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.html b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.html index 22c6f5445..192c44bec 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.html +++ b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.html @@ -1,62 +1,54 @@ -
-
- - {{ 'PROJECT.GRANT.CREATE.TITLE' | translate }}Step - {{ currentCreateStep }} of - {{ STEPS }} -
+ + +

{{ 'PROJECT.GRANT.CREATE.SEL_ORG' | translate }}

+

{{ 'PROJECT.GRANT.CREATE.SEL_ORG_DESC' | translate }}

-
+
+ + {{ 'PROJECT.GRANT.CREATE.SEL_ORG_FORMFIELD' | translate }} + + + + +
+ + {{ 'PROJECT.GRANT.CREATE.FOR_ORG' | translate }} {{ org?.name }} + + + +

{{ 'PROJECT.GRANT.CREATE.SEL_ROLES' | translate }}

+ + + + + +
+ +
-

{{'PROJECT.GRANT.CREATE.SEL_ORG' | translate}}

-

{{'PROJECT.GRANT.CREATE.SEL_ORG_DESC' | translate}}

- -
- - {{'PROJECT.GRANT.CREATE.SEL_ORG_FORMFIELD' | translate}} - - - - -
- - - {{'PROJECT.GRANT.CREATE.FOR_ORG' | translate}} {{org?.name}} - +
- -

{{'PROJECT.GRANT.CREATE.SEL_ROLES' | translate}}

- - - - - + + + - -
- - - - - - - - -
-
\ No newline at end of file +
diff --git a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.scss b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.scss index f2fd39dd0..6b1695f95 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.scss +++ b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.scss @@ -1,34 +1,8 @@ -.container { - padding: 4rem 0 2rem 0; +form { + max-width: 35rem; - .abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - white-space: nowrap; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } - } - - .create-content { - padding-left: 4.5rem; - - form { - max-width: 35rem; - - .org-domain { - margin-right: 1rem; - } - } + .org-domain { + margin-right: 1rem; } } diff --git a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.ts b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.ts index 99ac5e3e3..533cec389 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.ts +++ b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.component.ts @@ -21,7 +21,7 @@ export class ProjectGrantCreateComponent implements OnInit, OnDestroy { public grantId: string = ''; public rolesKeyList: string[] = []; - public STEPS: number = 2; + public createSteps: number = 2; public currentCreateStep: number = 1; private destroy$: Subject = new Subject(); diff --git a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.module.ts b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.module.ts index e6ac1b04d..4a6151e7d 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.module.ts +++ b/console/src/app/pages/projects/owned-projects/project-grant-create/project-grant-create.module.ts @@ -10,6 +10,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; import { CardModule } from 'src/app/modules/card/card.module'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { ProjectRolesTableModule } from 'src/app/modules/project-roles-table/project-roles-table.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; @@ -25,6 +26,7 @@ import { ProjectGrantCreateComponent } from './project-grant-create.component'; MatAutocompleteModule, MatChipsModule, MatButtonModule, + CreateLayoutModule, InputModule, CardModule, MatCheckboxModule, diff --git a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html index 4b4bdc93a..851741cd7 100644 --- a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html +++ b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html @@ -1,14 +1,10 @@ -
-
- - {{ 'PROJECT.ROLE.ADDTITLE' | translate }}Step - {{ currentCreateStep }} of - {{ createSteps }} -
- -

{{'PROJECT.ROLE.ADDDESCRIPTION' | translate}}

+ +

{{ 'PROJECT.ROLE.ADDDESCRIPTION' | translate }}

@@ -27,20 +23,32 @@
-
- -
\ No newline at end of file + diff --git a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.scss b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.scss index 260b3e182..73be4c4a2 100644 --- a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.scss +++ b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.scss @@ -1,31 +1,6 @@ -.container { - padding: 4rem 4rem 2rem 4rem; - - @media only screen and (max-width: 450px) { - padding: 4rem 1rem 2rem 1rem; - } - - .abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } - } - - .add-line-btn { - margin-bottom: 1rem; - border-radius: .5rem; - } +.add-line-btn { + margin-bottom: 1rem; + border-radius: 0.5rem; } .newrole-content { @@ -55,7 +30,7 @@ .continue-button { margin-top: 3rem; display: block; - padding: .5rem 4rem; + padding: 0.5rem 4rem; @media only screen and (max-width: 450px) { margin-top: 1rem; diff --git a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.ts b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.ts index a30f36163..5a44e6be8 100644 --- a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.ts +++ b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.ts @@ -36,8 +36,6 @@ export class ProjectRoleCreateComponent implements OnInit, OnDestroy { displayName: new FormControl(''), group: new FormControl(''), }); - public createSteps: number = 1; - public currentCreateStep: number = 1; constructor( private router: Router, diff --git a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.module.ts b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.module.ts index 15eb125fc..bff31e17a 100644 --- a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.module.ts +++ b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.module.ts @@ -5,23 +5,25 @@ import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { ProjectRoleCreateRoutingModule } from './project-role-create-routing.module'; import { ProjectRoleCreateComponent } from './project-role-create.component'; @NgModule({ - declarations: [ProjectRoleCreateComponent], - imports: [ - ProjectRoleCreateRoutingModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - InputModule, - MatButtonModule, - MatIconModule, - MatTooltipModule, - TranslateModule, - ], + declarations: [ProjectRoleCreateComponent], + imports: [ + ProjectRoleCreateRoutingModule, + CommonModule, + FormsModule, + ReactiveFormsModule, + InputModule, + CreateLayoutModule, + MatButtonModule, + MatIconModule, + MatTooltipModule, + TranslateModule, + ], }) -export class ProjectRoleCreateModule { } +export class ProjectRoleCreateModule {} diff --git a/console/src/app/pages/projects/project-create/project-create.component.html b/console/src/app/pages/projects/project-create/project-create.component.html index f2882d3a3..a96ec233a 100644 --- a/console/src/app/pages/projects/project-create/project-create.component.html +++ b/console/src/app/pages/projects/project-create/project-create.component.html @@ -1,34 +1,23 @@ -
-
-
- - {{ 'PROJECT.PAGES.CREATE' | translate }} + +

{{ 'PROJECT.PAGES.CREATE_DESC' | translate }}

+
+
+ + {{ 'PROJECT.NAME' | translate }} + +
-
-

{{ 'PROJECT.PAGES.CREATE_DESC' | translate }}

- -
- - {{ 'PROJECT.NAME' | translate }} - - -
- - - -
-
-
+ + diff --git a/console/src/app/pages/projects/project-create/project-create.component.scss b/console/src/app/pages/projects/project-create/project-create.component.scss index 07df0ea65..a50162196 100644 --- a/console/src/app/pages/projects/project-create/project-create.component.scss +++ b/console/src/app/pages/projects/project-create/project-create.component.scss @@ -2,21 +2,6 @@ h1 { font-weight: 500; } -.abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } -} - -.project-create-content { - padding-left: 4.5rem; -} - .margin-right { margin-right: 0.5rem; } diff --git a/console/src/app/pages/projects/project-create/project-create.module.ts b/console/src/app/pages/projects/project-create/project-create.module.ts index 8c5f47b24..9456c547a 100644 --- a/console/src/app/pages/projects/project-create/project-create.module.ts +++ b/console/src/app/pages/projects/project-create/project-create.module.ts @@ -5,22 +5,24 @@ import { FormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { TranslateModule } from '@ngx-translate/core'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { ProjectCreateRoutingModule } from './project-create-routing.module'; import { ProjectCreateComponent } from './project-create.component'; @NgModule({ - declarations: [ProjectCreateComponent], - imports: [ - A11yModule, - ProjectCreateRoutingModule, - CommonModule, - FormsModule, - InputModule, - MatButtonModule, - MatIconModule, - TranslateModule, - ], + declarations: [ProjectCreateComponent], + imports: [ + A11yModule, + ProjectCreateRoutingModule, + CommonModule, + FormsModule, + CreateLayoutModule, + InputModule, + MatButtonModule, + MatIconModule, + TranslateModule, + ], }) -export class ProjectCreateModule { } +export class ProjectCreateModule {} diff --git a/console/src/app/pages/user-grant-create/user-grant-create.component.html b/console/src/app/pages/user-grant-create/user-grant-create.component.html index 4df3f75af..f7dfb67e7 100644 --- a/console/src/app/pages/user-grant-create/user-grant-create.component.html +++ b/console/src/app/pages/user-grant-create/user-grant-create.component.html @@ -1,80 +1,73 @@ -
-
-
- -

{{ 'GRANTS.CREATE.TITLE' | translate }}

- Step {{ currentCreateStep }} of {{ STEPS }} -
+ -
- -

- {{ 'PROJECT.GRANT.CREATE.ORG_DESCRIPTION' | translate: org }} -
- {{ 'PROJECT.GRANT.CREATE.ORG_DESCRIPTION_DESC' | translate }} -

- - -

{{ 'PROJECT.GRANT.CREATE.SEL_USER' | translate }}

- - - -
- - - - - - - -
- - -

{{ 'PROJECT.GRANT.CREATE.SEL_ROLES' | translate }}

- - - {{ $any(project)?.grantId }} - - - -
- -
- - - - - - - - -
-
+ + + +
-
+ diff --git a/console/src/app/pages/user-grant-create/user-grant-create.component.scss b/console/src/app/pages/user-grant-create/user-grant-create.component.scss index e49012a09..fdbe80243 100644 --- a/console/src/app/pages/user-grant-create/user-grant-create.component.scss +++ b/console/src/app/pages/user-grant-create/user-grant-create.component.scss @@ -1,65 +1,44 @@ -.abort-container { +.user-grant-create-desc { + max-width: 500px; + font-size: 14px; +} + +.block { + display: block; +} + +.btn-container { display: flex; + justify-content: space-between; align-items: center; - margin-bottom: 2rem; + margin-top: 3rem; - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } -} - -.user-grant-create-content { - padding-left: 4.5rem; - - .user-grant-create-desc { - max-width: 500px; - font-size: 14px; - } - - .block { + .small-button { display: block; } - .btn-container { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 3rem; - - .small-button { - display: block; - } - - .big-button { - display: block; - padding: 0.5rem 4rem; - } - } - - .sa-icon { + .big-button { display: block; - width: 32px; - margin: 0 0.5rem; + padding: 0.5rem 4rem; + } +} + +.sa-icon { + display: block; + width: 32px; + margin: 0 0.5rem; - i { - margin: auto; - } + i { + margin: auto; } +} - h2 { - margin-top: 2.5rem; - margin-bottom: 1rem; - font-size: 2rem; +h2 { + margin-top: 2.5rem; + margin-bottom: 1rem; + font-size: 2rem; - &.project-search { - margin-bottom: 1.5rem; - } + &.project-search { + margin-bottom: 1.5rem; } } diff --git a/console/src/app/pages/user-grant-create/user-grant-create.component.ts b/console/src/app/pages/user-grant-create/user-grant-create.component.ts index a2e9e16f4..1ac1fd2cb 100644 --- a/console/src/app/pages/user-grant-create/user-grant-create.component.ts +++ b/console/src/app/pages/user-grant-create/user-grant-create.component.ts @@ -29,7 +29,7 @@ export class UserGrantCreateComponent implements OnDestroy { public rolesList: string[] = []; - public STEPS: number = 2; // project, roles + public createSteps: number = 2; public currentCreateStep: number = 1; public UserGrantContext: any = UserGrantContext; diff --git a/console/src/app/pages/user-grant-create/user-grant-create.module.ts b/console/src/app/pages/user-grant-create/user-grant-create.module.ts index 7d02d9636..1ba458143 100644 --- a/console/src/app/pages/user-grant-create/user-grant-create.module.ts +++ b/console/src/app/pages/user-grant-create/user-grant-create.module.ts @@ -5,10 +5,11 @@ import { MatIconModule } from '@angular/material/icon'; import { MatSelectModule } from '@angular/material/select'; import { TranslateModule } from '@ngx-translate/core'; import { CardModule } from 'src/app/modules/card/card.module'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { ProjectRolesTableModule } from 'src/app/modules/project-roles-table/project-roles-table.module'; import { - SearchProjectAutocompleteModule, + SearchProjectAutocompleteModule, } from 'src/app/modules/search-project-autocomplete/search-project-autocomplete.module'; import { SearchUserAutocompleteModule } from 'src/app/modules/search-user-autocomplete/search-user-autocomplete.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; @@ -23,6 +24,7 @@ import { UserGrantCreateComponent } from './user-grant-create.component'; CommonModule, MatButtonModule, MatIconModule, + CreateLayoutModule, TranslateModule, CardModule, InputModule, diff --git a/console/src/app/pages/users/user-create-machine/user-create-machine.component.html b/console/src/app/pages/users/user-create-machine/user-create-machine.component.html index 1766873bd..46a29181f 100644 --- a/console/src/app/pages/users/user-create-machine/user-create-machine.component.html +++ b/console/src/app/pages/users/user-create-machine/user-create-machine.component.html @@ -1,45 +1,47 @@ -
-
-
- - close - -

{{ 'USER.CREATE.TITLE' | translate }}

Step - 1 of 1 -
- + + -
-
-
- - {{ 'USER.MACHINE.USERNAME' | translate }}* - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - {{ 'USER.VALIDATION.NOEMAIL' | translate }} - - - - {{ 'USER.MACHINE.NAME' | translate }}* - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.MACHINE.DESCRIPTION' | translate }} - - -
-
- -
-
-
+
+
+
+ + {{ 'USER.MACHINE.USERNAME' | translate }}* + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + {{ 'USER.VALIDATION.NOEMAIL' | translate }} + + + + {{ 'USER.MACHINE.NAME' | translate }}* + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.MACHINE.DESCRIPTION' | translate }} + + +
+
+ +
+
-
\ No newline at end of file + diff --git a/console/src/app/pages/users/user-create-machine/user-create-machine.component.scss b/console/src/app/pages/users/user-create-machine/user-create-machine.component.scss index 60bb0fbcb..9b39299d3 100644 --- a/console/src/app/pages/users/user-create-machine/user-create-machine.component.scss +++ b/console/src/app/pages/users/user-create-machine/user-create-machine.component.scss @@ -1,22 +1,4 @@ -.abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } - - .abort-2 { - font-size: 1.2rem; - margin-left: 2rem; - white-space: nowrap; - } -} - .machine-create-main-content { - padding-left: 4.5rem; max-width: 35rem; .machine-create-form { diff --git a/console/src/app/pages/users/user-create-machine/user-create-machine.component.ts b/console/src/app/pages/users/user-create-machine/user-create-machine.component.ts index f14eac765..301364e13 100644 --- a/console/src/app/pages/users/user-create-machine/user-create-machine.component.ts +++ b/console/src/app/pages/users/user-create-machine/user-create-machine.component.ts @@ -1,3 +1,4 @@ +import { Location } from '@angular/common'; import { Component, OnDestroy } from '@angular/core'; import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Router } from '@angular/router'; @@ -24,6 +25,7 @@ export class UserCreateMachineComponent implements OnDestroy { private toast: ToastService, public userService: ManagementService, private fb: FormBuilder, + private _location: Location, breadcrumbService: BreadcrumbService, ) { breadcrumbService.setBreadcrumb([ @@ -73,6 +75,10 @@ export class UserCreateMachineComponent implements OnDestroy { this.sub.unsubscribe(); } + public close(): void { + this._location.back(); + } + public get name(): AbstractControl | null { return this.userForm.get('name'); } diff --git a/console/src/app/pages/users/user-create-machine/user-create-machine.module.ts b/console/src/app/pages/users/user-create-machine/user-create-machine.module.ts index bcdfdbba7..38ba2624b 100644 --- a/console/src/app/pages/users/user-create-machine/user-create-machine.module.ts +++ b/console/src/app/pages/users/user-create-machine/user-create-machine.module.ts @@ -9,31 +9,31 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { DetailLayoutModule } from 'src/app/modules/detail-layout/detail-layout.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { UserCreateMachineRoutingModule } from './user-create-machine-routing.module'; import { UserCreateMachineComponent } from './user-create-machine.component'; - - @NgModule({ - declarations: [UserCreateMachineComponent], - imports: [ - UserCreateMachineRoutingModule, - CommonModule, - FormsModule, - ReactiveFormsModule, - MatSelectModule, - MatButtonModule, - MatIconModule, - MatProgressSpinnerModule, - MatProgressBarModule, - MatCheckboxModule, - MatTooltipModule, - TranslateModule, - DetailLayoutModule, - InputModule, - ], + declarations: [UserCreateMachineComponent], + imports: [ + UserCreateMachineRoutingModule, + CommonModule, + FormsModule, + ReactiveFormsModule, + CreateLayoutModule, + MatSelectModule, + MatButtonModule, + MatIconModule, + MatProgressSpinnerModule, + MatProgressBarModule, + MatCheckboxModule, + MatTooltipModule, + TranslateModule, + DetailLayoutModule, + InputModule, + ], }) -export class UserCreateMachineModule { } +export class UserCreateMachineModule {} diff --git a/console/src/app/pages/users/user-create/user-create.component.html b/console/src/app/pages/users/user-create/user-create.component.html index dd7f23276..7887ef49b 100644 --- a/console/src/app/pages/users/user-create/user-create.component.html +++ b/console/src/app/pages/users/user-create/user-create.component.html @@ -1,167 +1,163 @@ -
-
-
- - close - -

{{ 'USER.CREATE.TITLE' | translate }}

-
+ +
+ -
- +
+
+

{{ 'USER.CREATE.NAMEANDEMAILSECTION' | translate }}

- -
-

{{ 'USER.CREATE.NAMEANDEMAILSECTION' | translate }}

+
+ + {{ 'USER.PROFILE.EMAIL' | translate }}* + + + {{ 'USER.VALIDATION.NOTANEMAIL' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.USERNAME' | translate }}* + + {{ envSuffixLabel }} -
- - {{ 'USER.PROFILE.EMAIL' | translate }}* - - - {{ 'USER.VALIDATION.NOTANEMAIL' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.USERNAME' | translate }}* - - {{ envSuffixLabel }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - {{ 'USER.VALIDATION.NOEMAIL' | translate }} - - - - - {{ 'USER.PROFILE.FIRSTNAME' | translate }}* - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.LASTNAME' | translate }}* - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.NICKNAME' | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - -
- - - -
- - - - -
- - {{ 'USER.PASSWORD.NEWINITIAL' | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PASSWORD.CONFIRMINITIAL' | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - {{ 'USER.PASSWORD.NOTEQUAL' | translate }} - - -
- -
- -

{{ 'USER.CREATE.GENDERLANGSECTION' | translate }}

- -
- - {{ 'USER.PROFILE.GENDER' | translate }} - - - {{ 'GENDERS.' + gender | translate }} - - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - - {{ 'USER.PROFILE.PREFERRED_LANGUAGE' | translate }} - - - {{ 'LANGUAGES.' + language | translate }} - - - {{ 'USER.VALIDATION.REQUIRED' | translate }} - - - -
- -

{{ 'USER.CREATE.ADDRESSANDPHONESECTION' | translate }}

+ + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + {{ 'USER.VALIDATION.NOEMAIL' | translate }} + +
- {{ 'USER.PROFILE.PHONE' | translate }} - - + {{ 'USER.PROFILE.FIRSTNAME' | translate }}* + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.LASTNAME' | translate }}* + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.NICKNAME' | translate }} + + {{ 'USER.VALIDATION.REQUIRED' | translate }}
-
- + + - -
+ +
+ + + +
+
+ + {{ 'USER.PASSWORD.NEWINITIAL' | translate }} + + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PASSWORD.CONFIRMINITIAL' | translate }} + + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + {{ 'USER.PASSWORD.NOTEQUAL' | translate }} + + +
+
+
+ +

{{ 'USER.CREATE.GENDERLANGSECTION' | translate }}

+ +
+ + {{ 'USER.PROFILE.GENDER' | translate }} + + + {{ 'GENDERS.' + gender | translate }} + + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + + {{ 'USER.PROFILE.PREFERRED_LANGUAGE' | translate }} + + + {{ 'LANGUAGES.' + language | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + + +
+ +

{{ 'USER.CREATE.ADDRESSANDPHONESECTION' | translate }}

+ + + {{ 'USER.PROFILE.PHONE' | translate }} + + + {{ 'USER.VALIDATION.REQUIRED' | translate }} + + +
+
+ +
+
-
+ diff --git a/console/src/app/pages/users/user-create/user-create.component.scss b/console/src/app/pages/users/user-create/user-create.component.scss index e3206b2f9..5cbf979da 100644 --- a/console/src/app/pages/users/user-create/user-create.component.scss +++ b/console/src/app/pages/users/user-create/user-create.component.scss @@ -1,16 +1,4 @@ -.abort-container { - display: flex; - align-items: center; - margin-bottom: 2rem; - - .abort { - font-size: 1.2rem; - margin-left: 2rem; - } -} - .user-create-main-content { - padding-left: 4.5rem; max-width: 35rem; @media only screen and (max-width: 500px) { diff --git a/console/src/app/pages/users/user-create/user-create.component.ts b/console/src/app/pages/users/user-create/user-create.component.ts index 5e5b1d2e2..9137f058f 100644 --- a/console/src/app/pages/users/user-create/user-create.component.ts +++ b/console/src/app/pages/users/user-create/user-create.component.ts @@ -1,3 +1,4 @@ +import { Location } from '@angular/common'; import { ChangeDetectorRef, Component, OnDestroy, ViewChild } from '@angular/core'; import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; import { Router } from '@angular/router'; @@ -63,6 +64,7 @@ export class UserCreateComponent implements OnDestroy { private fb: FormBuilder, private mgmtService: ManagementService, private changeDetRef: ChangeDetectorRef, + private _location: Location, breadcrumbService: BreadcrumbService, ) { breadcrumbService.setBreadcrumb([ @@ -94,6 +96,10 @@ export class UserCreateComponent implements OnDestroy { }); } + public close(): void { + this._location.back(); + } + private async loadOrg(): Promise { const domains = await this.mgmtService.listOrgDomains(); const found = domains.resultList.find((resp) => resp.isPrimary); diff --git a/console/src/app/pages/users/user-create/user-create.module.ts b/console/src/app/pages/users/user-create/user-create.module.ts index 4af4988cd..45fcd57b8 100644 --- a/console/src/app/pages/users/user-create/user-create.module.ts +++ b/console/src/app/pages/users/user-create/user-create.module.ts @@ -10,6 +10,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { CreateLayoutModule } from 'src/app/modules/create-layout/create-layout.module'; import { DetailLayoutModule } from 'src/app/modules/detail-layout/detail-layout.module'; import { InfoSectionModule } from 'src/app/modules/info-section/info-section.module'; import { InputModule } from 'src/app/modules/input/input.module'; @@ -26,6 +27,7 @@ import { UserCreateComponent } from './user-create.component'; FormsModule, ReactiveFormsModule, MatSelectModule, + CreateLayoutModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index eab5c5467..81a5e17d7 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -95,6 +95,7 @@ "CANCEL": "Abbrechen", "INFO": "Info", "OK": "OK", + "SELECT": "Auswählen", "VIEW": "Öffnen", "SELECTIONDELETE": "Ausgewählte löschen", "DELETE": "Löschen", @@ -118,6 +119,7 @@ "PREVIOUS": "Zurück", "NEXT": "Weiter", "MORE": "mehr", + "STEP": "Schritt", "TABLE": { "SHOWUSER": "Zeige Benutzer {{value}}" } @@ -1525,6 +1527,7 @@ "COMPLIANCE": "OIDC Einhaltung", "URLS": "Urls", "CONFIGURATION": "Konfiguration", + "TOKEN": "Token Einstellungen", "PAGES": { "TITLE": "Anwendung", "ID": "ID", @@ -1717,8 +1720,8 @@ "TOAST": { "REACTIVATED": "Anwendung reaktiviert.", "DEACTIVATED": "Anwendung deaktiviert.", - "OIDCUPDATED": "OIDC-Konfiguration geändert.", - "APIUPDATED": "API Konfiguration geändert.", + "OIDCUPDATED": "App gespeichert", + "APIUPDATED": "App gespeichert", "UPDATED": "App geändert.", "CREATED": "App erstellt.", "CLIENTSECRETREGENERATED": "Client Secret generiert.", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 534dfdc7a..4bf390738 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -95,6 +95,7 @@ "CANCEL": "Cancel", "INFO": "Info", "OK": "OK", + "SELECT": "Select", "VIEW": "Show", "SELECTIONDELETE": "Delete selection", "DELETE": "Delete", @@ -118,6 +119,7 @@ "PREVIOUS": "Previous", "NEXT": "Next", "MORE": "more", + "STEP": "Step", "TABLE": { "SHOWUSER": "Show user {{value}}" } @@ -1525,6 +1527,7 @@ "COMPLIANCE": "OIDC Compliance", "URLS": "Urls", "CONFIGURATION": "Configuration", + "TOKEN": "Token Settings", "PAGES": { "TITLE": "Application", "ID": "ID", @@ -1717,8 +1720,8 @@ "TOAST": { "REACTIVATED": "Application reactivated.", "DEACTIVATED": "Application deactivated.", - "OIDCUPDATED": "OIDC configuration updated.", - "APIUPDATED": "API configuration updated", + "OIDCUPDATED": "App updated.", + "APIUPDATED": "App updated", "UPDATED": "App updated.", "CREATED": "App created.", "CLIENTSECRETREGENERATED": "client secret generated.", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 8f286c345..b114a84bd 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -95,6 +95,7 @@ "CANCEL": "cancella", "INFO": "Info", "OK": "OK", + "SELECT": "Seleziona", "VIEW": "Mostra", "SELECTIONDELETE": "Elimina selezione", "DELETE": "Elimina", @@ -118,6 +119,7 @@ "PREVIOUS": "Precedente", "NEXT": "Avanti", "MORE": "azioni", + "STEP": "Passo", "TABLE": { "SHOWUSER": "Mostra utente {{value}}" } @@ -1525,6 +1527,7 @@ "COMPLIANCE": "Conformità con OIDC", "URLS": "Urls", "CONFIGURATION": "Configurazione", + "TOKEN": "Impostazioni Token", "PAGES": { "TITLE": "Applicazione", "ID": "ID", @@ -1717,8 +1720,8 @@ "TOAST": { "REACTIVATED": "Applicazione riattivata.", "DEACTIVATED": "Applicazione disattivata.", - "OIDCUPDATED": "Configurazione OIDC aggiornata.", - "APIUPDATED": "Configurazione API aggiornata", + "OIDCUPDATED": "Applicazione aggiornata", + "APIUPDATED": "Applicazione aggiornata", "UPDATED": "App aggiornata.", "CREATED": "App creata.", "CLIENTSECRETREGENERATED": "Client secret generato.",