From 4d4c4c5dae8798a606d5621a0e08304e818e0684 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Wed, 12 Jul 2023 10:54:05 +0400 Subject: [PATCH 01/29] DSM-/PEPPER-948-download-of-Onc-History-upload-template initial --- .../oncHistoryUpload/oncHistoryUpload.component.html | 7 +++++++ .../oncHistoryUpload/oncHistoryUpload.component.scss | 11 +++++++++++ .../oncHistoryUpload/oncHistoryUpload.component.ts | 4 ++++ 3 files changed, 22 insertions(+) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.html index 7b77f1f651..ed56be5652 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.html @@ -1,8 +1,15 @@ +

Onc History Upload

+

{{errorMessage}}

Upload successful

+
+
+ +

Click here to download the Onc History upload template and data dictionary

+
+

Click here to download the Onc History upload template and data dictionary

From 3601afc881b71ec9e423d2321c9d90423c419c21 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Thu, 13 Jul 2023 00:29:35 +0400 Subject: [PATCH 05/29] DSM-PEPPER-948-download-of-Onc-History-upload-template naming fixed --- .../oncHistoryUpload.component.ts | 21 ++++++++++++++++--- .../src/app/services/dsm.service.ts | 7 ++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.ts index 60ac7be615..d2d02d07fd 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/oncHistoryUpload/oncHistoryUpload.component.ts @@ -4,7 +4,7 @@ import {finalize} from 'rxjs/operators'; import {SessionService} from '../services/session.service'; import {MatDialog} from '@angular/material/dialog'; import {LoadingModalComponent} from '../modals/loading-modal.component'; -import {HttpErrorResponse} from '@angular/common/http'; +import {HttpErrorResponse, HttpResponse} from '@angular/common/http'; import {Subject, takeUntil} from 'rxjs'; enum RequestStatus { @@ -67,12 +67,27 @@ export class OncHistoryUploadComponent implements OnDestroy { this.dsmService.downloadOncHistoryTemplateAndDirectory(this.session.selectedRealm) .pipe(takeUntil(this.subscriptionSubject), finalize(() => tempDialog.close())) .subscribe({ - next: (arrayBuffer: ArrayBuffer) => { + next: (response: HttpResponse) => { + const arrayBuffer = response.body; + const contentDisposition = response.headers.get('Content-Disposition'); const blob = new Blob([arrayBuffer], { type: 'application/zip' }); + + const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; + const matches = filenameRegex.exec(contentDisposition); + let filename = 'Onc_history.zip'; // Default filename in case extraction fails + if (matches != null && matches[1]) { + filename = matches[1].replace(/['"]/g, ''); + } + const url = window.URL.createObjectURL(blob); - window.open(url); + const link = document.createElement('a'); + link.href = url; + link.download = filename; + + link.click(); + window.URL.revokeObjectURL(url); }, error: (error: any) => this.handleError(error) }); diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts index 09c2570e26..36a2681116 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts @@ -1212,7 +1212,12 @@ export class DSMService { for (const param of map) { params = params.append(param.name, param.value); } - return {headers: this.zipDownloadHeaders(), withCredentials: true, params, responseType: 'arraybuffer'}; + return {headers: this.zipDownloadHeaders(), + withCredentials: true, + params, + responseType: 'arraybuffer', + observe: 'response' + }; } private buildJsonAuthHeader(): HttpHeaders { From df994f8e998911c39c9db26032d48b9d114421d6 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Fri, 14 Jul 2023 20:43:18 +0400 Subject: [PATCH 06/29] DSM-PEPPER-948-download-of-Onc-History-upload-template first step --- .../src/app/ALL-STUDIES/all-studies.module.ts | 8 +- .../ALL-STUDIES/all-studies.routing.module.ts | 10 + .../app/guards/usersAndPermissions.guard.ts | 37 ++++ .../app/navigation/navigation.component.html | 1 + .../administrationUser.component.html | 107 ++++++++++ .../administrationUser.component.scss | 139 +++++++++++++ .../administrationUser.component.ts | 119 +++++++++++ .../listAdministrationUsers.component.html | 6 + .../listAdministrationUsers.component.scss | 0 .../listAdministrationUsers.component.ts | 18 ++ .../permissionCheckbox.component.html | 16 ++ .../permissionCheckbox.component.scss | 134 +++++++++++++ .../permissionCheckbox.component.ts | 24 +++ .../interfaces/AdministrationUserRole.ts | 5 + .../addAdministrationUser-request.ts | 6 + .../interfaces/administrationUser.ts | 8 + .../administrationUserRoles-response.ts | 5 + .../removeAdministrationUser-request.ts | 3 + .../src/app/usersAndPermissions/testData.ts | 185 ++++++++++++++++++ .../usersAndPermissions.component.html | 4 + .../usersAndPermissions.component.scss | 4 + .../usersAndPermissions.component.ts | 9 + .../usersAndPermissions.module.ts | 43 ++++ 23 files changed, 890 insertions(+), 1 deletion(-) create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/guards/usersAndPermissions.guard.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.module.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.module.ts index e33d8e6a1b..9de6083644 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.module.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.module.ts @@ -148,6 +148,10 @@ import { } from '../sharedLearningUpload/components/confirmationModal/confirmationModal.component'; import {OncHistoryUploadComponent} from '../oncHistoryUpload/oncHistoryUpload.component'; import {OncHistoryUploadGuard} from '../guards/oncHistoryUpload.guard'; +import { + UsersAndPermissionsCanActivateGuard, + UsersAndPermissionsCanLoadGuard +} from "../guards/usersAndPermissions.guard"; PlotlyModule.plotlyjs = PlotlyJS; @@ -301,7 +305,9 @@ PlotlyModule.plotlyjs = PlotlyJS; Statics, Language, DashboardStatisticsService, - OncHistoryUploadGuard + OncHistoryUploadGuard, + UsersAndPermissionsCanLoadGuard, + UsersAndPermissionsCanActivateGuard ], exports: [RouterModule, MatFormFieldModule, MatInputModule] }) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.routing.module.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.routing.module.ts index 7e301a99c6..4148125bc1 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.routing.module.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/ALL-STUDIES/all-studies.routing.module.ts @@ -38,6 +38,10 @@ import {DashboardStatisticsComponent} from '../dashboard-statistics/dashboard-st import {ScannerComponent} from '../scanner/scanner.component'; import {OncHistoryUploadComponent} from '../oncHistoryUpload/oncHistoryUpload.component'; import {OncHistoryUploadGuard} from '../guards/oncHistoryUpload.guard'; +import { + UsersAndPermissionsCanActivateGuard, + UsersAndPermissionsCanLoadGuard +} from "../guards/usersAndPermissions.guard"; @@ -94,6 +98,12 @@ export const AppRoutes: Routes = [ {path: 'oncHistoryUpload', component: OncHistoryUploadComponent, canActivate: [AuthGuard, OncHistoryUploadGuard]}, {path: 'userSettings', component: UserSettingComponent, canActivate: [AuthGuard]}, + {path: 'usersAndPermissions', + canActivate: [UsersAndPermissionsCanActivateGuard], + canLoad: [UsersAndPermissionsCanLoadGuard], + loadChildren: () => + import('../usersAndPermissions/usersAndPermissions.module').then(m => m.UsersAndPermissionsModule) + }, // Permalink { diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/guards/usersAndPermissions.guard.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/guards/usersAndPermissions.guard.ts new file mode 100644 index 0000000000..29c0ee01f7 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/guards/usersAndPermissions.guard.ts @@ -0,0 +1,37 @@ +import {Injectable} from "@angular/core"; +import { + ActivatedRouteSnapshot, + CanActivate, + CanLoad, + Route, + Router, + RouterStateSnapshot, + UrlSegment, + UrlTree +} from "@angular/router"; +import {SessionService} from "../services/session.service"; + +@Injectable() +export class UsersAndPermissionsCanLoadGuard implements CanLoad { + constructor( + private readonly router: Router, + private readonly session: SessionService) { + } + + canLoad(route: Route, segments: UrlSegment[]): boolean | UrlTree { + return this.session.selectedRealm === 'cmi-lms'; + } +} + + +@Injectable() +export class UsersAndPermissionsCanActivateGuard implements CanActivate { + constructor( + private readonly router: Router, + private readonly session: SessionService + ) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree { + return this.session.selectedRealm === 'cmi-lms'; + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/navigation/navigation.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/navigation/navigation.component.html index e10ea226ed..3396ba93aa 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/navigation/navigation.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/navigation/navigation.component.html @@ -85,6 +85,7 @@
  • NDI Download
  • Onc History Upload
  • Drug List
  • +
  • Users And Permissions
  • diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html new file mode 100644 index 0000000000..3cfb23eb74 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html @@ -0,0 +1,107 @@ + + + + + {{user.email}} + + +
    +
    +

    Name: + {{user.name}} + +

    +

    Phone: + {{user.phone}} + +

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

    Permissions

    +
    + + + +
    +
    + + + + +
    +
    + + + +
    + + +
    + +
    +
    + + + + +
    + +
    +
    diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss new file mode 100644 index 0000000000..3f77dac623 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss @@ -0,0 +1,139 @@ +@use "commonStyles" as common; + +.mat-accordion .mat-expansion-panel { + margin-bottom: 10px; +} + +.mat-expansion-panel-spacing { + margin: 1em; +} + +p { + margin: 0; + padding: 0; +} + +mat-panel-title { + align-items: center; + font-family: Montserrat-SemiBold, sans-serif; + flex-grow: 0; + width: 20%; + overflow: auto; +} + +mat-panel-description { + align-items: center; + flex-grow: 1; + + .header { + @include common.flexContainer(normal, space-between); + width: 100%; + height: auto; + + &-text { + @include common.flexContainer(center, space-between); + width: 55%; + font-size: small; + + &-name, &-phone { + overflow: auto; + width: 2em; + + span { + font-family: Montserrat-SemiBold, sans-serif; + } + } + + &-editing-name, &-editing-phone { + border: none; + background-color: inherit; + border-bottom: 1px solid #003049; + outline: none; + text-align: center; + + &:focus-within { + border-bottom: 1px solid rgba(0, 48, 73, 0.49); + } + } + + &-saveButton { + @include common.flexContainer(center, center); + } + } + + &-buttons { + @include common.flexContainer(normal, flex-end); + width: 45%; + + &-compare { + mat-icon { + color: #003049; + + &:hover { + color: rgba(0, 48, 73, 0.25); + } + } + } + + &-edit { + mat-icon { + color: #fcbf49; + + &:hover { + color: rgba(252, 191, 73, 0.25); + } + } + } + + &-delete { + mat-icon { + color: #d62828; + + &:hover { + color: rgba(214, 40, 40, 0.25); + } + } + } + } + } +} + +.title { + text-align: center; + font-family: Montserrat-SemiBold, sans-serif; +} + +.permissions { + width: 100%; + + &-selectAll { + @include common.flexContainer(center, center); + } + + &-selectSingle { + @include common.flexContainer; + flex-wrap: wrap; + padding: 1em; + + + app-permission-checkbox { + flex-basis: 20%; + max-width: 20%; + } + } +} + +.actionButtons { + @include common.flexContainer(normal, center); + margin-top: .7em; + + &-save { + @include common.flexContainer(center, center); + margin-right: .7em; + } +} + +.spinner-container { + @include common.flexContainer(center, center); +} + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts new file mode 100644 index 0000000000..43a405ad04 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts @@ -0,0 +1,119 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input +} from "@angular/core"; +import {AdministrationUser} from "../../interfaces/administrationUser"; +import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; +import {cloneDeep} from 'lodash'; + +@Component({ + selector: 'app-administration-user', + templateUrl: 'administrationUser.component.html', + styleUrls: ['administrationUser.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AdministrationUserComponent { + public user: AdministrationUser; + private rolesBeforeChange: AdministrationUserRole[]; + + /* Switchers */ + public areActionButtonsDisabled = true; + public isUserEditing = false; + public isEditUserLoading = false; + public isEditPermissionsLoading = false; + public isDeleteUserLoading = false; + + @Input('user') set administrationUser(user: AdministrationUser) { + this.user = user; + this.rolesBeforeChange = cloneDeep(user.roles); + }; + + constructor(private readonly cdr: ChangeDetectorRef) { + } + + public compareUser(event: Event, user: AdministrationUser): void { + event.stopPropagation(); + console.log(user, 'COMPARE_USER') + } + + public editUser(event: Event, user: AdministrationUser): void { + event.stopPropagation() + console.log(user, 'EDIT_USER') + this.isUserEditing = !this.isUserEditing; + } + + public saveEditedUser(event: Event): void { + event.stopPropagation(); + this.isEditUserLoading = true; + + console.log(this.user, 'SAVED_EDITED') + + // mocking + setTimeout(() => { + this.cdr.markForCheck() + this.isEditUserLoading = false + }, 3000) + } + + public deleteUser(event: Event, user: AdministrationUser): void { + event.stopPropagation(); + this.isDeleteUserLoading = true; + + console.log(user, 'SAVED_EDITED') + + // mocking + setTimeout(() => { + this.cdr.markForCheck() + this.isDeleteUserLoading = false + }, 3000) + } + + public onCheckboxChanged(changedRole: AdministrationUserRole): void { + this.user.roles = this.user.roles.map((role) => + changedRole.roleGuid === role.roleGuid ? + {...role, isSelected: changedRole.isSelected} : + role + ) + + this.changeActionButtonsState(!this.permissionsChanged); + } + + public saveChanges(): void { + this.rolesBeforeChange = this.user.roles; + this.areActionButtonsDisabled = true; + this.isEditPermissionsLoading = true; + + // mocking + setTimeout(() => { + this.cdr.markForCheck() + this.isEditPermissionsLoading = false + }, 3000) + } + + public discardChanges(): void { + this.user.roles = this.rolesBeforeChange; + this.changeActionButtonsState(true); + } + + /* Template methods */ + + public get doNotAllowCollapse(): boolean { + return this.permissionsChanged || this.isEditUserLoading || + this.isEditPermissionsLoading || this.isDeleteUserLoading; + } + + + /* Helper functions */ + + private get permissionsChanged(): boolean { + return !this.rolesBeforeChange.every(({isSelected}, index) => + isSelected === this.user.roles[index].isSelected) + } + + private changeActionButtonsState(isDisabled: boolean): void { + this.areActionButtonsDisabled = isDisabled; + } + +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html new file mode 100644 index 0000000000..568a922333 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html @@ -0,0 +1,6 @@ + + + + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts new file mode 100644 index 0000000000..3c2dff5cf7 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts @@ -0,0 +1,18 @@ +import {ChangeDetectionStrategy, Component, Input} from "@angular/core"; +import {testData} from "../../testData"; +import {AdministrationUser} from "../../interfaces/administrationUser"; + +@Component({ + selector: 'app-list-users', + templateUrl: 'listAdministrationUsers.component.html', + styleUrls: ['listAdministrationUsers.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ListAdministrationUsersComponent { + @Input() usersList: AdministrationUser[] = testData; + + public trackBy(index: number, {name, phone, email}: AdministrationUser): any { + return name || phone || email; + } + +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html new file mode 100644 index 0000000000..c24a580f8d --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html @@ -0,0 +1,16 @@ +
    + + + + + + + +
    diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.scss new file mode 100644 index 0000000000..427617419b --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.scss @@ -0,0 +1,134 @@ +@use "commonStyles" as common; + +.checkbox-container { + * { + box-sizing: border-box; + } + + .cbx { + @include common.flexContainer; + -webkit-user-select: none; + user-select: none; + cursor: pointer; + padding: 6px 8px; + border-radius: 6px; + overflow: hidden; + transition: all 0.2s ease; + + &:not(:last-child) { + margin-right: 6px; + } + + &:hover { + background: rgba(0, 119, 255, 0.06); + } + + span { + float: left; + vertical-align: middle; + transform: translate3d(0, 0, 0); + } + + span:first-child { + position: relative; + min-width: 18px; + max-width: 20%; + width: 18px; + height: 18px; + border-radius: 4px; + transform: scale(1); + border: 1px solid #cccfdb; + transition: all 0.2s ease; + box-shadow: 0 1px 1px rgba(0, 16, 75, 0.05); + } + + span:first-child svg { + max-width: 100%; + max-height: 100%; + position: absolute; + top: 3px; + left: 2px; + fill: none; + stroke: #fff; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + stroke-dasharray: 16px; + stroke-dashoffset: 16px; + transition: all 0.3s ease; + transition-delay: 0.1s; + transform: translate3d(0, 0, 0); + } + + span:last-child { + max-width: 90%; + display: inline-block; + padding-left: 8px; + line-height: 18px; + } + + &:hover span:first-child { + border-color: #66bb6a; + } + + } + + .inp-cbx { + position: absolute; + visibility: hidden; + + &:checked + .cbx span:first-child { + background: #66bb6a; + border-color: #66bb6a; + animation: wave-4 0.4s ease; + } + + &:checked + .cbx span:first-child svg { + stroke-dashoffset: 0; + } + } + + .inline-svg { + position: absolute; + width: 0; + height: 0; + pointer-events: none; + user-select: none; + } + + @media screen and (max-width: 640px) { + .checkbox-container .cbx { + width: 100%; + display: inline-block; + } + } + + @-moz-keyframes wave-4 { + 50% { + transform: scale(0.9); + } + } + + @-webkit-keyframes wave-4 { + 50% { + transform: scale(0.9); + } + } + + @-o-keyframes wave-4 { + 50% { + transform: scale(0.9); + } + } + + @keyframes wave-4 { + 50% { + transform: scale(0.9); + } + } + +} + + + + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts new file mode 100644 index 0000000000..7795c46145 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts @@ -0,0 +1,24 @@ +import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output} from "@angular/core"; +import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; + +@Component({ + selector: 'app-permission-checkbox', + templateUrl: 'permissionCheckbox.component.html', + styleUrls: ['permissionCheckbox.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class PermissionCheckboxComponent implements OnInit { + @Input() role: AdministrationUserRole; + @Output() checkboxChanged = new EventEmitter(); + + public idRandomizer: string; + + ngOnInit(): void { + this.idRandomizer = this.role.roleGuid + Math.floor(Math.random() * 100000); + } + + public onChange(changeEvent: Event, role: AdministrationUserRole): void { + const {checked} = changeEvent.target as HTMLInputElement; + this.checkboxChanged.next({...role, isSelected: checked}); + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts new file mode 100644 index 0000000000..7918b99f61 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts @@ -0,0 +1,5 @@ +export interface AdministrationUserRole { + roleGuid: string; + name: string; + isSelected: boolean; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts new file mode 100644 index 0000000000..ac9d9c04e1 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts @@ -0,0 +1,6 @@ +export interface AddAdministrationUserRequest { + email: string; + name: string; + phone: string; + roles: string[]; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts new file mode 100644 index 0000000000..0374503f63 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts @@ -0,0 +1,8 @@ +import {AdministrationUserRole} from "./AdministrationUserRole"; + +export interface AdministrationUser { + email: string; + name: string; + phone: string; + roles: AdministrationUserRole[]; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts new file mode 100644 index 0000000000..e41bfa7e3b --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts @@ -0,0 +1,5 @@ +import {AdministrationUser} from "./administrationUser"; + +export interface AdministrationUserRolesResponse { + userRoles: AdministrationUser[]; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts new file mode 100644 index 0000000000..a15fa2ece2 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts @@ -0,0 +1,3 @@ +export interface RemoveAdministrationUserRequest { + users: string[]; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts new file mode 100644 index 0000000000..d2bd16c3c4 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts @@ -0,0 +1,185 @@ +import {AdministrationUser} from "./interfaces/administrationUser"; + +export const testData: AdministrationUser[] = [ + { + name: 'Abraham Lincoln', + email: 'abrahama@gmail.com', + phone: '12-2313-31231', + roles: [ + { + roleGuid: 'upload_onc_history', + name: 'Upload return of results file', + isSelected: true + }, + { + roleGuid: 'dsada231', + name: 'Let me in right now', + isSelected: true + },{ + roleGuid: 'dsa3555', + name: 'Upload onc history', + isSelected: false + }, + { + roleGuid: '1321dsada', + name: 'View shared learnings', + isSelected: false + }, + { + roleGuid: 'allow-hgfh-now', + name: 'I am allowed to do anything in here', + isSelected: true + }, + { + roleGuid: 'mercury_o22rder_sequencing', + name: 'Mercury order sequencing', + isSelected: true + }, + { + roleGuid: '52342-me-now', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: '512as', + name: 'Create surveys', + isSelected: true + }, + { + roleGuid: 'allow-55121-now', + name: 'Allow me now', + isSelected: false + }, + { + roleGuid: '765765-me-now', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow-fbxbx-now', + name: 'Allow me now', + isSelected: false + }, + { + roleGuid: 'allow-43242-now', + name: 'Allowed', + isSelected: true + }, + { + roleGuid: '87686-me-now', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow-vdsf342-now', + name: 'Allowed', + isSelected: true + }, + { + roleGuid: 'allow-4131fsd-now', + name: 'Allow me now', + isSelected: false + }, + { + roleGuid: '32131jjf-me-gf', + name: 'Allow me now', + isSelected: false + }, + { + roleGuid: 'allow-fds-32131', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'faf111-222-now', + name: 'Allow me now', + isSelected: true + } + ] + }, + { + name: 'Giorgi Kenedy', + email: 'kenikeni@gmail.com', + phone: '12-2313-31231', + roles: [ + { + roleGuid: 'allow-me-now', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow-me-now-1', + name: 'Let me in right now', + isSelected: true + } + ] + }, + { + name: 'Giorgi Kenedydsadadsadjahdjkadhasjkdhajkdhsa', + email: 'keniken221dsafasdsadas32131231dsadsadsa213312dsadada2313dsai@gmail.com', + phone: '12-2313-31231', + roles: [ + { + roleGuid: 'allow-me-now31231', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow-me-now-1444', + name: 'Let me in right now', + isSelected: true + } + ] + }, + { + name: 'George Bush', + email: 'busha@gmail.com', + phone: '12-31321-31231', + roles: [ + { + roleGuid: 'allow-m2e-23666', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow2-me4-no4w', + name: 'Let me in right now', + isSelected: true + },{ + roleGuid: 'allow-1211me-n333ow', + name: 'Allow me now', + isSelected: false + }, + { + roleGuid: 'allow-555222-now', + name: 'I am allowed to do anything in here', + isSelected: false + }, + { + roleGuid: 'allow-12131-gsgdgs', + name: 'I am allowed to do anything in here', + isSelected: true + }, + { + roleGuid: '132131-11-76557', + name: 'I am allowed to do anything in here', + isSelected: true + }, + { + roleGuid: 'allow-me-5234hfghf', + name: 'Allow me now', + isSelected: true + }, + { + roleGuid: 'allow-pllll111-now', + name: 'Tell me what you want what you really really want', + isSelected: true + }, + { + roleGuid: '66666-333-2131', + name: 'Allow me now', + isSelected: false + } + ] + } +] diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html new file mode 100644 index 0000000000..a2e1911dd5 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html @@ -0,0 +1,4 @@ +
    +

    Users And Permissions

    +
    + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss new file mode 100644 index 0000000000..12e99a59f8 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss @@ -0,0 +1,4 @@ +.title { + text-align: center; + margin-bottom: 2em; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts new file mode 100644 index 0000000000..e9a4d8c502 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts @@ -0,0 +1,9 @@ +import {ChangeDetectionStrategy, Component} from "@angular/core"; + +@Component({ + selector: 'app-users-and-permissions', + templateUrl: 'usersAndPermissions.component.html', + styleUrls: ['usersAndPermissions.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class UsersAndPermissionsComponent {} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts new file mode 100644 index 0000000000..d86b6d7e35 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts @@ -0,0 +1,43 @@ +import {NgModule} from "@angular/core"; +import {CommonModule} from "@angular/common"; +import {RouterModule, Routes} from "@angular/router"; +import {UsersAndPermissionsComponent} from "./usersAndPermissions.component"; +import {ListAdministrationUsersComponent} from "./components/listAdministrationUsers/listAdministrationUsers.component"; +import {MatExpansionModule} from "@angular/material/expansion"; +import {MatIconModule} from "@angular/material/icon"; +import {MatButtonModule} from "@angular/material/button"; +import {MatCheckboxModule} from "@angular/material/checkbox"; +import {PermissionCheckboxComponent} from "./components/permissionCheckbox/permissionCheckbox.component"; +import {MatDividerModule} from "@angular/material/divider"; +import {MatTooltipModule} from "@angular/material/tooltip"; +import {AdministrationUserComponent} from "./components/AdministrationUser/administrationUser.component"; +import {MatInputModule} from "@angular/material/input"; +import {FormsModule} from "@angular/forms"; +import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; + +const routes: Routes = [ + {path: '', component: UsersAndPermissionsComponent} +] + +@NgModule({ + declarations: [ + UsersAndPermissionsComponent, + ListAdministrationUsersComponent, + PermissionCheckboxComponent, + AdministrationUserComponent + ], + imports: [ + CommonModule, + RouterModule.forChild(routes), + MatExpansionModule, + MatIconModule, + MatButtonModule, + MatCheckboxModule, + MatDividerModule, + MatTooltipModule, + MatInputModule, + FormsModule, + MatProgressSpinnerModule + ], +}) +export class UsersAndPermissionsModule {} From c9562274888f57b0050a490163bf727980dd800e Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Mon, 17 Jul 2023 15:05:11 +0400 Subject: [PATCH 07/29] DSM-PEPPER-948-download-of-Onc-History-upload-template comparison on place --- .../src/app/services/dsm.service.ts | 9 + .../administrationUser.component.html | 73 ++++---- .../administrationUser.component.scss | 56 ++++-- .../administrationUser.component.ts | 24 ++- .../comparePermissions.component.html | 50 ++++++ .../comparePermissions.component.scss | 6 + .../comparePermissions.component.ts | 61 +++++++ .../listAdministrationUsers.component.html | 1 + .../listAdministrationUsers.component.ts | 22 ++- .../permissionCheckbox.component.html | 6 +- .../permissionCheckbox.component.ts | 3 + .../usersAndPermissionsHttpService.service.ts | 21 +++ .../src/app/usersAndPermissions/testData.ts | 164 ++++-------------- .../usersAndPermissions.component.ts | 2 + .../usersAndPermissions.module.ts | 12 +- 15 files changed, 319 insertions(+), 191 deletions(-) create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts index 36a2681116..37548800af 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts @@ -458,6 +458,15 @@ export class DSMService { ); } + public getUsersAndPermissions(realm: string): Observable { + const url = this.baseUrl + DSMService.UI + 'admin/userRole'; + const map: { name: string; value: any }[] = []; + map.push({name: DSMService.REALM, value: realm}); + return this.http.get(url, this.buildQueryHeader(map)).pipe( + catchError(this.handleError) + ); + } + public getMedicalRecord(participantId: string, institutionId: string): Observable { const url = this.baseUrl + DSMService.UI + 'participant/' + participantId + '/institution/' + institutionId; return this.http.get(url, this.buildHeader()).pipe( diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html index 3cfb23eb74..3bb9ffbe76 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html @@ -1,5 +1,5 @@ - + {{user.email}} @@ -7,47 +7,51 @@
    -

    Name: - {{user.name}} - -

    -

    Phone: - {{user.phone}} - -

    - +
    +

    Name: + {{user.name}} + +

    +

    Phone: + {{user.phone}} + +

    +
    +
    @@ -55,6 +59,7 @@ @@ -84,13 +89,15 @@

    Permissions

    - -
    diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss index 3f77dac623..a1b4677195 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.scss @@ -8,6 +8,10 @@ margin: 1em; } +mat-expansion-panel-header { + padding: 2em 18px; +} + p { margin: 0; padding: 0; @@ -30,34 +34,50 @@ mat-panel-description { width: 100%; height: auto; - &-text { - @include common.flexContainer(center, space-between); - width: 55%; - font-size: small; + button:disabled { + mat-icon { + color: grey; + } + } - &-name, &-phone { - overflow: auto; - width: 2em; + &-text { + @include common.flexContainer(center); - span { - font-family: Montserrat-SemiBold, sans-serif; + width: 55%; + &-inputs { + &-name, &-phone { + overflow: auto; + width: 2em; + max-width: 100%; + font-weight: bold; + + span { + font-family: Montserrat-SemiBold, sans-serif; + } } - } - &-editing-name, &-editing-phone { - border: none; - background-color: inherit; - border-bottom: 1px solid #003049; - outline: none; - text-align: center; + &-editing-name, &-editing-phone { + border: none; + background-color: inherit; + border-bottom: 1px solid #003049; + outline: none; - &:focus-within { - border-bottom: 1px solid rgba(0, 48, 73, 0.49); + &:focus-within { + border-bottom: 1px solid rgba(0, 48, 73, 0.49); + } } } &-saveButton { @include common.flexContainer(center, center); + + mat-icon { + color: #386641; + + &:hover { + color: rgba(56, 102, 65, 0.25); + } + } } } diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts index 43a405ad04..838979565b 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts @@ -1,12 +1,14 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, - Component, - Input + Component, EventEmitter, + Input, OnInit, Output } from "@angular/core"; import {AdministrationUser} from "../../interfaces/administrationUser"; import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; import {cloneDeep} from 'lodash'; +import {MatDialog} from "@angular/material/dialog"; +import {ComparePermissionsComponent} from "../comparePermissions/comparePermissions.component"; @Component({ selector: 'app-administration-user', @@ -19,7 +21,7 @@ export class AdministrationUserComponent { private rolesBeforeChange: AdministrationUserRole[]; /* Switchers */ - public areActionButtonsDisabled = true; + public arePermissionActionButtonsDisabled = true; public isUserEditing = false; public isEditUserLoading = false; public isEditPermissionsLoading = false; @@ -30,12 +32,17 @@ export class AdministrationUserComponent { this.rolesBeforeChange = cloneDeep(user.roles); }; + @Output() comparingUser = new EventEmitter(); + constructor(private readonly cdr: ChangeDetectorRef) { } + /* Event Handlers */ + public compareUser(event: Event, user: AdministrationUser): void { event.stopPropagation(); console.log(user, 'COMPARE_USER') + this.comparingUser.emit(user); } public editUser(event: Event, user: AdministrationUser): void { @@ -82,7 +89,7 @@ export class AdministrationUserComponent { public saveChanges(): void { this.rolesBeforeChange = this.user.roles; - this.areActionButtonsDisabled = true; + this.arePermissionActionButtonsDisabled = true; this.isEditPermissionsLoading = true; // mocking @@ -100,8 +107,11 @@ export class AdministrationUserComponent { /* Template methods */ public get doNotAllowCollapse(): boolean { - return this.permissionsChanged || this.isEditUserLoading || - this.isEditPermissionsLoading || this.isDeleteUserLoading; + return this.permissionsChanged || this.disableUserActionButtons; + } + + public get disableUserActionButtons(): boolean { + return this.isEditUserLoading || this.isDeleteUserLoading || this.isEditPermissionsLoading; } @@ -113,7 +123,7 @@ export class AdministrationUserComponent { } private changeActionButtonsState(isDisabled: boolean): void { - this.areActionButtonsDisabled = isDisabled; + this.arePermissionActionButtonsDisabled = isDisabled; } } diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.html new file mode 100644 index 0000000000..a67d2e7987 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.html @@ -0,0 +1,50 @@ +
    + + + + + + + + + + + + + + + + + + + +
    Role {{role.name}} {{firstUser.email}} + + + + + + + + + + + + +
    + + + + + + {{secondUser?.email || 'Select User Email'}} + + {{userEmail}} + + + +
    diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.scss new file mode 100644 index 0000000000..b588ac55a2 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.scss @@ -0,0 +1,6 @@ +.compare-container { + display: flex; + table { + width: 100%; + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts new file mode 100644 index 0000000000..2555100775 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts @@ -0,0 +1,61 @@ +import {Component, Inject, OnInit} from "@angular/core"; +import {MAT_DIALOG_DATA} from "@angular/material/dialog"; +import {AdministrationUser} from "../../interfaces/administrationUser"; +import {MatSelectChange} from "@angular/material/select"; +import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; + +@Component({ + selector: 'app-compare-permissions', + templateUrl: 'comparePermissions.component.html', + styleUrls: ['comparePermissions.component.scss'] +}) +export class ComparePermissionsComponent implements OnInit { + public displayedColumns = ['name', this.firstUser.email, 'selectUser']; + public dataSource = [] + public secondUser: AdministrationUser; + + constructor(@Inject(MAT_DIALOG_DATA) + private data: {firstUser: AdministrationUser, allUsers: AdministrationUser[]}) {} + + ngOnInit() { + console.log(this.data, 'COMPARE_DATA') + this.dataSource = [...this.firstUser.roles]; + + console.log(this.dataSource, 'DATA_SOURCE') + } + + public userSelected({value: selectedUserEmail}: MatSelectChange): void { + const foundUser = this.data.allUsers.find(({email}) => email === selectedUserEmail); + // this.dataSource.push(...foundUser.roles); + this.displayedColumns = ['name', this.firstUser.email]; + this.displayedColumns.push(foundUser.email); + + for(let role of foundUser.roles) { + if(this.dataSource.findIndex(r => r.roleGuid === role.roleGuid) === -1) { + this.dataSource.push(role) + } + } + // this.dataSource = [...this.dataSource, ...foundUser.roles]; + + this.secondUser = foundUser; + console.log(this.dataSource, 'AFTER_CHANGE') + } + + public get firstUser(): AdministrationUser { + return this.data.firstUser; + } + + public get allUsers(): string[] { + return this.data.allUsers.filter(user => user.email !== this.firstUser.email) + .map((user) => user.email); + } + + public findRoleForFirstUser(roleGuid: string): AdministrationUserRole { + return this.firstUser.roles.find(role => role.roleGuid === roleGuid); + } + + public findRoleForSecondUser(roleGuid: string): AdministrationUserRole { + return this.secondUser.roles.find(role => role.roleGuid === roleGuid); + } + +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html index 568a922333..6aacb42567 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.html @@ -1,6 +1,7 @@ diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts index 3c2dff5cf7..dd4dda0c9c 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/listAdministrationUsers/listAdministrationUsers.component.ts @@ -1,6 +1,9 @@ -import {ChangeDetectionStrategy, Component, Input} from "@angular/core"; +import {ChangeDetectionStrategy, Component, Input, OnInit} from "@angular/core"; import {testData} from "../../testData"; import {AdministrationUser} from "../../interfaces/administrationUser"; +import {MatDialog} from "@angular/material/dialog"; +import {ComparePermissionsComponent} from "../comparePermissions/comparePermissions.component"; +import {UsersAndPermissionsHttpServiceService} from "../../services/usersAndPermissionsHttpService.service"; @Component({ selector: 'app-list-users', @@ -8,11 +11,26 @@ import {AdministrationUser} from "../../interfaces/administrationUser"; styleUrls: ['listAdministrationUsers.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) -export class ListAdministrationUsersComponent { +export class ListAdministrationUsersComponent implements OnInit { @Input() usersList: AdministrationUser[] = testData; + constructor(private readonly matDialog: MatDialog, + private readonly httpService: UsersAndPermissionsHttpServiceService) { + } + + ngOnInit() { + // this.httpService.usersAndPermissions.subscribe(data => console.log(data, 'HTTP-RESPONSE')) + } + public trackBy(index: number, {name, phone, email}: AdministrationUser): any { return name || phone || email; } + public openPermissionsComparisonModal(firstUser: AdministrationUser) { + this.matDialog.open(ComparePermissionsComponent, {data: { + firstUser, + allUsers: this.usersList + }, maxHeight: '50em', width: '70%'}) + } + } diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html index c24a580f8d..352f6b027b 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.html @@ -1,13 +1,13 @@
    - - diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts index 7795c46145..b7c76fcb26 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts @@ -9,6 +9,9 @@ import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; }) export class PermissionCheckboxComponent implements OnInit { @Input() role: AdministrationUserRole; + @Input() onlyCheckbox: boolean = false; + @Input() isDisabled: boolean = false; + @Output() checkboxChanged = new EventEmitter(); public idRandomizer: string; diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts new file mode 100644 index 0000000000..877ebfab85 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts @@ -0,0 +1,21 @@ +import {Injectable} from "@angular/core"; +import {Observable} from "rxjs"; +import {AdministrationUser} from "../interfaces/administrationUser"; +import {DSMService} from "../../services/dsm.service"; +import {SessionService} from "../../services/session.service"; + +@Injectable() +export class UsersAndPermissionsHttpServiceService { + + constructor(private readonly dsmService: DSMService, + private readonly sessionService: SessionService) { + } + + public get usersAndPermissions(): Observable { + return this.dsmService.getUsersAndPermissions(this.realm); + } + + private get realm(): string { + return this.sessionService.selectedRealm; + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts index d2bd16c3c4..77e9808ec4 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts @@ -2,183 +2,95 @@ import {AdministrationUser} from "./interfaces/administrationUser"; export const testData: AdministrationUser[] = [ { - name: 'Abraham Lincoln', - email: 'abrahama@gmail.com', + name: 'First User', + email: 'firstUser@gmail.com', phone: '12-2313-31231', roles: [ { roleGuid: 'upload_onc_history', - name: 'Upload return of results file', - isSelected: true - }, - { - roleGuid: 'dsada231', - name: 'Let me in right now', - isSelected: true - },{ - roleGuid: 'dsa3555', name: 'Upload onc history', - isSelected: false - }, - { - roleGuid: '1321dsada', - name: 'View shared learnings', - isSelected: false - }, - { - roleGuid: 'allow-hgfh-now', - name: 'I am allowed to do anything in here', - isSelected: true - }, - { - roleGuid: 'mercury_o22rder_sequencing', - name: 'Mercury order sequencing', - isSelected: true - }, - { - roleGuid: '52342-me-now', - name: 'Allow me now', - isSelected: true - }, - { - roleGuid: '512as', - name: 'Create surveys', - isSelected: true - }, - { - roleGuid: 'allow-55121-now', - name: 'Allow me now', - isSelected: false - }, - { - roleGuid: '765765-me-now', - name: 'Allow me now', - isSelected: true - }, - { - roleGuid: 'allow-fbxbx-now', - name: 'Allow me now', - isSelected: false - }, - { - roleGuid: 'allow-43242-now', - name: 'Allowed', isSelected: true }, { - roleGuid: '87686-me-now', - name: 'Allow me now', - isSelected: true - }, - { - roleGuid: 'allow-vdsf342-now', - name: 'Allowed', + roleGuid: 'upload_ror_file', + name: 'Upload return of results file', isSelected: true }, { - roleGuid: 'allow-4131fsd-now', - name: 'Allow me now', - isSelected: false - }, - { - roleGuid: '32131jjf-me-gf', - name: 'Allow me now', + roleGuid: 'view_shared_learnings', + name: 'View shared learnings', isSelected: false - }, - { - roleGuid: 'allow-fds-32131', - name: 'Allow me now', - isSelected: true - }, - { - roleGuid: 'faf111-222-now', - name: 'Allow me now', - isSelected: true } ] }, { - name: 'Giorgi Kenedy', - email: 'kenikeni@gmail.com', + name: 'Second User', + email: 'secondUser@gmail.com', phone: '12-2313-31231', roles: [ { - roleGuid: 'allow-me-now', - name: 'Allow me now', - isSelected: true + roleGuid: 'mercury_order_sequencing', + name: 'Mercury order sequencing', + isSelected: false }, { - roleGuid: 'allow-me-now-1', - name: 'Let me in right now', - isSelected: true + roleGuid: 'survey_creation', + name: 'Create surveys', + isSelected: false } ] }, { - name: 'Giorgi Kenedydsadadsadjahdjkadhasjkdhajkdhsa', - email: 'keniken221dsafasdsadas32131231dsadsadsa213312dsadada2313dsai@gmail.com', + name: 'Third User', + email: 'thirdUser@gmail.com', phone: '12-2313-31231', roles: [ { - roleGuid: 'allow-me-now31231', - name: 'Allow me now', + roleGuid: 'upload_ror_file', + name: 'Upload return of results file', isSelected: true }, { - roleGuid: 'allow-me-now-1444', - name: 'Let me in right now', + roleGuid: 'view_shared_learnings', + name: 'View shared learnings', isSelected: true + }, + { + roleGuid: 'survey_creation', + name: 'Create surveys', + isSelected: false } ] }, { - name: 'George Bush', - email: 'busha@gmail.com', + name: 'Fourth User', + email: 'fourthUser@gmail.com', phone: '12-31321-31231', roles: [ { - roleGuid: 'allow-m2e-23666', - name: 'Allow me now', - isSelected: true - }, - { - roleGuid: 'allow2-me4-no4w', - name: 'Let me in right now', - isSelected: true - },{ - roleGuid: 'allow-1211me-n333ow', - name: 'Allow me now', + roleGuid: 'upload_onc_history', + name: 'Upload onc history', isSelected: false }, { - roleGuid: 'allow-555222-now', - name: 'I am allowed to do anything in here', + roleGuid: 'upload_ror_file', + name: 'Upload return of results file', isSelected: false }, { - roleGuid: 'allow-12131-gsgdgs', - name: 'I am allowed to do anything in here', - isSelected: true - }, - { - roleGuid: '132131-11-76557', - name: 'I am allowed to do anything in here', - isSelected: true + roleGuid: 'view_shared_learnings', + name: 'View shared learnings', + isSelected: false }, { - roleGuid: 'allow-me-5234hfghf', - name: 'Allow me now', + roleGuid: 'mercury_order_sequencing', + name: 'Mercury order sequencing', isSelected: true }, { - roleGuid: 'allow-pllll111-now', - name: 'Tell me what you want what you really really want', + roleGuid: 'survey_creation', + name: 'Create surveys', isSelected: true - }, - { - roleGuid: '66666-333-2131', - name: 'Allow me now', - isSelected: false } ] } diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts index e9a4d8c502..ab59f576ab 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts @@ -1,9 +1,11 @@ import {ChangeDetectionStrategy, Component} from "@angular/core"; +import {UsersAndPermissionsHttpServiceService} from "./services/usersAndPermissionsHttpService.service"; @Component({ selector: 'app-users-and-permissions', templateUrl: 'usersAndPermissions.component.html', styleUrls: ['usersAndPermissions.component.scss'], + providers: [UsersAndPermissionsHttpServiceService], changeDetection: ChangeDetectionStrategy.OnPush }) export class UsersAndPermissionsComponent {} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts index d86b6d7e35..4de25bd15f 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts @@ -14,6 +14,10 @@ import {AdministrationUserComponent} from "./components/AdministrationUser/admin import {MatInputModule} from "@angular/material/input"; import {FormsModule} from "@angular/forms"; import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; +import {ComparePermissionsComponent} from "./components/comparePermissions/comparePermissions.component"; +import {MatDialogModule} from "@angular/material/dialog"; +import {MatTableModule} from "@angular/material/table"; +import {MatSelectModule} from "@angular/material/select"; const routes: Routes = [ {path: '', component: UsersAndPermissionsComponent} @@ -24,7 +28,8 @@ const routes: Routes = [ UsersAndPermissionsComponent, ListAdministrationUsersComponent, PermissionCheckboxComponent, - AdministrationUserComponent + AdministrationUserComponent, + ComparePermissionsComponent ], imports: [ CommonModule, @@ -37,7 +42,10 @@ const routes: Routes = [ MatTooltipModule, MatInputModule, FormsModule, - MatProgressSpinnerModule + MatProgressSpinnerModule, + MatDialogModule, + MatTableModule, + MatSelectModule ], }) export class UsersAndPermissionsModule {} From e29578778c3d1e92a0faeefcf1f3a63280f2a8a0 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Mon, 17 Jul 2023 15:08:38 +0400 Subject: [PATCH 08/29] DSM-PEPPER-948-download-of-Onc-History-upload-template only available roles in comparison --- .../comparePermissions/comparePermissions.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts index 2555100775..19765a52a5 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/comparePermissions/comparePermissions.component.ts @@ -29,13 +29,13 @@ export class ComparePermissionsComponent implements OnInit { // this.dataSource.push(...foundUser.roles); this.displayedColumns = ['name', this.firstUser.email]; this.displayedColumns.push(foundUser.email); + this.dataSource = [...this.firstUser.roles]; for(let role of foundUser.roles) { if(this.dataSource.findIndex(r => r.roleGuid === role.roleGuid) === -1) { this.dataSource.push(role) } } - // this.dataSource = [...this.dataSource, ...foundUser.roles]; this.secondUser = foundUser; console.log(this.dataSource, 'AFTER_CHANGE') From 2378a6b69268a7598272342d91f0683594be7665 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Mon, 17 Jul 2023 17:00:05 +0400 Subject: [PATCH 09/29] DSM-PEPPER-948-download-of-Onc-History-upload-template other color user --- .../AdministrationUser/administrationUser.component.html | 3 ++- .../AdministrationUser/administrationUser.component.ts | 8 +++++++- .../ddp-dsm-ui/src/app/usersAndPermissions/testData.ts | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html index 3bb9ffbe76..a354fb9cc8 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html @@ -1,6 +1,7 @@ - + {{user.email}} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts index 838979565b..91ddbbce40 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.ts @@ -9,6 +9,7 @@ import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; import {cloneDeep} from 'lodash'; import {MatDialog} from "@angular/material/dialog"; import {ComparePermissionsComponent} from "../comparePermissions/comparePermissions.component"; +import {RoleService} from "../../../services/role.service"; @Component({ selector: 'app-administration-user', @@ -34,7 +35,8 @@ export class AdministrationUserComponent { @Output() comparingUser = new EventEmitter(); - constructor(private readonly cdr: ChangeDetectorRef) { + constructor(private readonly cdr: ChangeDetectorRef, + private readonly roleService: RoleService) { } /* Event Handlers */ @@ -114,6 +116,10 @@ export class AdministrationUserComponent { return this.isEditUserLoading || this.isDeleteUserLoading || this.isEditPermissionsLoading; } + public get activeUserEmail(): string { + return this.roleService.userMail(); + } + /* Helper functions */ diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts index 77e9808ec4..a7ae239180 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts @@ -63,8 +63,8 @@ export const testData: AdministrationUser[] = [ ] }, { - name: 'Fourth User', - email: 'fourthUser@gmail.com', + name: 'Giorgi Charkviani', + email: 'gcharkvi@broadinstitute.org', phone: '12-31321-31231', roles: [ { From bd84436f2049fff08a707eb9bf0654543adf4ecc Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Tue, 18 Jul 2023 09:30:25 +0400 Subject: [PATCH 10/29] DSM-PEPPER-948-download-of-Onc-History-upload-template add user added --- .../src/app/services/dsm.service.ts | 12 ++- .../addAdministrationUser.component.html | 65 +++++++++++++++++ .../addAdministrationUser.component.scss | 45 ++++++++++++ .../addAdministrationUser.component.ts | 73 +++++++++++++++++++ .../administrationUser.component.html | 2 - .../administrationUser.component.scss | 0 .../administrationUser.component.ts | 2 +- .../comparePermissions.component.ts | 2 +- .../listAdministrationUsers.component.ts | 3 +- .../permissionCheckbox.component.html | 4 +- .../permissionCheckbox.component.ts | 6 +- .../interfaces/AdministrationUserRole.ts | 5 -- .../addAdministrationUser-request.ts | 6 -- .../interfaces/addAdministrationUser.ts | 14 ++++ .../interfaces/administrationUser.ts | 2 +- ...-response.ts => administrationUserRole.ts} | 6 ++ ...request.ts => removeAdministrationUser.ts} | 0 .../usersAndPermissionsHttpService.service.ts | 9 ++- .../src/app/usersAndPermissions/testData.ts | 23 ++++++ .../usersAndPermissions.component.html | 3 +- .../usersAndPermissions.component.ts | 36 ++++++++- .../usersAndPermissions.module.ts | 16 +++- 22 files changed, 302 insertions(+), 32 deletions(-) create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.scss create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts rename ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/{AdministrationUser => administrationUser}/administrationUser.component.html (97%) rename ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/{AdministrationUser => administrationUser}/administrationUser.component.scss (100%) rename ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/{AdministrationUser => administrationUser}/administrationUser.component.ts (98%) delete mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts delete mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts create mode 100644 ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser.ts rename ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/{administrationUserRoles-response.ts => administrationUserRole.ts} (58%) rename ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/{removeAdministrationUser-request.ts => removeAdministrationUser.ts} (100%) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts index 37548800af..6974aab337 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/services/dsm.service.ts @@ -21,6 +21,7 @@ import {IDateRange} from '../dashboard-statistics/interfaces/IDateRange'; import {StatisticsEnum} from '../dashboard-statistics/enums/statistics.enum'; import {SomaticResultSignedUrlRequest} from '../sharedLearningUpload/interfaces/somaticResultSignedUrlRequest'; import {SendToParticipantRequest} from '../sharedLearningUpload/interfaces/sendToParticipant'; +import {AddAdministrationUserRequest} from "../usersAndPermissions/interfaces/addAdministrationUser"; declare var DDP_ENV: any; @@ -458,7 +459,7 @@ export class DSMService { ); } - public getUsersAndPermissions(realm: string): Observable { + public getUsers(realm: string): Observable { const url = this.baseUrl + DSMService.UI + 'admin/userRole'; const map: { name: string; value: any }[] = []; map.push({name: DSMService.REALM, value: realm}); @@ -467,6 +468,15 @@ export class DSMService { ); } + public addUser(realm: string, body: AddAdministrationUserRequest): Observable { + const url = this.baseUrl + DSMService.UI + 'admin/user'; + const map: { name: string; value: any }[] = []; + map.push({name: DSMService.REALM, value: realm}); + return this.http.post(url, {users: [body]}, this.buildQueryHeader(map)).pipe( + catchError(this.handleError) + ); + } + public getMedicalRecord(participantId: string, institutionId: string): Observable { const url = this.baseUrl + DSMService.UI + 'participant/' + participantId + '/institution/' + institutionId; return this.http.get(url, this.buildHeader()).pipe( diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html new file mode 100644 index 0000000000..27dd3e6d10 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html @@ -0,0 +1,65 @@ +
    +
    +

    Create User

    +
    +
    + + Email + + + + Name & Surname + + + + Phone + + +
    + +
    +

    Permissions

    + + +
    +
    + +
    + +
    + +
    +

    Compare permissions to the selected user:

    +
    + + Select User + + + {{email}} + + + + +
    +
    + +
    + + +
    +
    + + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.scss new file mode 100644 index 0000000000..99ad0553b1 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.scss @@ -0,0 +1,45 @@ +@use "commonStyles" as common; + +.addUserForm { + + &-title { + font-family: Montserrat-SemiBold, sans-serif; + text-align: center; + margin-bottom: 1em; + } + + &-permissions { + &-title { + text-align: center; + } + } + + &-buttons { + @include common.flexContainer(center, center); + margin-top: 1em; + } + + &-compare { + margin-top: .2em; + padding: 1em; + mat-divider { + margin: .5em; + } + + &-input { + &-text { + font-family: Montserrat-SemiBold, sans-serif; + } + &-actions { + @include common.flexContainer(center, center); + &-button { + margin-left: 1em; + } + } + } + + &-roles { + margin: 1em 0; + } + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts new file mode 100644 index 0000000000..91cb671a9a --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts @@ -0,0 +1,73 @@ +import {ChangeDetectionStrategy, Component, Inject} from "@angular/core"; +import {FormBuilder, Validators} from "@angular/forms"; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; +import {AdministrationUserRole} from "../../interfaces/administrationUserRole"; +import {AddAdministrationUserModal, AddAdministrationUserRequest} from "../../interfaces/addAdministrationUser"; +import {MatSelectChange} from "@angular/material/select"; + +@Component({ + selector: 'app-addAdministrationUser', + templateUrl: 'addAdministrationUser.component.html', + styleUrls: ['addAdministrationUser.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AddAdministrationUserComponent { + public selectedUserRoles: AdministrationUserRole[]; + private chosenRoles: AdministrationUserRole[] = []; + + public readonly addUserForm = this.formBuilder.group({ + email: [null, Validators.required], + name: [null, Validators.required], + phone: [null, Validators.required], + }) + + constructor( + @Inject(MAT_DIALOG_DATA) private data: AddAdministrationUserModal, + private readonly matDialogRef: MatDialogRef, + private readonly formBuilder: FormBuilder + ) {} + + public addUser(): void { + const userToAdd: AddAdministrationUserRequest = { + ...this.addUserForm.getRawValue(), + roles: this.chosenRoles.map(r => r.roleGuid) + } + this.matDialogRef.close(userToAdd); + } + + public get roles(): AdministrationUserRole[] { + return this.data.availableRoles as AdministrationUserRole[]; + } + + public get onlySelectedRoles(): AdministrationUserRole[] { + return this.chosenRoles; + } + + public roleSelected(role: AdministrationUserRole): void { + const foundRoleIndex = this.chosenRoles.findIndex(r => r.roleGuid === role.roleGuid); + if(foundRoleIndex > -1 && role.isSelected) { + this.chosenRoles[foundRoleIndex] = role; + } else if (foundRoleIndex == -1 && role.isSelected) { + this.chosenRoles.push(role); + } else if (foundRoleIndex > -1 && !role.isSelected) { + this.chosenRoles.splice(foundRoleIndex, 1); + } + } + + public get existingUsersEmails(): string[] { + return this.data.existingUsers.map(user => user.email); + } + + public userSelected({value}:MatSelectChange): void { + this.selectedUserRoles = this.data.existingUsers.find(({email}) => email === value).roles; + } + + public applyRoles(): void { + this.data.availableRoles = this.roles.map((role) => ({ + ...role, + isSelected: this.selectedUserRoles.find(r => r.roleGuid === role.roleGuid)?.isSelected || false + })) as any + + this.chosenRoles = (this.data.availableRoles as AdministrationUserRole[]).filter(r => r.isSelected); + } +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html similarity index 97% rename from ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html rename to ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html index a354fb9cc8..22c5043b3a 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/AdministrationUser/administrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html @@ -12,7 +12,6 @@

    Name: {{user.name}} {{user.phone}} + (change)="onChange($event, role)" [checked]="role?.isSelected"/> + {{role?.name}} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts index b7c76fcb26..2037abc03d 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/permissionCheckbox/permissionCheckbox.component.ts @@ -1,5 +1,5 @@ import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output} from "@angular/core"; -import {AdministrationUserRole} from "../../interfaces/AdministrationUserRole"; +import {AdministrationUserRole} from "../../interfaces/administrationUserRole"; @Component({ selector: 'app-permission-checkbox', @@ -17,7 +17,9 @@ export class PermissionCheckboxComponent implements OnInit { public idRandomizer: string; ngOnInit(): void { - this.idRandomizer = this.role.roleGuid + Math.floor(Math.random() * 100000); + this.idRandomizer = + (this.role?.roleGuid || 'defaultGuid1994') + + Math.floor(Math.random() * 100000); } public onChange(changeEvent: Event, role: AdministrationUserRole): void { diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts deleted file mode 100644 index 7918b99f61..0000000000 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/AdministrationUserRole.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface AdministrationUserRole { - roleGuid: string; - name: string; - isSelected: boolean; -} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts deleted file mode 100644 index ac9d9c04e1..0000000000 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser-request.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AddAdministrationUserRequest { - email: string; - name: string; - phone: string; - roles: string[]; -} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser.ts new file mode 100644 index 0000000000..2771b66f20 --- /dev/null +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/addAdministrationUser.ts @@ -0,0 +1,14 @@ +import {AdministrationUserRole} from "./administrationUserRole"; +import {AdministrationUser} from "./administrationUser"; + +export interface AddAdministrationUserRequest { + email: string; + name: string; + phone: string; + roles: string[]; +} + +export interface AddAdministrationUserModal { + availableRoles: Partial, + existingUsers: AdministrationUser[] +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts index 0374503f63..03f2bf54ec 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUser.ts @@ -1,4 +1,4 @@ -import {AdministrationUserRole} from "./AdministrationUserRole"; +import {AdministrationUserRole} from "./administrationUserRole"; export interface AdministrationUser { email: string; diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRole.ts similarity index 58% rename from ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts rename to ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRole.ts index e41bfa7e3b..6f1b392b83 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRoles-response.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/administrationUserRole.ts @@ -1,5 +1,11 @@ import {AdministrationUser} from "./administrationUser"; +export interface AdministrationUserRole { + roleGuid: string; + name: string; + isSelected: boolean; +} + export interface AdministrationUserRolesResponse { userRoles: AdministrationUser[]; } diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser.ts similarity index 100% rename from ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser-request.ts rename to ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/interfaces/removeAdministrationUser.ts diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts index 877ebfab85..c86b7f36e7 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/services/usersAndPermissionsHttpService.service.ts @@ -3,6 +3,7 @@ import {Observable} from "rxjs"; import {AdministrationUser} from "../interfaces/administrationUser"; import {DSMService} from "../../services/dsm.service"; import {SessionService} from "../../services/session.service"; +import {AddAdministrationUserRequest} from "../interfaces/addAdministrationUser"; @Injectable() export class UsersAndPermissionsHttpServiceService { @@ -11,8 +12,12 @@ export class UsersAndPermissionsHttpServiceService { private readonly sessionService: SessionService) { } - public get usersAndPermissions(): Observable { - return this.dsmService.getUsersAndPermissions(this.realm); + public get users(): Observable { + return this.dsmService.getUsers(this.realm); + } + + public addUser(user: AddAdministrationUserRequest): Observable { + return this.dsmService.addUser(this.realm, user); } private get realm(): string { diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts index a7ae239180..8b1bebfe90 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/testData.ts @@ -95,3 +95,26 @@ export const testData: AdministrationUser[] = [ ] } ] + +export const availableRoles = [ + { + roleGuid: 'survey_creation', + name: 'Create surveys', + }, + { + roleGuid: 'mercury_order_sequencing', + name: 'Mercury order sequencing', + }, + { + roleGuid: 'view_shared_learnings', + name: 'View shared learnings', + }, + { + roleGuid: 'upload_ror_file', + name: 'Upload return of results file', + }, + { + roleGuid: 'upload_onc_history', + name: 'Upload onc history', + } +] diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html index a2e1911dd5..b76633679f 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html @@ -1,4 +1,5 @@

    Users And Permissions

    - + + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts index ab59f576ab..67ffe12a1f 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts @@ -1,5 +1,10 @@ -import {ChangeDetectionStrategy, Component} from "@angular/core"; +import {ChangeDetectionStrategy, Component, OnDestroy} from "@angular/core"; import {UsersAndPermissionsHttpServiceService} from "./services/usersAndPermissionsHttpService.service"; +import {availableRoles, testData} from "./testData"; +import {MatDialog} from "@angular/material/dialog"; +import {AddAdministrationUserComponent} from "./components/addAdministrationUser/addAdministrationUser.component"; +import {Subject, takeUntil} from "rxjs"; +import {take} from "rxjs/operators"; @Component({ selector: 'app-users-and-permissions', @@ -8,4 +13,31 @@ import {UsersAndPermissionsHttpServiceService} from "./services/usersAndPermissi providers: [UsersAndPermissionsHttpServiceService], changeDetection: ChangeDetectionStrategy.OnPush }) -export class UsersAndPermissionsComponent {} +export class UsersAndPermissionsComponent implements OnDestroy { + public usersList = testData; + private readonly subscriptionSubject = new Subject(); + + constructor( + private readonly httpService: UsersAndPermissionsHttpServiceService, + private readonly matDialog: MatDialog) {} + + ngOnDestroy(): void { + this.subscriptionSubject.next(); + this.subscriptionSubject.complete(); + } + + public onAddUser(): void { + const activeUserAddDialog = this.matDialog.open(AddAdministrationUserComponent, {data:{ + availableRoles: availableRoles, + existingUsers: testData + }}); + + activeUserAddDialog.afterClosed() + .pipe( + take(1), + takeUntil(this.subscriptionSubject) + ) + .subscribe(user => console.log(user, 'AFTER_CLOSE')) + } + +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts index 4de25bd15f..a2e99c32d5 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.module.ts @@ -10,14 +10,17 @@ import {MatCheckboxModule} from "@angular/material/checkbox"; import {PermissionCheckboxComponent} from "./components/permissionCheckbox/permissionCheckbox.component"; import {MatDividerModule} from "@angular/material/divider"; import {MatTooltipModule} from "@angular/material/tooltip"; -import {AdministrationUserComponent} from "./components/AdministrationUser/administrationUser.component"; +import {AdministrationUserComponent} from "./components/administrationUser/administrationUser.component"; import {MatInputModule} from "@angular/material/input"; -import {FormsModule} from "@angular/forms"; +import {FormsModule, ReactiveFormsModule} from "@angular/forms"; import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; import {ComparePermissionsComponent} from "./components/comparePermissions/comparePermissions.component"; import {MatDialogModule} from "@angular/material/dialog"; import {MatTableModule} from "@angular/material/table"; import {MatSelectModule} from "@angular/material/select"; +import {AddAdministrationUserComponent} from "./components/addAdministrationUser/addAdministrationUser.component"; +import {MatFormFieldModule} from "@angular/material/form-field"; +import {MatAutocompleteModule} from "@angular/material/autocomplete"; const routes: Routes = [ {path: '', component: UsersAndPermissionsComponent} @@ -29,11 +32,14 @@ const routes: Routes = [ ListAdministrationUsersComponent, PermissionCheckboxComponent, AdministrationUserComponent, - ComparePermissionsComponent + ComparePermissionsComponent, + AddAdministrationUserComponent ], imports: [ CommonModule, RouterModule.forChild(routes), + ReactiveFormsModule, + MatFormFieldModule, MatExpansionModule, MatIconModule, MatButtonModule, @@ -45,7 +51,9 @@ const routes: Routes = [ MatProgressSpinnerModule, MatDialogModule, MatTableModule, - MatSelectModule + MatSelectModule, + ReactiveFormsModule, + MatAutocompleteModule ], }) export class UsersAndPermissionsModule {} From cd059694bbe13ddaefd7f64904d3d76dfbe7ee63 Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Tue, 18 Jul 2023 10:37:44 +0400 Subject: [PATCH 11/29] DSM-PEPPER-948-download-of-Onc-History-upload-template user is adding --- .../usersAndPermissions.component.html | 2 +- .../usersAndPermissions.component.scss | 4 ++++ .../usersAndPermissions.component.ts | 21 ++++++++++++++++--- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html index b76633679f..16930ca745 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.html @@ -1,5 +1,5 @@

    Users And Permissions

    - + diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss index 12e99a59f8..f95f3a8231 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.scss @@ -2,3 +2,7 @@ text-align: center; margin-bottom: 2em; } + +.addUserButton { + margin-bottom: 1.5em; +} diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts index 67ffe12a1f..eb8f219c80 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/usersAndPermissions.component.ts @@ -1,4 +1,4 @@ -import {ChangeDetectionStrategy, Component, OnDestroy} from "@angular/core"; +import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy} from "@angular/core"; import {UsersAndPermissionsHttpServiceService} from "./services/usersAndPermissionsHttpService.service"; import {availableRoles, testData} from "./testData"; import {MatDialog} from "@angular/material/dialog"; @@ -19,7 +19,8 @@ export class UsersAndPermissionsComponent implements OnDestroy { constructor( private readonly httpService: UsersAndPermissionsHttpServiceService, - private readonly matDialog: MatDialog) {} + private readonly matDialog: MatDialog, + private readonly cdr: ChangeDetectorRef) {} ngOnDestroy(): void { this.subscriptionSubject.next(); @@ -37,7 +38,21 @@ export class UsersAndPermissionsComponent implements OnDestroy { take(1), takeUntil(this.subscriptionSubject) ) - .subscribe(user => console.log(user, 'AFTER_CLOSE')) + .subscribe(user => { + if (user) { + this.usersList = [...this.usersList, + {...user, roles: [...availableRoles.map(r => { + return { + ...r, + isSelected: !!user.roles.find(rr => rr === r.roleGuid) + } + })]} + ] + } + this.cdr.markForCheck(); + console.log(this.usersList, 'UPDATED_USER_LIST') + console.log(user, 'AFTER_CLOSE') + }) } } From dccdb86e6a8132ad752615f182f6ece64592970f Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Tue, 18 Jul 2023 12:05:21 +0400 Subject: [PATCH 12/29] DSM-PEPPER-948-download-of-Onc-History-upload-template safety v1 --- .../addAdministrationUser.component.html | 2 +- .../addAdministrationUser.component.ts | 14 ++++++++++---- .../administrationUser.component.html | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html index 27dd3e6d10..482a3a2980 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.html @@ -28,7 +28,7 @@

    Permissions

    diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts index 91cb671a9a..59bbbe9d3a 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/addAdministrationUser/addAdministrationUser.component.ts @@ -28,11 +28,13 @@ export class AddAdministrationUserComponent { ) {} public addUser(): void { - const userToAdd: AddAdministrationUserRequest = { - ...this.addUserForm.getRawValue(), - roles: this.chosenRoles.map(r => r.roleGuid) + if (this.allowAddingUser) { + const userToAdd: AddAdministrationUserRequest = { + ...this.addUserForm.getRawValue(), + roles: this.chosenRoles.map(r => r.roleGuid) + } + this.matDialogRef.close(userToAdd); } - this.matDialogRef.close(userToAdd); } public get roles(): AdministrationUserRole[] { @@ -43,6 +45,10 @@ export class AddAdministrationUserComponent { return this.chosenRoles; } + public get allowAddingUser(): boolean { + return this.addUserForm.valid && !!this.onlySelectedRoles?.length; + } + public roleSelected(role: AdministrationUserRole): void { const foundRoleIndex = this.chosenRoles.findIndex(r => r.roleGuid === role.roleGuid); if(foundRoleIndex > -1 && role.isSelected) { diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html index 22c5043b3a..690b2408a8 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html @@ -79,6 +79,7 @@

    Permissions

    From c3d773bd1671d954f0bdd5115056fcec3b440f4f Mon Sep 17 00:00:00 2001 From: GiCharkviani Date: Tue, 18 Jul 2023 12:27:15 +0400 Subject: [PATCH 13/29] DSM-PEPPER-948-download-of-Onc-History-upload-template more improvements --- .../administrationUser.component.html | 7 +++-- .../administrationUser.component.ts | 26 +++++++++++++++---- .../comparePermissions.component.html | 3 +++ .../comparePermissions.component.scss | 15 ++++++++++- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html index 690b2408a8..bf2be67564 100644 --- a/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html +++ b/ddp-workspace/projects/ddp-dsm-ui/src/app/usersAndPermissions/components/administrationUser/administrationUser.component.html @@ -8,10 +8,11 @@
    -
    +

    Name: {{user.name}} {{user.phone}}

    -
    +