feat(exports): Added page for exports. (TV-862)
Squashed commit of the following:
commit ee293ecbc763a2e85c383ee628539fb1dbcab515
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Mon Nov 1 13:28:22 2021 +0100
Moved exports below administration
commit 7dd8756cd031501c302981e51c8aa519092b121c
Merge: ef229931 bdc526ce
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Mon Nov 1 13:20:56 2021 +0100
Merge branch 'develop' into feature/TV-862-export-page
commit ef229931d978646a864e1d952044e6d31f2adf82
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Fri Oct 29 11:59:06 2021 +0200
Added exporter page including routing and feature-toggling
This commit is contained in:
@@ -63,6 +63,14 @@ activeFeatures.forEach(feature => {
|
|||||||
canActivate: [AuthGuard, OrganizationGuard, RoleGuard],
|
canActivate: [AuthGuard, OrganizationGuard, RoleGuard],
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case Feature.EXPORTS:
|
||||||
|
routes.push({
|
||||||
|
path: 'exporter',
|
||||||
|
data: { title: 'Exporter', expectedRoles: [RoleEnum.MSFA_ReceiveDeltagare] },
|
||||||
|
loadChildren: () => import('./pages/exports/exports.module').then(m => m.ExportsModule),
|
||||||
|
canActivate: [AuthGuard, OrganizationGuard, RoleGuard],
|
||||||
|
});
|
||||||
|
break;
|
||||||
case Feature.MY_ACCOUNT:
|
case Feature.MY_ACCOUNT:
|
||||||
routes.push({
|
routes.push({
|
||||||
path: 'mitt-konto',
|
path: 'mitt-konto',
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
|
import { ExportsComponent } from './exports.component';
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{ path: '', data: { title: 'Exporter' }, component: ExportsComponent },
|
||||||
|
{
|
||||||
|
path: 'deltagare',
|
||||||
|
data: { title: 'Skapa export för deltagare' },
|
||||||
|
loadChildren: () => import('./pages/deltagare-export/deltagare-export.module').then(m => m.DeltagareExportModule),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule],
|
||||||
|
})
|
||||||
|
export class ExportsRoutingModule {}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<msfa-layout>
|
||||||
|
<section class="exports">
|
||||||
|
<digi-typography>
|
||||||
|
<header class="exports__header">
|
||||||
|
<h1>Exporter</h1>
|
||||||
|
</header>
|
||||||
|
<main class="exports__contents"></main>
|
||||||
|
</digi-typography>
|
||||||
|
</section>
|
||||||
|
</msfa-layout>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
@import 'variables/gutters';
|
||||||
|
|
||||||
|
.exports {
|
||||||
|
&__contents {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: $digi--layout--gutter--l;
|
||||||
|
margin-top: $digi--layout--gutter--l;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { RouterTestingModule } from '@angular/router/testing';
|
||||||
|
import { ExportsComponent } from './exports.component';
|
||||||
|
|
||||||
|
describe('ExportsComponent', () => {
|
||||||
|
let component: ExportsComponent;
|
||||||
|
let fixture: ComponentFixture<ExportsComponent>;
|
||||||
|
|
||||||
|
beforeEach(
|
||||||
|
waitForAsync(() => {
|
||||||
|
void TestBed.configureTestingModule({
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
declarations: [ExportsComponent],
|
||||||
|
imports: [HttpClientTestingModule, RouterTestingModule],
|
||||||
|
}).compileComponents();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ExportsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'msfa-exports',
|
||||||
|
templateUrl: './exports.component.html',
|
||||||
|
styleUrls: ['./exports.component.scss'],
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
|
})
|
||||||
|
export class ExportsComponent {}
|
||||||
12
apps/mina-sidor-fa/src/app/pages/exports/exports.module.ts
Normal file
12
apps/mina-sidor-fa/src/app/pages/exports/exports.module.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
|
import { ExportsComponent } from './exports.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
declarations: [ExportsComponent],
|
||||||
|
imports: [CommonModule, RouterModule.forChild([{ path: '', component: ExportsComponent }]), LayoutModule],
|
||||||
|
})
|
||||||
|
export class ExportsModule {}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<msfa-layout>
|
||||||
|
<section class="deltagare-export">
|
||||||
|
<digi-typography>
|
||||||
|
<header class="deltagare-export__header">
|
||||||
|
<h1>Deltagare export</h1>
|
||||||
|
</header>
|
||||||
|
<main class="deltagare-export__contents"></main>
|
||||||
|
</digi-typography>
|
||||||
|
</section>
|
||||||
|
</msfa-layout>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
@import 'variables/gutters';
|
||||||
|
|
||||||
|
.deltagare-export {
|
||||||
|
&__contents {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: $digi--layout--gutter--l;
|
||||||
|
margin-top: $digi--layout--gutter--l;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
|
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { RouterTestingModule } from '@angular/router/testing';
|
||||||
|
import { DeltagareExportComponent } from './deltagare-export.component';
|
||||||
|
|
||||||
|
describe('DeltagareExportComponent', () => {
|
||||||
|
let component: DeltagareExportComponent;
|
||||||
|
let fixture: ComponentFixture<DeltagareExportComponent>;
|
||||||
|
|
||||||
|
beforeEach(
|
||||||
|
waitForAsync(() => {
|
||||||
|
void TestBed.configureTestingModule({
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
declarations: [DeltagareExportComponent],
|
||||||
|
imports: [HttpClientTestingModule, RouterTestingModule],
|
||||||
|
}).compileComponents();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(DeltagareExportComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'msfa-deltagare-export',
|
||||||
|
templateUrl: './deltagare-export.component.html',
|
||||||
|
styleUrls: ['./deltagare-export.component.scss'],
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
|
})
|
||||||
|
export class DeltagareExportComponent {}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
|
import { DeltagareExportComponent } from './deltagare-export.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
declarations: [DeltagareExportComponent],
|
||||||
|
imports: [CommonModule, RouterModule.forChild([{ path: '', component: DeltagareExportComponent }]), LayoutModule],
|
||||||
|
})
|
||||||
|
export class DeltagareExportModule {}
|
||||||
@@ -79,5 +79,6 @@
|
|||||||
<digi-icon-arrow-right *ngSwitchCase="iconType.ARROW_RIGHT" [ngClass]="iconClass"></digi-icon-arrow-right>
|
<digi-icon-arrow-right *ngSwitchCase="iconType.ARROW_RIGHT" [ngClass]="iconClass"></digi-icon-arrow-right>
|
||||||
<digi-icon-eye *ngSwitchCase="iconType.EYE" [ngClass]="iconClass"></digi-icon-eye>
|
<digi-icon-eye *ngSwitchCase="iconType.EYE" [ngClass]="iconClass"></digi-icon-eye>
|
||||||
<digi-icon-eye-slash *ngSwitchCase="iconType.EYESLASH" [ngClass]="iconClass"></digi-icon-eye-slash>
|
<digi-icon-eye-slash *ngSwitchCase="iconType.EYESLASH" [ngClass]="iconClass"></digi-icon-eye-slash>
|
||||||
|
<digi-icon-archive *ngSwitchCase="iconType.ARCHIVE" [ngClass]="iconClass"></digi-icon-archive>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|||||||
@@ -31,5 +31,12 @@
|
|||||||
Administration
|
Administration
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="sidebar__item" *ngIf="exportsVisible">
|
||||||
|
<a [routerLink]="['/exporter']" [routerLinkActive]="['sidebar__link--active']" class="sidebar__link">
|
||||||
|
<msfa-icon class="sidebar__icon" [icon]="iconType.ARCHIVE" size="xl"></msfa-icon>
|
||||||
|
Exporter
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -36,4 +36,10 @@ export class SidebarComponent {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
get exportsVisible(): boolean {
|
||||||
|
return (
|
||||||
|
this.activeFeatures.includes(Feature.EXPORTS) &&
|
||||||
|
this.userRoles?.some(role => role.type === RoleEnum.MSFA_ReceiveDeltagare)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ export enum Feature {
|
|||||||
REPORTING_SIGNAL,
|
REPORTING_SIGNAL,
|
||||||
REPORTING_PERIODISK_REDOVISNING,
|
REPORTING_PERIODISK_REDOVISNING,
|
||||||
REPORTING_INFORMATIV_RAPPORT,
|
REPORTING_INFORMATIV_RAPPORT,
|
||||||
|
EXPORTS,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,5 @@ export enum IconType {
|
|||||||
ARROW_RIGHT = 'arrow-right',
|
ARROW_RIGHT = 'arrow-right',
|
||||||
EYE = 'eye',
|
EYE = 'eye',
|
||||||
EYESLASH = 'eyeslash',
|
EYESLASH = 'eyeslash',
|
||||||
|
ARCHIVE = 'archive',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,4 +26,5 @@ export const ACTIVE_FEATURES_TEST: Feature[] = [
|
|||||||
Feature.VERSION_INFO,
|
Feature.VERSION_INFO,
|
||||||
Feature.REPORTING_PERIODISK_REDOVISNING,
|
Feature.REPORTING_PERIODISK_REDOVISNING,
|
||||||
Feature.REPORTING_INFORMATIV_RAPPORT,
|
Feature.REPORTING_INFORMATIV_RAPPORT,
|
||||||
|
Feature.EXPORTS,
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user