From 56b527060b00b356365d5a0f5cfca232cfb5fc45 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Thu, 15 Apr 2021 15:54:10 +0200 Subject: [PATCH] fix(console): table pagination, diverse optimizations, lint workspace (#1563) * show app redirect issues, action layout * refactor pagination * tos, privacy * new paginator everywhere * layout width and table optim * lint pt1 * lint config, ts * stylelint * chore(deps-dev): bump @angular/cli from 11.2.7 to 11.2.8 in /console (#1566) * fix: remove app name check on ChangeAPIApplication (#1561) * fix: remove app name check on ChangeAPIApplication * fix APIConfigInvalid message * chore(workflow): ignore tags for docs and codecov flows (#1564) * chore(deps-dev): bump @angular/cli from 11.2.7 to 11.2.8 in /console Bumps [@angular/cli](https://github.com/angular/angular-cli) from 11.2.7 to 11.2.8. - [Release notes](https://github.com/angular/angular-cli/releases) - [Commits](https://github.com/angular/angular-cli/compare/v11.2.7...v11.2.8) Signed-off-by: dependabot[bot] Co-authored-by: Livio Amstutz Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump jasmine-spec-reporter from 6.0.0 to 7.0.0 in /console (#1573) * fix: remove app name check on ChangeAPIApplication (#1561) * fix: remove app name check on ChangeAPIApplication * fix APIConfigInvalid message * chore(workflow): ignore tags for docs and codecov flows (#1564) * chore(deps-dev): bump jasmine-spec-reporter in /console Bumps [jasmine-spec-reporter](https://github.com/bcaudan/jasmine-spec-reporter) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/bcaudan/jasmine-spec-reporter/releases) - [Changelog](https://github.com/bcaudan/jasmine-spec-reporter/blob/master/CHANGELOG.md) - [Commits](https://github.com/bcaudan/jasmine-spec-reporter/compare/v6.0.0...v7.0.0) Signed-off-by: dependabot[bot] Co-authored-by: Livio Amstutz Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @angular-devkit/build-angular from 0.1102.7 to 0.1102.8 in /console (#1574) * fix: remove app name check on ChangeAPIApplication (#1561) * fix: remove app name check on ChangeAPIApplication * fix APIConfigInvalid message * chore(workflow): ignore tags for docs and codecov flows (#1564) * chore(deps-dev): bump @angular-devkit/build-angular in /console Bumps [@angular-devkit/build-angular](https://github.com/angular/angular-cli) from 0.1102.7 to 0.1102.8. - [Release notes](https://github.com/angular/angular-cli/releases) - [Commits](https://github.com/angular/angular-cli/commits) Signed-off-by: dependabot[bot] Co-authored-by: Livio Amstutz Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Max Peintner * chore(deps): bump @types/file-saver from 2.0.1 to 2.0.2 in /console (#1576) * fix: remove app name check on ChangeAPIApplication (#1561) * fix: remove app name check on ChangeAPIApplication * fix APIConfigInvalid message * chore(workflow): ignore tags for docs and codecov flows (#1564) * chore(deps): bump @types/file-saver from 2.0.1 to 2.0.2 in /console Bumps [@types/file-saver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/file-saver) from 2.0.1 to 2.0.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/file-saver) Signed-off-by: dependabot[bot] Co-authored-by: Livio Amstutz Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @angular/language-service from 11.2.8 to 11.2.9 in /console (#1567) * fix: remove app name check on ChangeAPIApplication (#1561) * fix: remove app name check on ChangeAPIApplication * fix APIConfigInvalid message * chore(workflow): ignore tags for docs and codecov flows (#1564) * chore(deps-dev): bump @angular/language-service in /console Bumps [@angular/language-service](https://github.com/angular/angular/tree/HEAD/packages/language-service) from 11.2.8 to 11.2.9. - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/master/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/11.2.9/packages/language-service) Signed-off-by: dependabot[bot] Co-authored-by: Livio Amstutz Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * update protobuf, libphone * chore(deps): bump rxjs from 6.6.3 to 6.6.7 in /console (#1488) Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.6.3 to 6.6.7. - [Release notes](https://github.com/reactivex/rxjs/releases) - [Changelog](https://github.com/ReactiveX/rxjs/blob/6.6.7/CHANGELOG.md) - [Commits](https://github.com/reactivex/rxjs/compare/6.6.3...6.6.7) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/jasmine from 3.6.3 to 3.6.9 in /console (#1485) Bumps [@types/jasmine](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jasmine) from 3.6.3 to 3.6.9. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jasmine) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Max Peintner * chore(deps-dev): bump jasmine-core from 3.6.0 to 3.7.1 in /console (#1445) Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 3.6.0 to 3.7.1. - [Release notes](https://github.com/jasmine/jasmine/releases) - [Changelog](https://github.com/jasmine/jasmine/blob/main/RELEASE.md) - [Commits](https://github.com/jasmine/jasmine/compare/v3.6.0...v3.7.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Max Peintner Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Livio Amstutz --- build/dockerfile | 8 +- console/angular.json | 3 +- console/package-lock.json | 628 +++++++++++------- console/package.json | 20 +- console/src/app/app-routing.module.ts | 2 +- console/src/app/app.component.html | 8 +- console/src/app/app.component.scss | 40 +- console/src/app/app.component.ts | 8 +- .../add-key-dialog.component.ts | 4 +- .../member-create-dialog.component.ts | 3 +- .../modules/app-card/app-card.component.scss | 80 +-- .../app-auth-method-radio.component.scss | 152 ++--- .../app-auth-method-radio.component.ts | 4 +- .../app-type-radio.component.scss | 48 +- .../app-type-radio.component.ts | 2 +- .../modules/changes/changes.component.scss | 231 ++++--- .../app/modules/changes/changes.component.ts | 23 +- .../src/app/modules/changes/changes.module.ts | 2 +- .../client-keys/client-keys.component.html | 4 +- .../client-keys/client-keys.component.ts | 14 +- .../modules/client-keys/client-keys.module.ts | 20 +- .../app/modules/features/features.module.ts | 4 +- .../idp-create/idp-create.component.ts | 2 +- .../idp-table/idp-table.component.html | 6 +- .../idp-table/idp-table.component.scss | 31 +- .../modules/idp-table/idp-table.component.ts | 6 +- .../app/modules/idp-table/idp-table.module.ts | 4 +- .../src/app/modules/idp/idp.component.scss | 26 +- console/src/app/modules/idp/idp.component.ts | 12 +- .../info-section/info-section.component.scss | 32 +- .../info-section/info-section.component.ts | 2 +- .../app/modules/links/links.component.scss | 112 ++-- .../app/modules/links/links.component.spec.ts | 2 +- .../src/app/modules/links/links.component.ts | 2 +- console/src/app/modules/links/links.module.ts | 2 +- .../machine-keys/machine-keys.component.html | 4 +- .../machine-keys/machine-keys.component.ts | 7 +- .../machine-keys/machine-keys.module.ts | 20 +- .../members-table.component.html | 4 +- .../members-table/members-table.component.ts | 6 +- .../members-table/members-table.module.ts | 4 +- console/src/app/modules/meta-layout/meta.scss | 2 +- .../mfa-table/mfa-table.component.scss | 6 +- .../onboarding/onboarding.component.scss | 220 +++--- .../onboarding/onboarding.component.spec.ts | 2 +- .../onboarding/onboarding.component.ts | 21 +- .../paginator/paginator.component.html | 20 + .../paginator/paginator.component.scss | 62 ++ .../paginator/paginator.component.spec.ts | 25 + .../modules/paginator/paginator.component.ts | 57 ++ .../app/modules/paginator/paginator.module.ts | 31 + .../add-idp-dialog.component.ts | 1 - .../login-policy/login-policy.component.scss | 46 +- .../login-policy/login-policy.component.ts | 8 +- .../org-iam-policy/org-iam-policy.module.ts | 2 +- .../password-complexity-policy.component.scss | 2 +- .../password-lockout-policy.component.ts | 3 +- .../policy-grid/policy-grid.component.scss | 13 +- .../policy-grid/policy-grid.component.ts | 4 +- .../project-members-datasource.ts | 9 +- .../project-members.component.ts | 28 +- .../project-roles.component.html | 4 +- .../project-roles.component.scss | 19 +- .../project-roles/project-roles.component.ts | 9 +- .../project-roles/project-roles.module.ts | 4 +- .../refresh-table.component.html | 15 +- .../refresh-table.component.scss | 33 +- .../refresh-table/refresh-table.module.ts | 3 +- .../user-grants/user-grants.component.html | 24 +- .../user-grants/user-grants.component.scss | 6 + .../user-grants/user-grants.component.ts | 6 +- .../modules/user-grants/user-grants.module.ts | 4 +- .../app/pages/grants/grants.component.html | 4 +- .../src/app/pages/home/home.component.scss | 106 +-- console/src/app/pages/home/home.component.ts | 4 +- .../iam/eventstore/eventstore.component.html | 2 +- .../src/app/pages/iam/iam-routing.module.ts | 2 +- .../iam/iam-views/iam-views.component.html | 13 +- console/src/app/pages/iam/iam.component.html | 2 +- console/src/app/pages/iam/iam.component.scss | 72 +- .../orgs/org-detail/org-detail.component.html | 2 +- .../orgs/org-detail/org-detail.component.scss | 64 +- .../orgs/org-list/org-list.component.html | 2 +- .../orgs/org-list/org-list.component.scss | 4 + .../pages/orgs/org-list/org-list.component.ts | 4 +- .../apps/app-create/app-create.component.scss | 4 +- .../apps/app-create/app-create.component.ts | 49 +- .../apps/app-detail/app-detail.component.html | 26 +- .../apps/app-detail/app-detail.component.scss | 96 +-- .../apps/app-detail/app-detail.component.ts | 179 ++--- .../app/pages/projects/apps/authmethods.ts | 33 +- .../src/app/pages/projects/apps/authtypes.ts | 4 +- .../redirect-uris.component.html | 4 +- .../redirect-uris.component.scss | 101 +-- .../redirect-uris.component.spec.ts | 2 +- .../redirect-uris/redirect-uris.component.ts | 2 +- .../granted-project-list.component.html | 4 +- .../granted-project-list.component.ts | 4 +- .../granted-projects.component.html | 2 +- .../granted-projects.module.ts | 4 +- .../application-grid.component.scss | 99 ++- .../applications/applications.component.html | 4 +- .../applications/applications.component.ts | 5 +- .../owned-project-detail.module.ts | 4 +- .../project-grants.component.html | 4 +- .../project-grants.component.ts | 4 +- .../owned-project-list.component.html | 4 +- .../owned-project-list.component.ts | 6 +- .../owned-projects.component.html | 2 +- .../owned-projects/owned-projects.module.ts | 4 +- .../project-grant-detail.component.ts | 33 +- .../pages/signedout/signedout.component.scss | 2 +- .../user-grant-create.component.ts | 2 - .../auth-factor-dialog.component.scss | 52 +- .../auth-factor-dialog.component.ts | 10 +- .../auth-user-detail.component.scss | 1 + .../auth-user-detail.component.ts | 2 +- .../auth-user-mfa/auth-user-mfa.component.ts | 6 +- .../edit-dialog/edit-dialog.component.ts | 4 +- .../user-detail/auth-user-detail/u2f_util.ts | 2 +- .../external-idps.component.html | 4 +- .../external-idps/external-idps.component.ts | 4 +- .../membership-detail.component.html | 4 +- .../membership-detail.component.scss | 6 +- .../membership-detail.component.ts | 10 +- .../membership-detail.module.ts | 4 +- .../users/user-detail/user-detail.module.ts | 4 +- .../user-detail/user-detail.component.ts | 18 +- .../users/user-list/user-list.component.html | 2 +- .../pages/users/user-list/user-list.module.ts | 4 +- .../user-table/user-table.component.html | 6 +- .../user-table/user-table.component.scss | 8 +- .../user-table/user-table.component.ts | 5 +- console/src/app/services/admin.service.ts | 92 +-- console/src/app/services/grpc-auth.service.ts | 29 +- .../services/interceptors/auth.interceptor.ts | 2 +- console/src/app/services/mgmt.service.ts | 53 +- console/src/assets/i18n/de.json | 30 +- console/src/assets/i18n/en.json | 24 +- console/src/styles.scss | 1 - console/src/styles/sidenav-list.scss | 6 +- console/src/styles/table.scss | 4 +- 142 files changed, 2058 insertions(+), 1588 deletions(-) create mode 100644 console/src/app/modules/paginator/paginator.component.html create mode 100644 console/src/app/modules/paginator/paginator.component.scss create mode 100644 console/src/app/modules/paginator/paginator.component.spec.ts create mode 100644 console/src/app/modules/paginator/paginator.component.ts create mode 100644 console/src/app/modules/paginator/paginator.module.ts diff --git a/build/dockerfile b/build/dockerfile index 2f4b762e88..d70a1f684d 100644 --- a/build/dockerfile +++ b/build/dockerfile @@ -74,21 +74,19 @@ RUN build/console/generate-grpc.sh FROM scratch as npm-copy COPY --from=npm-base /console/src/app/proto/generated ./console/src/app/proto/generated - ####################### -## anular dev build +## angular dev build ####################### FROM npm-base as dev-angular-build RUN npm install -g @angular/cli - ####################### -## anular prod build +## angular lint workspace and prod build ####################### FROM npm-base as prod-angular-build +RUN npm run lint RUN npm run prodbuild - ####################### ## Go dependencies ## Speed up this step by mounting your local go mod pkg directory diff --git a/console/angular.json b/console/angular.json index b5c0c4a797..9294a814fc 100644 --- a/console/angular.json +++ b/console/angular.json @@ -115,7 +115,8 @@ "tsconfig.spec.json" ], "exclude": [ - "**/node_modules/**" + "**/node_modules/**", + "**/proto/generated/**" ] } }, diff --git a/console/package-lock.json b/console/package-lock.json index 9191f77724..649fd7ce9b 100644 --- a/console/package-lock.json +++ b/console/package-lock.json @@ -5,25 +5,42 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.7.tgz", - "integrity": "sha512-55SduK1ZpoHDSNd5ACBFVUQ5dMNVLOznJDoec76acrDuY7EZ6bptfjcK329fBQME0Ne6Jvip7zzrmec+PBXS+g==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.8.tgz", + "integrity": "sha512-EMl81SRyTntjE9U9m4piGvlbs2PdmBTVl2LS8GK3fimunlIzebu9WhDwAmqZdm4HEXiYmiBcCbVaHkYTU8k0Kg==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", + "@angular-devkit/core": "11.2.8", "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular-devkit/build-angular": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.7.tgz", - "integrity": "sha512-SDAqqJmX7EP8KIGopZJRTpOWnAAicRbE43pe/D/6Q9nzqN0RA44SP9SIyTAMRYFpRWtgskWf2MOtf5Xt/s83yw==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1102.8.tgz", + "integrity": "sha512-rSGSa5jK/Fsh7PbJz9FnxLQn7zA91yquwd+x4n/VNNqMGuAIAvicBi6SCGUD5LFjMbCjWtyAMqjyqFTpU3c3qw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.7", - "@angular-devkit/build-optimizer": "0.1102.7", - "@angular-devkit/build-webpack": "0.1102.7", - "@angular-devkit/core": "11.2.7", + "@angular-devkit/architect": "0.1102.8", + "@angular-devkit/build-optimizer": "0.1102.8", + "@angular-devkit/build-webpack": "0.1102.8", + "@angular-devkit/core": "11.2.8", "@babel/core": "7.12.10", "@babel/generator": "7.12.11", "@babel/plugin-transform-async-to-generator": "7.12.1", @@ -33,7 +50,7 @@ "@babel/template": "7.12.7", "@discoveryjs/json-ext": "0.5.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "11.2.7", + "@ngtools/webpack": "11.2.8", "ansi-colors": "4.1.1", "autoprefixer": "10.2.4", "babel-loader": "8.2.2", @@ -45,7 +62,7 @@ "core-js": "3.8.3", "critters": "0.0.7", "css-loader": "5.0.1", - "cssnano": "4.1.10", + "cssnano": "4.1.11", "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", @@ -321,9 +338,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -338,17 +355,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -420,9 +437,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz", - "integrity": "sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw==", + "version": "1.0.30001208", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", + "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", "dev": true } } @@ -437,9 +454,9 @@ } }, "electron-to-chromium": { - "version": "1.3.709", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.709.tgz", - "integrity": "sha512-LolItk2/ikSGQ7SN8UkuKVNMBZp3RG7Itgaxj1npsHRzQobj9JjMneZOZfLhtwlYBe5fCJ75k+cVCiDFUs23oA==", + "version": "1.3.712", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz", + "integrity": "sha512-3kRVibBeCM4vsgoHHGKHmPocLqtFAGTrebXxxtgKs87hNUzXrX2NuS3jnBys7IozCnw7viQlozxKkmty2KNfrw==", "dev": true }, "escalade": { @@ -492,6 +509,15 @@ "glob": "^7.1.3" } }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -506,13 +532,19 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, "@angular-devkit/build-optimizer": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.7.tgz", - "integrity": "sha512-OC+2TmkBon7KxeBurtYBmzecUsRMKP8JI0c39HnWePPoQU6yMnYmEeU/3zuIX5hOaxriQwPAx76R7u+9N1dF9w==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1102.8.tgz", + "integrity": "sha512-a5IK3yc7XXHc3obdFc8rhm9neO9LHSJZ1AqusLq/2tmHhFBrLevG4ylG+n9ZnM+bh4PIoUwFN82dneH9C7IBpA==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -543,20 +575,37 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.7.tgz", - "integrity": "sha512-+Z0HCa5tuhN5az3+3zWNFsJEkU6FawPU4kp+pdqQXD8Bzwo7jlsDXfSB2UN50RmveqrZNJxszIvhIjFyVDKXVQ==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1102.8.tgz", + "integrity": "sha512-iyFgrU3VPbUl7/JhxRljkqfvIIwzH5HJaYaObo3QVrvL9vAsRhVk6gQRYxGpSmeTwu64fBE5W3reL2uja7KEoA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.7", - "@angular-devkit/core": "11.2.7", + "@angular-devkit/architect": "0.1102.8", + "@angular-devkit/core": "11.2.8", "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular-devkit/core": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.7.tgz", - "integrity": "sha512-oflo+LsUob5nF0PknivtRdkHH/iMbVNIPRnv/c52Nk7+FUlEx53pkLWBc2rdhTrEptBFMmrpNaa30P+TQrFNkQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.8.tgz", + "integrity": "sha512-iNodaySWW1JrF+oGZCi0rYDJXO96T4K7H6BLz6xapSwFxkY+Xr4CBuTqEp2DKzAZ+sjYFmsItLmNedwOOBnwfA==", "dev": true, "requires": { "ajv": "6.12.6", @@ -578,29 +627,44 @@ "uri-js": "^4.2.2" } }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, "@angular-devkit/schematics": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.7.tgz", - "integrity": "sha512-cnORKnyVtsdVZ180ZZyrmCMeSH1IGK2apfgGGW3UaUZvTAtolQPrqT0RQUK8qLF/RC85xy9QYXApiAaLDUixIw==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.8.tgz", + "integrity": "sha512-EoCgDPr4VfDajoCW5/XDTyxEnaNjE+9XXVp9mXWYMMSBxKCZIrbieN4+SpjxyKDBl2ZKtTtZU1zWJ2Yerk66Cg==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", + "@angular-devkit/core": "11.2.8", "ora": "5.3.0", "rxjs": "6.6.3" }, "dependencies": { "@angular-devkit/core": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.7.tgz", - "integrity": "sha512-oflo+LsUob5nF0PknivtRdkHH/iMbVNIPRnv/c52Nk7+FUlEx53pkLWBc2rdhTrEptBFMmrpNaa30P+TQrFNkQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.8.tgz", + "integrity": "sha512-iNodaySWW1JrF+oGZCi0rYDJXO96T4K7H6BLz6xapSwFxkY+Xr4CBuTqEp2DKzAZ+sjYFmsItLmNedwOOBnwfA==", "dev": true, "requires": { "ajv": "6.12.6", @@ -622,11 +686,26 @@ "uri-js": "^4.2.2" } }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -648,16 +727,16 @@ } }, "@angular/cli": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.7.tgz", - "integrity": "sha512-+0uC485NHE5Z8FCyCAeZnb7OCOZSGzEsUxGS5pEs8V9+c02/FmMg5aFBmxoXJhCWMJnb2QrJgAjb6rgka8e4Hg==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.8.tgz", + "integrity": "sha512-9TWNPKqaOrg+C5DR8jz4LNVzu/wCV0Hqt3JF4ILm9fv93bh2MgqetUKyHdQNAijtHMlOO1uh0EM2Emjlp5JvXQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.7", - "@angular-devkit/core": "11.2.7", - "@angular-devkit/schematics": "11.2.7", - "@schematics/angular": "11.2.7", - "@schematics/update": "0.1102.7", + "@angular-devkit/architect": "0.1102.8", + "@angular-devkit/core": "11.2.8", + "@angular-devkit/schematics": "11.2.8", + "@schematics/angular": "11.2.8", + "@schematics/update": "0.1102.8", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -678,19 +757,30 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.7.tgz", - "integrity": "sha512-55SduK1ZpoHDSNd5ACBFVUQ5dMNVLOznJDoec76acrDuY7EZ6bptfjcK329fBQME0Ne6Jvip7zzrmec+PBXS+g==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.8.tgz", + "integrity": "sha512-EMl81SRyTntjE9U9m4piGvlbs2PdmBTVl2LS8GK3fimunlIzebu9WhDwAmqZdm4HEXiYmiBcCbVaHkYTU8k0Kg==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", + "@angular-devkit/core": "11.2.8", "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, "@angular-devkit/core": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.7.tgz", - "integrity": "sha512-oflo+LsUob5nF0PknivtRdkHH/iMbVNIPRnv/c52Nk7+FUlEx53pkLWBc2rdhTrEptBFMmrpNaa30P+TQrFNkQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.8.tgz", + "integrity": "sha512-iNodaySWW1JrF+oGZCi0rYDJXO96T4K7H6BLz6xapSwFxkY+Xr4CBuTqEp2DKzAZ+sjYFmsItLmNedwOOBnwfA==", "dev": true, "requires": { "ajv": "6.12.6", @@ -698,6 +788,17 @@ "magic-string": "0.25.7", "rxjs": "6.6.3", "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, "ajv": { @@ -760,6 +861,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -909,9 +1016,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -962,9 +1069,9 @@ } }, "@angular/language-service": { - "version": "11.2.8", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.2.8.tgz", - "integrity": "sha512-OOBexa5Wap3NnH5Z/i94qhyh3lf0OajDPhqCvVdBjL0fG62lgcU12EKClq4CnXQyEbihYIrF2uKZ9PP67wWGYA==", + "version": "11.2.9", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.2.9.tgz", + "integrity": "sha512-W7MrMnwjJC0XF/jhKcEcYu0PJoNsxTMR+6lDuLNtLtdl74PnHnhf5SS/Owt1KKmyxeHCx1BrAuWqlfh+cR+dAA==", "dev": true }, "@angular/material": { @@ -1025,9 +1132,9 @@ } }, "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", "dev": true }, "@babel/core": { @@ -1174,15 +1281,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz", - "integrity": "sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw==", + "version": "1.0.30001208", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", + "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", "dev": true }, "electron-to-chromium": { - "version": "1.3.709", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.709.tgz", - "integrity": "sha512-LolItk2/ikSGQ7SN8UkuKVNMBZp3RG7Itgaxj1npsHRzQobj9JjMneZOZfLhtwlYBe5fCJ75k+cVCiDFUs23oA==", + "version": "1.3.712", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz", + "integrity": "sha512-3kRVibBeCM4vsgoHHGKHmPocLqtFAGTrebXxxtgKs87hNUzXrX2NuS3jnBys7IozCnw7viQlozxKkmty2KNfrw==", "dev": true }, "escalade": { @@ -1315,9 +1422,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -1332,17 +1439,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -1543,9 +1650,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -1560,17 +1667,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -1897,9 +2004,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -1914,17 +2021,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -2019,9 +2126,9 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -2439,9 +2546,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -2456,17 +2563,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -2612,9 +2719,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -2801,9 +2908,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -2818,17 +2925,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -3004,9 +3111,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -3021,17 +3128,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -3208,9 +3315,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -3225,17 +3332,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -3409,9 +3516,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -3426,17 +3533,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -3594,9 +3701,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "dev": true }, "@babel/template": { @@ -3611,17 +3718,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.13.9", "@babel/helper-function-name": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -3673,9 +3780,9 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" @@ -4031,12 +4138,12 @@ } }, "@ngtools/webpack": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.7.tgz", - "integrity": "sha512-TxvyCZHkNBlEXdacMi8iuFEs4dU78FUlf195DoEggBtTIP0RUhj3PYL5vUxutJSZ0vaIuSnfgOgJlHqinFx8/w==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.2.8.tgz", + "integrity": "sha512-ONn/MLJF8ieXrvvmmnDwga1sredsfedAsCLNmRpyDdamQwzqIErHuMmQhP4kuTw2+9Lj3V1gQOHyxdayO0d91A==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", + "@angular-devkit/core": "11.2.8", "enhanced-resolve": "5.7.0", "webpack-sources": "2.2.0" } @@ -4274,20 +4381,20 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@schematics/angular": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.7.tgz", - "integrity": "sha512-LI6FkFHmwS/MCt+QENpGT/xl1Y6RMvcDqQ/efbZ3qz2W+0W0DkaPSlDmVbbNzgol+eJ7eHx4kmJr2U2r9ZOQgg==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.8.tgz", + "integrity": "sha512-5iJSzkFC3P4t47I9cbIuiaIm3Hkmr6YsXSPE6t8lmUjdcG+sX/AXlSgHmvE9RqoEWAlo1YiXPmQsQH/QIE0qPQ==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", - "@angular-devkit/schematics": "11.2.7", + "@angular-devkit/core": "11.2.8", + "@angular-devkit/schematics": "11.2.8", "jsonc-parser": "3.0.0" }, "dependencies": { "@angular-devkit/core": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.7.tgz", - "integrity": "sha512-oflo+LsUob5nF0PknivtRdkHH/iMbVNIPRnv/c52Nk7+FUlEx53pkLWBc2rdhTrEptBFMmrpNaa30P+TQrFNkQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.8.tgz", + "integrity": "sha512-iNodaySWW1JrF+oGZCi0rYDJXO96T4K7H6BLz6xapSwFxkY+Xr4CBuTqEp2DKzAZ+sjYFmsItLmNedwOOBnwfA==", "dev": true, "requires": { "ajv": "6.12.6", @@ -4295,6 +4402,17 @@ "magic-string": "0.25.7", "rxjs": "6.6.3", "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, "ajv": { @@ -4314,17 +4432,23 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, "@schematics/update": { - "version": "0.1102.7", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.7.tgz", - "integrity": "sha512-aSuG4VtGlcEGNIhcRS+99Sbhs+IRJn1JLOG1rWV5U5d40M/kLDsNx5O5JCXE062ga209sJc++sgLXRXn5yrEiQ==", + "version": "0.1102.8", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.8.tgz", + "integrity": "sha512-advLOzXtlA71XP+XCkvN4HCDTFfSUAfUcEFWLSxIFu456ED6smGex8ydkH6YcWx9LM+auhyHiJmTNYFDI0vxig==", "dev": true, "requires": { - "@angular-devkit/core": "11.2.7", - "@angular-devkit/schematics": "11.2.7", + "@angular-devkit/core": "11.2.8", + "@angular-devkit/schematics": "11.2.8", "@yarnpkg/lockfile": "1.1.0", "ini": "2.0.0", "npm-package-arg": "^8.0.0", @@ -4334,9 +4458,9 @@ }, "dependencies": { "@angular-devkit/core": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.7.tgz", - "integrity": "sha512-oflo+LsUob5nF0PknivtRdkHH/iMbVNIPRnv/c52Nk7+FUlEx53pkLWBc2rdhTrEptBFMmrpNaa30P+TQrFNkQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.8.tgz", + "integrity": "sha512-iNodaySWW1JrF+oGZCi0rYDJXO96T4K7H6BLz6xapSwFxkY+Xr4CBuTqEp2DKzAZ+sjYFmsItLmNedwOOBnwfA==", "dev": true, "requires": { "ajv": "6.12.6", @@ -4344,6 +4468,17 @@ "magic-string": "0.25.7", "rxjs": "6.6.3", "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, "ajv": { @@ -4378,6 +4513,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -4440,9 +4581,9 @@ "dev": true }, "@types/file-saver": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz", - "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.2.tgz", + "integrity": "sha512-xbqnZmGrCEqi/KUzOkeUSe77p7APvLuyellGaAoeww3CHJ1AbjQWjPSCFtKIzZn8L7LpEax4NXnC+gfa6nM7IA==" }, "@types/glob": { "version": "7.1.3", @@ -4460,9 +4601,9 @@ "integrity": "sha512-6PjMFKl13cgB4kRdYtvyjKl8VVa0PXS2IdVxHhQ8GEKbxBkyJtSbaIeK1eZGjDKN7dvUh4vkOvU9FMwYNv4GQQ==" }, "@types/jasmine": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.3.tgz", - "integrity": "sha512-5QKAG8WfC9XrOgYLXPrxv1G2IIUE6zDyzTWamhNWJO0LqPRUbZ0q0zGHDhDJ7MpFloUuyME/jpBIdPjq3/P3jA==", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.9.tgz", + "integrity": "sha512-B53NIwMj/AO0O+xfSWLYmKB0Mo6TYxfv2Mk8/c1T2w/e38t55iaPR6p7pHXTTtqfTmevPK3i8T1YweYFTZlxDw==", "dev": true }, "@types/jasminewd2": { @@ -5907,21 +6048,10 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "cipher-base": { "version": "1.0.4", @@ -6496,9 +6626,9 @@ "dev": true }, "core-js-compat": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", - "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.1.tgz", + "integrity": "sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==", "dev": true, "requires": { "browserslist": "^4.16.3", @@ -6519,15 +6649,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz", - "integrity": "sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw==", + "version": "1.0.30001208", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", + "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", "dev": true }, "electron-to-chromium": { - "version": "1.3.709", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.709.tgz", - "integrity": "sha512-LolItk2/ikSGQ7SN8UkuKVNMBZp3RG7Itgaxj1npsHRzQobj9JjMneZOZfLhtwlYBe5fCJ75k+cVCiDFUs23oA==", + "version": "1.3.712", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.712.tgz", + "integrity": "sha512-3kRVibBeCM4vsgoHHGKHmPocLqtFAGTrebXxxtgKs87hNUzXrX2NuS3jnBys7IozCnw7viQlozxKkmty2KNfrw==", "dev": true }, "escalade": { @@ -6820,9 +6950,9 @@ "dev": true }, "postcss": { - "version": "8.2.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.9.tgz", - "integrity": "sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q==", + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -6948,13 +7078,13 @@ "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, @@ -8823,9 +8953,9 @@ } }, "google-protobuf": { - "version": "3.15.7", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.15.7.tgz", - "integrity": "sha512-S/kTHcT98AV2FxEwtT5lvgffeS87BB6hloZm+pYKkpzwtySwNiKcqXZbxpq/Odh3Wib1RdOe/oY2EHdi17YrlQ==" + "version": "3.15.8", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.15.8.tgz", + "integrity": "sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw==" }, "graceful-fs": { "version": "4.2.3", @@ -10163,15 +10293,15 @@ } }, "jasmine-core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.6.0.tgz", - "integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", + "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", "dev": true }, "jasmine-spec-reporter": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-6.0.0.tgz", - "integrity": "sha512-MvTOVoMxDZAftQYBApIlSfKnGMzi9cj351nXeqtnZTuXffPlbONN31+Es7F+Ke4okUeQ2xISukt4U1npfzLVrQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", "dev": true, "requires": { "colors": "1.4.0" @@ -10687,9 +10817,9 @@ } }, "libphonenumber-js": { - "version": "1.9.13", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.13.tgz", - "integrity": "sha512-DOvAj9Now6KqP+L1Q3JrM3iNhH/mXiOPTj6kxb9OnJbYsVYRlVdvRY1kCpU3Tz9VegIEi6MgDrviBaAnvB3aSw==" + "version": "1.9.16", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.16.tgz", + "integrity": "sha512-PaHT7nTtnejZ0HHekAaA0olv6BUTKZGtKM4SCQS0yE3XjFuVo/tjePMHUAr32FKwIZfyPky1ExMUuaiBAUmV6w==" }, "license-webpack-plugin": { "version": "2.3.11", @@ -12722,9 +12852,9 @@ "dev": true }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -13867,9 +13997,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -14477,9 +14607,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -14809,17 +14939,17 @@ } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" }, "dependencies": { "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -18036,9 +18166,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -18108,9 +18238,9 @@ } }, "y18n": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.2.tgz", - "integrity": "sha512-DnBDwcL54b5xWMM/7RfFg4xs5amYxq2ot49aUfLjQSAracXkGvlZq0txzqr3Pa6Q0ayuCxBcwTzrPUScKY0O8w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -18521,9 +18651,9 @@ } }, "y18n": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.2.tgz", - "integrity": "sha512-DnBDwcL54b5xWMM/7RfFg4xs5amYxq2ot49aUfLjQSAracXkGvlZq0txzqr3Pa6Q0ayuCxBcwTzrPUScKY0O8w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { diff --git a/console/package.json b/console/package.json index 94c5af3662..260b9aee74 100644 --- a/console/package.json +++ b/console/package.json @@ -24,7 +24,7 @@ "@angular/service-worker": "~11.0.0", "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^6.0.0", - "@types/file-saver": "^2.0.1", + "@types/file-saver": "^2.0.2", "@types/google-protobuf": "^3.7.4", "@types/uuid": "^8.3.0", "angular-oauth2-oidc": "^10.0.3", @@ -32,29 +32,29 @@ "cors": "^2.8.5", "file-saver": "^2.0.5", "google-proto-files": "^2.4.0", - "google-protobuf": "^3.15.7", + "google-protobuf": "^3.15.8", "grpc": "^1.24.5", "grpc-web": "^1.2.1", - "libphonenumber-js": "^1.9.13", + "libphonenumber-js": "^1.9.16", "moment": "^2.29.1", "ngx-quicklink": "^0.2.6", - "rxjs": "~6.6.3", + "rxjs": "~6.6.7", "ts-protoc-gen": "^0.14.0", "tslib": "^2.2.0", "uuid": "^8.3.2", "zone.js": "~0.11.3" }, "devDependencies": { - "@angular/cli": "~11.2.7", - "@angular-devkit/build-angular": "~0.1102.7", + "@angular-devkit/build-angular": "~0.1102.8", + "@angular/cli": "~11.2.8", "@angular/compiler-cli": "~11.0.0", - "@types/jasmine": "~3.6.3", - "@angular/language-service": "~11.2.8", + "@types/jasmine": "~3.6.9", + "@angular/language-service": "~11.2.9", "@types/jasminewd2": "~2.0.3", "@types/node": "^14.14.37", "codelyzer": "^6.0.0", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~6.0.0", + "jasmine-core": "~3.7.1", + "jasmine-spec-reporter": "~7.0.0", "karma": "~6.3.2", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", diff --git a/console/src/app/app-routing.module.ts b/console/src/app/app-routing.module.ts index 2db6941e5d..0ed3ae8f64 100644 --- a/console/src/app/app-routing.module.ts +++ b/console/src/app/app-routing.module.ts @@ -18,7 +18,7 @@ const routes: Routes = [ canActivate: [AuthGuard, RoleGuard], data: { roles: ['iam.write'], - } + }, }, { path: 'granted-projects', diff --git a/console/src/app/app.component.html b/console/src/app/app.component.html index aa50442b3c..5a70dca734 100644 --- a/console/src/app/app.component.html +++ b/console/src/app/app.component.html @@ -179,8 +179,12 @@ diff --git a/console/src/app/app.component.scss b/console/src/app/app.component.scss index 7da225b4ca..cb4be66673 100644 --- a/console/src/app/app.component.scss +++ b/console/src/app/app.component.scss @@ -12,8 +12,8 @@ right: 0; .org-button { - font-weight: bold; - padding-right: .5rem; + font-weight: bold; + padding-right: .5rem; } .logo { @@ -168,36 +168,18 @@ margin: 2rem 2rem; .toc { - font-size: 12px; - color: var(--grey); - text-decoration: none; + font-size: 12px; + color: var(--grey); + text-decoration: none; - &:hover { - text-decoration: underline; - } + &:hover { + text-decoration: underline; + } } - .sp-status { - font-size: 12px; - color: var(--grey); - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - - .sp-status .sp-status-badge.sp-status-ok { - background: darkgreen; - } - .sp-status .sp-status-badge.sp-status-scheduled { - background: darkblue; - } - .sp-status .sp-status-badge.sp-status-minor { - background: darkorange; - } - .sp-status .sp-status-badge.sp-status-major { - background: darkred; + .slash { + margin: 0 .5rem; + color: var(--grey); } } diff --git a/console/src/app/app.component.ts b/console/src/app/app.component.ts index 860cf7327a..a4d710da2c 100644 --- a/console/src/app/app.component.ts +++ b/console/src/app/app.component.ts @@ -58,6 +58,7 @@ export class AppComponent implements OnDestroy { private orgSub: Subscription = new Subscription(); public hideAdminWarn: boolean = true; + public language: string = 'en'; constructor( public viewPortScroller: ViewportScroller, @Inject('windowObject') public window: Window, @@ -196,6 +197,7 @@ export class AppComponent implements OnDestroy { this.translate.onLangChange.subscribe((language: LangChangeEvent) => { this.document.documentElement.lang = language.lang; + this.language = language.lang; }); this.filterControl.valueChanges.pipe(debounceTime(300)).subscribe(value => { @@ -266,8 +268,12 @@ export class AppComponent implements OnDestroy { const cropped = navigator.language.split('-')[0] ?? 'en'; const fallbackLang = cropped.match(/en|de/) ? cropped : 'en'; - const lang = userprofile?.human?.profile?.preferredLanguage.match(/en|de/) ? userprofile.human.profile?.preferredLanguage : fallbackLang; + const lang = + userprofile?.human?.profile?.preferredLanguage.match(/en|de/) ? + userprofile.human.profile?.preferredLanguage : + fallbackLang; this.translate.use(lang); + this.language = lang; this.document.documentElement.lang = lang; } }); diff --git a/console/src/app/modules/add-key-dialog/add-key-dialog.component.ts b/console/src/app/modules/add-key-dialog/add-key-dialog.component.ts index ae3bf7a567..9fcbe11581 100644 --- a/console/src/app/modules/add-key-dialog/add-key-dialog.component.ts +++ b/console/src/app/modules/add-key-dialog/add-key-dialog.component.ts @@ -4,8 +4,8 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { KeyType } from 'src/app/proto/generated/zitadel/auth_n_key_pb'; export enum AddKeyDialogType { - MACHINE = "MACHINE", - AUTHNKEY = "AUTHNKEY", + MACHINE = 'MACHINE', + AUTHNKEY = 'AUTHNKEY', } @Component({ diff --git a/console/src/app/modules/add-member-dialog/member-create-dialog.component.ts b/console/src/app/modules/add-member-dialog/member-create-dialog.component.ts index df508d9578..2d7fe4092b 100644 --- a/console/src/app/modules/add-member-dialog/member-create-dialog.component.ts +++ b/console/src/app/modules/add-member-dialog/member-create-dialog.component.ts @@ -100,8 +100,7 @@ export class MemberCreateDialogComponent { if (project.projectId && project.grantId) { this.projectId = project.projectId; this.grantId = project.grantId; - } - else if (project.id) { + } else if (project.id) { this.projectId = project.id; } } diff --git a/console/src/app/modules/app-card/app-card.component.scss b/console/src/app/modules/app-card/app-card.component.scss index 437710b84b..cd3024e4fe 100644 --- a/console/src/app/modules/app-card/app-card.component.scss +++ b/console/src/app/modules/app-card/app-card.component.scss @@ -10,46 +10,46 @@ /* stylelint-enable */ .cnsl-app-card { - padding: 1rem; - box-sizing: border-box; - cursor: pointer; - animation: all .2s; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - font-size: 2rem; - height: 80px; - width: 80px; - margin: 1rem; - text-transform: uppercase; - border-radius: .5rem; - font-weight: 800; - background-color: $primary-dark; - transition: background-color box-shadow .3s ease-in; + padding: 1rem; + box-sizing: border-box; + cursor: pointer; + animation: all .2s; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 2rem; + height: 80px; + width: 80px; + margin: 1rem; + text-transform: uppercase; + border-radius: .5rem; + font-weight: 800; + background-color: $primary-dark; + transition: background-color box-shadow .3s ease-in; - &.web { - background-color: rgb(80, 110, 110); - color: white; - border: none; - } - - &.native { - background-color: #595d80; - color: white; - border: none; - } - - &.useragent { - background-color: #6a506e; - color: white; - border: none; - } - - &.api { - background-color: #333; - color: white; - border: none; - } + &.web { + background-color: rgb(80, 110, 110); + color: white; + border: none; } + + &.native { + background-color: #595d80; + color: white; + border: none; + } + + &.useragent { + background-color: #6a506e; + color: white; + border: none; + } + + &.api { + background-color: #333; + color: white; + border: none; + } + } } 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 5d40448069..6ff5ca2883 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 @@ -2,14 +2,14 @@ @import '~@angular/material/theming'; .radio-button-wrapper { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - overflow-x: auto; - overflow-y: hidden; - margin: 0; - padding-bottom: .5rem; - padding-top: 1rem; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow-x: auto; + overflow-y: hidden; + margin: 0; + padding-bottom: .5rem; + padding-top: 1rem; } @mixin app-auth-method-radio-theme($theme) { @@ -17,7 +17,7 @@ $primary-color: mat-color($primary, 500); $is-dark-theme: map-get($theme, is-dark); - input[type="radio"]{ + input[type="radio"] { appearance: none; opacity: 0; display: none; @@ -27,7 +27,7 @@ border-color: if($is-dark-theme, white, var(--grey)); .cnsl-radio-header span { - color: if($is-dark-theme, white, white); + color: if($is-dark-theme, white, white); } } @@ -43,98 +43,98 @@ padding-bottom: 1rem; box-shadow: inset 0 0 6px rgba(0, 0, 0, .1); - &.first { - margin-left: 0; + &.first { + margin-left: 0; } &.last { - margin-right: 0; + margin-right: 0; } .recommended { - position: absolute; - bottom: 0; - left: 50%; - transform: translateY(50%) translateX(-50%); - border-radius: 50vw; - font-size: 11px; - background: white; - color: black; - padding: 3px 1rem; - box-shadow: 0 0 6px rgb(0 0 0 / 10%); - white-space: nowrap; + position: absolute; + bottom: 0; + left: 50%; + transform: translateY(50%) translateX(-50%); + border-radius: 50vw; + font-size: 11px; + background: white; + color: black; + padding: 3px 1rem; + box-shadow: 0 0 6px rgb(0 0 0 / 10%); + white-space: nowrap; - &.not { - background: rgb(144 75 75); - color: white; - } + &.not { + background: rgb(144 75 75); + color: white; + } } .cnsl-radio-header { - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - background: rgb(80, 110, 110); - border-top-left-radius: 6px; - border-top-right-radius: 6px; - position: relative; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: rgb(80, 110, 110); + border-top-left-radius: 6px; + border-top-right-radius: 6px; + position: relative; - .current { - position: absolute; - bottom: .5rem; - left: 50%; - transform: translateX(-50%); - display: block; - color: #ffffff60; - white-space: nowrap; - font-size: 12px; - } + .current { + position: absolute; + bottom: .5rem; + left: 50%; + transform: translateX(-50%); + display: block; + color: #ffffff60; + white-space: nowrap; + font-size: 12px; + } - span { - margin: 2rem; - font-size: 30px; - color: if($is-dark-theme,#21222450, #ffffff50); - } + span { + margin: 2rem; + font-size: 30px; + color: if($is-dark-theme, #21222450, #ffffff50); + } } p { - text-align: center; - padding: 0 1rem; + text-align: center; + padding: 0 1rem; } - + .type-desc { - font-size: 14px; - color: var(--grey); + font-size: 14px; + color: var(--grey); } .fill-space { - flex: 1; + flex: 1; } .app-specs { - display: block; - padding: 1rem 0; - margin: 0 1rem; + display: block; + padding: 1rem 0; + margin: 0 1rem; - .row { - display: flex; - justify-content: space-between; - align-items: center; - font-size: 12px; - color: var(--grey); - margin: 3px 0; + .row { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 12px; + color: var(--grey); + margin: 3px 0; - span { - white-space: nowrap; - } - - :first-child { - margin-right: 1rem; - overflow: hidden; - text-overflow: ellipsis; - } + span { + white-space: nowrap; } + + :first-child { + margin-right: 1rem; + overflow: hidden; + text-overflow: ellipsis; + } + } } } } 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 314e54767f..2a2002913c 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 @@ -10,7 +10,7 @@ export interface RadioItemAuthType { key: string; titleI18nKey: string; descI18nKey: string; - disabled: boolean, + disabled: boolean; prefix: string; background: string; responseType?: OIDCResponseType; @@ -36,4 +36,4 @@ export class AppAuthMethodRadioComponent { public emitChange(): void { this.selectedMethod.emit(this.selected); } -} \ No newline at end of file +} diff --git a/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.scss b/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.scss index 50aaa663d6..3c9c7ece1a 100644 --- a/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.scss +++ b/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.scss @@ -2,18 +2,18 @@ @import '~@angular/material/theming'; .radio-button-wrapper { - display: flex; - flex-direction: row; - flex-wrap: wrap; - margin: 0 -0.5rem; + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 0 -.5rem; } - + @mixin app-type-radio-theme($theme) { $primary: map-get($theme, primary); $primary-color: mat-color($primary, 500); $is-dark-theme: map-get($theme, is-dark); - input[type="radio"]{ + input[type="radio"] { appearance: none; opacity: 0; display: none; @@ -23,7 +23,7 @@ border-color: if($is-dark-theme, white, var(--grey)); .cnsl-type-radio-header span { - color: if($is-dark-theme, white, white); + color: if($is-dark-theme, white, white); } } @@ -40,29 +40,29 @@ box-shadow: inset 0 0 6px rgba(0, 0, 0, .1); .cnsl-type-radio-header { - display: flex; - align-items: center; - justify-content: center; - background: rgb(80, 110, 110); - margin-bottom: 1rem; - border-top-left-radius: 6px; - border-top-right-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + background: rgb(80, 110, 110); + margin-bottom: 1rem; + border-top-left-radius: 6px; + border-top-right-radius: 6px; - span { - margin: 2rem; - font-size: 30px; - color: if($is-dark-theme,#21222450, #ffffff50); - } + span { + margin: 2rem; + font-size: 30px; + color: if($is-dark-theme, #21222450, #ffffff50); + } } p { - text-align: center; - padding: 0 1rem; + text-align: center; + padding: 0 1rem; } - + .type-desc { - font-size: 14px; - color: var(--grey); + font-size: 14px; + color: var(--grey); } } } diff --git a/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.ts b/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.ts index 18f3e97044..5fe566ae12 100644 --- a/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.ts +++ b/console/src/app/modules/app-radio/app-type-radio/app-type-radio.component.ts @@ -14,4 +14,4 @@ export class AppTypeRadioComponent { public emitChange(): void { this.selectedType.emit(this.selected); } -} \ No newline at end of file +} diff --git a/console/src/app/modules/changes/changes.component.scss b/console/src/app/modules/changes/changes.component.scss index 30c3983aa1..55790a9b2c 100644 --- a/console/src/app/modules/changes/changes.component.scss +++ b/console/src/app/modules/changes/changes.component.scss @@ -21,123 +21,120 @@ } @mixin changes-theme($theme) { - $is-dark-theme: map-get($theme, is-dark); + $is-dark-theme: map-get($theme, is-dark); - .scroll-container { - max-height: 50vh; - overflow-y: scroll; - border-bottom: 1px solid if($is-dark-theme, #303131, #e3e8ee); - /* stylelint-enable */ - margin-bottom: 0.5rem; + .scroll-container { + max-height: 50vh; + overflow-y: scroll; + border-bottom: 1px solid if($is-dark-theme, #303131, #e3e8ee); + margin-bottom: .5rem; - .date { - font-weight: 500; - font-size: 0.8rem; - display: block; - margin-bottom: .5rem; - } - - .item { - display: block; - padding: 10px 0; - font-size: 0.8rem; - - .row { - display: flex; - flex-direction: row; - - .spacer { - width: 32px; - } - - .actions { - flex: 1; - display: flex; - flex-direction: column; - margin-top: -0.5rem; - - .action { - display: flex; - flex-direction: row; - align-items: center; - flex: 1; - - .icon { - width: 32px; - display: inline-block; - height: 1.2rem; - line-height: 1.2rem; - font-size: 1.2rem; - color: var(--grey); - } - - span { - flex: 1; - font-weight: 500; - font-size: 0.8rem; - overflow-x: hidden; - } - - .msg { - text-overflow: ellipsis; - } - - .block { - display: block; - } - - .restore { - visibility: hidden; - display: none; - opacity: 0; - margin-left: 1rem; - transform: opacity 0.2s ease-in-out; - } - - &:hover { - .restore { - visibility: visible; - display: inline-block; - opacity: 1; - color: #81868a; - - &[disabled] { - visibility: hidden; - } - - &:hover { - color: white; - } - } - } - } - } - - /* stylelint-disable */ - $primary: map-get($theme, primary); - $primary-dark: mat-color($primary, A800); - /* stylelint-enable */ - - &.change-item-back { - background-color: rgba($primary-dark, .93); - transition: background-color .3s cubic-bezier(.645, .045, .355, 1); - } - } - - .sp-wrapper { - padding: .5rem; - display: flex; - justify-content: center; - } - } - - .end-container { - font-size: 12px; - color: var(--grey); - font-size: 14px; - margin: 1rem 0 1rem 0; - display: block; - color: var(--grey); - } + .date { + font-weight: 500; + font-size: .8rem; + display: block; + margin-bottom: .5rem; } -} \ No newline at end of file + + .item { + display: block; + padding: 10px 0; + font-size: .8rem; + + .row { + display: flex; + flex-direction: row; + + .spacer { + width: 32px; + } + + .actions { + flex: 1; + display: flex; + flex-direction: column; + margin-top: -.5rem; + + .action { + display: flex; + flex-direction: row; + align-items: center; + flex: 1; + + .icon { + width: 32px; + display: inline-block; + height: 1.2rem; + line-height: 1.2rem; + font-size: 1.2rem; + color: var(--grey); + } + + span { + flex: 1; + font-weight: 500; + font-size: .8rem; + overflow-x: hidden; + } + + .msg { + text-overflow: ellipsis; + } + + .block { + display: block; + } + + .restore { + visibility: hidden; + display: none; + opacity: 0; + margin-left: 1rem; + transform: opacity .2s ease-in-out; + } + + &:hover { + .restore { + visibility: visible; + display: inline-block; + opacity: 1; + color: #81868a; + + &[disabled] { + visibility: hidden; + } + + &:hover { + color: white; + } + } + } + } + } + + /* stylelint-disable */ + $primary: map-get($theme, primary); + $primary-dark: mat-color($primary, A800); + /* stylelint-enable */ + + &.change-item-back { + background-color: rgba($primary-dark, .93); + transition: background-color .3s cubic-bezier(.645, .045, .355, 1); + } + } + + .sp-wrapper { + padding: .5rem; + display: flex; + justify-content: center; + } + } + + .end-container { + font-size: 14px; + margin: 1rem 0 1rem 0; + display: block; + color: var(--grey); + } + } +} diff --git a/console/src/app/modules/changes/changes.component.ts b/console/src/app/modules/changes/changes.component.ts index 23f094889f..70f75bb250 100644 --- a/console/src/app/modules/changes/changes.component.ts +++ b/console/src/app/modules/changes/changes.component.ts @@ -23,7 +23,7 @@ export enum ChangeType { } export interface MappedChange { - key: string, + key: string; values: Array<{ data: any[]; dates: Timestamp.AsObject[]; @@ -34,7 +34,11 @@ export interface MappedChange { }>; } -type ListChanges = ListMyUserChangesResponse.AsObject | ListUserChangesResponse.AsObject | ListProjectChangesResponse.AsObject | ListOrgChangesResponse.AsObject | ListAppChangesResponse.AsObject; +type ListChanges = ListMyUserChangesResponse.AsObject | + ListUserChangesResponse.AsObject | + ListProjectChangesResponse.AsObject | + ListOrgChangesResponse.AsObject | + ListAppChangesResponse.AsObject; @Component({ selector: 'app-changes', @@ -171,11 +175,14 @@ export class ChangesComponent implements OnInit, OnDestroy { } } - mapChanges(changes: Change.AsObject[]) { + private mapChanges(changes: Change.AsObject[]): { + key: string; values: any[]; + }[] { const splitted: { [editorId: string]: any[]; } = {}; changes.forEach((change) => { if (change.changeDate) { - const index = `${this.getDateString(change.changeDate)}`;//`${this.getDateString(change.changeDate)}:${change.editorId}`; + const index = `${this.getDateString(change.changeDate)}`; + // `${this.getDateString(change.changeDate)}:${change.editorId}`; if (index) { if (splitted[index]) { @@ -209,7 +216,7 @@ export class ChangesComponent implements OnInit, OnDestroy { // data: [change.data], eventTypes: [change.eventType], sequences: [change.sequence], - } + }, ]; } } @@ -226,7 +233,7 @@ export class ChangesComponent implements OnInit, OnDestroy { return arr; } - getDateString(ts: Timestamp.AsObject) { + getDateString(ts: Timestamp.AsObject): string { const date = new Date(ts.seconds * 1000 + ts.nanos / 1000 / 1000); return date.getUTCFullYear() + this.pad(date.getUTCMonth() + 1) + this.pad(date.getUTCDate()); } @@ -243,10 +250,10 @@ export class ChangesComponent implements OnInit, OnDestroy { // Order by ascending property value valueAscOrder = (a: KeyValue, b: KeyValue): number => { return a.value.localeCompare(b.value); - }; + } // Order by descending property key keyDescOrder = (a: KeyValue, b: KeyValue): number => { return a.key > b.key ? -1 : (b.key > a.key ? 1 : 0); - }; + } } diff --git a/console/src/app/modules/changes/changes.module.ts b/console/src/app/modules/changes/changes.module.ts index eb1af61fc8..cb6d60495f 100644 --- a/console/src/app/modules/changes/changes.module.ts +++ b/console/src/app/modules/changes/changes.module.ts @@ -31,7 +31,7 @@ import { ChangesComponent } from './changes.component'; LocalizedDatePipeModule, TimestampToDatePipeModule, MatTooltipModule, - AvatarModule + AvatarModule, ], exports: [ ChangesComponent, diff --git a/console/src/app/modules/client-keys/client-keys.component.html b/console/src/app/modules/client-keys/client-keys.component.html index edf7bd95bd..b7c9d3de69 100644 --- a/console/src/app/modules/client-keys/client-keys.component.html +++ b/console/src/app/modules/client-keys/client-keys.component.html @@ -65,7 +65,7 @@ - + \ No newline at end of file diff --git a/console/src/app/modules/client-keys/client-keys.component.ts b/console/src/app/modules/client-keys/client-keys.component.ts index d658b9f4c4..8e1cf0f510 100644 --- a/console/src/app/modules/client-keys/client-keys.component.ts +++ b/console/src/app/modules/client-keys/client-keys.component.ts @@ -1,7 +1,6 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { TranslateService } from '@ngx-translate/core'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; @@ -14,6 +13,8 @@ import { ListAppKeysResponse } from 'src/app/proto/generated/zitadel/management_ import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; +import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'; + @Component({ selector: 'app-client-keys', templateUrl: './client-keys.component.html', @@ -23,7 +24,7 @@ export class ClientKeysComponent implements OnInit { @Input() projectId!: string; @Input() appId!: string; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public dataSource: MatTableDataSource = new MatTableDataSource(); public selection: SelectionModel = new SelectionModel(true, []); public keyResult!: ListAppKeysResponse.AsObject; @@ -95,7 +96,12 @@ export class ClientKeysComponent implements OnInit { } if (type) { - return this.mgmtService.addAppKey(this.projectId, this.appId, type, date ? date : undefined).then((response) => { + return this.mgmtService.addAppKey( + this.projectId, + this.appId, + type, + date ? date : undefined, + ).then((response) => { if (response) { setTimeout(() => { this.refreshPage(); @@ -104,7 +110,7 @@ export class ClientKeysComponent implements OnInit { this.dialog.open(ShowKeyDialogComponent, { data: { key: response, - type: AddKeyDialogType.AUTHNKEY + type: AddKeyDialogType.AUTHNKEY, }, width: '400px', }); diff --git a/console/src/app/modules/client-keys/client-keys.module.ts b/console/src/app/modules/client-keys/client-keys.module.ts index 1b0064d60d..5e613a2920 100644 --- a/console/src/app/modules/client-keys/client-keys.module.ts +++ b/console/src/app/modules/client-keys/client-keys.module.ts @@ -5,24 +5,24 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; +import { RouterModule } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; -import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; -import { CardModule } from '../card/card.module'; -import { InputModule } from '../input/input.module'; -import { RefreshTableModule } from '../refresh-table/refresh-table.module'; - -import { ClientKeysComponent } from './client-keys.component'; -import { ShowKeyDialogModule } from '../show-key-dialog/show-key-dialog.module'; import { AddKeyDialogModule } from 'src/app/modules/add-key-dialog/add-key-dialog.module'; -import { RouterModule } from '@angular/router'; +import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; +import { CardModule } from '../card/card.module'; +import { InputModule } from '../input/input.module'; +import { PaginatorModule } from '../paginator/paginator.module'; +import { RefreshTableModule } from '../refresh-table/refresh-table.module'; +import { ShowKeyDialogModule } from '../show-key-dialog/show-key-dialog.module'; +import { ClientKeysComponent } from './client-keys.component'; + @NgModule({ declarations: [ @@ -37,7 +37,7 @@ import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/ HasRoleModule, CardModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatIconModule, MatProgressSpinnerModule, MatCheckboxModule, diff --git a/console/src/app/modules/features/features.module.ts b/console/src/app/modules/features/features.module.ts index 97d78ba067..c0023b5a23 100644 --- a/console/src/app/modules/features/features.module.ts +++ b/console/src/app/modules/features/features.module.ts @@ -20,7 +20,7 @@ import { FeaturesComponent } from './features.component'; @NgModule({ declarations: [ - FeaturesComponent + FeaturesComponent, ], imports: [ FeaturesRoutingModule, @@ -41,6 +41,6 @@ import { FeaturesComponent } from './features.component'; ], exports: [ FeaturesComponent, - ] + ], }) export class FeaturesModule { } diff --git a/console/src/app/modules/idp-create/idp-create.component.ts b/console/src/app/modules/idp-create/idp-create.component.ts index 341acb8860..af28973dc9 100644 --- a/console/src/app/modules/idp-create/idp-create.component.ts +++ b/console/src/app/modules/idp-create/idp-create.component.ts @@ -82,7 +82,7 @@ export class IdpCreateComponent implements OnInit, OnDestroy { } public addIdp(): void { - if (this.serviceType == PolicyComponentServiceType.MGMT) { + if (this.serviceType === PolicyComponentServiceType.MGMT) { const req = new AddOrgOIDCIDPRequest(); req.setName(this.name?.value); diff --git a/console/src/app/modules/idp-table/idp-table.component.html b/console/src/app/modules/idp-table/idp-table.component.html index b7a7fa4a9f..0e7b67606b 100644 --- a/console/src/app/modules/idp-table/idp-table.component.html +++ b/console/src/app/modules/idp-table/idp-table.component.html @@ -31,7 +31,7 @@ [disabled]="serviceType==PolicyComponentServiceType.MGMT && idp?.owner == IDPOwnerType.IDP_OWNER_TYPE_SYSTEM" (change)="$event ? selection.toggle(idp) : null" [checked]="selection.isSelected(idp)"> google + *ngIf="idp.stylingType == IDPSTYLINGTYPE.IDPSTYLINGTYPE_GOOGLE" alt="google" /> @@ -100,6 +100,6 @@ - + \ No newline at end of file diff --git a/console/src/app/modules/idp-table/idp-table.component.scss b/console/src/app/modules/idp-table/idp-table.component.scss index 593761d1be..aca73e03ea 100644 --- a/console/src/app/modules/idp-table/idp-table.component.scss +++ b/console/src/app/modules/idp-table/idp-table.component.scss @@ -1,6 +1,7 @@ .ar-button { - margin-right: .5rem; + margin-right: .5rem; } + .table-wrapper { overflow: auto; width: 100%; @@ -27,12 +28,12 @@ td { outline: none; img { - height: 30px; - width: 30px; - margin-left: 1rem; - border-radius: .5rem; - object-fit: contain; - margin-top: .5rem; + height: 30px; + width: 30px; + margin-left: 1rem; + border-radius: .5rem; + object-fit: contain; + margin-top: .5rem; } } @@ -100,15 +101,13 @@ tr { } } - .date-block { - margin: .5rem 0; + margin: .5rem 0; + display: block; + min-width: 120px; + + .date-sub { + font-size: 13px; display: block; - min-width: 120px; - - .date-sub { - font-size: 13px; - display: block; - } + } } - \ No newline at end of file diff --git a/console/src/app/modules/idp-table/idp-table.component.ts b/console/src/app/modules/idp-table/idp-table.component.ts index fa1da39afa..62deba4286 100644 --- a/console/src/app/modules/idp-table/idp-table.component.ts +++ b/console/src/app/modules/idp-table/idp-table.component.ts @@ -1,7 +1,6 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { RouterLink } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; @@ -13,6 +12,7 @@ import { AdminService } from 'src/app/services/admin.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; +import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'; import { PolicyComponentServiceType } from '../policies/policy-component-types.enum'; import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component'; @@ -25,7 +25,7 @@ export class IdpTableComponent implements OnInit { @Input() public serviceType!: PolicyComponentServiceType; @Input() service!: AdminService | ManagementService; @Input() disabled: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public dataSource: MatTableDataSource = new MatTableDataSource(); public selection: SelectionModel @@ -36,7 +36,7 @@ export class IdpTableComponent implements OnInit { public PolicyComponentServiceType: any = PolicyComponentServiceType; public IDPOwnerType: any = IDPOwnerType; public IDPState: any = IDPState; - public IdpStylingType: any = IDPStylingType; + public IDPSTYLINGTYPE: any = IDPStylingType; @Input() public displayedColumns: string[] = ['select', 'name', 'config', 'dates', 'state']; @Output() public changedSelection: EventEmitter> diff --git a/console/src/app/modules/idp-table/idp-table.module.ts b/console/src/app/modules/idp-table/idp-table.module.ts index a7002dbf21..265b88077b 100644 --- a/console/src/app/modules/idp-table/idp-table.module.ts +++ b/console/src/app/modules/idp-table/idp-table.module.ts @@ -4,7 +4,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; import { RouterModule } from '@angular/router'; @@ -15,6 +14,7 @@ import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/local import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; import { TruncatePipeModule } from 'src/app/pipes/truncate-pipe/truncate-pipe.module'; +import { PaginatorModule } from '../paginator/paginator.module'; import { IdpTableComponent } from './idp-table.component'; @NgModule({ @@ -31,7 +31,7 @@ import { IdpTableComponent } from './idp-table.component'; LocalizedDatePipeModule, TimestampToDatePipeModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, RouterModule, RefreshTableModule, HasRoleModule, diff --git a/console/src/app/modules/idp/idp.component.scss b/console/src/app/modules/idp/idp.component.scss index 2db8be8785..9108552842 100644 --- a/console/src/app/modules/idp/idp.component.scss +++ b/console/src/app/modules/idp/idp.component.scss @@ -26,8 +26,8 @@ min-width: 150px; .chip { - border-radius: .5rem; - height: 40px; + border-radius: .5rem; + height: 40px; } &.fullwidth { @@ -40,21 +40,21 @@ } .line { - display: flex; - align-items: flex-end; - width: 100%; + display: flex; + align-items: flex-end; + width: 100%; - .formfield { - flex: 1; + .formfield { + flex: 1; - input { - margin: 0; - } + input { + margin: 0; } + } - button { - margin-bottom: 12px; - } + button { + margin-bottom: 12px; + } } } diff --git a/console/src/app/modules/idp/idp.component.ts b/console/src/app/modules/idp/idp.component.ts index b1de5a8618..7c5b98cfeb 100644 --- a/console/src/app/modules/idp/idp.component.ts +++ b/console/src/app/modules/idp/idp.component.ts @@ -80,7 +80,7 @@ export class IdpComponent implements OnInit, OnDestroy { })).subscribe((params) => { const { id } = params; if (id) { - if (this.serviceType == PolicyComponentServiceType.MGMT) { + if (this.serviceType === PolicyComponentServiceType.MGMT) { (this.service as ManagementService).getOrgIDPByID(id).then(resp => { if (resp.idp) { const idpObject = resp.idp; @@ -90,7 +90,7 @@ export class IdpComponent implements OnInit, OnDestroy { } } }); - } else if (this.serviceType == PolicyComponentServiceType.ADMIN) { + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { (this.service as AdminService).getIDPByID(id).then(resp => { if (resp.idp) { const idpObject = resp.idp; @@ -118,7 +118,7 @@ export class IdpComponent implements OnInit, OnDestroy { } public updateIdp(): void { - if (this.serviceType == PolicyComponentServiceType.MGMT) { + if (this.serviceType === PolicyComponentServiceType.MGMT) { const req = new UpdateOrgIDPRequest(); req.setIdpId(this.id?.value); @@ -131,7 +131,7 @@ export class IdpComponent implements OnInit, OnDestroy { }).catch(error => { this.toast.showError(error); }); - } else if (this.serviceType == PolicyComponentServiceType.ADMIN) { + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { const req = new UpdateIDPRequest(); req.setIdpId(this.id?.value); @@ -148,7 +148,7 @@ export class IdpComponent implements OnInit, OnDestroy { } public updateOidcConfig(): void { - if (this.serviceType == PolicyComponentServiceType.MGMT) { + if (this.serviceType === PolicyComponentServiceType.MGMT) { const req = new UpdateOrgIDPOIDCConfigRequest(); req.setIdpId(this.id?.value); @@ -165,7 +165,7 @@ export class IdpComponent implements OnInit, OnDestroy { }).catch(error => { this.toast.showError(error); }); - } else if (this.serviceType == PolicyComponentServiceType.ADMIN) { + } else if (this.serviceType === PolicyComponentServiceType.ADMIN) { const req = new UpdateIDPOIDCConfigRequest(); req.setIdpId(this.id?.value); diff --git a/console/src/app/modules/info-section/info-section.component.scss b/console/src/app/modules/info-section/info-section.component.scss index bd384f6a08..1f26c6a94d 100644 --- a/console/src/app/modules/info-section/info-section.component.scss +++ b/console/src/app/modules/info-section/info-section.component.scss @@ -13,33 +13,33 @@ font-size: 14px; .icon { - margin-right: 1rem; - height: 1.2rem; - line-height: 1.2rem; - font-size: 1.2rem; - margin-left: .5rem; + margin-right: 1rem; + height: 1.2rem; + line-height: 1.2rem; + font-size: 1.2rem; + margin-left: .5rem; } .info-section-content { - flex: 1; + flex: 1; } &.info { - background-color: if($is-dark-theme, #4f566b, #cbf4c9); - color: if($is-dark-theme, #cbf4c9, #0e6245); + background-color: if($is-dark-theme, #4f566b, #cbf4c9); + color: if($is-dark-theme, #cbf4c9, #0e6245); - .icon { - color: $primary-color; - } + .icon { + color: $primary-color; + } } &.warn { - background-color: if($is-dark-theme, #4f566b, #ffc1c1); - color: if($is-dark-theme, #ffc1c1, #620e0e); + background-color: if($is-dark-theme, #4f566b, #ffc1c1); + color: if($is-dark-theme, #ffc1c1, #620e0e); - .icon { - color: if($is-dark-theme, #ffc1c1, #620e0e); - } + .icon { + color: if($is-dark-theme, #ffc1c1, #620e0e); + } } } } diff --git a/console/src/app/modules/info-section/info-section.component.ts b/console/src/app/modules/info-section/info-section.component.ts index c6c093648e..ecb2272ca2 100644 --- a/console/src/app/modules/info-section/info-section.component.ts +++ b/console/src/app/modules/info-section/info-section.component.ts @@ -12,5 +12,5 @@ enum InfoSectionType { }) export class InfoSectionComponent { - @Input() type = InfoSectionType.INFO; + @Input() type: InfoSectionType = InfoSectionType.INFO; } diff --git a/console/src/app/modules/links/links.component.scss b/console/src/app/modules/links/links.component.scss index 1f799f6a0d..fc6b6eb399 100644 --- a/console/src/app/modules/links/links.component.scss +++ b/console/src/app/modules/links/links.component.scss @@ -1,59 +1,59 @@ -.next-steps { - margin-top: 1rem; - h5 { - text-transform: uppercase; +.next-steps { + margin-top: 1rem; + + h5 { + text-transform: uppercase; + font-size: 14px; + color: var(--grey); + } + + .row { + width: 100%; + display: flex; + overflow-x: auto; + padding-bottom: .5rem; + + .step { + min-width: 220px; + max-width: 280px; + padding: 1rem; + margin: 0 .5rem; + border: 1px solid var(--grey); + border-radius: .5rem; + display: flex; + flex-direction: column; + align-items: center; + box-sizing: border-box; + flex: 1; + + h6 { + font-size: 1rem; + text-align: center; + margin: 0 0 1rem 0; + } + + p { font-size: 14px; + text-align: center; color: var(--grey); + } + + .fill-space { + flex: 1; + } + + button { + display: block; + margin: auto; + } + + &:first-child { + margin-left: 0; + } + + &:last-child { + margin-right: 0; + } } - - .row { - width: 100%; - display: flex; - overflow-x: auto; - padding-bottom: .5rem; - - .step { - min-width: 220px; - max-width: 280px; - padding: 1rem; - margin: 0 .5rem; - border: 1px solid var(--grey); - border-radius: .5rem; - display: flex; - flex-direction: column; - align-items: center; - box-sizing: border-box; - flex: 1; - - h6 { - font-size: 1rem; - text-align: center; - margin: 0 0 1rem 0; - } - - p { - font-size: 14px; - text-align: center; - color: var(--grey); - } - - .fill-space { - flex: 1; - } - - button { - display: block; - margin: auto; - } - - &:first-child { - margin-left: 0; - } - - &:last-child { - margin-right: 0; - } - } - - } -} \ No newline at end of file + } +} diff --git a/console/src/app/modules/links/links.component.spec.ts b/console/src/app/modules/links/links.component.spec.ts index b17ab4ce4b..6de4124c1c 100644 --- a/console/src/app/modules/links/links.component.spec.ts +++ b/console/src/app/modules/links/links.component.spec.ts @@ -8,7 +8,7 @@ describe('LinksComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ LinksComponent ] + declarations: [ LinksComponent ], }) .compileComponents(); }); diff --git a/console/src/app/modules/links/links.component.ts b/console/src/app/modules/links/links.component.ts index d122f43f84..b9eaf2be51 100644 --- a/console/src/app/modules/links/links.component.ts +++ b/console/src/app/modules/links/links.component.ts @@ -12,7 +12,7 @@ export interface CnslLinks { @Component({ selector: 'cnsl-links', templateUrl: './links.component.html', - styleUrls: ['./links.component.scss'] + styleUrls: ['./links.component.scss'], }) export class LinksComponent implements OnInit { @Input() links: Array = []; diff --git a/console/src/app/modules/links/links.module.ts b/console/src/app/modules/links/links.module.ts index 421b12a693..f38c867b97 100644 --- a/console/src/app/modules/links/links.module.ts +++ b/console/src/app/modules/links/links.module.ts @@ -19,6 +19,6 @@ import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; ], exports: [ LinksComponent, - ] + ], }) export class LinksModule { } diff --git a/console/src/app/modules/machine-keys/machine-keys.component.html b/console/src/app/modules/machine-keys/machine-keys.component.html index bd6b25097d..c036e312ad 100644 --- a/console/src/app/modules/machine-keys/machine-keys.component.html +++ b/console/src/app/modules/machine-keys/machine-keys.component.html @@ -64,7 +64,7 @@ - + \ No newline at end of file diff --git a/console/src/app/modules/machine-keys/machine-keys.component.ts b/console/src/app/modules/machine-keys/machine-keys.component.ts index ce3cc5d0c6..07b850b726 100644 --- a/console/src/app/modules/machine-keys/machine-keys.component.ts +++ b/console/src/app/modules/machine-keys/machine-keys.component.ts @@ -1,7 +1,6 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { TranslateService } from '@ngx-translate/core'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; @@ -14,6 +13,8 @@ import { ListMachineKeysResponse } from 'src/app/proto/generated/zitadel/managem import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; +import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'; + @Component({ selector: 'app-machine-keys', templateUrl: './machine-keys.component.html', @@ -22,7 +23,7 @@ import { ToastService } from 'src/app/services/toast.service'; export class MachineKeysComponent implements OnInit { @Input() userId!: string; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public dataSource: MatTableDataSource = new MatTableDataSource(); public selection: SelectionModel = new SelectionModel(true, []); public keyResult!: ListMachineKeysResponse.AsObject; @@ -103,7 +104,7 @@ export class MachineKeysComponent implements OnInit { this.dialog.open(ShowKeyDialogComponent, { data: { key: response, - type: AddKeyDialogType.MACHINE + type: AddKeyDialogType.MACHINE, }, width: '400px', }); diff --git a/console/src/app/modules/machine-keys/machine-keys.module.ts b/console/src/app/modules/machine-keys/machine-keys.module.ts index ff724843f8..318e51ae28 100644 --- a/console/src/app/modules/machine-keys/machine-keys.module.ts +++ b/console/src/app/modules/machine-keys/machine-keys.module.ts @@ -5,24 +5,24 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; +import { RouterModule } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; -import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; -import { CardModule } from '../card/card.module'; -import { InputModule } from '../input/input.module'; -import { RefreshTableModule } from '../refresh-table/refresh-table.module'; - -import { MachineKeysComponent } from './machine-keys.component'; -import { ShowKeyDialogModule } from '../show-key-dialog/show-key-dialog.module'; import { AddKeyDialogModule } from 'src/app/modules/add-key-dialog/add-key-dialog.module'; -import { RouterModule } from '@angular/router'; +import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; +import { CardModule } from '../card/card.module'; +import { InputModule } from '../input/input.module'; +import { PaginatorModule } from '../paginator/paginator.module'; +import { RefreshTableModule } from '../refresh-table/refresh-table.module'; +import { ShowKeyDialogModule } from '../show-key-dialog/show-key-dialog.module'; +import { MachineKeysComponent } from './machine-keys.component'; + @NgModule({ declarations: [ @@ -37,7 +37,7 @@ import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/ HasRoleModule, CardModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatIconModule, MatProgressSpinnerModule, MatCheckboxModule, diff --git a/console/src/app/modules/members-table/members-table.component.html b/console/src/app/modules/members-table/members-table.component.html index 2aaa6efdeb..c257b2db31 100644 --- a/console/src/app/modules/members-table/members-table.component.html +++ b/console/src/app/modules/members-table/members-table.component.html @@ -91,7 +91,7 @@ - - + \ No newline at end of file diff --git a/console/src/app/modules/members-table/members-table.component.ts b/console/src/app/modules/members-table/members-table.component.ts index 4aa8c5670b..79af724fdd 100644 --- a/console/src/app/modules/members-table/members-table.component.ts +++ b/console/src/app/modules/members-table/members-table.component.ts @@ -1,6 +1,5 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatSelectChange } from '@angular/material/select'; import { MatTable } from '@angular/material/table'; import { Observable, Subject } from 'rxjs'; @@ -9,6 +8,7 @@ import { IamMembersDataSource } from 'src/app/pages/iam/iam-members/iam-members- import { OrgMembersDataSource } from 'src/app/pages/orgs/org-members/org-members-datasource'; import { Member } from 'src/app/proto/generated/zitadel/member_pb'; +import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'; import { ProjectMembersDataSource } from '../project-members/project-members-datasource'; type MemberDatasource = OrgMembersDataSource | ProjectMembersDataSource | IamMembersDataSource; @@ -22,7 +22,7 @@ export class MembersTableComponent implements OnInit, OnDestroy { public INITIALPAGESIZE: number = 25; @Input() public canDelete: boolean = false; @Input() public canWrite: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatTable) public table!: MatTable; @Input() public dataSource!: MemberDatasource; public selection: SelectionModel = new SelectionModel(true, []); @@ -70,7 +70,7 @@ export class MembersTableComponent implements OnInit, OnDestroy { this.dataSource.membersSubject.value.forEach(row => this.selection.select(row)); } - public changePage(event?: PageEvent | MatPaginator): any { + public changePage(event?: PageEvent): any { this.selection.clear(); return this.factoryLoadFunc(event ?? this.paginator); } diff --git a/console/src/app/modules/members-table/members-table.module.ts b/console/src/app/modules/members-table/members-table.module.ts index 895c771723..eb1378c67f 100644 --- a/console/src/app/modules/members-table/members-table.module.ts +++ b/console/src/app/modules/members-table/members-table.module.ts @@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatSelectModule } from '@angular/material/select'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; @@ -14,6 +13,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { InputModule } from 'src/app/modules/input/input.module'; import { AvatarModule } from '../avatar/avatar.module'; +import { PaginatorModule } from '../paginator/paginator.module'; import { RefreshTableModule } from '../refresh-table/refresh-table.module'; import { MembersTableComponent } from './members-table.component'; @@ -28,7 +28,7 @@ import { MembersTableComponent } from './members-table.component'; MatCheckboxModule, MatIconModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatSortModule, MatTooltipModule, FormsModule, diff --git a/console/src/app/modules/meta-layout/meta.scss b/console/src/app/modules/meta-layout/meta.scss index acd7ccc963..b9e9fdd427 100644 --- a/console/src/app/modules/meta-layout/meta.scss +++ b/console/src/app/modules/meta-layout/meta.scss @@ -2,7 +2,7 @@ @import '~@angular/material/theming'; @mixin meta-theme($theme) { - $is-dark-theme: map-get($theme, is-dark); + $is-dark-theme: map-get($theme, is-dark); .meta-details { margin-bottom: 1rem; diff --git a/console/src/app/modules/mfa-table/mfa-table.component.scss b/console/src/app/modules/mfa-table/mfa-table.component.scss index 3329d39ed9..015580618f 100644 --- a/console/src/app/modules/mfa-table/mfa-table.component.scss +++ b/console/src/app/modules/mfa-table/mfa-table.component.scss @@ -45,14 +45,14 @@ &:not(.disabled) { &:hover { .rm { - display: block; + display: block; } } } &.disabled { - opacity: .5; - cursor: not-allowed; + opacity: .5; + cursor: not-allowed; } } } diff --git a/console/src/app/modules/onboarding/onboarding.component.scss b/console/src/app/modules/onboarding/onboarding.component.scss index d58ff345dd..f34acbed1b 100644 --- a/console/src/app/modules/onboarding/onboarding.component.scss +++ b/console/src/app/modules/onboarding/onboarding.component.scss @@ -11,7 +11,7 @@ box-shadow: inset 0 -1px if($is-dark-theme, #303131, #e3e8ee); .prev { - background: $primary-color; + background: $primary-color; } .goto { @@ -32,116 +32,116 @@ } .split { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - display: flex; - flex-direction: column; - box-sizing: border-box; - border-radius: 0.5rem; - box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: flex; + flex-direction: column; + box-sizing: border-box; + border-radius: .5rem; + box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); - @media only screen and (min-width: 1024px) { - flex-direction: row; - - .right { - overflow: auto; - } - } - - .left { - flex-basis: 300px; - box-sizing: border-box; - padding: 1.5rem; - background: linear-gradient(40deg, rgb(80, 66, 121),rgb(177, 59, 122),rgb(225,53,81), rgb(230,107,86)); - box-shadow: inset -2px 1px 15px -9px #000000; - - h1 { - color: white; - } - - .firststeps { - color: #fad6e3; - text-transform: uppercase; - font-size: 12px; - font-weight: bold; - } - - p { - color: #fad6e3; - font-size: 12px; - font-weight: bold; - } - - button { - width: 100%; - } - } + @media only screen and (min-width: 1024px) { + flex-direction: row; .right { - padding: 1.5rem; - flex: 1; - box-sizing: border-box; - - .desc { - color: var(--grey); - font-size: 20px; - margin-top: .5rem; - } - - .onboarding-row { - display: flex; - padding: 1rem 0; - align-items: center; - - .prev { - height: 40px; - width: 40px; - min-width: 40px; - border-radius: .5rem; - display: flex; - align-items: center; - justify-content: center; - margin-right: 2rem; - color: white; - font-size: 1.2rem; - box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); - } - - h3 { - margin-top: 0; - margin-bottom: .5rem; - font-size: 15px; - } - - p { - font-size: 12px; - margin: 0; - color: var(--grey); - } - - .fill-space { - flex: 1; - } - - .action-row { - display: flex; - align-items: center; - flex-wrap: wrap; - justify-content: flex-end; - - .goto { - background-color: white; - padding: 2px 1rem; - color: black; - border-radius: 50vw; - font-size: 12px; - margin: .5rem 0 .5rem 1rem; - white-space: nowrap; - } - } - } + overflow: auto; } -} \ No newline at end of file + } + + .left { + flex-basis: 300px; + box-sizing: border-box; + padding: 1.5rem; + background: linear-gradient(40deg, rgb(80, 66, 121), rgb(177, 59, 122), rgb(225, 53, 81), rgb(230, 107, 86)); + box-shadow: inset -2px 1px 15px -9px #000; + + h1 { + color: white; + } + + .firststeps { + color: #fad6e3; + text-transform: uppercase; + font-size: 12px; + font-weight: bold; + } + + p { + color: #fad6e3; + font-size: 12px; + font-weight: bold; + } + + button { + width: 100%; + } + } + + .right { + padding: 1.5rem; + flex: 1; + box-sizing: border-box; + + .desc { + color: var(--grey); + font-size: 20px; + margin-top: .5rem; + } + + .onboarding-row { + display: flex; + padding: 1rem 0; + align-items: center; + + .prev { + height: 40px; + width: 40px; + min-width: 40px; + border-radius: .5rem; + display: flex; + align-items: center; + justify-content: center; + margin-right: 2rem; + color: white; + font-size: 1.2rem; + box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); + } + + h3 { + margin-top: 0; + margin-bottom: .5rem; + font-size: 15px; + } + + p { + font-size: 12px; + margin: 0; + color: var(--grey); + } + + .fill-space { + flex: 1; + } + + .action-row { + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: flex-end; + + .goto { + background-color: white; + padding: 2px 1rem; + color: black; + border-radius: 50vw; + font-size: 12px; + margin: .5rem 0 .5rem 1rem; + white-space: nowrap; + } + } + } + } +} diff --git a/console/src/app/modules/onboarding/onboarding.component.spec.ts b/console/src/app/modules/onboarding/onboarding.component.spec.ts index 9361e6bb35..68520dd5a8 100644 --- a/console/src/app/modules/onboarding/onboarding.component.spec.ts +++ b/console/src/app/modules/onboarding/onboarding.component.spec.ts @@ -8,7 +8,7 @@ describe('OnboardingComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ OnboardingComponent ] + declarations: [ OnboardingComponent ], }) .compileComponents(); }); diff --git a/console/src/app/modules/onboarding/onboarding.component.ts b/console/src/app/modules/onboarding/onboarding.component.ts index 3091e94299..8940b6e50c 100644 --- a/console/src/app/modules/onboarding/onboarding.component.ts +++ b/console/src/app/modules/onboarding/onboarding.component.ts @@ -1,16 +1,19 @@ -import { Component, OnInit } from '@angular/core'; -import { AuthenticationService } from 'src/app/services/authentication.service'; +import { Component } from '@angular/core'; @Component({ selector: 'cnsl-onboarding', templateUrl: './onboarding.component.html', - styleUrls: ['./onboarding.component.scss'] + styleUrls: ['./onboarding.component.scss'], }) export class OnboardingComponent { - public steps = [ - { titleI18nKey: 'ONBOARDING.STEPS.1.TITLE', descI18nKey: 'ONBOARDING.STEPS.1.DESC', docs: "https://docs.zitadel.ch/use", link: ['/projects', 'create'] }, - { titleI18nKey: 'ONBOARDING.STEPS.2.TITLE', descI18nKey: 'ONBOARDING.STEPS.2.DESC', docs: "https://docs.zitadel.ch/use", link: ['/projects'] }, - { titleI18nKey: 'ONBOARDING.STEPS.3.TITLE', descI18nKey: 'ONBOARDING.STEPS.3.DESC', link: ['/iam', 'policies'] }, - ]; - constructor() { } + public steps: Array<{ + titleI18nKey: string; + descI18nKey: string, + docs?: string; + link?: string[]; + }> = [ + { titleI18nKey: 'ONBOARDING.STEPS.1.TITLE', descI18nKey: 'ONBOARDING.STEPS.1.DESC', docs: 'https://docs.zitadel.ch/use', link: ['/projects', 'create'] }, + { titleI18nKey: 'ONBOARDING.STEPS.2.TITLE', descI18nKey: 'ONBOARDING.STEPS.2.DESC', docs: 'https://docs.zitadel.ch/use', link: ['/projects'] }, + { titleI18nKey: 'ONBOARDING.STEPS.3.TITLE', descI18nKey: 'ONBOARDING.STEPS.3.DESC', link: ['/iam', 'policies'] }, + ]; } diff --git a/console/src/app/modules/paginator/paginator.component.html b/console/src/app/modules/paginator/paginator.component.html new file mode 100644 index 0000000000..576e2127cc --- /dev/null +++ b/console/src/app/modules/paginator/paginator.component.html @@ -0,0 +1,20 @@ +
+
+

{{length}} {{'PAGINATOR.COUNT' | translate}}

+

{{timestamp | timestampToDate | localizedDate: 'EEEE dd. MMM YYYY, HH:mm'}}

+
+ + {{pageIndex * pageSize}} - {{pageIndex * pageSize + pageSize}} +
+ + + + {{sizeOption}} + + + + + +
+
\ No newline at end of file diff --git a/console/src/app/modules/paginator/paginator.component.scss b/console/src/app/modules/paginator/paginator.component.scss new file mode 100644 index 0000000000..86e25858ad --- /dev/null +++ b/console/src/app/modules/paginator/paginator.component.scss @@ -0,0 +1,62 @@ +.paginator { + display: flex; + align-items: center; + flex-direction: column; + padding-top: .5rem; + padding-bottom: 1rem; + + @media only screen and (min-width: 500px) { + flex-direction: row; + } + + .col { + p { + margin: 0; + } + + .length { + font-size: 14px; + } + + .ts { + font-size: 12px; + color: var(--grey); + } + } + + .fill-space { + flex: 1; + } + + .pos { + font-size: 12px; + margin: .5rem 1rem .5rem 1rem; + color: var(--grey); + } + + .size { + transform: translateY(1px); + margin-right: .5rem; + } + + button { + margin: 0 .5rem; + } + + :last-child { + margin-right: 0; + } + + .row { + display: flex; + align-items: center; + } +} + +/* stylelint-disable */ +::ng-deep .mat-select { + min-width: 60px; + height: 36px !important; + padding-top: 8px !important; +} +/* stylelint-enable */ diff --git a/console/src/app/modules/paginator/paginator.component.spec.ts b/console/src/app/modules/paginator/paginator.component.spec.ts new file mode 100644 index 0000000000..3ffe7d6801 --- /dev/null +++ b/console/src/app/modules/paginator/paginator.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PaginatorComponent } from './paginator.component'; + +describe('PaginatorComponent', () => { + let component: PaginatorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PaginatorComponent ], + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PaginatorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/console/src/app/modules/paginator/paginator.component.ts b/console/src/app/modules/paginator/paginator.component.ts new file mode 100644 index 0000000000..bbf029ade1 --- /dev/null +++ b/console/src/app/modules/paginator/paginator.component.ts @@ -0,0 +1,57 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Timestamp } from 'src/app/proto/generated/google/protobuf/timestamp_pb'; + +export interface PageEvent { + length: number; + pageSize: number; + pageIndex: number; + pageSizeOptions: Array; +} + +@Component({ + selector: 'cnsl-paginator', + templateUrl: './paginator.component.html', + styleUrls: ['./paginator.component.scss'], +}) +export class PaginatorComponent { + @Input() public timestamp!: Timestamp.AsObject; + @Input() public length: number = 0; + @Input() public pageSize: number = 10; + @Input() public pageIndex: number = 0; + @Input() public pageSizeOptions: Array = [10, 25, 50]; + @Output() public page: EventEmitter = new EventEmitter(); + constructor() { } + + public previous(): void { + if (this.previousPossible) { + this.pageIndex = this.pageIndex - 1; + this.emitChange(); + } + } + + public next(): void { + if (this.nextPossible) { + this.pageIndex = this.pageIndex + 1; + this.emitChange(); + } + } + + get previousPossible(): boolean { + const temp = this.pageIndex - 1; + return (temp >= 0); + } + + get nextPossible(): boolean { + const temp = this.pageIndex + 1; + return (temp <= (this.length / this.pageSize)); + } + + public emitChange(): void { + this.page.emit({ + length: this.length, + pageSize: this.pageSize, + pageIndex: this.pageIndex, + pageSizeOptions: this.pageSizeOptions, + }); + } +} diff --git a/console/src/app/modules/paginator/paginator.module.ts b/console/src/app/modules/paginator/paginator.module.ts new file mode 100644 index 0000000000..9797674af2 --- /dev/null +++ b/console/src/app/modules/paginator/paginator.module.ts @@ -0,0 +1,31 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSelectModule } from '@angular/material/select'; +import { TranslateModule } from '@ngx-translate/core'; +import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; +import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; + +import { FormFieldModule } from '../form-field/form-field.module'; +import { PaginatorComponent } from './paginator.component'; + + + +@NgModule({ + declarations: [PaginatorComponent], + imports: [ + CommonModule, + FormsModule, + TranslateModule, + MatButtonModule, + TimestampToDatePipeModule, + FormFieldModule, + MatSelectModule, + LocalizedDatePipeModule, + ], + exports: [ + PaginatorComponent, + ], +}) +export class PaginatorModule { } diff --git a/console/src/app/modules/policies/login-policy/add-idp-dialog/add-idp-dialog.component.ts b/console/src/app/modules/policies/login-policy/add-idp-dialog/add-idp-dialog.component.ts index bc75162895..c94a59b2e3 100644 --- a/console/src/app/modules/policies/login-policy/add-idp-dialog/add-idp-dialog.component.ts +++ b/console/src/app/modules/policies/login-policy/add-idp-dialog/add-idp-dialog.component.ts @@ -24,7 +24,6 @@ export class AddIdpDialogComponent { public idp: IDP.AsObject | undefined = undefined; public availableIdps: Array | string[] = []; - public IdpProviderType: any = IDPOwnerType; constructor( private mgmtService: ManagementService, diff --git a/console/src/app/modules/policies/login-policy/login-policy.component.scss b/console/src/app/modules/policies/login-policy/login-policy.component.scss index 71cafac5a1..0f545a8b8f 100644 --- a/console/src/app/modules/policies/login-policy/login-policy.component.scss +++ b/console/src/app/modules/policies/login-policy/login-policy.component.scss @@ -18,7 +18,7 @@ } .info { - display: block; + display: block; } } } @@ -51,25 +51,25 @@ color: white; .line { - display: flex; - align-items: center; + display: flex; + align-items: center; - img { - height: 30px; - width: 30px; - margin-right: 1rem; - border-radius: .5rem; - object-fit: contain; - } - - div { - flex: 1; - display: block; - - * { - display: block; - } + img { + height: 30px; + width: 30px; + margin-right: 1rem; + border-radius: .5rem; + object-fit: contain; + } + + div { + flex: 1; + display: block; + + * { + display: block; } + } } } @@ -116,13 +116,13 @@ } &:not(.disabled) { - &:hover { - .rm { - display: block; - } + &:hover { + .rm { + display: block; } + } } - + img { height: 100%; width: 100%; diff --git a/console/src/app/modules/policies/login-policy/login-policy.component.ts b/console/src/app/modules/policies/login-policy/login-policy.component.ts index dd697da0e5..21edd94ac8 100644 --- a/console/src/app/modules/policies/login-policy/login-policy.component.ts +++ b/console/src/app/modules/policies/login-policy/login-policy.component.ts @@ -195,7 +195,7 @@ export class LoginPolicyComponent implements OnDestroy { }); dialogRef.afterClosed().subscribe(resp => { - if (resp && resp.idp) { + if (resp && resp.idp && resp.type) { this.addIdp(resp.idp, resp.type).then(() => { this.loading = true; setTimeout(() => { @@ -208,12 +208,10 @@ export class LoginPolicyComponent implements OnDestroy { }); } - private addIdp(idp: IDP.AsObject | IDP.AsObject, ownerType?: IDPOwnerType): Promise { + private addIdp(idp: IDP.AsObject | IDP.AsObject, ownerType: IDPOwnerType): Promise { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: - if (ownerType) { - return (this.service as ManagementService).addIDPToLoginPolicy(idp.id, ownerType); - } + return (this.service as ManagementService).addIDPToLoginPolicy(idp.id, ownerType); case PolicyComponentServiceType.ADMIN: return (this.service as AdminService).addIDPToLoginPolicy(idp.id); } diff --git a/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts index 9b32677830..4fdfc19db1 100644 --- a/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts @@ -30,7 +30,7 @@ import { OrgIamPolicyComponent } from './org-iam-policy.component'; InfoSectionModule, TranslateModule, DetailLayoutModule, - LinksModule + LinksModule, ], }) export class OrgIamPolicyModule { } diff --git a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss index 4460f6d245..e0c121fb57 100644 --- a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss +++ b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss @@ -19,7 +19,7 @@ padding: .3rem 0; .icon { - margin-right: 1rem; + margin-right: 1rem; } .left-desc { diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts index 0a96506f1b..f500d5a03b 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts @@ -66,7 +66,8 @@ export class PasswordLockoutPolicyComponent implements OnDestroy { }); } - private getData(): Promise { + private getData(): + Promise { switch (this.serviceType) { case PolicyComponentServiceType.MGMT: return (this.service as ManagementService).getPasswordLockoutPolicy(); diff --git a/console/src/app/modules/policy-grid/policy-grid.component.scss b/console/src/app/modules/policy-grid/policy-grid.component.scss index 028301e015..08b5a8150a 100644 --- a/console/src/app/modules/policy-grid/policy-grid.component.scss +++ b/console/src/app/modules/policy-grid/policy-grid.component.scss @@ -68,14 +68,15 @@ h2 { } .warn { - margin-bottom: .5rem; + margin-bottom: .5rem; } - + .icons { - margin-bottom: 1rem; - .icon { - margin-right: .5rem; - } + margin-bottom: 1rem; + + .icon { + margin-right: .5rem; + } } .fill-space { diff --git a/console/src/app/modules/policy-grid/policy-grid.component.ts b/console/src/app/modules/policy-grid/policy-grid.component.ts index 3f8fbf1b97..729e089cb6 100644 --- a/console/src/app/modules/policy-grid/policy-grid.component.ts +++ b/console/src/app/modules/policy-grid/policy-grid.component.ts @@ -24,13 +24,13 @@ export class PolicyGridComponent implements OnInit { constructor(private mgmtService: ManagementService, private adminService: AdminService) { } public ngOnInit(): void { - if (this.type == PolicyGridType.ORG) { + if (this.type === PolicyGridType.ORG) { this.mgmtService.getPasswordComplexityPolicy().then((resp) => { if (resp.policy) { this.complexityPolicy = resp.policy; } }); - } else if (this.type == PolicyGridType.IAM) { + } else if (this.type === PolicyGridType.IAM) { this.adminService.getPasswordComplexityPolicy().then((resp) => { if (resp.policy) { this.complexityPolicy = resp.policy; diff --git a/console/src/app/modules/project-members/project-members-datasource.ts b/console/src/app/modules/project-members/project-members-datasource.ts index 8a1fd044a7..4e025f1e8a 100644 --- a/console/src/app/modules/project-members/project-members-datasource.ts +++ b/console/src/app/modules/project-members/project-members-datasource.ts @@ -7,8 +7,8 @@ import { Member } from 'src/app/proto/generated/zitadel/member_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; export enum ProjectType { - PROJECTTYPE_OWNED = "OWNED", - PROJECTTYPE_GRANTED = "GRANTED" + PROJECTTYPE_OWNED = 'OWNED', + PROJECTTYPE_GRANTED = 'GRANTED', } /** @@ -35,7 +35,10 @@ export class ProjectMembersDataSource extends DataSource { this.loadingSubject.next(true); - const promise: Promise | Promise | undefined = + const promise: + Promise | + Promise + | undefined = projectType === ProjectType.PROJECTTYPE_OWNED ? this.mgmtService.listProjectMembers(projectId, pageSize, offset) : projectType === ProjectType.PROJECTTYPE_GRANTED && grantId ? diff --git a/console/src/app/modules/project-members/project-members.component.ts b/console/src/app/modules/project-members/project-members.component.ts index d78b011666..f9dc29699e 100644 --- a/console/src/app/modules/project-members/project-members.component.ts +++ b/console/src/app/modules/project-members/project-members.component.ts @@ -111,18 +111,22 @@ export class ProjectMembersComponent { public removeProjectMemberSelection(): void { Promise.all(this.selection.map(member => { if (this.projectType === ProjectType.PROJECTTYPE_OWNED) { - return this.mgmtService.removeProjectMember((this.project as Project.AsObject).id, member.userId).then(() => { - this.toast.showInfo('PROJECT.TOAST.MEMBERREMOVED', true); - }).catch(error => { - this.toast.showError(error); - }); - } else if (this.projectType === ProjectType.PROJECTTYPE_GRANTED) { - return this.mgmtService.removeProjectGrantMember((this.project as GrantedProject.AsObject).projectId, this.grantId, - member.userId).then(() => { + return this.mgmtService.removeProjectMember((this.project as Project.AsObject).id, member.userId) + .then(() => { this.toast.showInfo('PROJECT.TOAST.MEMBERREMOVED', true); }).catch(error => { this.toast.showError(error); }); + } else if (this.projectType === ProjectType.PROJECTTYPE_GRANTED) { + return this.mgmtService.removeProjectGrantMember( + (this.project as GrantedProject.AsObject).projectId, + this.grantId, + member.userId, + ).then(() => { + this.toast.showInfo('PROJECT.TOAST.MEMBERREMOVED', true); + }).catch(error => { + this.toast.showError(error); + }); } })).then(() => { setTimeout(() => { @@ -173,8 +177,12 @@ export class ProjectMembersComponent { return this.mgmtService.addProjectMember((this.project as Project.AsObject).id, user.id, roles); } else if (this.projectType === ProjectType.PROJECTTYPE_GRANTED) { - return this.mgmtService.addProjectGrantMember((this.project as GrantedProject.AsObject).projectId, this.grantId, - user.id, roles); + return this.mgmtService.addProjectGrantMember( + (this.project as GrantedProject.AsObject).projectId, + this.grantId, + user.id, + roles, + ); } })).then(() => { setTimeout(() => { diff --git a/console/src/app/modules/project-roles/project-roles.component.html b/console/src/app/modules/project-roles/project-roles.component.html index ad875c8772..beae34f65a 100644 --- a/console/src/app/modules/project-roles/project-roles.component.html +++ b/console/src/app/modules/project-roles/project-roles.component.html @@ -72,8 +72,8 @@ {{'PROJECT.ROLE.EMPTY' | translate}} - - + \ No newline at end of file diff --git a/console/src/app/modules/project-roles/project-roles.component.scss b/console/src/app/modules/project-roles/project-roles.component.scss index c0a5f6c049..903c770664 100644 --- a/console/src/app/modules/project-roles/project-roles.component.scss +++ b/console/src/app/modules/project-roles/project-roles.component.scss @@ -43,16 +43,15 @@ } tr { - outline: none; - + outline: none; + + button { + visibility: hidden; + } + + &:hover { button { - visibility: hidden; - } - - &:hover { - button { - visibility: visible; - } + visibility: visible; } } - \ No newline at end of file +} diff --git a/console/src/app/modules/project-roles/project-roles.component.ts b/console/src/app/modules/project-roles/project-roles.component.ts index e838287c20..44c3fcf01b 100644 --- a/console/src/app/modules/project-roles/project-roles.component.ts +++ b/console/src/app/modules/project-roles/project-roles.component.ts @@ -1,13 +1,13 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator } from '@angular/material/paginator'; import { MatTable } from '@angular/material/table'; import { tap } from 'rxjs/operators'; import { Role } from 'src/app/proto/generated/zitadel/project_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; +import { PaginatorComponent } from '../paginator/paginator.component'; import { ProjectRoleDetailComponent } from './project-role-detail/project-role-detail.component'; import { ProjectRolesDataSource } from './project-roles-datasource'; @@ -21,7 +21,7 @@ export class ProjectRolesComponent implements AfterViewInit, OnInit { @Input() public projectId: string = ''; @Input() public disabled: boolean = false; @Input() public actionsVisible: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatTable) public table!: MatTable; public dataSource!: ProjectRolesDataSource; public selection: SelectionModel = new SelectionModel(true, []); @@ -64,6 +64,11 @@ export class ProjectRolesComponent implements AfterViewInit, OnInit { ); } + public changePage(): void { + this.selection.clear(); + this.loadRolesPage(); + } + public isAllSelected(): boolean { const numSelected = this.selection.selected.length; const numRows = this.dataSource.rolesSubject.value.length; diff --git a/console/src/app/modules/project-roles/project-roles.module.ts b/console/src/app/modules/project-roles/project-roles.module.ts index f9b258422e..feb234853d 100644 --- a/console/src/app/modules/project-roles/project-roles.module.ts +++ b/console/src/app/modules/project-roles/project-roles.module.ts @@ -6,7 +6,6 @@ import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; @@ -18,6 +17,7 @@ import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.mod import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; +import { PaginatorModule } from '../paginator/paginator.module'; import { RefreshTableModule } from '../refresh-table/refresh-table.module'; import { ProjectRoleDetailComponent } from './project-role-detail/project-role-detail.component'; import { ProjectRolesComponent } from './project-roles.component'; @@ -30,7 +30,7 @@ import { ProjectRolesComponent } from './project-roles.component'; MatButtonModule, HasRoleModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatDialogModule, InputModule, FormsModule, diff --git a/console/src/app/modules/refresh-table/refresh-table.component.html b/console/src/app/modules/refresh-table/refresh-table.component.html index 0235d8cfb3..9ee9417a5c 100644 --- a/console/src/app/modules/refresh-table/refresh-table.component.html +++ b/console/src/app/modules/refresh-table/refresh-table.component.html @@ -1,12 +1,11 @@
-
- {{dataSize}} - {{selection?.selected?.length}} -
- {{'ORG_DETAIL.TABLE.TOTAL' | translate}} - {{'ORG_DETAIL.TABLE.SELECTION' | translate}} - {{timestamp | timestampToDate | localizedDate: 'EEE dd. MMM, HH:mm'}} -
+
+
+ {{selection?.selected?.length}} + {{'ORG_DETAIL.TABLE.SELECTION' | translate}} +
+ | + {{'ORG_DETAIL.TABLE.CLEAR' | translate}}
diff --git a/console/src/app/modules/refresh-table/refresh-table.component.scss b/console/src/app/modules/refresh-table/refresh-table.component.scss index 56fa7b123b..3724c9aa63 100644 --- a/console/src/app/modules/refresh-table/refresh-table.component.scss +++ b/console/src/app/modules/refresh-table/refresh-table.component.scss @@ -3,23 +3,28 @@ display: flex; align-items: center; - .col { + .row { display: flex; - flex-direction: column; - align-items: flex-start; - - .desc { - font-size: .8rem; - color: var(--grey); - margin-right: 1rem; - - span { - display: block; - } - } .count { - font-size: 2rem; + margin-right: .5rem; + color: var(--grey); + } + + .desc { + font-size: 14px; + color: var(--grey); + } + + .slash { + margin: 0 .5rem; + color: var(--grey); + } + + a { + cursor: pointer; + font-size: 14px; + margin-top: 2px; } } diff --git a/console/src/app/modules/refresh-table/refresh-table.module.ts b/console/src/app/modules/refresh-table/refresh-table.module.ts index 90ad165ca2..20877e44ec 100644 --- a/console/src/app/modules/refresh-table/refresh-table.module.ts +++ b/console/src/app/modules/refresh-table/refresh-table.module.ts @@ -6,12 +6,12 @@ import { MatIconModule } from '@angular/material/icon'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; import { RefreshTableComponent } from './refresh-table.component'; - @NgModule({ declarations: [RefreshTableComponent], imports: [ @@ -24,6 +24,7 @@ import { RefreshTableComponent } from './refresh-table.component'; MatProgressSpinnerModule, TimestampToDatePipeModule, LocalizedDatePipeModule, + PaginatorModule, ], exports: [ RefreshTableComponent, diff --git a/console/src/app/modules/user-grants/user-grants.component.html b/console/src/app/modules/user-grants/user-grants.component.html index 0492f4502e..8e686eb026 100644 --- a/console/src/app/modules/user-grants/user-grants.component.html +++ b/console/src/app/modules/user-grants/user-grants.component.html @@ -2,8 +2,8 @@ [emitRefreshOnPreviousRoutes]="refreshOnPreviousRoutes" [timestamp]="dataSource?.viewTimestamp" [dataSize]="dataSource?.totalResult" [selection]="selection"> - +
- - +
diff --git a/console/src/app/modules/user-grants/user-grants.component.scss b/console/src/app/modules/user-grants/user-grants.component.scss index eefa886195..236e22c9c2 100644 --- a/console/src/app/modules/user-grants/user-grants.component.scss +++ b/console/src/app/modules/user-grants/user-grants.component.scss @@ -109,5 +109,11 @@ } .filtername { + flex: 1; margin-right: 1rem; + + .filterinput { + height: 36px; + transform: translateY(1px); + } } diff --git a/console/src/app/modules/user-grants/user-grants.component.ts b/console/src/app/modules/user-grants/user-grants.component.ts index 42b446bc7d..e3a3db6064 100644 --- a/console/src/app/modules/user-grants/user-grants.component.ts +++ b/console/src/app/modules/user-grants/user-grants.component.ts @@ -1,7 +1,6 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core'; import { MatInput } from '@angular/material/input'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatSelectChange } from '@angular/material/select'; import { MatTable } from '@angular/material/table'; import { tap } from 'rxjs/operators'; @@ -19,6 +18,7 @@ import { import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; +import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'; import { UserGrantContext, UserGrantsDataSource } from './user-grants-datasource'; export enum UserGrantListSearchKey { @@ -45,7 +45,7 @@ export class UserGrantsComponent implements OnInit, AfterViewInit { public dataSource!: UserGrantsDataSource; public selection: SelectionModel = new SelectionModel(true, []); - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatTable) public table!: MatTable; @Input() disableWrite: boolean = false; @@ -75,7 +75,7 @@ export class UserGrantsComponent implements OnInit, AfterViewInit { @Input() public displayedColumns: string[] = ['select', 'user', 'org', - 'projectId', 'dates', 'roleNamesList']; + 'projectId', 'creationDate', 'changeDate', 'roleNamesList']; public ngOnInit(): void { this.dataSource = new UserGrantsDataSource(this.userService); diff --git a/console/src/app/modules/user-grants/user-grants.module.ts b/console/src/app/modules/user-grants/user-grants.module.ts index 332fb0fa48..c70178d306 100644 --- a/console/src/app/modules/user-grants/user-grants.module.ts +++ b/console/src/app/modules/user-grants/user-grants.module.ts @@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; @@ -18,6 +17,7 @@ import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/ import { InputModule } from '../../modules/input/input.module'; import { AvatarModule } from '../avatar/avatar.module'; +import { PaginatorModule } from '../paginator/paginator.module'; import { RefreshTableModule } from '../refresh-table/refresh-table.module'; import { UserGrantsComponent } from './user-grants.component'; @@ -31,7 +31,7 @@ import { UserGrantsComponent } from './user-grants.component'; MatButtonModule, HasRoleModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatIconModule, RouterModule, MatProgressSpinnerModule, diff --git a/console/src/app/pages/grants/grants.component.html b/console/src/app/pages/grants/grants.component.html index 99fd9ca528..7a73ef7513 100644 --- a/console/src/app/pages/grants/grants.component.html +++ b/console/src/app/pages/grants/grants.component.html @@ -1,7 +1,7 @@ -
+

{{ 'GRANTS.TITLE' | translate }}

{{'GRANTS.DESC' | translate }}

- diff --git a/console/src/app/pages/home/home.component.scss b/console/src/app/pages/home/home.component.scss index 091d2f1ea8..0260583329 100644 --- a/console/src/app/pages/home/home.component.scss +++ b/console/src/app/pages/home/home.component.scss @@ -34,74 +34,74 @@ .onboard, .quickstart { - text-decoration: none; - cursor: pointer; - box-sizing: border-box; - flex: 1 0 45%; - position: relative; - border-radius: 0.5rem; - margin: 1rem; - padding: 1.5rem; - box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); + text-decoration: none; + cursor: pointer; + box-sizing: border-box; + flex: 1 0 45%; + position: relative; + border-radius: .5rem; + margin: 1rem; + padding: 1.5rem; + box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); - h2 { - color: white; - } - - .first-steps { - text-transform: uppercase; - font-size: 12px; - font-weight: bold; + h2 { + color: white; + } + + .first-steps { + text-transform: uppercase; + font-size: 12px; + font-weight: bold; + } + + .close { + visibility: hidden; + position: absolute; + top: 0; + right: 0; + + i { + color: white; + font-size: 1rem; } + } + &:hover { .close { - visibility: hidden; - position: absolute; - top: 0; - right: 0; - - i { - color: white; - font-size: 1rem; - } - } - - &:hover { - .close { - visibility: visible; - } + visibility: visible; } + } } .onboard { - background: linear-gradient(40deg, rgb(80, 66, 121),rgb(177, 59, 122),rgb(225,53,81), rgb(230,107,86)); + background: linear-gradient(40deg, rgb(80, 66, 121), rgb(177, 59, 122), rgb(225, 53, 81), rgb(230, 107, 86)); - p { - color: #fad6e3; - } + p { + color: #fad6e3; + } } .quickstart { - background: linear-gradient(30deg, #2283a6,#6c8f59); + background: linear-gradient(30deg, #2283a6, #6c8f59); - p { - color: #d6f3fa; - } + p { + color: #d6f3fa; + } - .logo-cloud { - display: flex; - flex-wrap: wrap; - margin: -0.5rem; - - i { - font-size: 40px; - padding: .5rem; - border: 1px solid #ffffff50; - border-radius: .5rem; - margin: 0.5rem; - color: white; - } + .logo-cloud { + display: flex; + flex-wrap: wrap; + margin: -.5rem; + + i { + font-size: 40px; + padding: .5rem; + border: 1px solid #ffffff50; + border-radius: .5rem; + margin: .5rem; + color: white; } + } } .item { diff --git a/console/src/app/pages/home/home.component.ts b/console/src/app/pages/home/home.component.ts index e9cbc25f4b..d7caf2ab83 100644 --- a/console/src/app/pages/home/home.component.ts +++ b/console/src/app/pages/home/home.component.ts @@ -15,8 +15,8 @@ export class HomeComponent { const theme = localStorage.getItem('theme'); this.dark = theme === 'dark-theme' ? true : theme === 'light-theme' ? false : true; - this.firstStepsDismissed = localStorage.getItem('firstStartDismissed') == 'true' ? true : false; - this.quickstartsDismissed = localStorage.getItem('quickstartsDismissed') == 'true' ? true : false; + this.firstStepsDismissed = localStorage.getItem('firstStartDismissed') === 'true' ? true : false; + this.quickstartsDismissed = localStorage.getItem('quickstartsDismissed') === 'true' ? true : false; } dismissFirstSteps(event: Event): void { diff --git a/console/src/app/pages/iam/eventstore/eventstore.component.html b/console/src/app/pages/iam/eventstore/eventstore.component.html index 0e17a4dc02..1c4bec9c51 100644 --- a/console/src/app/pages/iam/eventstore/eventstore.component.html +++ b/console/src/app/pages/iam/eventstore/eventstore.component.html @@ -1,4 +1,4 @@ -
+

{{ 'IAM.EVENTSTORE.TITLE' | translate }}

{{'IAM.EVENTSTORE.DESCRIPTION' | translate }}

diff --git a/console/src/app/pages/iam/iam-routing.module.ts b/console/src/app/pages/iam/iam-routing.module.ts index e8a011320b..14a66c6045 100644 --- a/console/src/app/pages/iam/iam-routing.module.ts +++ b/console/src/app/pages/iam/iam-routing.module.ts @@ -39,7 +39,7 @@ const routes: Routes = [ // canActivate: [RoleGuard], data: { roles: ['iam.features.read'], - serviceType: FeatureServiceType.ADMIN + serviceType: FeatureServiceType.ADMIN, }, }, { diff --git a/console/src/app/pages/iam/iam-views/iam-views.component.html b/console/src/app/pages/iam/iam-views/iam-views.component.html index ce36d3b615..76a4fe96a6 100644 --- a/console/src/app/pages/iam/iam-views/iam-views.component.html +++ b/console/src/app/pages/iam/iam-views/iam-views.component.html @@ -26,16 +26,17 @@ - {{ 'IAM.VIEWS.LASTSPOOL' | translate }} - - {{view?.lastSuccessfulSpoolerRun | timestampToDate | localizedDate: 'EEE dd. MMM, HH:mm' }} - + {{ 'IAM.VIEWS.LASTSPOOL' | translate }} + + {{view?.lastSuccessfulSpoolerRun | timestampToDate | localizedDate: 'EEE dd. MMM, HH:mm' + }} + - @@ -48,4 +49,4 @@ -
+
\ No newline at end of file diff --git a/console/src/app/pages/iam/iam.component.html b/console/src/app/pages/iam/iam.component.html index d67b39c919..2408352c31 100644 --- a/console/src/app/pages/iam/iam.component.html +++ b/console/src/app/pages/iam/iam.component.html @@ -6,7 +6,7 @@

{{'FEATURES.TITLE' | translate}}

{{'FEATURES.DESCRIPTION' | translate}}

- stars + stars

ZITADEL {{features.tier.name}}

{{features.tier?.description}}

diff --git a/console/src/app/pages/iam/iam.component.scss b/console/src/app/pages/iam/iam.component.scss index db4e2934e1..c7c5d8d71d 100644 --- a/console/src/app/pages/iam/iam.component.scss +++ b/console/src/app/pages/iam/iam.component.scss @@ -13,46 +13,48 @@ } h2 { - font-size: 1.2rem; - letter-spacing: .05em; - text-transform: uppercase; - margin-top: 2rem; + font-size: 1.2rem; + letter-spacing: .05em; + text-transform: uppercase; + margin-top: 2rem; } - + .tier { + display: flex; + flex-direction: row; + padding: 1rem; + border-radius: .5rem; + color: white; + background-color: rgb(245, 203, 99); + margin-bottom: .5rem; + + .ext { + margin-right: .5rem; + align-self: center; + color: inherit; + } + + .icon { + margin-right: 1rem; + font-size: 2rem; + } + + .text { display: flex; - flex-direction: row; - padding: 1rem; - border-radius: .5rem; - color: white; - background-color: rgb(245, 203, 99); - margin-bottom: .5rem; + flex-direction: column; - .ext { - margin-right: .5rem; - align-self: center; - color: inherit; + p { + margin: 0; + font-size: 14px; } - mat-icon { - margin-right: 1rem; - font-size: 2rem; + .title { + font-size: 16px; + margin-bottom: .5rem; } + } - .text { - display: flex; - flex-direction: column; - p { - margin: 0; - font-size: 14px; - } - .title { - font-size: 16px; - margin-bottom: .5rem; - } - } - - .fill-space { - flex: 1; - } -} \ No newline at end of file + .fill-space { + flex: 1; + } +} diff --git a/console/src/app/pages/orgs/org-detail/org-detail.component.html b/console/src/app/pages/orgs/org-detail/org-detail.component.html index a24f1b1768..ed717c9f80 100644 --- a/console/src/app/pages/orgs/org-detail/org-detail.component.html +++ b/console/src/app/pages/orgs/org-detail/org-detail.component.html @@ -33,7 +33,7 @@

{{'FEATURES.TITLE' | translate}}

{{'FEATURES.DESCRIPTION' | translate}}

- stars + stars

ZITADEL {{features.tier.name}}

{{features.tier?.description}}

diff --git a/console/src/app/pages/orgs/org-detail/org-detail.component.scss b/console/src/app/pages/orgs/org-detail/org-detail.component.scss index 41cc37da4c..d78c3282b9 100644 --- a/console/src/app/pages/orgs/org-detail/org-detail.component.scss +++ b/console/src/app/pages/orgs/org-detail/org-detail.component.scss @@ -8,7 +8,7 @@ h2 { text-transform: uppercase; margin-top: 2rem; } - + .top-desc { color: var(--grey); font-size: 14px; @@ -20,43 +20,43 @@ h2 { } .tier { + display: flex; + flex-direction: row; + padding: 1rem; + border-radius: .5rem; + color: white; + background-color: rgb(245, 203, 99); + margin-bottom: .5rem; + + .ext { + margin-right: .5rem; + align-self: center; + color: inherit; + } + + .icon { + margin-right: 1rem; + font-size: 2rem; + } + + .text { display: flex; - flex-direction: row; - padding: 1rem; - border-radius: .5rem; - color: white; - background-color: rgb(245, 203, 99); - margin-bottom: .5rem; + flex-direction: column; - .ext { - margin-right: .5rem; - align-self: center; - color: inherit; + p { + margin: 0; + font-size: 14px; } - mat-icon { - margin-right: 1rem; - font-size: 2rem; + .title { + font-size: 16px; + margin-bottom: .5rem; } + } - .text { - display: flex; - flex-direction: column; - p { - margin: 0; - font-size: 14px; - } - .title { - font-size: 16px; - margin-bottom: .5rem; - } - - - } - - .fill-space { - flex: 1; - } + .fill-space { + flex: 1; + } } .domain { diff --git a/console/src/app/pages/orgs/org-list/org-list.component.html b/console/src/app/pages/orgs/org-list/org-list.component.html index b319068149..51b91d2f19 100644 --- a/console/src/app/pages/orgs/org-list/org-list.component.html +++ b/console/src/app/pages/orgs/org-list/org-list.component.html @@ -1,4 +1,4 @@ -
+

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

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

diff --git a/console/src/app/pages/orgs/org-list/org-list.component.scss b/console/src/app/pages/orgs/org-list/org-list.component.scss index f80d45b669..047e4d97ea 100644 --- a/console/src/app/pages/orgs/org-list/org-list.component.scss +++ b/console/src/app/pages/orgs/org-list/org-list.component.scss @@ -23,6 +23,10 @@ h1 { padding-right: 0; } } + + td { + cursor: pointer; + } } .pointer { diff --git a/console/src/app/pages/orgs/org-list/org-list.component.ts b/console/src/app/pages/orgs/org-list/org-list.component.ts index 572aa0e416..8124d39014 100644 --- a/console/src/app/pages/orgs/org-list/org-list.component.ts +++ b/console/src/app/pages/orgs/org-list/org-list.component.ts @@ -11,7 +11,7 @@ import { Org, OrgNameQuery, OrgQuery } from 'src/app/proto/generated/zitadel/org import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; enum OrgListSearchKey { - NAME = "NAME", + NAME = 'NAME', } @Component({ @@ -53,7 +53,7 @@ export class OrgListComponent implements AfterViewInit { this.loadingSubject.next(true); let query; if (filter) { - const query = new OrgQuery(); + query = new OrgQuery(); const orgNameQuery = new OrgNameQuery(); orgNameQuery.setMethod(TextQueryMethod.TEXT_QUERY_METHOD_CONTAINS_IGNORE_CASE); orgNameQuery.setName(filter); 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 267e2aa161..be97dd7e3f 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 @@ -51,7 +51,7 @@ p.desc { margin: 0 -1.5rem; .formfield { - max-width: 400px; + max-width: 400px; } .step-title { @@ -126,4 +126,4 @@ p.desc { padding: .5rem 4rem; float: right; } -} \ No newline at end of file +} diff --git a/console/src/app/pages/projects/apps/app-create/app-create.component.ts b/console/src/app/pages/projects/apps/app-create/app-create.component.ts index ceb1b570f7..27a25e7ae9 100644 --- a/console/src/app/pages/projects/apps/app-create/app-create.component.ts +++ b/console/src/app/pages/projects/apps/app-create/app-create.component.ts @@ -78,11 +78,17 @@ export class AppCreateComponent implements OnInit, OnDestroy { ]; // set to oidc first - public authMethodTypes: { type: OIDCAuthMethodType | APIAuthMethodType, checked: boolean, disabled: boolean; api?: boolean; oidc?: boolean; }[] = [ - { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_BASIC, checked: false, disabled: false, oidc: true }, - { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE, checked: false, disabled: false, oidc: true }, - { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST, checked: false, disabled: false, oidc: true }, - ]; + public authMethodTypes: { + type: OIDCAuthMethodType | APIAuthMethodType, + checked: boolean, + disabled: boolean; + api?: boolean; + oidc?: boolean; + }[] = [ + { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_BASIC, checked: false, disabled: false, oidc: true }, + { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE, checked: false, disabled: false, oidc: true }, + { type: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST, checked: false, disabled: false, oidc: true }, + ]; // stepper firstFormGroup!: FormGroup; @@ -196,11 +202,18 @@ export class AppCreateComponent implements OnInit, OnDestroy { const partialConfig = getPartialConfigFromAuthMethod(form.authMethod); if (this.isStepperOIDC && partialConfig && partialConfig.oidc) { - this.oidcAppRequest.responseTypesList = partialConfig.oidc?.responseTypesList ?? []; - this.oidcAppRequest.grantTypesList = partialConfig.oidc?.grantTypesList ?? []; - this.oidcAppRequest.authMethodType = partialConfig.oidc?.authMethodType ?? OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE; + this.oidcAppRequest.responseTypesList = partialConfig.oidc?.responseTypesList + ?? []; + + this.oidcAppRequest.grantTypesList = partialConfig.oidc?.grantTypesList + ?? []; + + this.oidcAppRequest.authMethodType = partialConfig.oidc?.authMethodType + ?? OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE; + } else if (this.isStepperAPI && partialConfig && partialConfig.api) { - this.apiAppRequest.authMethodType = partialConfig.api?.authMethodType ?? APIAuthMethodType.API_AUTH_METHOD_TYPE_BASIC; + this.apiAppRequest.authMethodType = partialConfig.api?.authMethodType + ?? APIAuthMethodType.API_AUTH_METHOD_TYPE_BASIC; } }); } @@ -265,10 +278,10 @@ export class AppCreateComponent implements OnInit, OnDestroy { this.form.updateValueAndValidity(); } - public changeStep(event: StepperSelectionEvent) { + public changeStep(event: StepperSelectionEvent): void { if (event.selectedIndex >= 2) { this.requestRedirectValuesSubject$.next(); - }; + } } private async getData({ projectid }: Params): Promise { @@ -335,8 +348,8 @@ export class AppCreateComponent implements OnInit, OnDestroy { const dialogRef = this.dialog.open(AppSecretDialogComponent, { data: { clientSecret: clientSecret, - clientId: clientId - } + clientId: clientId, + }, }); dialogRef.afterClosed().subscribe(() => { @@ -382,19 +395,19 @@ export class AppCreateComponent implements OnInit, OnDestroy { } get isDevOIDC(): boolean { - return (this.formappType?.value as RadioItemAppType).createType == AppCreateType.OIDC; + return (this.formappType?.value as RadioItemAppType).createType === AppCreateType.OIDC; } get isStepperOIDC(): boolean { - return (this.appType?.value as RadioItemAppType).createType == AppCreateType.OIDC; + return (this.appType?.value as RadioItemAppType).createType === AppCreateType.OIDC; } get isDevAPI(): boolean { - return (this.formappType?.value as RadioItemAppType).createType == AppCreateType.API; + return (this.formappType?.value as RadioItemAppType).createType === AppCreateType.API; } get isStepperAPI(): boolean { - return (this.appType?.value as RadioItemAppType).createType == AppCreateType.API; + return (this.appType?.value as RadioItemAppType).createType === AppCreateType.API; } -}; +} 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 11ff7f1add..af0556d90d 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 @@ -14,7 +14,7 @@ + + + + + + - - - - @@ -112,7 +114,7 @@ + *ngIf="appType?.value == OIDCAppType.OIDC_APP_TYPE_WEB || appType?.value == OIDCAppType.OIDC_APP_TYPE_USER_AGENT"> {{'APP.OIDC.REDIRECTDESCRIPTIONWEB' | translate}} @@ -142,7 +144,7 @@ -
+
diff --git a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss index 9645db0a65..fa3bade765 100644 --- a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss +++ b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss @@ -1,61 +1,62 @@ .form { - display: flex; - align-items: flex-end; - min-width: 320px; + display: flex; + align-items: flex-end; + min-width: 320px; - .formfield { - flex: 1; - } + .formfield { + flex: 1; + } - button { - margin-bottom: 14px; - margin-right: -0.5rem; - } + button { + margin-bottom: 14px; + margin-right: -.5rem; + } } + .uri-list { - margin: 0 .5rem; - width: 100%; + margin: 0 .5rem; + width: 100%; - .uri-line { - display: flex; - align-items: center; + .uri-line { + display: flex; + align-items: center; - .uri { - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 14px; - } - - .fill-space { - flex: 1; - } - - i.green { - font-size: 1rem; - line-height: 35px; - height: 30px; - } - - i.red { - font-size: 1.2rem; - } - - .icon-button { - height: 30px; - line-height: 30px; - - mat-icon { - font-size: 1rem !important; - } - - &:not(:hover) { - color: var(--grey); - } - } + .uri { + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 14px; } + + .fill-space { + flex: 1; + } + + i.green { + font-size: 1rem; + line-height: 35px; + height: 30px; + } + + i.red { + font-size: 1.2rem; + } + + .icon-button { + height: 30px; + line-height: 30px; + + .icon { + font-size: 1rem !important; + } + + &:not(:hover) { + color: var(--grey); + } + } + } } .error { - font-size: 13px; - color: #f44336; - margin: 0 .5rem 1.5rem .5rem; -} \ No newline at end of file + font-size: 13px; + color: #f44336; + margin: 0 .5rem 1.5rem .5rem; +} diff --git a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.spec.ts b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.spec.ts index a09b84deb9..e0e091ac0d 100644 --- a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.spec.ts +++ b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.spec.ts @@ -8,7 +8,7 @@ describe('RedirectUrisComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ RedirectUrisComponent ] + declarations: [ RedirectUrisComponent ], }) .compileComponents(); }); diff --git a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.ts b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.ts index 7409949cd0..9dabd40d5d 100644 --- a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.ts +++ b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.ts @@ -5,7 +5,7 @@ import { Observable, Subscription } from 'rxjs'; @Component({ selector: 'cnsl-redirect-uris', templateUrl: './redirect-uris.component.html', - styleUrls: ['./redirect-uris.component.scss'] + styleUrls: ['./redirect-uris.component.scss'], }) export class RedirectUrisComponent implements OnInit, OnDestroy { @Input() title: string = ''; diff --git a/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.html b/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.html index c64f079660..a732b01084 100644 --- a/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.html +++ b/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.html @@ -74,8 +74,8 @@ {{'PROJECT.TABLE.EMPTY' | translate}}
- +
\ No newline at end of file diff --git a/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.ts b/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.ts index 7d1cf80582..63c6b680b8 100644 --- a/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.ts +++ b/console/src/app/pages/projects/granted-projects/granted-project-list/granted-project-list.component.ts @@ -1,12 +1,12 @@ import { animate, animateChild, query, stagger, style, transition, trigger } from '@angular/animations'; import { SelectionModel } from '@angular/cdk/collections'; import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; +import { PageEvent, PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { GrantedProject } from 'src/app/proto/generated/zitadel/project_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -41,7 +41,7 @@ export class GrantedProjectListComponent implements OnInit, OnDestroy { public dataSource: MatTableDataSource = new MatTableDataSource(); - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public grantedProjectList: GrantedProject.AsObject[] = []; public displayedColumns: string[] = ['select', 'name', 'resourceOwnerName', 'state', 'creationDate', 'changeDate']; diff --git a/console/src/app/pages/projects/granted-projects/granted-projects.component.html b/console/src/app/pages/projects/granted-projects/granted-projects.component.html index 2abb92c156..c77aaad281 100644 --- a/console/src/app/pages/projects/granted-projects/granted-projects.component.html +++ b/console/src/app/pages/projects/granted-projects/granted-projects.component.html @@ -1,4 +1,4 @@ -
+

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

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

diff --git a/console/src/app/pages/projects/granted-projects/granted-projects.module.ts b/console/src/app/pages/projects/granted-projects/granted-projects.module.ts index c1de234cff..8516644c96 100644 --- a/console/src/app/pages/projects/granted-projects/granted-projects.module.ts +++ b/console/src/app/pages/projects/granted-projects/granted-projects.module.ts @@ -4,7 +4,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; @@ -20,6 +19,7 @@ import { ChangesModule } from 'src/app/modules/changes/changes.module'; import { ContributorsModule } from 'src/app/modules/contributors/contributors.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { MetaLayoutModule } from 'src/app/modules/meta-layout/meta-layout.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { ProjectRolesModule } from 'src/app/modules/project-roles/project-roles.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; @@ -51,7 +51,7 @@ import { GrantedProjectsComponent } from './granted-projects.component'; ReactiveFormsModule, HasRoleModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, InputModule, ChangesModule, MatIconModule, diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.scss b/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.scss index 14c5803970..a3820ce631 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.scss +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.scss @@ -1,62 +1,61 @@ - .app-grid-header { - display: flex; - align-items: center; + display: flex; + align-items: center; - .fill-space { - flex: 1; - } + .fill-space { + flex: 1; + } } .app-container { + display: flex; + flex-wrap: wrap; + margin: 0 -1rem; + padding-bottom: 2rem; + + .sp-container { display: flex; - flex-wrap: wrap; - margin: 0 -1rem; - padding-bottom: 2rem; + justify-content: center; + align-items: center; + width: calc(82px + 2rem); + height: calc(82px + 2rem); + } - .sp-container { - display: flex; - justify-content: center; - align-items: center; - width: calc(82px + 2rem); - height: calc(82px + 2rem); + .app-wrap { + outline: none; + display: flex; + flex-direction: column; + align-items: center; + max-width: 150px; + + .grid-card { + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 2rem; + height: 80px; + width: 80px; + margin: 1rem; + text-transform: uppercase; + border-radius: .5rem; + font-weight: 800; + box-sizing: border-box; + + &.add { + border: 2px solid var(--grey); + } } - .app-wrap { - outline: none; - display: flex; - flex-direction: column; - align-items: center; - max-width: 150px; - - .grid-card { - cursor: pointer; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - font-size: 2rem; - height: 80px; - width: 80px; - margin: 1rem; - text-transform: uppercase; - border-radius: .5rem; - font-weight: 800; - box-sizing: border-box; - - &.add { - border: 2px solid var(--grey); - } - } - - .name { - font-size: 14px; - } - - .type { - font-size: 12px; - color: #8a868a; - } + .name { + font-size: 14px; } + + .type { + font-size: 12px; + color: #8a868a; + } + } } diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.html b/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.html index dd72fc2256..58d8ff4df3 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.html @@ -45,8 +45,8 @@ - - +
\ No newline at end of file diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.ts index e2532bd928..1a0339779f 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/applications/applications.component.ts @@ -1,16 +1,15 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { MatTable } from '@angular/material/table'; import { merge, of } from 'rxjs'; import { tap } from 'rxjs/operators'; +import { PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { App } from 'src/app/proto/generated/zitadel/app_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ProjectApplicationsDataSource } from './applications-datasource'; - @Component({ selector: 'app-applications', templateUrl: './applications.component.html', @@ -19,7 +18,7 @@ import { ProjectApplicationsDataSource } from './applications-datasource'; export class ApplicationsComponent implements AfterViewInit, OnInit { @Input() public projectId: string = ''; @Input() public disabled: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatSort) public sort!: MatSort; @ViewChild(MatTable) public table!: MatTable; public dataSource!: ProjectApplicationsDataSource; diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.module.ts b/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.module.ts index 04d52105a3..1c13abecd9 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.module.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.module.ts @@ -5,7 +5,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatRippleModule } from '@angular/material/core'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTableModule } from '@angular/material/table'; @@ -20,6 +19,7 @@ import { ChangesModule } from 'src/app/modules/changes/changes.module'; import { ContributorsModule } from 'src/app/modules/contributors/contributors.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { MetaLayoutModule } from 'src/app/modules/meta-layout/meta-layout.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { ProjectRolesModule } from 'src/app/modules/project-roles/project-roles.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { UserGrantsModule } from 'src/app/modules/user-grants/user-grants.module'; @@ -62,7 +62,7 @@ import { ProjectGrantsComponent } from './project-grants/project-grants.componen MatTableModule, InputModule, CardModule, - MatPaginatorModule, + PaginatorModule, MatRippleModule, MatCheckboxModule, MatSelectModule, diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.html b/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.html index 131c6bc32f..68aca38d17 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.html @@ -80,8 +80,8 @@ {{'PROJECT.GRANT.EMPTY' | translate}}
- - +
\ No newline at end of file diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.ts index a377803559..bdb508b108 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/project-grants/project-grants.component.ts @@ -1,10 +1,10 @@ import { animate, state, style, transition, trigger } from '@angular/animations'; import { SelectionModel } from '@angular/cdk/collections'; import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; import { MatSelectChange } from '@angular/material/select'; import { MatTable } from '@angular/material/table'; import { tap } from 'rxjs/operators'; +import { PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { GrantedProject, Role } from 'src/app/proto/generated/zitadel/project_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -27,7 +27,7 @@ export class ProjectGrantsComponent implements OnInit, AfterViewInit { @Input() refreshOnPreviousRoutes: string[] = []; @Input() public projectId: string = ''; @Input() public disabled: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatTable) public table!: MatTable; public dataSource!: ProjectGrantsDataSource; public selection: SelectionModel = new SelectionModel(true, []); diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html index 9b98c10c4d..10eb720899 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html @@ -83,8 +83,8 @@ {{'PROJECT.TABLE.EMPTY' | translate}}
- +
\ No newline at end of file diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts index a6e38d2ca8..9ae20b68be 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts @@ -2,13 +2,13 @@ import { animate, animateChild, query, stagger, style, transition, trigger } fro import { SelectionModel } from '@angular/cdk/collections'; import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; import { take } from 'rxjs/operators'; +import { PageEvent, PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { Project } from 'src/app/proto/generated/zitadel/project_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; @@ -45,7 +45,7 @@ export class OwnedProjectListComponent implements OnInit, OnDestroy { public dataSource: MatTableDataSource = new MatTableDataSource(); - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public ownedProjectList: Project.AsObject[] = []; public displayedColumns: string[] = ['select', 'name', 'state', 'creationDate', 'changeDate', 'actions']; @@ -99,7 +99,7 @@ export class OwnedProjectListComponent implements OnInit, OnDestroy { } public changePage(event: PageEvent): void { - this.getData(event.pageSize, event.pageIndex); + this.getData(event.pageSize, event.pageSize * event.pageIndex); } public addProject(): void { diff --git a/console/src/app/pages/projects/owned-projects/owned-projects.component.html b/console/src/app/pages/projects/owned-projects/owned-projects.component.html index 49a19d65ea..60c7dcd8da 100644 --- a/console/src/app/pages/projects/owned-projects/owned-projects.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-projects.component.html @@ -1,4 +1,4 @@ -
+

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

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

diff --git a/console/src/app/pages/projects/owned-projects/owned-projects.module.ts b/console/src/app/pages/projects/owned-projects/owned-projects.module.ts index 1debf45fa9..3117737060 100644 --- a/console/src/app/pages/projects/owned-projects/owned-projects.module.ts +++ b/console/src/app/pages/projects/owned-projects/owned-projects.module.ts @@ -5,7 +5,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSortModule } from '@angular/material/sort'; @@ -16,6 +15,7 @@ import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { AvatarModule } from 'src/app/modules/avatar/avatar.module'; import { CardModule } from 'src/app/modules/card/card.module'; import { InputModule } from 'src/app/modules/input/input.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; import { UserGrantsModule } from 'src/app/modules/user-grants/user-grants.module'; @@ -46,7 +46,7 @@ import { OwnedProjectsComponent } from './owned-projects.component'; ReactiveFormsModule, HasRoleModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, InputModule, MatChipsModule, MatIconModule, diff --git a/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.ts b/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.ts index d1e9516a8a..dd01a24d06 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.ts +++ b/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.ts @@ -114,14 +114,15 @@ export class ProjectGrantDetailComponent { public removeProjectMemberSelection(): void { Promise.all(this.selection.map(member => { - return this.mgmtService.removeProjectGrantMember(this.grant.projectId, this.grant.grantId, member.userId).then(() => { - this.toast.showInfo('PROJECT.GRANT.TOAST.PROJECTGRANTMEMBERREMOVED', true); - setTimeout(() => { - this.changePage.emit(); - }, 1000); - }).catch(error => { - this.toast.showError(error); - }); + return this.mgmtService.removeProjectGrantMember(this.grant.projectId, this.grant.grantId, member.userId) + .then(() => { + this.toast.showInfo('PROJECT.GRANT.TOAST.PROJECTGRANTMEMBERREMOVED', true); + setTimeout(() => { + this.changePage.emit(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); })); } @@ -157,11 +158,15 @@ export class ProjectGrantDetailComponent { } updateMemberRoles(member: Member.AsObject, selectionChange: MatSelectChange): void { - this.mgmtService.updateProjectGrantMember(this.grant.projectId, this.grant.grantId, member.userId, selectionChange.value) - .then(() => { - this.toast.showInfo('PROJECT.GRANT.TOAST.PROJECTGRANTMEMBERCHANGED', true); - }).catch(error => { - this.toast.showError(error); - }); + this.mgmtService.updateProjectGrantMember( + this.grant.projectId, + this.grant.grantId, + member.userId, + selectionChange.value, + ).then(() => { + this.toast.showInfo('PROJECT.GRANT.TOAST.PROJECTGRANTMEMBERCHANGED', true); + }).catch(error => { + this.toast.showError(error); + }); } } diff --git a/console/src/app/pages/signedout/signedout.component.scss b/console/src/app/pages/signedout/signedout.component.scss index d5320c36a7..1c4931df1d 100644 --- a/console/src/app/pages/signedout/signedout.component.scss +++ b/console/src/app/pages/signedout/signedout.component.scss @@ -33,7 +33,7 @@ padding: .5rem 4rem; i { - margin-left: .5rem; + margin-left: .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 ee95bbb3cc..ec0645262e 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 @@ -43,8 +43,6 @@ export class UserGrantCreateComponent implements OnDestroy { public user!: User.AsObject; public UserTarget: any = UserTarget; - public ProjectGrantView: any = GrantedProject; - public ProjectView: any = Project; constructor( private userService: ManagementService, private toast: ToastService, diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss index 9ec72b44af..c4cff9bec4 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss @@ -1,43 +1,43 @@ .type-selection { + display: flex; + margin: 0 -.5rem; + + .otp-btn, + .u2f-btn { + flex: 1; + min-height: 100px; + border-radius: .5rem; display: flex; - margin: 0 -0.5rem; + flex-direction: column; + justify-content: center; + align-items: center; + margin: 1rem; + box-sizing: border-box; - .otp-btn, - .u2f-btn { - flex: 1; - min-height: 100px; - border-radius: .5rem; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - margin: 1rem; - box-sizing: border-box; - - .icon-row { - display: flex; - } + .icon-row { + display: flex; } + } - button { - margin: .5rem; - } + button { + margin: .5rem; + } } .desc { - font-size: 14px; - color: var(--grey); + font-size: 14px; + color: var(--grey); } .otp { - max-width: 400px; - display: flex; - flex-direction: column; - align-items: center; + max-width: 400px; + display: flex; + flex-direction: column; + align-items: center; } .u2f { - max-width: 400px; + max-width: 400px; } .formfield { diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts index 527cbcf30c..8b0b5ccf19 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts @@ -44,13 +44,13 @@ export class AuthFactorDialogComponent { public selectType(type: AuthFactorType): void { this.selectedType = type; - if (type == AuthFactorType.OTP) { + if (type === AuthFactorType.OTP) { this.authService.addMyMultiFactorOTP().then((otpresp) => { this.otpurl = otpresp.url; }, error => { this.toast.showError(error); }); - } else if (type == AuthFactorType.U2F) { + } else if (type === AuthFactorType.U2F) { this.authService.addMyMultiFactorU2F().then((u2fresp) => { if (u2fresp.key) { const credOptions: CredentialCreationOptions = JSON.parse(atob(u2fresp.key?.publicKey as string)); @@ -73,10 +73,10 @@ export class AuthFactorDialogComponent { } } - public submitAuth() { - if (this.selectedType == AuthFactorType.OTP) { + public submitAuth(): void { + if (this.selectedType === AuthFactorType.OTP) { this.submitOTP(); - } else if (this.selectedType == AuthFactorType.U2F) { + } else if (this.selectedType === AuthFactorType.U2F) { this.submitU2F(); } } diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.scss b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.scss index d36f7f5b3c..fcd583f25f 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.scss +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.scss @@ -11,6 +11,7 @@ .sub { color: var(--grey); + max-width: 500px; } .theme { diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts index 3c396e5f8b..9f160c016b 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-detail.component.ts @@ -190,7 +190,7 @@ export class AuthUserDetailComponent implements OnDestroy { titleKey: 'USER.LOGINMETHODS.EMAIL.EDITTITLE', descriptionKey: 'USER.LOGINMETHODS.EMAIL.EDITDESC', value: this.user.human?.email?.email, - type: type + type: type, }, width: '400px', }); diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-mfa/auth-user-mfa.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-mfa/auth-user-mfa.component.ts index e1be214254..e2fdfe6add 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-mfa/auth-user-mfa.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-user-mfa/auth-user-mfa.component.ts @@ -42,7 +42,7 @@ export class AuthUserMfaComponent implements OnInit, OnDestroy { constructor( private service: GrpcAuthService, private toast: ToastService, - private dialog: MatDialog + private dialog: MatDialog, ) { } public ngOnInit(): void { @@ -56,8 +56,8 @@ export class AuthUserMfaComponent implements OnInit, OnDestroy { public addAuthFactor(): void { const dialogRef = this.dialog.open(AuthFactorDialogComponent, { data: { - otpDisabled: !this.otpAvailable - } + otpDisabled: !this.otpAvailable, + }, }); dialogRef.afterClosed().subscribe((code) => { diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/edit-dialog/edit-dialog.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/edit-dialog/edit-dialog.component.ts index b4fd6b8530..ba66f500cf 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/edit-dialog/edit-dialog.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/edit-dialog/edit-dialog.component.ts @@ -20,7 +20,7 @@ export class EditDialogComponent { constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) { this.valueControl.setValue(data.value); - if (data.type == EditDialogType.PHONE) { + if (data.type === EditDialogType.PHONE) { this.isPhone = true; } @@ -31,7 +31,7 @@ export class EditDialogComponent { }); } - changeValue(changedValue: string) { + private changeValue(changedValue: string): void { if (this.isPhone && changedValue) { try { const phoneNumber = parsePhoneNumber(changedValue ?? '', 'CH'); diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/u2f_util.ts b/console/src/app/pages/users/user-detail/auth-user-detail/u2f_util.ts index 2c87cba61d..9458a55c64 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/u2f_util.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/u2f_util.ts @@ -9,4 +9,4 @@ export function _arrayBufferToBase64(buffer: any): string { return btoa(binary).replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=/g, ''); -} \ No newline at end of file +} diff --git a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html index 064d888459..7f09d076e1 100644 --- a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html +++ b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html @@ -52,8 +52,8 @@ - +
\ No newline at end of file diff --git a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts index 0011ec0682..2168283717 100644 --- a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts +++ b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts @@ -1,10 +1,10 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import { BehaviorSubject, Observable } from 'rxjs'; +import { PageEvent, PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { IDPUserLink } from 'src/app/proto/generated/zitadel/idp_pb'; @@ -20,7 +20,7 @@ import { ToastService } from '../../../../services/toast.service'; export class ExternalIdpsComponent implements OnInit { @Input() service!: GrpcAuthService | ManagementService; @Input() userId!: string; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; public totalResult: number = 0; public viewTimestamp!: Timestamp.AsObject; public dataSource: MatTableDataSource diff --git a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.html b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.html index 1894a9deee..f1e11d3c92 100644 --- a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.html +++ b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.html @@ -78,8 +78,8 @@ - - + +
\ No newline at end of file diff --git a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.scss b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.scss index 6ff0e019a2..7eb621d16e 100644 --- a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.scss +++ b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.scss @@ -35,18 +35,16 @@ cursor: pointer; } - tr { outline: none; - + button { visibility: hidden; } - + &:hover { button { visibility: visible; } } } - diff --git a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.ts b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.ts index 562f8d83d4..21c52f279f 100644 --- a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.ts +++ b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.component.ts @@ -1,11 +1,11 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AfterViewInit, Component, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator } from '@angular/material/paginator'; import { MatTable } from '@angular/material/table'; import { ActivatedRoute } from '@angular/router'; import { tap } from 'rxjs/operators'; import { CreationType, MemberCreateDialogComponent } from 'src/app/modules/add-member-dialog/member-create-dialog.component'; +import { PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { Membership, User } from 'src/app/proto/generated/zitadel/user_pb'; import { AdminService } from 'src/app/services/admin.service'; import { ManagementService } from 'src/app/services/mgmt.service'; @@ -21,7 +21,7 @@ import { MembershipDetailDataSource } from './membership-detail-datasource'; export class MembershipDetailComponent implements AfterViewInit { public user!: User.AsObject; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild(MatTable) public table!: MatTable; public dataSource!: MembershipDetailDataSource; public selection: SelectionModel @@ -207,7 +207,11 @@ export class MembershipDetailComponent implements AfterViewInit { let prom; if (membership.projectId && membership.projectGrantId && membership.userId) { - prom = this.mgmtService.removeProjectGrantMember(membership.projectId, membership.projectGrantId, membership.userId); + prom = this.mgmtService.removeProjectGrantMember( + membership.projectId, + membership.projectGrantId, + membership.userId, + ); } else if (membership.projectId && membership.userId) { prom = this.mgmtService.removeProjectMember(membership.projectId, membership.userId); } else if (membership.orgId && membership.userId) { diff --git a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.module.ts b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.module.ts index de7dabac88..20a3e840bf 100644 --- a/console/src/app/pages/users/user-detail/membership-detail/membership-detail.module.ts +++ b/console/src/app/pages/users/user-detail/membership-detail/membership-detail.module.ts @@ -3,7 +3,6 @@ import { NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; @@ -11,6 +10,7 @@ import { RouterModule, Routes } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { DetailLayoutModule } from 'src/app/modules/detail-layout/detail-layout.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; @@ -37,7 +37,7 @@ const routes: Routes = [ DetailLayoutModule, MatCheckboxModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, MatProgressSpinnerModule, LocalizedDatePipeModule, TimestampToDatePipeModule, diff --git a/console/src/app/pages/users/user-detail/user-detail.module.ts b/console/src/app/pages/users/user-detail/user-detail.module.ts index 822ace41e6..b569fbbc34 100644 --- a/console/src/app/pages/users/user-detail/user-detail.module.ts +++ b/console/src/app/pages/users/user-detail/user-detail.module.ts @@ -5,7 +5,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; @@ -21,6 +20,7 @@ import { DetailLayoutModule } from 'src/app/modules/detail-layout/detail-layout. import { InputModule } from 'src/app/modules/input/input.module'; import { MachineKeysModule } from 'src/app/modules/machine-keys/machine-keys.module'; import { MetaLayoutModule } from 'src/app/modules/meta-layout/meta-layout.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { PasswordComplexityViewModule } from 'src/app/modules/password-complexity-view/password-complexity-view.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; @@ -93,7 +93,7 @@ import { UserMfaComponent } from './user-detail/user-mfa/user-mfa.component'; HasRoleModule, TranslateModule, MatTableModule, - MatPaginatorModule, + PaginatorModule, SharedModule, RefreshTableModule, CopyToClipboardModule, diff --git a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts index 482835b486..4a53795e69 100644 --- a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts +++ b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts @@ -157,7 +157,7 @@ export class UserDetailComponent implements OnInit { if (this.user.id && email) { this.mgmtUserService.updateHumanEmail(this.user.id, email).then(() => { this.toast.showInfo('USER.TOAST.EMAILSAVED', true); - if (this.user.state == UserState.USER_STATE_INITIAL) { + if (this.user.state === UserState.USER_STATE_INITIAL) { this.mgmtUserService.resendHumanInitialization(this.user.id, email ?? '').then(() => { this.toast.showInfo('USER.TOAST.INITEMAILSENT', true); this.refreshChanges$.emit(); @@ -195,13 +195,15 @@ export class UserDetailComponent implements OnInit { } public sendSetPasswordNotification(): void { - this.mgmtUserService.sendHumanResetPasswordNotification(this.user.id, SendHumanResetPasswordNotificationRequest.Type.TYPE_EMAIL) - .then(() => { - this.toast.showInfo('USER.TOAST.PASSWORDNOTIFICATIONSENT', true); - this.refreshChanges$.emit(); - }).catch(error => { - this.toast.showError(error); - }); + this.mgmtUserService.sendHumanResetPasswordNotification( + this.user.id, + SendHumanResetPasswordNotificationRequest.Type.TYPE_EMAIL, + ).then(() => { + this.toast.showInfo('USER.TOAST.PASSWORDNOTIFICATIONSENT', true); + this.refreshChanges$.emit(); + }).catch(error => { + this.toast.showError(error); + }); } public deleteUser(): void { diff --git a/console/src/app/pages/users/user-list/user-list.component.html b/console/src/app/pages/users/user-list/user-list.component.html index 406ab5ac21..b311fd9393 100644 --- a/console/src/app/pages/users/user-list/user-list.component.html +++ b/console/src/app/pages/users/user-list/user-list.component.html @@ -1,4 +1,4 @@ -
+

{{ 'USER.PAGES.LIST' | translate }}

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

diff --git a/console/src/app/pages/users/user-list/user-list.module.ts b/console/src/app/pages/users/user-list/user-list.module.ts index 2c174c0c91..786bbc335b 100644 --- a/console/src/app/pages/users/user-list/user-list.module.ts +++ b/console/src/app/pages/users/user-list/user-list.module.ts @@ -5,7 +5,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; -import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; @@ -14,6 +13,7 @@ import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { AvatarModule } from 'src/app/modules/avatar/avatar.module'; import { CardModule } from 'src/app/modules/card/card.module'; import { InputModule } from 'src/app/modules/input/input.module'; +import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; @@ -38,7 +38,6 @@ import { UserTableComponent } from './user-table/user-table.component'; HasRoleModule, CardModule, MatTableModule, - MatPaginatorModule, MatIconModule, MatProgressSpinnerModule, MatCheckboxModule, @@ -48,6 +47,7 @@ import { UserTableComponent } from './user-table/user-table.component'; SharedModule, RefreshTableModule, InputModule, + PaginatorModule, ], exports: [ UserListComponent, diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.html b/console/src/app/pages/users/user-list/user-table/user-table.component.html index 52fe4bc760..b48cba6a81 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.html +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.html @@ -1,7 +1,7 @@ - @@ -128,8 +128,8 @@ {{'USER.TABLE.EMPTY' | translate}}
- +
diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.scss b/console/src/app/pages/users/user-list/user-table/user-table.component.scss index 7c8d8a0cfb..bd0fd1840e 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.scss +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.scss @@ -53,7 +53,13 @@ } .filtername { - margin: 0 1rem; + flex: 1; + margin-right: 1rem; + + .filterinput { + height: 36px; + transform: translateY(1px); + } } .sa-icon { diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.ts b/console/src/app/pages/users/user-list/user-table/user-table.component.ts index ba4b64f9d9..4eb9050a26 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.ts +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.ts @@ -1,13 +1,13 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { take } from 'rxjs/operators'; import { enterAnimations } from 'src/app/animations'; +import { PageEvent, PaginatorComponent } from 'src/app/modules/paginator/paginator.component'; import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { Timestamp } from 'src/app/proto/generated/google/protobuf/timestamp_pb'; import { TextQueryMethod } from 'src/app/proto/generated/zitadel/object_pb'; @@ -48,7 +48,7 @@ export class UserTableComponent implements OnInit { @Input() type: Type = Type.TYPE_HUMAN; @Input() refreshOnPreviousRoutes: string[] = []; @Input() disabled: boolean = false; - @ViewChild(MatPaginator) public paginator!: MatPaginator; + @ViewChild(PaginatorComponent) public paginator!: PaginatorComponent; @ViewChild('input') public filter!: Input; public viewTimestamp!: Timestamp.AsObject; @@ -101,6 +101,7 @@ export class UserTableComponent implements OnInit { public changePage(event: PageEvent): void { + this.selection.clear(); this.getData(event.pageSize, event.pageIndex * event.pageSize, this.type); } diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts index 6eb4b39f8e..beaf8b93a4 100644 --- a/console/src/app/services/admin.service.ts +++ b/console/src/app/services/admin.service.ts @@ -123,15 +123,17 @@ export class AdminService { public listLoginPolicyMultiFactors(): Promise { const req = new ListLoginPolicyMultiFactorsRequest(); - return this.grpcService.admin.listLoginPolicyMultiFactors(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listLoginPolicyMultiFactors(req, null).then(resp => resp.toObject()); } - public addMultiFactorToLoginPolicy(req: AddMultiFactorToLoginPolicyRequest): Promise { - return this.grpcService.admin.addMultiFactorToLoginPolicy(req, null).then(resp => resp.toObject());; + public addMultiFactorToLoginPolicy(req: AddMultiFactorToLoginPolicyRequest): + Promise { + return this.grpcService.admin.addMultiFactorToLoginPolicy(req, null).then(resp => resp.toObject()); } - public removeMultiFactorFromLoginPolicy(req: RemoveMultiFactorFromLoginPolicyRequest): Promise { - return this.grpcService.admin.removeMultiFactorFromLoginPolicy(req, null).then(resp => resp.toObject());; + public removeMultiFactorFromLoginPolicy(req: RemoveMultiFactorFromLoginPolicyRequest): + Promise { + return this.grpcService.admin.removeMultiFactorFromLoginPolicy(req, null).then(resp => resp.toObject()); } public listLoginPolicySecondFactors(): Promise { @@ -139,34 +141,36 @@ export class AdminService { return this.grpcService.admin.listLoginPolicySecondFactors(req, null).then(resp => resp.toObject()); } - public addSecondFactorToLoginPolicy(req: AddSecondFactorToLoginPolicyRequest): Promise { - return this.grpcService.admin.addSecondFactorToLoginPolicy(req, null).then(resp => resp.toObject());; + public addSecondFactorToLoginPolicy(req: AddSecondFactorToLoginPolicyRequest): + Promise { + return this.grpcService.admin.addSecondFactorToLoginPolicy(req, null).then(resp => resp.toObject()); } - public removeSecondFactorFromLoginPolicy(req: RemoveSecondFactorFromLoginPolicyRequest): Promise { - return this.grpcService.admin.removeSecondFactorFromLoginPolicy(req, null).then(resp => resp.toObject());; + public removeSecondFactorFromLoginPolicy(req: RemoveSecondFactorFromLoginPolicyRequest): + Promise { + return this.grpcService.admin.removeSecondFactorFromLoginPolicy(req, null).then(resp => resp.toObject()); } public listIAMMemberRoles(): Promise { const req = new ListIAMMemberRolesRequest(); - return this.grpcService.admin.listIAMMemberRoles(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listIAMMemberRoles(req, null).then(resp => resp.toObject()); } public listViews(): Promise { const req = new ListViewsRequest(); - return this.grpcService.admin.listViews(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listViews(req, null).then(resp => resp.toObject()); } public listFailedEvents(): Promise { const req = new ListFailedEventsRequest(); - return this.grpcService.admin.listFailedEvents(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listFailedEvents(req, null).then(resp => resp.toObject()); } public clearView(viewname: string, db: string): Promise { const req = new ClearViewRequest(); req.setDatabase(db); req.setViewName(viewname); - return this.grpcService.admin.clearView(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.clearView(req, null).then(resp => resp.toObject()); } public removeFailedEvent(viewname: string, db: string, sequence: number): Promise { @@ -174,7 +178,7 @@ export class AdminService { req.setDatabase(db); req.setViewName(viewname); req.setFailedSequence(sequence); - return this.grpcService.admin.removeFailedEvent(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.removeFailedEvent(req, null).then(resp => resp.toObject()); } // Features @@ -210,7 +214,7 @@ export class AdminService { public getPasswordComplexityPolicy(): Promise { const req = new GetPasswordComplexityPolicyRequest(); - return this.grpcService.admin.getPasswordComplexityPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getPasswordComplexityPolicy(req, null).then(resp => resp.toObject()); } public updatePasswordComplexityPolicy( @@ -226,7 +230,7 @@ export class AdminService { req.setHasNumber(hasNumber); req.setHasSymbol(hasSymbol); req.setMinLength(minLength); - return this.grpcService.admin.updatePasswordComplexityPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updatePasswordComplexityPolicy(req, null).then(resp => resp.toObject()); } /* age */ @@ -234,7 +238,7 @@ export class AdminService { public getPasswordAgePolicy(): Promise { const req = new GetPasswordAgePolicyRequest(); - return this.grpcService.admin.getPasswordAgePolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getPasswordAgePolicy(req, null).then(resp => resp.toObject()); } public updatePasswordAgePolicy( @@ -245,14 +249,14 @@ export class AdminService { req.setMaxAgeDays(maxAgeDays); req.setExpireWarnDays(expireWarnDays); - return this.grpcService.admin.updatePasswordAgePolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updatePasswordAgePolicy(req, null).then(resp => resp.toObject()); } /* lockout */ public getPasswordLockoutPolicy(): Promise { const req = new GetPasswordLockoutPolicyRequest(); - return this.grpcService.admin.getPasswordLockoutPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getPasswordLockoutPolicy(req, null).then(resp => resp.toObject()); } public updatePasswordLockoutPolicy( @@ -263,7 +267,7 @@ export class AdminService { req.setMaxAttempts(maxAttempts); req.setShowLockoutFailure(showLockoutFailures); - return this.grpcService.admin.updatePasswordLockoutPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updatePasswordLockoutPolicy(req, null).then(resp => resp.toObject()); } /* label */ @@ -274,7 +278,7 @@ export class AdminService { } public updateLabelPolicy(req: UpdateLabelPolicyRequest): Promise { - return this.grpcService.admin.updateLabelPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateLabelPolicy(req, null).then(resp => resp.toObject()); } /* login */ @@ -282,11 +286,11 @@ export class AdminService { public getLoginPolicy( ): Promise { const req = new GetLoginPolicyRequest(); - return this.grpcService.admin.getLoginPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getLoginPolicy(req, null).then(resp => resp.toObject()); } public updateLoginPolicy(req: UpdateLoginPolicyRequest): Promise { - return this.grpcService.admin.updateLoginPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateLoginPolicy(req, null).then(resp => resp.toObject()); } /* org iam */ @@ -294,7 +298,7 @@ export class AdminService { public getCustomOrgIAMPolicy(orgId: string): Promise { const req = new GetCustomOrgIAMPolicyRequest(); req.setOrgId(orgId); - return this.grpcService.admin.getCustomOrgIAMPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getCustomOrgIAMPolicy(req, null).then(resp => resp.toObject()); } public addCustomOrgIAMPolicy( @@ -304,7 +308,7 @@ export class AdminService { req.setOrgId(orgId); req.setUserLoginMustBeDomain(userLoginMustBeDomain); - return this.grpcService.admin.addCustomOrgIAMPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.addCustomOrgIAMPolicy(req, null).then(resp => resp.toObject()); } public updateCustomOrgIAMPolicy( @@ -313,7 +317,7 @@ export class AdminService { const req = new UpdateCustomOrgIAMPolicyRequest(); req.setOrgId(orgId); req.setUserLoginMustBeDomain(userLoginMustBeDomain); - return this.grpcService.admin.updateCustomOrgIAMPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateCustomOrgIAMPolicy(req, null).then(resp => resp.toObject()); } public resetCustomOrgIAMPolicyToDefault( @@ -321,20 +325,20 @@ export class AdminService { ): Promise { const req = new ResetCustomOrgIAMPolicyToDefaultRequest(); req.setOrgId(orgId); - return this.grpcService.admin.resetCustomOrgIAMPolicyToDefault(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.resetCustomOrgIAMPolicyToDefault(req, null).then(resp => resp.toObject()); } /* admin iam */ public getOrgIAMPolicy(): Promise { const req = new GetOrgIAMPolicyRequest(); - return this.grpcService.admin.getOrgIAMPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getOrgIAMPolicy(req, null).then(resp => resp.toObject()); } public updateOrgIAMPolicy(userLoginMustBeDomain: boolean): Promise { const req = new UpdateOrgIAMPolicyRequest(); req.setUserLoginMustBeDomain(userLoginMustBeDomain); - return this.grpcService.admin.updateOrgIAMPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateOrgIAMPolicy(req, null).then(resp => resp.toObject()); } /* policies end */ @@ -342,13 +346,13 @@ export class AdminService { public addIDPToLoginPolicy(idpId: string): Promise { const req = new AddIDPToLoginPolicyRequest(); req.setIdpId(idpId); - return this.grpcService.admin.addIDPToLoginPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.addIDPToLoginPolicy(req, null).then(resp => resp.toObject()); } public removeIDPFromLoginPolicy(idpId: string): Promise { const req = new RemoveIDPFromLoginPolicyRequest(); req.setIdpId(idpId); - return this.grpcService.admin.removeIDPFromLoginPolicy(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.removeIDPFromLoginPolicy(req, null).then(resp => resp.toObject()); } public listLoginPolicyIDPs(limit?: number, offset?: number): Promise { @@ -361,7 +365,7 @@ export class AdminService { query.setOffset(offset); } req.setQuery(query); - return this.grpcService.admin.listLoginPolicyIDPs(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listLoginPolicyIDPs(req, null).then(resp => resp.toObject()); } public listIDPs( @@ -382,7 +386,7 @@ export class AdminService { req.setQueriesList(queriesList); } req.setQuery(query); - return this.grpcService.admin.listIDPs(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listIDPs(req, null).then(resp => resp.toObject()); } public getIDPByID( @@ -390,25 +394,25 @@ export class AdminService { ): Promise { const req = new GetIDPByIDRequest(); req.setId(id); - return this.grpcService.admin.getIDPByID(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.getIDPByID(req, null).then(resp => resp.toObject()); } public updateIDP( req: UpdateIDPRequest, ): Promise { - return this.grpcService.admin.updateIDP(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateIDP(req, null).then(resp => resp.toObject()); } public addOIDCIDP( req: AddOIDCIDPRequest, ): Promise { - return this.grpcService.admin.addOIDCIDP(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.addOIDCIDP(req, null).then(resp => resp.toObject()); } public updateIDPOIDCConfig( req: UpdateIDPOIDCConfigRequest, ): Promise { - return this.grpcService.admin.updateIDPOIDCConfig(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateIDPOIDCConfig(req, null).then(resp => resp.toObject()); } public removeIDP( @@ -416,7 +420,7 @@ export class AdminService { ): Promise { const req = new RemoveIDPRequest; req.setIdpId(id); - return this.grpcService.admin.removeIDP(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.removeIDP(req, null).then(resp => resp.toObject()); } public deactivateIDP( @@ -424,7 +428,7 @@ export class AdminService { ): Promise { const req = new DeactivateIDPRequest; req.setIdpId(id); - return this.grpcService.admin.deactivateIDP(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.deactivateIDP(req, null).then(resp => resp.toObject()); } public reactivateIDP( @@ -432,7 +436,7 @@ export class AdminService { ): Promise { const req = new ReactivateIDPRequest; req.setIdpId(id); - return this.grpcService.admin.reactivateIDP(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.reactivateIDP(req, null).then(resp => resp.toObject()); } public listIAMMembers( @@ -453,7 +457,7 @@ export class AdminService { } req.setQuery(metadata); - return this.grpcService.admin.listIAMMembers(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.listIAMMembers(req, null).then(resp => resp.toObject()); } public removeIAMMember( @@ -461,7 +465,7 @@ export class AdminService { ): Promise { const req = new RemoveIAMMemberRequest(); req.setUserId(userId); - return this.grpcService.admin.removeIAMMember(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.removeIAMMember(req, null).then(resp => resp.toObject()); } public addIAMMember( @@ -472,7 +476,7 @@ export class AdminService { req.setUserId(userId); req.setRolesList(rolesList); - return this.grpcService.admin.addIAMMember(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.addIAMMember(req, null).then(resp => resp.toObject()); } public updateIAMMember( @@ -483,6 +487,6 @@ export class AdminService { req.setUserId(userId); req.setRolesList(rolesList); - return this.grpcService.admin.updateIAMMember(req, null).then(resp => resp.toObject());; + return this.grpcService.admin.updateIAMMember(req, null).then(resp => resp.toObject()); } } diff --git a/console/src/app/services/grpc-auth.service.ts b/console/src/app/services/grpc-auth.service.ts index 1b7e8739ec..4283d4e7fc 100644 --- a/console/src/app/services/grpc-auth.service.ts +++ b/console/src/app/services/grpc-auth.service.ts @@ -255,19 +255,19 @@ export class GrpcAuthService { public getMyPasswordComplexityPolicy(): Promise { return this.grpcService.auth.getMyPasswordComplexityPolicy( - new GetMyPasswordComplexityPolicyRequest(), null + new GetMyPasswordComplexityPolicyRequest(), null, ).then(resp => resp.toObject()); } public getMyUser(): Promise { return this.grpcService.auth.getMyUser( - new GetMyUserRequest(), null + new GetMyUserRequest(), null, ).then(resp => resp.toObject()); } public listMyMultiFactors(): Promise { return this.grpcService.auth.listMyAuthFactors( - new ListMyAuthFactorsRequest(), null + new ListMyAuthFactorsRequest(), null, ).then(resp => resp.toObject()); } @@ -330,7 +330,8 @@ export class GrpcAuthService { return this.grpcService.auth.listMyUserSessions(req, null).then(resp => resp.toObject()); } - public listMyUserGrants(limit?: number, offset?: number, queryList?: ListQuery[]): Promise { + public listMyUserGrants(limit?: number, offset?: number, queryList?: ListQuery[]): + Promise { const req = new ListMyUserGrantsRequest(); const query = new ListQuery(); if (limit) { @@ -361,25 +362,25 @@ export class GrpcAuthService { public removeMyPhone(): Promise { return this.grpcService.auth.removeMyPhone( - new RemoveMyPhoneRequest(), null + new RemoveMyPhoneRequest(), null, ).then(resp => resp.toObject()); } public listMyZitadelPermissions(): Promise { return this.grpcService.auth.listMyZitadelPermissions( - new ListMyZitadelPermissionsRequest(), null + new ListMyZitadelPermissionsRequest(), null, ).then(resp => resp.toObject()); } public listMyZitadelFeatures(): Promise { return this.grpcService.auth.listMyZitadelFeatures( - new ListMyZitadelFeaturesRequest(), null + new ListMyZitadelFeaturesRequest(), null, ).then(resp => resp.toObject()); } public getMyPhone(): Promise { return this.grpcService.auth.getMyPhone( - new GetMyPhoneRequest(), null + new GetMyPhoneRequest(), null, ).then(resp => resp.toObject()); } @@ -429,13 +430,13 @@ export class GrpcAuthService { public addMyMultiFactorOTP(): Promise { return this.grpcService.auth.addMyAuthFactorOTP( - new AddMyAuthFactorOTPRequest(), null + new AddMyAuthFactorOTPRequest(), null, ).then(resp => resp.toObject()); } public addMyMultiFactorU2F(): Promise { return this.grpcService.auth.addMyAuthFactorU2F( - new AddMyAuthFactorU2FRequest(), null + new AddMyAuthFactorU2FRequest(), null, ).then(resp => resp.toObject()); } @@ -457,13 +458,13 @@ export class GrpcAuthService { public listMyPasswordless(): Promise { return this.grpcService.auth.listMyPasswordless( - new ListMyPasswordlessRequest(), null + new ListMyPasswordlessRequest(), null, ).then(resp => resp.toObject()); } public addMyPasswordless(): Promise { return this.grpcService.auth.addMyPasswordless( - new AddMyPasswordlessRequest(), null + new AddMyPasswordlessRequest(), null, ).then(resp => resp.toObject()); } @@ -481,13 +482,13 @@ export class GrpcAuthService { req.setVerification(verification); return this.grpcService.auth.verifyMyPasswordless( - req, null + req, null, ).then(resp => resp.toObject()); } public removeMyMultiFactorOTP(): Promise { return this.grpcService.auth.removeMyAuthFactorOTP( - new RemoveMyAuthFactorOTPRequest(), null + new RemoveMyAuthFactorOTPRequest(), null, ).then(resp => resp.toObject()); } diff --git a/console/src/app/services/interceptors/auth.interceptor.ts b/console/src/app/services/interceptors/auth.interceptor.ts index 27646c9e22..87a5002493 100644 --- a/console/src/app/services/interceptors/auth.interceptor.ts +++ b/console/src/app/services/interceptors/auth.interceptor.ts @@ -48,7 +48,7 @@ export class AuthInterceptor implements UnaryIn }); } - openDialog() { + private openDialog(): void { const dialogRef = this.dialog.open(WarnDialogComponent, { data: { confirmKey: 'ACTIONS.LOGIN', diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts index 799faee6c7..077167be06 100644 --- a/console/src/app/services/mgmt.service.ts +++ b/console/src/app/services/mgmt.service.ts @@ -352,11 +352,13 @@ export class ManagementService { return this.grpcService.mgmt.listLoginPolicyMultiFactors(req, null).then(resp => resp.toObject()); } - public addMultiFactorToLoginPolicy(req: AddMultiFactorToLoginPolicyRequest): Promise { + public addMultiFactorToLoginPolicy(req: AddMultiFactorToLoginPolicyRequest): + Promise { return this.grpcService.mgmt.addMultiFactorToLoginPolicy(req, null).then(resp => resp.toObject()); } - public removeMultiFactorFromLoginPolicy(req: RemoveMultiFactorFromLoginPolicyRequest): Promise { + public removeMultiFactorFromLoginPolicy(req: RemoveMultiFactorFromLoginPolicyRequest): + Promise { return this.grpcService.mgmt.removeMultiFactorFromLoginPolicy(req, null).then(resp => resp.toObject()); } @@ -365,11 +367,13 @@ export class ManagementService { return this.grpcService.mgmt.listLoginPolicySecondFactors(req, null).then(resp => resp.toObject()); } - public addSecondFactorToLoginPolicy(req: AddSecondFactorToLoginPolicyRequest): Promise { + public addSecondFactorToLoginPolicy(req: AddSecondFactorToLoginPolicyRequest): + Promise { return this.grpcService.mgmt.addSecondFactorToLoginPolicy(req, null).then(resp => resp.toObject()); } - public removeSecondFactorFromLoginPolicy(req: RemoveSecondFactorFromLoginPolicyRequest): Promise { + public removeSecondFactorFromLoginPolicy(req: RemoveSecondFactorFromLoginPolicyRequest): + Promise { return this.grpcService.mgmt.removeSecondFactorFromLoginPolicy(req, null).then(resp => resp.toObject()); } @@ -378,7 +382,8 @@ export class ManagementService { return this.grpcService.mgmt.getLoginPolicy(req, null).then(resp => resp.toObject()); } - public updateCustomLoginPolicy(req: UpdateCustomLoginPolicyRequest): Promise { + public updateCustomLoginPolicy(req: UpdateCustomLoginPolicyRequest): + Promise { return this.grpcService.mgmt.updateCustomLoginPolicy(req, null).then(resp => resp.toObject()); } @@ -921,7 +926,7 @@ export class ManagementService { nickName?: string, displayName?: string, preferredLanguage?: string, - gender?: Gender + gender?: Gender, ): Promise { const req = new UpdateHumanProfileRequest(); req.setUserId(userId); @@ -1009,7 +1014,8 @@ export class ManagementService { return this.grpcService.mgmt.reactivateUser(req, null).then(resp => resp.toObject()); } - public addProjectRole(projectId: string, roleKey: string, displayName: string, group: string): Promise { + public addProjectRole(projectId: string, roleKey: string, displayName: string, group: string): + Promise { const req = new AddProjectRoleRequest(); req.setProjectId(projectId); req.setRoleKey(roleKey); @@ -1026,7 +1032,8 @@ export class ManagementService { return this.grpcService.mgmt.resendHumanEmailVerification(req, null).then(resp => resp.toObject()); } - public resendHumanInitialization(userId: string, newemail: string): Promise { + public resendHumanInitialization(userId: string, newemail: string): + Promise { const req = new ResendHumanInitializationRequest(); if (newemail) { req.setEmail(newemail); @@ -1049,14 +1056,16 @@ export class ManagementService { return this.grpcService.mgmt.setHumanInitialPassword(req, null).then(resp => resp.toObject()); } - public sendHumanResetPasswordNotification(id: string, type: SendHumanResetPasswordNotificationRequest.Type): Promise { + public sendHumanResetPasswordNotification(id: string, type: SendHumanResetPasswordNotificationRequest.Type): + Promise { const req = new SendHumanResetPasswordNotificationRequest(); req.setUserId(id); req.setType(type); return this.grpcService.mgmt.sendHumanResetPasswordNotification(req, null).then(resp => resp.toObject()); } - public listUsers(limit: number, offset: number, queriesList?: UserSearchQuery[], sortingColumn?: UserFieldName): Promise { + public listUsers(limit: number, offset: number, queriesList?: UserSearchQuery[], sortingColumn?: UserFieldName): + Promise { const req = new ListUsersRequest(); const query = new ListQuery(); if (limit) { @@ -1149,7 +1158,8 @@ export class ManagementService { return this.grpcService.mgmt.bulkRemoveUserGrant(req, null).then(resp => resp.toObject()); } - public listAppChanges(appId: string, projectId: string, limit: number, sequence: number): Promise { + public listAppChanges(appId: string, projectId: string, limit: number, sequence: number): + Promise { const req = new ListAppChangesRequest(); const query = new ChangeQuery(); req.setAppId(appId); @@ -1180,7 +1190,8 @@ export class ManagementService { return this.grpcService.mgmt.listOrgChanges(req, null).then(resp => resp.toObject()); } - public listProjectChanges(projectId: string, limit: number, sequence: number): Promise { + public listProjectChanges(projectId: string, limit: number, sequence: number): + Promise { const req = new ListProjectChangesRequest(); req.setProjectId(projectId); const query = new ChangeQuery(); @@ -1196,7 +1207,8 @@ export class ManagementService { return this.grpcService.mgmt.listProjectChanges(req, null).then(resp => resp.toObject()); } - public listUserChanges(userId: string, limit: number, sequence: number): Promise { + public listUserChanges(userId: string, limit: number, sequence: number): + Promise { const req = new ListUserChangesRequest(); req.setUserId(userId); const query = new ChangeQuery(); @@ -1297,7 +1309,8 @@ export class ManagementService { return this.grpcService.mgmt.updateProject(req, null).then(resp => resp.toObject()); } - public updateProjectGrant(grantId: string, projectId: string, rolesList: string[]): Promise { + public updateProjectGrant(grantId: string, projectId: string, rolesList: string[]): + Promise { const req = new UpdateProjectGrantRequest(); req.setRoleKeysList(rolesList); req.setGrantId(grantId); @@ -1324,7 +1337,8 @@ export class ManagementService { return this.grpcService.mgmt.reactivateProject(req, null).then(resp => resp.toObject()); } - public listProjectGrants(projectId: string, limit: number, offset: number): Promise { + public listProjectGrants(projectId: string, limit: number, offset: number): + Promise { const req = new ListProjectGrantsRequest(); req.setProjectId(projectId); const query = new ListQuery(); @@ -1345,7 +1359,8 @@ export class ManagementService { return this.grpcService.mgmt.listProjectGrantMemberRoles(req, null).then(resp => resp.toObject()); } - public addProjectMember(projectId: string, userId: string, rolesList: string[]): Promise { + public addProjectMember(projectId: string, userId: string, rolesList: string[]): + Promise { const req = new AddProjectMemberRequest(); req.setProjectId(projectId); req.setUserId(userId); @@ -1353,7 +1368,8 @@ export class ManagementService { return this.grpcService.mgmt.addProjectMember(req, null).then(resp => resp.toObject()); } - public updateProjectMember(projectId: string, userId: string, rolesList: string[]): Promise { + public updateProjectMember(projectId: string, userId: string, rolesList: string[]): + Promise { const req = new UpdateProjectMemberRequest(); req.setProjectId(projectId); req.setUserId(userId); @@ -1444,7 +1460,8 @@ export class ManagementService { return this.grpcService.mgmt.deactivateApp(req, null).then(resp => resp.toObject()); } - public regenerateOIDCClientSecret(appId: string, projectId: string): Promise { + public regenerateOIDCClientSecret(appId: string, projectId: string): + Promise { const req = new RegenerateOIDCClientSecretRequest(); req.setAppId(appId); req.setProjectId(projectId); diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index ce41daf32b..4b750d2e75 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -1,5 +1,10 @@ { "APP_NAME": "ZITADEL", + "PAGINATOR": { + "PREVIOUS":"Zurück", + "NEXT":"Weiter", + "COUNT":"Ergebnisse" + }, "ONBOARDING": { "HEADER":"Erste Schritte", "TITLE":"Lernen Sie unsere ZITADEL Console kennen.", @@ -84,7 +89,8 @@ "SHOWORGS":"Alle Organisationen anzeigen", "GRANTSECTION":"Berechtigungssektion", "GRANTS":"Berechtigungen", - "TOC":"Datenschutz und AGB", + "PRIVACY":"Datenschutz", + "TOS":"AGB", "TOOLTIP": { "PERSONAL":"Verwalte deinen persönlichen Account, deine IDPs, Login Methoden, Faktoren und Berechtigungen", "IAMPOLICIES":"Verwalte ZITADELs globale Zugangsrichtlinien und verwalte ZITADEL Manager", @@ -173,13 +179,12 @@ "DEACTIVATE":"Deaktivieren", "ACTIVATE":"Aktivieren", "FILTER": { - "0":"Nach displayName filtern", + "0":"Nach Anzeigename filtern", "1":"Nach Username filtern", - "2":"Nach Vornamen filtern", - "3":"Nach Nachnamen filtern", - "4":"Nach rollenschlüssel filtern", + "2":"Nach Displayname filtern", + "3":"Nach Benutzernamen filtern", + "4":"Nach Email filtern", "5":"Nach Display Namen filtern", - "6":"Nach Email filtern", "10":"Nach Organisationsname filtern", "12":"Project Name" }, @@ -375,6 +380,12 @@ "CREATE": { "TITLE": "Benutzerberechtigung erstellen", "DESCRIPTION": "Suche nach der Organisation, dem Projekt und den verfügbaren Rollen." + }, + "FILTER": { + "0":"Nach User Anzeigename filtern", + "1":"Nach Domain filtern", + "2":"Nach Projectnamen filtern", + "3":"Nach Rolle filtern" } }, "VALIDATION": { @@ -686,10 +697,11 @@ }, "TABLE": { "TOTAL": "Einträge gesamt", - "SELECTION": "Ausgewählte Elemente", + "SELECTION": "ausgewählt", "DEACTIVATE": "Benutzer deaktivieren", "ACTIVATE": "Benutzer aktivieren", - "DELETE": "Benutzer löschen" + "DELETE": "Benutzer löschen", + "CLEAR":"Auswahl aufheben" } }, "PROJECT": { @@ -834,7 +846,7 @@ }, "TABLE": { "TOTAL": "Einträge gesamt:", - "SELECTION": "Ausgewählte Elemente", + "SELECTION": "ausgewählt", "DEACTIVATE": "Projekt deaktivieren", "ACTIVATE": "Projekt aktivieren", "DELETE": "Projekt löschen", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 1a39ae9bdc..82062b02fd 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -1,5 +1,10 @@ { "APP_NAME": "ZITADEL", + "PAGINATOR": { + "PREVIOUS":"Previous", + "NEXT":"Next", + "COUNT":"Total Results" + }, "ONBOARDING": { "HEADER":"First Steps", "TITLE":"Learn how to use ZITADEL", @@ -84,7 +89,8 @@ "SHOWORGS":"Show All Organisations", "GRANTSECTION":"Authorization Section", "GRANTS":"Authorizations", - "TOC":"Privacy Policy and TOC", + "PRIVACY":"Privacy", + "TOS":"Terms of Service", "TOOLTIP": { "PERSONAL":"Show your Personal Account, your IDPs, Login methods, Factors and Authorisations", "IAMPOLICIES":"Manage ZITADELs global Access policies und elect ZITADEL Managers", @@ -175,11 +181,10 @@ "FILTER": { "0":"Filter for DisplayName", "1":"Filter for Username", - "2":"filter for Firstname", - "3":"filter for Lastname", - "4":"filter for role Key", + "2":"filter for DisplayName", + "3":"filter for Username", + "4":"filter for Email", "5":"filter for DisplayName", - "6":"filter for email", "10":"filter for organisation name", "12":"filter for project name" }, @@ -373,6 +378,12 @@ "CREATE": { "TITLE": "Create User Grant", "DESCRIPTION": "Search for the organisation, the project and the corresponding project roles." + }, + "FILTER": { + "0":"filter for user", + "1":"filter for domain", + "2":"filter for projectname", + "3":"filter for rolename" } }, "VALIDATION": { @@ -687,7 +698,8 @@ "SELECTION": "Selected Elements", "DEACTIVATE": "Deactivate User", "ACTIVATE": "Activate User", - "DELETE": "Delete User" + "DELETE": "Delete User", + "CLEAR":"Clear selection" } }, "PROJECT": { diff --git a/console/src/styles.scss b/console/src/styles.scss index ee45646690..2bb855657e 100644 --- a/console/src/styles.scss +++ b/console/src/styles.scss @@ -9,7 +9,6 @@ // Include the common styles for Angular Material. We include this here so that you only // have to load a single css file for Angular Material in your app. // Be sure that you only ever include this mixin once! -@include mat-core(); @font-face { font-family: ailerons; diff --git a/console/src/styles/sidenav-list.scss b/console/src/styles/sidenav-list.scss index fdd8600b8f..6955d7b344 100644 --- a/console/src/styles/sidenav-list.scss +++ b/console/src/styles/sidenav-list.scss @@ -62,12 +62,12 @@ transition: all .3s cubic-bezier(.645, .045, .355, 1); .slash { - color: if($is-dark-theme, #525454, #d1d5d9); + color: if($is-dark-theme, #525454, #d1d5d9); } .org-button { - border: 1px solid if($is-dark-theme, #303131, #e3e8ee); - transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; + border: 1px solid if($is-dark-theme, #303131, #e3e8ee); + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; } } diff --git a/console/src/styles/table.scss b/console/src/styles/table.scss index 38bcbeccd9..066a945bdf 100644 --- a/console/src/styles/table.scss +++ b/console/src/styles/table.scss @@ -94,8 +94,8 @@ background-color: if($is-dark-theme, #4f566b, #e4e7e4); &.active { - background-color: if($is-dark-theme, #4f566b, #cbf4c9); - color: if($is-dark-theme, #cbf4c9, #0e6245); + background-color: if($is-dark-theme, #4f566b, #cbf4c9); + color: if($is-dark-theme, #cbf4c9, #0e6245); } &.inactive {