Merge pull request #83 in TEA/mina-sidor-fa-web from feature/TV-396 to develop
Squashed commit of the following: commit f5029b04d2117df86eaf6692c88bdc692059d8d6 Merge: 3d776b145f2fb5Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Sat Sep 11 06:17:07 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit 3d776b10824be6b54e186104a5bcd351e5b2fb42 Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 23:26:47 2021 +0200 TV-396 fixed some tests and so on commit bd57fce383ba409ae8de1869c242b5a8f51071d2 Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 23:20:26 2021 +0200 TV-396 made some adjustments to the validation logic after feedback in PR commit 942cddb263d0965e772f7f34305e85737da76df4 Merge: 174dfe9ceee702Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 14:10:23 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit 174dfe924f2eac979992275ddd55ed0758144efb Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 14:05:39 2021 +0200 TV-396 fixed issue with general info after restructuring.. commit 7e0d4bdf9e76e0fb58fe30358c3e729cce1f9260 Merge: da02f6c5b00453Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 12:00:29 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit da02f6cc7f4a9405ad1d8167ef18729b18973d61 Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 10:43:42 2021 +0200 TV-396 added aria-expanded attribute commit 48eb24ca6e354b44ae4d4b62ce2ffa496743d0b5 Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Fri Sep 10 09:46:39 2021 +0200 TV-396 moved some logic into seperate template commit 0ef787d6c3700677ae793c486930b07748365412 Merge: 6dfd7b05f81d6fAuthor: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Thu Sep 9 17:34:40 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit 6dfd7b00caa45d335f3fe8619b92c282038ac5cb Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Thu Sep 9 17:33:54 2021 +0200 TV-396 used digi internal link instead of basic a-tag commit 46c17011b7f6b1f628b14ccf020c06cdc95627c8 Merge: 4338e151938b94Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Thu Sep 9 15:07:16 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit 4338e153f7e4ebdf8ab65a64a6194dbd4d9fa9c7 Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Thu Sep 9 14:56:26 2021 +0200 TV-396 added error summary an validation handling for the edit form etc. commit ebb2e76993b99756d5a641ab8ca7d137be8a982f Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Wed Sep 8 22:58:44 2021 +0200 TV-396 making sure utforande verksamheter and addresses are populated as they should be when editing an employee. commit 01f4c9bf7ad8fc4ad44b0e8945182492b864d0cf Merge: 1c2aa92b06436aAuthor: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Wed Sep 8 22:07:25 2021 +0200 Merge branch 'develop-remote' into feature/TV-396 commit 1c2aa92f21aac57036ed05d5ebeab0f0e6a45c2c Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se> Date: Wed Sep 8 22:07:00 2021 +0200 Merge branch 'develop-remote' into bugs/TV-520 # Conflicts: # apps/mina-sidor-fa/src/app/pages/administration/pages/employee-card/employee-card.component.html
This commit is contained in:
@@ -1,12 +1,17 @@
|
||||
<digi-typography>
|
||||
<digi-typography #editEmployeeFormContainer>
|
||||
<form
|
||||
class="edit-employee-form"
|
||||
*ngIf="editEmployeeFormGroup"
|
||||
[formGroup]="editEmployeeFormGroup"
|
||||
(ngSubmit)="onFormSubmitted()"
|
||||
>
|
||||
<msfa-error-list
|
||||
[hidden]="!displayErrorSummary"
|
||||
[headingText]="'Åtgärda följande fel för att spara dina ändringar:'"
|
||||
[validationErrorLinks]="getValidationErrorLinks()"
|
||||
></msfa-error-list>
|
||||
<digi-ng-form-input
|
||||
afId="edit-employee-form-email"
|
||||
[afId]="emailElementId"
|
||||
afLabel="E-post adress"
|
||||
afType="email"
|
||||
[formControlName]="emailFormControlName"
|
||||
@@ -20,7 +25,6 @@
|
||||
<h2>Behörigheter</h2>
|
||||
<p>Här kan du ändra personalkontots behörigheter.</p>
|
||||
</div>
|
||||
|
||||
<div class="edit-employee-form__block">
|
||||
<h3>Tjänster</h3>
|
||||
<p>Välj de tjänster du vill ge personalen tillgång till.</p>
|
||||
@@ -32,6 +36,7 @@
|
||||
[afSelectItems]="selectableTjansterFormItems"
|
||||
[afDisableValidStyle]="true"
|
||||
[afInvalid]="tjansterFormControl.invalid && tjansterFormControl.touched"
|
||||
[afId]="tjansterElementId"
|
||||
(afOnChange)="toggleTjanst()"
|
||||
></digi-ng-form-select>
|
||||
<digi-form-validation-message
|
||||
@@ -48,22 +53,30 @@
|
||||
<p *ngIf="!availableUtforandeVerksamheter || availableUtforandeVerksamheter.length === 0">
|
||||
<strong>Du måste välja en eller flera tjänster för att kunna välja utförande verksamheter.</strong>
|
||||
</p>
|
||||
<digi-ng-form-checkbox
|
||||
class="edit-employee-form__choose-all-utforande-verksamheter"
|
||||
[formControl]="toggleAllUtforandeVerksamhetFormControl"
|
||||
[afLabel]="'Välj alla utförande verksamheter och alla utförande adresser'"
|
||||
(afOnChange)="toggleAllUtforandeVerksamheter($event)"
|
||||
></digi-ng-form-checkbox>
|
||||
<ng-container *ngIf="!isLoadingUtforandeVerksamheter else loadingUtforandeVerksamheterTemplate">
|
||||
<digi-ng-form-checkbox
|
||||
class="edit-employee-form__choose-all-utforande-verksamheter"
|
||||
[formControl]="selectAllUtforandeVerksamheterFormControl"
|
||||
[afLabel]="'Välj alla utförande verksamheter och alla utförande adresser'"
|
||||
></digi-ng-form-checkbox>
|
||||
|
||||
<msfa-tree-nodes-selector
|
||||
*ngIf="!toggleAllUtforandeVerksamhetFormControl.value"
|
||||
[headingText]="'Välj utförande verksamheter och adresser'"
|
||||
[formControlName]="utforandeVerksamhetFormControlName"
|
||||
[isInvalid]="utforandeVerksamhetFormControl?.invalid"
|
||||
[showValidation]="utforandeVerksamhetFormControl?.touched"
|
||||
[validationMessages]="utforandeVerksamhetFormControl.errors?.required ? ['Välj minst en utförande verksamhet'] : []"
|
||||
(selectedTreeNodesChanged)="updateToggleAllUtforandeVerksamheter()"
|
||||
></msfa-tree-nodes-selector>
|
||||
<msfa-tree-nodes-selector
|
||||
*ngIf="!selectAllUtforandeVerksamheterFormControl.value"
|
||||
[buttonElementId]="utforandeVerksamhetElementId"
|
||||
[headingText]="'Välj utförande verksamheter och adresser'"
|
||||
[formControlName]="utforandeVerksamheterFormControlName"
|
||||
[isInvalid]="editEmployeeFormGroup.invalid && editEmployeeFormGroup.errors?.noUtforandeVerksamhetSelected"
|
||||
[showValidation]="utforandeVerksamheterFormControl?.touched"
|
||||
[validationMessages]="editEmployeeFormGroup.errors?.noUtforandeVerksamhetSelected ? [utforandeVerksamhetRequiredMessage] : []"
|
||||
(selectedTreeNodesChanged)="updateToggleAllUtforandeVerksamheter()"
|
||||
></msfa-tree-nodes-selector>
|
||||
</ng-container>
|
||||
<ng-template #loadingUtforandeVerksamheterTemplate>
|
||||
<digi-ng-loader-spinner
|
||||
*ngIf="isLoadingUtforandeVerksamheter"
|
||||
[afLabel]="'Läser in utförande verksamheter för vald/a tjänster...'"
|
||||
></digi-ng-loader-spinner>
|
||||
</ng-template>
|
||||
</div>
|
||||
|
||||
<div class="edit-employee-form__block" *ngIf="rolesFormGroup && availableRoles" [formGroup]="rolesFormGroup">
|
||||
|
||||
@@ -3,12 +3,14 @@ import { FormSelectItem } from '@af/digi-ng/_form/form-select';
|
||||
import {
|
||||
ChangeDetectionStrategy,
|
||||
Component,
|
||||
ElementRef,
|
||||
EventEmitter,
|
||||
Input,
|
||||
OnChanges,
|
||||
OnInit,
|
||||
Output,
|
||||
SimpleChanges,
|
||||
ViewChild,
|
||||
} from '@angular/core';
|
||||
import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
|
||||
import { RoleEnum } from '@msfa-enums/role.enum';
|
||||
@@ -19,13 +21,12 @@ import { Role } from '@msfa-models/role.model';
|
||||
import { Tjanst } from '@msfa-models/tjanst.model';
|
||||
import { UtforandeVerksamhet } from '@msfa-models/utforande-verksamhet.model';
|
||||
import { UtforandeVerksamheterService } from '@msfa-services/utforande-verksamheter/utforande-verksamheter.service';
|
||||
import {
|
||||
TreeNode,
|
||||
TreeNodesSelectorService,
|
||||
} from '@msfa-shared/components/tree-nodes-selector/services/tree-nodes-selector.service';
|
||||
import { ValidationErrorLink } from '@msfa-shared/components/error-list/error-list.component';
|
||||
import { TreeNodesSelectorService } from '@msfa-shared/components/tree-nodes-selector/services/tree-nodes-selector.service';
|
||||
import { EmailValidator } from '@msfa-utils/validators/email.validator';
|
||||
import { EmployeeValidator } from '@msfa-utils/validators/employee.validator';
|
||||
import { RequiredValidator } from '@msfa-utils/validators/required.validator';
|
||||
import { TreeNodeValidator } from '@msfa-utils/validators/tree-node.validator';
|
||||
import { UUID } from 'angular2-uuid';
|
||||
import { EmployeeFormService } from '../services/employee-form.service';
|
||||
|
||||
@Component({
|
||||
@@ -35,9 +36,12 @@ import { EmployeeFormService } from '../services/employee-form.service';
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
})
|
||||
export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
@ViewChild('editEmployeeFormContainer') editEmployeeFormContainer: ElementRef;
|
||||
|
||||
@Input() employee: Employee;
|
||||
@Input() availableRoles: Role[];
|
||||
@Input() availableTjanster: Tjanst[];
|
||||
@Input() isLoadingUtforandeVerksamheter = false;
|
||||
@Input() availableUtforandeVerksamheter: UtforandeVerksamhet[];
|
||||
@Input() errorWhileUpdating: CustomError;
|
||||
|
||||
@@ -51,14 +55,21 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
|
||||
readonly emailFormControlName = 'email';
|
||||
readonly tjansterFormControlName = 'tjanster';
|
||||
readonly utforandeVerksamhetFormControlName = 'utforandeVerksamheter';
|
||||
readonly toggleAllUtforandeVerksamhetFormControlName = 'allaUtforandeVerksamheter';
|
||||
readonly utforandeVerksamheterFormControlName = 'utforandeVerksamheter';
|
||||
readonly selectAllUtforandeVerksamheterFormControlName = 'allaUtforandeVerksamheter';
|
||||
readonly utforandeVerksamhetRequiredMessage = 'Välj minst en utförande verksamhet';
|
||||
readonly formUuid = UUID.UUID();
|
||||
readonly emailElementId = `email-control-${this.formUuid}`;
|
||||
readonly tjansterElementId = `tjanster-control-${this.formUuid}`;
|
||||
readonly utforandeVerksamhetElementId = `utforande-verksamhet-control-${this.formUuid}`;
|
||||
readonly firstValidationErrorLinkId = `validation-error-link-${this.formUuid}`;
|
||||
|
||||
editEmployeeFormGroup: FormGroup | null = null;
|
||||
displayEditWithoutRolesDialog = false;
|
||||
displayPristineWarning = false;
|
||||
|
||||
displayRolesDialog = false;
|
||||
displayErrorSummary = false;
|
||||
|
||||
selectableTjansterFormItems: Array<FormSelectItem> | null = null;
|
||||
|
||||
@@ -88,9 +99,11 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
this.editEmployeeFormGroup.patchValue(
|
||||
Object.fromEntries([
|
||||
[
|
||||
this.utforandeVerksamhetFormControlName,
|
||||
this.utforandeVerksamheterFormControlName,
|
||||
this.utforandeVerksamheterService.getTreeNodeDataFromUtforandeVerksamheter(
|
||||
this.availableUtforandeVerksamheter
|
||||
this.availableUtforandeVerksamheter,
|
||||
this.employee?.utforandeVerksamheter,
|
||||
this.employee?.allaUtforandeVerksamheter
|
||||
),
|
||||
],
|
||||
])
|
||||
@@ -112,23 +125,23 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
return this.editEmployeeFormGroup.get('roles');
|
||||
}
|
||||
|
||||
get utforandeVerksamhetFormControl(): AbstractControl | undefined {
|
||||
return this.editEmployeeFormGroup?.get(this.utforandeVerksamhetFormControlName);
|
||||
get utforandeVerksamheterFormControl(): AbstractControl | undefined {
|
||||
return this.editEmployeeFormGroup?.get(this.utforandeVerksamheterFormControlName);
|
||||
}
|
||||
|
||||
get toggleAllUtforandeVerksamhetFormControl(): AbstractControl | undefined {
|
||||
return this.editEmployeeFormGroup?.get(this.toggleAllUtforandeVerksamhetFormControlName);
|
||||
get selectAllUtforandeVerksamheterFormControl(): AbstractControl | undefined {
|
||||
return this.editEmployeeFormGroup?.get(this.selectAllUtforandeVerksamheterFormControlName);
|
||||
}
|
||||
|
||||
private updateUtforandeVerksamhetStatus(): void {
|
||||
if (this.availableUtforandeVerksamheter && this.availableUtforandeVerksamheter.length > 0) {
|
||||
this.utforandeVerksamhetFormControl.enable();
|
||||
this.toggleAllUtforandeVerksamhetFormControl.enable();
|
||||
this.utforandeVerksamheterFormControl.enable();
|
||||
this.selectAllUtforandeVerksamheterFormControl.enable();
|
||||
return;
|
||||
}
|
||||
|
||||
this.utforandeVerksamhetFormControl.disable();
|
||||
this.toggleAllUtforandeVerksamhetFormControl.disable();
|
||||
this.utforandeVerksamheterFormControl.disable();
|
||||
this.selectAllUtforandeVerksamheterFormControl.disable();
|
||||
}
|
||||
|
||||
private updateSelectableTjansterFormItems(): void {
|
||||
@@ -143,22 +156,32 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
? this.availableTjanster.find(tjanst => tjanst.code === currentTjanst.tjansteKod).tjanstId
|
||||
: null;
|
||||
|
||||
this.editEmployeeFormGroup = new FormGroup({
|
||||
email: new FormControl(this.employee.email, [RequiredValidator('E-postadress'), EmailValidator()]),
|
||||
tjanster: new FormControl(tjanstId, [RequiredValidator('Tjänst')]),
|
||||
roles: this.employeeFormService.getRolesFormGroup(this.availableRoles, this.employee.roles),
|
||||
utforandeVerksamheter: new FormControl(
|
||||
this.utforandeVerksamheterService.getTreeNodeDataFromUtforandeVerksamheter(this.availableUtforandeVerksamheter),
|
||||
[
|
||||
TreeNodeValidator.IsValidTreeNode(
|
||||
this.utforandeVerksamheterService.hasSelectedUtforandeVerksamhet,
|
||||
'required',
|
||||
this.toggleAllUtforandeVerksamhetFormControl
|
||||
this.editEmployeeFormGroup = new FormGroup(
|
||||
{
|
||||
email: new FormControl(this.employee.email, [
|
||||
RequiredValidator('E-postadress'),
|
||||
EmailValidator('e-postadress'),
|
||||
]),
|
||||
tjanster: new FormControl(tjanstId, [RequiredValidator('Tjänst')]),
|
||||
roles: this.employeeFormService.getRolesFormGroup(this.availableRoles, this.employee.roles),
|
||||
utforandeVerksamheter: new FormControl(
|
||||
this.utforandeVerksamheterService.getTreeNodeDataFromUtforandeVerksamheter(
|
||||
this.availableUtforandeVerksamheter,
|
||||
this.employee?.utforandeVerksamheter,
|
||||
this.employee?.allaUtforandeVerksamheter
|
||||
),
|
||||
]
|
||||
),
|
||||
allaUtforandeVerksamheter: new FormControl(this.employee.allaUtforandeVerksamheter),
|
||||
});
|
||||
[]
|
||||
),
|
||||
allaUtforandeVerksamheter: new FormControl(this.employee.allaUtforandeVerksamheter),
|
||||
},
|
||||
{
|
||||
validators: EmployeeValidator.HasSelectedAtLeastOneUtforandeVerksamhet(
|
||||
this.utforandeVerksamheterFormControlName,
|
||||
this.selectAllUtforandeVerksamheterFormControlName,
|
||||
this.utforandeVerksamheterService.hasSelectedUtforandeVerksamhet
|
||||
),
|
||||
}
|
||||
);
|
||||
|
||||
this.updateUtforandeVerksamhetStatus();
|
||||
}
|
||||
@@ -172,22 +195,27 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
}
|
||||
|
||||
onFormSubmitted(saveWithoutRoles = false): void {
|
||||
if (!this.editEmployeeFormGroup) {
|
||||
if (!this.editEmployeeFormGroup || this.isLoadingUtforandeVerksamheter) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.displayPristineWarning = this.editEmployeeFormGroup.pristine;
|
||||
|
||||
this.editEmployeeFormGroup.markAllAsTouched();
|
||||
|
||||
if (this.editEmployeeFormGroup.invalid) {
|
||||
if (this.editEmployeeFormGroup.invalid || this.editEmployeeFormGroup.pristine) {
|
||||
this.displayErrorSummary = true;
|
||||
setTimeout(() => {
|
||||
this.focusLinkElement('.error-list__validation-error-link a');
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.editEmployeeFormGroup.pristine) {
|
||||
this.displayPristineWarning = true;
|
||||
return;
|
||||
}
|
||||
this.displayErrorSummary = false;
|
||||
|
||||
const roles = this.employeeFormService.getRolesFromFormGroup(this.rolesFormGroup, this.availableRoles);
|
||||
|
||||
if (!roles.length && !saveWithoutRoles) {
|
||||
this.displayEditWithoutRolesDialog = true;
|
||||
return;
|
||||
@@ -204,21 +232,67 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
RoleEnum.MSFA_Standard,
|
||||
]),
|
||||
],
|
||||
adressIds: this.toggleAllUtforandeVerksamhetFormControl.value
|
||||
adressIds: this.selectAllUtforandeVerksamheterFormControl.value
|
||||
? []
|
||||
: this.utforandeVerksamheterService.getSelectedAdressIdsFromTreeNode(
|
||||
this.utforandeVerksamhetFormControl?.value
|
||||
this.utforandeVerksamheterFormControl?.value
|
||||
),
|
||||
allaUtforandeVerksamheter: !!this.toggleAllUtforandeVerksamhetFormControl.value,
|
||||
allaUtforandeVerksamheter: !!this.selectAllUtforandeVerksamheterFormControl.value,
|
||||
});
|
||||
}
|
||||
|
||||
toggleTjanst(): void {
|
||||
if (this.tjansterFormControl.value) {
|
||||
this.tjansterSelected.emit(
|
||||
this.employeeFormService.getSelectedTjanster(this.availableTjanster, +this.tjansterFormControl.value)
|
||||
);
|
||||
getValidationErrorLinks(): ValidationErrorLink[] {
|
||||
let validationErrorLinks: ValidationErrorLink[] = [];
|
||||
|
||||
if (!this.editEmployeeFormGroup) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.emailFormControl?.errors) {
|
||||
validationErrorLinks = validationErrorLinks.concat({
|
||||
elementId: this.emailElementId,
|
||||
text: this.emailFormControl?.errors?.message as string,
|
||||
});
|
||||
}
|
||||
|
||||
if (this.tjansterFormControl?.errors) {
|
||||
validationErrorLinks = validationErrorLinks.concat({
|
||||
elementId: this.tjansterElementId,
|
||||
text: this.tjansterFormControl?.errors?.message as string,
|
||||
});
|
||||
}
|
||||
|
||||
if (this.editEmployeeFormGroup.errors?.noUtforandeVerksamhetSelected) {
|
||||
validationErrorLinks = validationErrorLinks.concat({
|
||||
elementId: this.utforandeVerksamhetElementId,
|
||||
text: this.utforandeVerksamhetRequiredMessage,
|
||||
});
|
||||
}
|
||||
|
||||
return validationErrorLinks;
|
||||
}
|
||||
|
||||
focusLinkElement(selector: string): void {
|
||||
let errorListElement: HTMLElement = null;
|
||||
let linkElement: HTMLLinkElement = null;
|
||||
|
||||
if (!this.editEmployeeFormContainer || !this.editEmployeeFormContainer.nativeElement) {
|
||||
return;
|
||||
}
|
||||
|
||||
errorListElement = this.editEmployeeFormContainer.nativeElement as HTMLElement;
|
||||
linkElement = errorListElement?.querySelector(selector);
|
||||
linkElement?.focus();
|
||||
}
|
||||
|
||||
toggleTjanst(): void {
|
||||
if (!this.tjansterFormControl.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.tjansterSelected.emit(
|
||||
this.employeeFormService.getSelectedTjanster(this.availableTjanster, +this.tjansterFormControl.value)
|
||||
);
|
||||
}
|
||||
|
||||
openRolesDialog(): void {
|
||||
@@ -229,23 +303,13 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
this.displayRolesDialog = false;
|
||||
}
|
||||
|
||||
toggleAllUtforandeVerksamheter(selectAll: boolean): void {
|
||||
let treeNode: TreeNode = this.utforandeVerksamhetFormControl.value as TreeNode;
|
||||
|
||||
treeNode = selectAll
|
||||
? this.treeNodesSelectorService.getTreeNodeWithAllNodesSelected(treeNode)
|
||||
: this.treeNodesSelectorService.getTreeNodeWithNoNodesSelected(treeNode);
|
||||
|
||||
this.editEmployeeFormGroup.patchValue(Object.fromEntries([[this.utforandeVerksamhetFormControlName, treeNode]]));
|
||||
}
|
||||
|
||||
updateToggleAllUtforandeVerksamheter(): void {
|
||||
const hasSelectedAllLeafNodes = this.treeNodesSelectorService.hasSelectedAllLeafNodes(
|
||||
this.utforandeVerksamhetFormControl.value
|
||||
this.utforandeVerksamheterFormControl.value
|
||||
);
|
||||
|
||||
this.editEmployeeFormGroup.patchValue(
|
||||
Object.fromEntries([[this.toggleAllUtforandeVerksamhetFormControlName, hasSelectedAllLeafNodes]])
|
||||
Object.fromEntries([[this.selectAllUtforandeVerksamheterFormControlName, hasSelectedAllLeafNodes]])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<msfa-layout>
|
||||
<digi-typography>
|
||||
<section class="employee-form" *ngIf="employee$ | async as employee">
|
||||
<section class="employee-form">
|
||||
<header class="employee-form__header">
|
||||
<h1>Redigera personalkonto</h1>
|
||||
<msfa-employee-delete [returnToEmployeeList]="true"></msfa-employee-delete>
|
||||
@@ -13,41 +13,46 @@
|
||||
Ta bort konto
|
||||
</digi-button> -->
|
||||
</header>
|
||||
|
||||
<div class="employee-form__block">
|
||||
<h2>Personuppgifter</h2>
|
||||
<dl>
|
||||
<dt>Förnamn</dt>
|
||||
<dd>{{employee.firstName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Efternamn</dt>
|
||||
<dd>{{employee.lastName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Personnummer</dt>
|
||||
<dd>
|
||||
<msfa-hide-text
|
||||
symbols="********-****"
|
||||
[changingText]="employee.ssn"
|
||||
ariaLabelType="personnummer"
|
||||
></msfa-hide-text>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="employee-form__block">
|
||||
<msfa-edit-employee-form
|
||||
*ngIf="employee && (tjanster$ | async)"
|
||||
[employee]="employee"
|
||||
[availableRoles]="availableRoles"
|
||||
[availableTjanster]="tjanster$ | async"
|
||||
[availableUtforandeVerksamheter]="availableUtforandeVerksamheter$ | async"
|
||||
[errorWhileUpdating]="errorWhileUpdating$ | async"
|
||||
(tjansterSelected)="setupAvailableUtforandeVerksamheter($event)"
|
||||
(formSubmitted)="updateEmployee($event)"
|
||||
(closeError)="closeError()"
|
||||
></msfa-edit-employee-form>
|
||||
</div>
|
||||
<ng-container *ngIf="employee$ | async as employee; else isLoadingEmployeeTemplate">
|
||||
<div class="employee-form__block">
|
||||
<h2>Personuppgifter</h2>
|
||||
<dl>
|
||||
<dt>Förnamn</dt>
|
||||
<dd>{{employee.firstName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Efternamn</dt>
|
||||
<dd>{{employee.lastName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Personnummer</dt>
|
||||
<dd>
|
||||
<msfa-hide-text
|
||||
symbols="********-****"
|
||||
[changingText]="employee.ssn"
|
||||
ariaLabelType="personnummer"
|
||||
></msfa-hide-text>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="employee-form__block">
|
||||
<msfa-edit-employee-form
|
||||
*ngIf="employee && (tjanster$ | async)"
|
||||
[employee]="employee"
|
||||
[availableRoles]="availableRoles"
|
||||
[availableTjanster]="tjanster$ | async"
|
||||
[isLoadingUtforandeVerksamheter]="isLoadingUtforandeVerksamheter$ | async"
|
||||
[availableUtforandeVerksamheter]="availableUtforandeVerksamheter$ | async"
|
||||
[errorWhileUpdating]="errorWhileUpdating$ | async"
|
||||
(tjansterSelected)="setupAvailableUtforandeVerksamheter($event)"
|
||||
(formSubmitted)="updateEmployee($event)"
|
||||
(closeError)="closeError()"
|
||||
></msfa-edit-employee-form>
|
||||
</div>
|
||||
</ng-container>
|
||||
<ng-template #isLoadingEmployeeTemplate>
|
||||
<digi-ng-skeleton-base [afCount]="3" afText="Laddar personalkonto..."></digi-ng-skeleton-base>
|
||||
</ng-template>
|
||||
</section>
|
||||
</digi-typography>
|
||||
</msfa-layout>
|
||||
|
||||
@@ -10,8 +10,8 @@ import { EmployeeService } from '@msfa-services/api/employee.service';
|
||||
import { TjanstService } from '@msfa-services/api/tjanst.service';
|
||||
import { RoleService } from '@msfa-services/role.service';
|
||||
import { UtforandeVerksamheterService } from '@msfa-services/utforande-verksamheter/utforande-verksamheter.service';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { filter, switchMap } from 'rxjs/operators';
|
||||
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||
import { catchError, mapTo, startWith, switchMap } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'msfa-employee-form',
|
||||
@@ -23,16 +23,18 @@ export class EmployeeFormComponent implements OnInit {
|
||||
private _employeeId$ = new BehaviorSubject<string>(this.activatedRoute.snapshot.params['employeeId']);
|
||||
private _selectedTjanstIds$ = new BehaviorSubject<number[]>(null);
|
||||
private _errorWhileUpdating$ = new BehaviorSubject<CustomError>(null);
|
||||
errorWhileUpdating$: Observable<CustomError> = this._errorWhileUpdating$.asObservable();
|
||||
employee$ = this.employeeService.employee$;
|
||||
tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$;
|
||||
|
||||
availableUtforandeVerksamheter$: Observable<UtforandeVerksamhet[]> = this._selectedTjanstIds$.pipe(
|
||||
filter(selectedTjanstIds => !!selectedTjanstIds?.length),
|
||||
switchMap(selectedTjanstIds => this.utforandeVerksamheterService.fetchUtforandeVerksamheter$(selectedTjanstIds))
|
||||
);
|
||||
|
||||
errorWhileUpdating$: Observable<CustomError> = this._errorWhileUpdating$.asObservable();
|
||||
employee$ = this.employeeService.employee$;
|
||||
tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$;
|
||||
availableRoles: Role[] = this.roleService.allRoles;
|
||||
|
||||
isLoadingUtforandeVerksamheter$: Observable<boolean>;
|
||||
|
||||
constructor(
|
||||
private employeeService: EmployeeService,
|
||||
private roleService: RoleService,
|
||||
@@ -68,6 +70,11 @@ export class EmployeeFormComponent implements OnInit {
|
||||
|
||||
setupAvailableUtforandeVerksamheter(selectedTjanster: Tjanst[]): void {
|
||||
this._selectedTjanstIds$.next(selectedTjanster.map(tjanst => tjanst.tjanstId));
|
||||
this.isLoadingUtforandeVerksamheter$ = this.availableUtforandeVerksamheter$.pipe(
|
||||
mapTo(false),
|
||||
catchError(() => of(false)),
|
||||
startWith(true)
|
||||
);
|
||||
}
|
||||
setEmployeeToDelete(employee: Employee): void {
|
||||
this.employeeService.setEmployeeToDelete(employee);
|
||||
|
||||
@@ -6,6 +6,7 @@ import { DigiNgFormInputModule } from '@af/digi-ng/_form/form-input';
|
||||
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
|
||||
import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
||||
import { DigiNgPopoverModule } from '@af/digi-ng/_popover/popover';
|
||||
import { DigiNgLoaderSpinnerModule } from '@af/digi-ng/_loader/loader-spinner';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
@@ -18,6 +19,8 @@ import { LocalDatePipeModule } from '@msfa-shared/pipes/local-date/local-date.mo
|
||||
import { EmployeeDeleteModule } from '../../components/employee-delete/employee-delete.module';
|
||||
import { EditEmployeeFormComponent } from './edit-employee-form/edit-employee-form.component';
|
||||
import { EmployeeFormComponent } from './employee-form.component';
|
||||
import { DigiNgSkeletonBaseModule } from '@af/digi-ng/_skeleton/skeleton-base';
|
||||
import { ErrorListModule } from '@msfa-shared/components/error-list/error-list.module';
|
||||
|
||||
@NgModule({
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
@@ -34,11 +37,14 @@ import { EmployeeFormComponent } from './employee-form.component';
|
||||
DigiNgPopoverModule,
|
||||
DigiNgFormCheckboxModule,
|
||||
DigiNgButtonModule,
|
||||
DigiNgLoaderSpinnerModule,
|
||||
DigiNgSkeletonBaseModule,
|
||||
LayoutModule,
|
||||
EmployeeDeleteModule,
|
||||
DigiNgDialogModule,
|
||||
HideTextModule,
|
||||
TreeNodesSelectorModule,
|
||||
ErrorListModule,
|
||||
RolesDialogModule,
|
||||
],
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user