Merge pull request #76 in TEA/mina-sidor-fa-web from bugs/TV-520 to develop

Squashed commit of the following:

commit 0b09c15d23fb2bfeb54cbf9e9508a65c782ba230
Merge: 32383b6 9a73ffe
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Tue Sep 7 10:09:02 2021 +0200

    Merge branch 'develop-remote' into bugs/TV-520

commit 32383b6d1f2b3611cb99c7b05c66b46b561175fe
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 12:57:24 2021 +0200

    TV-520 fixed failing test after merge from develop

commit 29fff4e9dd055dd0da2ba21e8b95a9c4ae9714b4
Merge: b28ef1c db03d97
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 12:46:50 2021 +0200

    Merge branch 'develop-remote' into bugs/TV-520

commit b28ef1c1e8645452ab43f1dce8732f69ca73781c
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 10:30:13 2021 +0200

    TV-520 removed unnecessary reference

commit 17d39ec2d396aa4eb60d739a2a04b6e64d2fb5df
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 09:55:23 2021 +0200

    TV-520 varied fixes for template errors..

commit 8196d0305b224475786843bd149d4e13cc3039aa
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 09:06:56 2021 +0200

    Merge branch 'develop-remote' into bugs/TV-520

    # Conflicts:
    #	apps/mina-sidor-fa/src/app/pages/administration/administration-routing.module.ts

commit 8911fdd694d227b901ad492679ed2ed0d044beeb
Merge: 31cd47f ec7b4fc
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 08:56:53 2021 +0200

    Merge branch 'develop-remote' into bugs/TV-520

commit 31cd47ff2e13d090dd3489e21f18fcf292600cbd
Author: arbetsformedlingen_garcn <christian.gardebrink@arbetsformedlingen.se>
Date:   Mon Sep 6 08:52:06 2021 +0200

    TV-520 lade in en funktion i layout komponenten som i stort sett alla sidor verkar använda sig av där title sätts till vad man lagt in för info i data objektet för den aktuella routen.
This commit is contained in:
Christian Gårdebrink
2021-09-07 12:59:54 +02:00
parent 9a73ffeee3
commit cac0515c9c
16 changed files with 68 additions and 12 deletions

View File

@@ -60,6 +60,7 @@ const routes: Routes = [
},
{
path: 'organization-picker',
data: { title: 'Välj organisation' },
loadChildren: () =>
import('./pages/organization-picker/organization-picker.module').then(m => m.OrganizationPickerModule),
},

View File

@@ -9,18 +9,22 @@ const routes: Routes = [
},
{
path: 'personal',
data: { title: 'Personalinformation' },
loadChildren: () => import('./pages/employees/employees.module').then(m => m.EmployeesModule),
},
{
path: 'personal/:employeeId',
data: { title: 'Personalinformation' },
loadChildren: () => import('./pages/employee-card/employee-card.module').then(m => m.EmployeeCardModule),
},
{
path: 'skapa-personalkonto',
data: { title: 'Skapa personalkonto' },
loadChildren: () => import('./pages/employee-invite/employee-invite.module').then(m => m.EmployeeInviteModule),
},
{
path: 'redigera-personalkonto/:employeeId',
data: { title: 'Redigera personalkonto' },
loadChildren: () => import('./pages/employee-form/employee-form.module').then(m => m.EmployeeFormModule),
},
];

View File

@@ -59,7 +59,7 @@
>
<digi-ng-layout-expansion-panel *ngIf="utforandeverksamhet.adresser.length > 0">
<span data-slot-trigger>
{{ accordionExpanded ? 'Dölj' : 'Visa' }} {{utforandeverksamhet.adresser.length}}
<!-- vad refererar accordionExpanded till här?? Templaten bygger inte om det inte finns en definition av variabeln.. {{ accordionExpanded ? 'Dölj' : 'Visa' }} {{utforandeverksamhet.adresser.length}} -->
{{utforandeverksamhet.adresser.length === 1 ? 'adress' : 'adresser'}}
</span>
<ul class="employee-card__utforandeverksamheter-address-list">

View File

@@ -90,6 +90,12 @@
></digi-ng-form-checkbox>
</li>
</ul>
<digi-form-validation-message
*ngIf="rolesFormGroup.invalid && rolesFormGroup.errors.noRoleSelected && rolesFormGroup.touched"
af-variation="error"
>
Du måste välja minst en behörighet
</digi-form-validation-message>
</fieldset>
<div class="edit-employee-form__footer">

View File

@@ -198,6 +198,8 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
return;
}
this.editEmployeeFormGroup.markAllAsTouched();
if (this.editEmployeeFormGroup.invalid || this.editEmployeeFormGroup.pristine) {
return;
}

View File

@@ -48,7 +48,6 @@
[currentEmployeeRoles]="currentEmployeeRoles$ | async"
[availableTjanster]="tjanster$ | async"
[currentEmployeeTjanster]="employee.tjanster"
[selectedTjanster]="selectedServices$ | async"
[availableUtforandeVerksamheter]="availableUtforandeVerksamheter$ | async"
(tjansterSelected)="setupAvailableUtforandeVerksamheter($event)"
(formSubmitted)="updateEmployee($event)"

View File

@@ -22,7 +22,7 @@ import { EditEmployeeFormData } from './edit-employee-form/edit-employee-form.co
export class EmployeeFormComponent implements OnInit {
employee$ = this.employeeService.employee$;
tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$;
currentEmployeeRoles$: Observable<Role[] | undefined | null> = null;
currentEmployeeRoles$: Observable<string[] | undefined | null> = null;
availableUtforandeVerksamheter$: Observable<Array<UtforandeVerksamhet>> | null = null;
selectableRoles: Role[] = this.employeeService.allRoles;
@@ -38,7 +38,7 @@ export class EmployeeFormComponent implements OnInit {
this.employeeService.setCurrentEmployeeId(this.activatedRoute.snapshot.params['employeeId']);
this.currentEmployeeRoles$ = this.employee$.pipe(
map(employee => employee?.roles?.map(role => mapRoleResponseToRoleObject(role)))
map(employee => employee?.roles?.map(role => mapRoleResponseToRoleObject(role)?.type))
);
}

View File

@@ -3,6 +3,7 @@ import { FormControl, FormGroup } from '@angular/forms';
import { RoleEnum } from '@msfa-enums/role.enum';
import { Role } from '@msfa-models/role.model';
import { Tjanst } from '@msfa-models/tjanst.model';
import { EmployeeValidator } from '@msfa-utils/validators/employee.validator';
@Injectable({
providedIn: 'root',
@@ -47,7 +48,10 @@ export class EmployeeFormService {
this.getFormControlName(role),
new FormControl(this.isSelectedRole(role, selectedRoles), []),
])
)
),
{
validators: [EmployeeValidator.HasSelectedAtLeastOneRole(roles.map(role => this.getFormControlName(role)))],
}
);
}

View File

@@ -1,4 +1,5 @@
import { DigiNgFormInputModule } from '@af/digi-ng/_form/form-input';
import { DigiNgFormTextareaModule } from '@af/digi-ng/_form/form-textarea';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
@@ -14,7 +15,7 @@ describe('EmployeeInviteComponent', () => {
await TestBed.configureTestingModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [EmployeeInviteComponent],
imports: [ReactiveFormsModule, DigiNgFormInputModule, HttpClientTestingModule],
imports: [ReactiveFormsModule, DigiNgFormInputModule, DigiNgFormTextareaModule, HttpClientTestingModule],
}).compileComponents();
});

View File

@@ -40,7 +40,6 @@
[employees]="employeesData.data"
[paginationMeta]="employeesData.meta"
[sort]="sort$ | async"
[order]="order$ | async"
(sorted)="handleEmployeesSort($event)"
(paginated)="setNewPage($event)"
(deleteEmployee)="setEmployeeToDelete($event)"

View File

@@ -117,4 +117,7 @@
<ng-template #loadingRef>
<digi-icon-spinner class="msfa__spinner" af-title="Laddar innehåll"></digi-icon-spinner>
</ng-template>
<ng-template #noAvailabeHandledare>
<!-- lägg in lämpligt innehåll -->
</ng-template>
</msfa-layout>

View File

@@ -1,5 +1,6 @@
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Router } from '@angular/router';
import { Title } from '@angular/platform-browser';
import { ActivatedRoute, Router } from '@angular/router';
import { UnsubscribeDirective } from '@msfa-directives/unsubscribe.directive';
import { Organization } from '@msfa-models/organization.model';
import { UserService } from '@msfa-services/api/user.service';
@@ -18,7 +19,12 @@ export class OrganizationPickerComponent extends UnsubscribeDirective {
map(({ organizations }) => organizations)
);
constructor(private userService: UserService, private router: Router) {
constructor(
private userService: UserService,
private router: Router,
private titleService: Title,
private activatedRoute: ActivatedRoute
) {
super();
super.unsubscribeOnDestroy(
this.organizations$.subscribe(organizations => {
@@ -27,6 +33,10 @@ export class OrganizationPickerComponent extends UnsubscribeDirective {
}
})
);
const pageTitle = this.activatedRoute?.snapshot?.data?.title as string;
this.titleService.setTitle(`Mina sidor FA${pageTitle ? ` - ${pageTitle}` : ''}`);
}
loginWithOrganization(organization: Organization): void {

View File

@@ -1,5 +1,6 @@
import { NavigationBreadcrumbsItem } from '@af/digi-ng/_navigation/navigation-breadcrumbs';
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { UnsubscribeDirective } from '@msfa-directives/unsubscribe.directive';
import { User } from '@msfa-models/user.model';
@@ -35,12 +36,17 @@ export class LayoutComponent extends UnsubscribeDirective {
private router: Router,
private activatedRoute: ActivatedRoute,
private authenticationService: AuthenticationService,
private userService: UserService
private userService: UserService,
private titleService: Title
) {
super();
super.unsubscribeOnDestroy(
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
const pageTitle = this.activatedRoute?.snapshot?.data?.title as string;
const urlTree = this.router.parseUrl(this.router.url);
this.titleService.setTitle(`Mina sidor FA${pageTitle ? ` - ${pageTitle}` : ''}`);
if (urlTree.queryParams.code) {
void this.router.navigate([], {
relativeTo: this.activatedRoute,
@@ -49,7 +55,9 @@ export class LayoutComponent extends UnsubscribeDirective {
replaceUrl: true,
});
}
urlTree.queryParams = {};
const paths = urlTree
.toString()
.split('/')

View File

@@ -13,10 +13,10 @@
>
<digi-form-input-search
[attr.af-variation]="FormInputSearchVariation.S"
[attr.af-button-text]="getFilterButtonAriaLabelText()"
[attr.af-button-text]="getFilterButtonAriaLabelText(treeNodeModel)"
[attr.af-button-type]="ButtonType.BUTTON"
[attr.af-label]="' '"
[attr.af-aria-labelledby]="filterDescriptionId"
[attr.af-aria-labelledby]="getFilterDescriptionId(treeNodeModel)"
(afOnFocusOutside)="onFocusOutsideFilter($event)"
(afOnChange)="onFilterTextChanged($event, treeNodeModel)"
(afOnKeyup)="onFilterTextChanged($event, treeNodeModel)"

View File

@@ -0,0 +1,15 @@
import { FormGroup, ValidatorFn } from '@angular/forms';
export class EmployeeValidator {
static HasSelectedAtLeastOneRole(roleFormControlNames: Array<string>): ValidatorFn {
return (fg: FormGroup): { [key: string]: unknown } => {
if (!roleFormControlNames || roleFormControlNames.length === 0) {
return { noRoleSelected: true };
}
return roleFormControlNames.some(roleFormControlName => fg?.controls[roleFormControlName]?.value)
? null
: { noRoleSelected: true };
};
}
}

View File

@@ -29,5 +29,9 @@
"@msfa-shared/*": ["apps/mina-sidor-fa/src/app/shared/*"]
}
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
},
"exclude": ["node_modules", "tmp"]
}