diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..966f070
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "angular.enable-strict-mode-prompt": false
+}
\ No newline at end of file
diff --git a/apps/dafa-web/src/app/app.component.html b/apps/dafa-web/src/app/app.component.html
index 9ee2bcb..0eb7c8e 100644
--- a/apps/dafa-web/src/app/app.component.html
+++ b/apps/dafa-web/src/app/app.component.html
@@ -13,5 +13,7 @@
>
+
+
diff --git a/apps/dafa-web/src/app/app.component.scss b/apps/dafa-web/src/app/app.component.scss
index 24a7d95..af305b3 100644
--- a/apps/dafa-web/src/app/app.component.scss
+++ b/apps/dafa-web/src/app/app.component.scss
@@ -3,22 +3,24 @@
@import 'variables/gutters';
.dafa {
- width: 100vw;
- height: 100vh;
- overflow: hidden;
display: grid;
+ height: 100vh;
grid-template-columns: 15rem 1fr;
- grid-template-rows: $dafa__navigation-height 1fr;
+ grid-template-rows: auto 1fr auto;
grid-template-areas:
'header header'
- 'sidebar content';
+ 'sidebar content'
+ 'footer footer';
- @media (min-width: $digi--layout--breakpoint--m) {
- grid-template-rows: $dafa__navigation-height-large 1fr;
- }
+ // @media (min-width: $digi--layout--breakpoint--m) {
+ // grid-template-rows: $dafa__navigation-height-large 1fr auto;
+ // }
&__header {
grid-area: header;
+ position: sticky;
+ top: 0;
+ z-index: 1;
}
&__sidebar {
@@ -30,11 +32,16 @@
&__content {
grid-area: content;
padding: var(--digi--layout--gutter) $digi--layout--gutter--l $digi--layout--gutter--xxl;
- overflow-y: auto;
}
&__breadcrumbs {
display: block;
margin-bottom: var(--digi--layout--gutter);
}
+
+ &__footer {
+ grid-area: footer;
+ background-color: var(--digi--ui--color--primary);
+ min-height: 10rem;
+ }
}
diff --git a/apps/dafa-web/src/app/app.module.ts b/apps/dafa-web/src/app/app.module.ts
index 77c624d..4babeea 100644
--- a/apps/dafa-web/src/app/app.module.ts
+++ b/apps/dafa-web/src/app/app.module.ts
@@ -7,6 +7,7 @@ import { CustomErrorHandler } from '@dafa-interceptors/custom-error-handler.modu
import { MarkdownModule } from 'ngx-markdown';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
+import { FooterModule } from './components/footer/footer.module';
import { NavigationModule } from './components/navigation/navigation.module';
import { SidebarModule } from './components/sidebar/sidebar.module';
import { SkipToContentModule } from './components/skip-to-content/skip-to-content.module';
@@ -23,6 +24,7 @@ import { ToastListModule } from './components/toast-list/toast-list.module';
NavigationModule,
SidebarModule,
ToastListModule,
+ FooterModule,
MarkdownModule.forRoot({ loader: HttpClient }),
DigiNgNavigationBreadcrumbsModule,
],
diff --git a/apps/dafa-web/src/app/components/footer/footer.component.html b/apps/dafa-web/src/app/components/footer/footer.component.html
new file mode 100644
index 0000000..4cfee34
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.component.html
@@ -0,0 +1,7 @@
+
diff --git a/apps/dafa-web/src/app/components/footer/footer.component.scss b/apps/dafa-web/src/app/components/footer/footer.component.scss
new file mode 100644
index 0000000..4d3f086
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.component.scss
@@ -0,0 +1,15 @@
+.footer {
+ background-color: var(--digi--ui--color--background--profile);
+ padding: var(--digi--layout--gutter);
+
+ &__logo-wrapper {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ }
+
+ &__logo {
+ height: 2rem;
+ vertical-align: middle;
+ }
+}
diff --git a/apps/dafa-web/src/app/components/footer/footer.component.spec.ts b/apps/dafa-web/src/app/components/footer/footer.component.spec.ts
new file mode 100644
index 0000000..3298320
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.component.spec.ts
@@ -0,0 +1,28 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+import { IconModule } from '@dafa-shared/components/icon/icon.module';
+import { FooterComponent } from './footer.component';
+
+describe('FooterComponent', () => {
+ let component: FooterComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(
+ waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [FooterComponent],
+ imports: [RouterTestingModule, IconModule],
+ }).compileComponents();
+ })
+ );
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(FooterComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/apps/dafa-web/src/app/components/footer/footer.component.ts b/apps/dafa-web/src/app/components/footer/footer.component.ts
new file mode 100644
index 0000000..bcf1421
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.component.ts
@@ -0,0 +1,9 @@
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+
+@Component({
+ selector: 'dafa-footer',
+ templateUrl: './footer.component.html',
+ styleUrls: ['./footer.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class FooterComponent {}
diff --git a/apps/dafa-web/src/app/components/footer/footer.module.ts b/apps/dafa-web/src/app/components/footer/footer.module.ts
new file mode 100644
index 0000000..dc8c438
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.module.ts
@@ -0,0 +1,11 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { RouterModule } from '@angular/router';
+import { FooterComponent } from './footer.component';
+
+@NgModule({
+ declarations: [FooterComponent],
+ imports: [CommonModule, RouterModule],
+ exports: [FooterComponent],
+})
+export class FooterModule {}
diff --git a/apps/dafa-web/src/app/components/footer/footer.print.component.scss b/apps/dafa-web/src/app/components/footer/footer.print.component.scss
new file mode 100644
index 0000000..004262a
--- /dev/null
+++ b/apps/dafa-web/src/app/components/footer/footer.print.component.scss
@@ -0,0 +1,7 @@
+@media print {
+ .footer {
+ border-bottom-width: 0;
+ padding: var(--digi--layout--gutter) 0;
+ display: flex;
+ }
+}
diff --git a/apps/dafa-web/src/app/components/sidebar/sidebar.component.scss b/apps/dafa-web/src/app/components/sidebar/sidebar.component.scss
index 4bc360d..bfda9a7 100644
--- a/apps/dafa-web/src/app/components/sidebar/sidebar.component.scss
+++ b/apps/dafa-web/src/app/components/sidebar/sidebar.component.scss
@@ -1,11 +1,12 @@
@import 'variables/colors';
+@import 'variables/navigation';
@import 'mixins/list';
.sidebar {
display: flex;
flex-direction: column;
position: sticky;
- top: 0;
+ top: $dafa__navigation-height-large;
&__list {
@include dafa__reset-list;
diff --git a/apps/dafa-web/src/app/data/models/authorization.model.ts b/apps/dafa-web/src/app/data/models/authorization.model.ts
new file mode 100644
index 0000000..0ad4407
--- /dev/null
+++ b/apps/dafa-web/src/app/data/models/authorization.model.ts
@@ -0,0 +1,19 @@
+import { Authorization as AuthorizationEnum } from '@dafa-enums/authorization.enum';
+
+export interface Authorization {
+ id: string;
+ name: AuthorizationEnum;
+}
+
+export interface AuthorizationApiResponse {
+ id: string;
+ name: AuthorizationEnum;
+}
+
+export function mapAuthorizationApiResponseToAuthorization(data: AuthorizationApiResponse): Authorization {
+ const { id, name } = data;
+ return {
+ id,
+ name,
+ };
+}
diff --git a/apps/dafa-web/src/app/data/models/employee.model.ts b/apps/dafa-web/src/app/data/models/employee.model.ts
index 0c2d0f2..136f0f4 100644
--- a/apps/dafa-web/src/app/data/models/employee.model.ts
+++ b/apps/dafa-web/src/app/data/models/employee.model.ts
@@ -1,27 +1,22 @@
-import { mapPegaAuthorizationToAuthorization, PegaAuthorization } from '@dafa-enums/authorization.enum';
-import { Service } from '@dafa-enums/service.enum';
import { Participant } from './participant.model';
+import { Service } from './service.model';
import { User, UserApiResponse } from './user.model';
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface Employee extends User {
languages: string[];
- outOfOffice: {
- start: Date;
- end: Date;
- }[];
participants: Participant[];
services: Service[];
- active: boolean;
}
export interface EmployeeApiResponse extends UserApiResponse {
- active: boolean;
services: Service[];
languages: string[];
participants: Participant[];
}
+// eslint-disable-next-line @typescript-eslint/no-empty-interface
+export interface EmployeeApiRequestData extends Employee {}
+
export interface PegaEmployeesApiResponse {
pxMore: string;
pxObjClass: string;
@@ -44,7 +39,6 @@ export interface PegaEmployeeApiResponse {
pyOrganization: string;
pyOrgDivision: string;
pyOrgUnit: string;
- pyTelephone: string;
pyUserIdentifier: string;
pyUserName: string;
}
@@ -52,7 +46,6 @@ export interface PegaEmployeeApiResponse {
export interface PegaEmployeeApiRequestData {
pyFirstName: string;
pyLastName: string;
- pyTelephone: string;
}
export interface PegaEmployeeApiPostResponse {
@@ -61,15 +54,17 @@ export interface PegaEmployeeApiPostResponse {
pyFirstName: string;
pyHasError: 'true' | 'false';
pyLastName: string;
- pyTelephone: string;
pyUserIdentifier: string;
}
-export function mapEmployeeToEmployeeApiRequestData(data: Employee): PegaEmployeeApiRequestData {
+export function mapEmployeeToEmployeeApiRequestData(data: Employee): EmployeeApiRequestData {
+ return data;
+}
+
+export function mapEmployeeToPegaEmployeeApiRequestData(data: Employee): PegaEmployeeApiRequestData {
return {
pyFirstName: data.firstName,
pyLastName: data.lastName,
- pyTelephone: data.phone,
};
}
@@ -79,59 +74,41 @@ export function mapPegaEmployeeReponseToEmployee(data: PegaEmployeeApiResponse):
lastName: data.pyLastName,
firstName: data.pyFirstName,
fullName: `${data.pyFirstName} ${data.pyLastName}`,
- organization: {
- id: '',
- name: data.pyOrganization,
- kaNumber: null,
- address: {
- street: null,
- houseNumber: null,
- postalCode: null,
- city: null,
- kommun: null,
+ organizations: [
+ {
+ id: '',
+ name: data.pyOrganization,
+ kaNumber: null,
+ address: {
+ street: null,
+ houseNumber: null,
+ postalCode: null,
+ city: null,
+ kommun: null,
+ },
},
- },
- phone: data.pyTelephone,
- email: '',
- authorizations: mapPegaAuthorizationToAuthorization(data.pyAccessGroup as PegaAuthorization),
+ ],
+ authorizations: null,
+ // authorizations: mapPegaAuthorizationToAuthorization(data.pyAccessGroup as PegaAuthorization),
services: [],
languages: [],
- outOfOffice: null,
ssn: '',
participants: [],
- active: true,
};
}
export function mapEmployeeReponseToEmployee(data: EmployeeApiResponse): Employee {
- const {
- id,
- firstName,
- lastName,
- phone,
- email,
- ssn,
- active,
- services,
- languages,
- organization,
- authorizations,
- participants,
- } = data;
+ const { id, firstName, lastName, ssn, services, languages, organizations, authorizations, participants } = data;
return {
id,
firstName,
lastName,
fullName: `${firstName} ${lastName}`,
- organization,
- phone,
- email,
+ organizations,
authorizations,
services,
languages,
- outOfOffice: null,
ssn,
participants,
- active,
};
}
diff --git a/apps/dafa-web/src/app/data/models/service.model.ts b/apps/dafa-web/src/app/data/models/service.model.ts
new file mode 100644
index 0000000..7adea6d
--- /dev/null
+++ b/apps/dafa-web/src/app/data/models/service.model.ts
@@ -0,0 +1,19 @@
+import { Service as ServiceEnum } from '@dafa-enums/service.enum';
+
+export interface Service {
+ id: string;
+ name: ServiceEnum;
+}
+
+export interface ServiceApiResponse {
+ id: string;
+ name: ServiceEnum;
+}
+
+export function mapServiceApiResponseToService(data: ServiceApiResponse): Service {
+ const { id, name } = data;
+ return {
+ id,
+ name,
+ };
+}
diff --git a/apps/dafa-web/src/app/data/models/user.model.ts b/apps/dafa-web/src/app/data/models/user.model.ts
index 07ed5ed..ccd6f4c 100644
--- a/apps/dafa-web/src/app/data/models/user.model.ts
+++ b/apps/dafa-web/src/app/data/models/user.model.ts
@@ -1,4 +1,4 @@
-import { Authorization, mapPegaAuthorizationToAuthorization, PegaAuthorization } from '@dafa-enums/authorization.enum';
+import { Authorization } from './authorization.model';
import { Organization } from './organization.model';
export interface User {
@@ -7,9 +7,7 @@ export interface User {
lastName: string;
fullName: string;
ssn: string;
- phone: string;
- email: string;
- organization: Organization;
+ organizations: Organization[];
authorizations: Authorization[];
}
@@ -18,9 +16,7 @@ export interface UserApiResponse {
firstName: string;
lastName: string;
ssn: string;
- phone: string;
- email: string;
- organization: Organization;
+ organizations: Organization[];
authorizations: Authorization[];
}
@@ -35,30 +31,20 @@ export interface PegaUserApiResponse {
pyOrganization: string;
pyOrgDivision: string;
pyOrgUnit: string;
- pyTelephone: string;
pyUserIdentifier: string;
pyUserName: string;
pyAccessGroupsAdditional: string[];
- pyAddresses: {
- Email: {
- pxObjClass: string;
- pxSubscript: string;
- pyEmailAddress: string;
- };
- };
}
export function mapUserApiResponseToUser(data: UserApiResponse): User {
- const { id, firstName, lastName, ssn, organization, phone, email, authorizations } = data;
+ const { id, firstName, lastName, ssn, organizations, authorizations } = data;
return {
id,
firstName,
lastName,
fullName: `${firstName} ${lastName}`,
ssn,
- organization,
- phone,
- email,
+ organizations,
authorizations,
};
}
@@ -70,20 +56,21 @@ export function mapPegaUserApiReponseToUser(data: PegaUserApiResponse): User {
firstName: data.pyFirstName,
fullName: `${data.pyFirstName} ${data.pyLastName}`,
ssn: null,
- organization: {
- id: '',
- name: data.pyOrganization,
- kaNumber: null,
- address: {
- street: null,
- houseNumber: null,
- postalCode: null,
- city: null,
- kommun: null,
+ organizations: [
+ {
+ id: '',
+ name: data.pyOrganization,
+ kaNumber: null,
+ address: {
+ street: null,
+ houseNumber: null,
+ postalCode: null,
+ city: null,
+ kommun: null,
+ },
},
- },
- phone: data.pyTelephone,
- email: data.pyAddresses.Email.pyEmailAddress,
- authorizations: mapPegaAuthorizationToAuthorization(data.pyAccessGroup as PegaAuthorization),
+ ],
+ authorizations: null,
+ // authorizations: mapPegaAuthorizationToAuthorization(data.pyAccessGroup as PegaAuthorization),
};
}
diff --git a/apps/dafa-web/src/app/pages/administration/administration-routing.module.ts b/apps/dafa-web/src/app/pages/administration/administration-routing.module.ts
index c7cebca..4f05197 100644
--- a/apps/dafa-web/src/app/pages/administration/administration-routing.module.ts
+++ b/apps/dafa-web/src/app/pages/administration/administration-routing.module.ts
@@ -19,7 +19,11 @@ const routes: Routes = [
},
{
path: 'skapa-konto',
- loadChildren: () => import('./pages/create-account/create-account.module').then(m => m.CreateAccountModule),
+ loadChildren: () => import('./pages/employee-form/employee-form.module').then(m => m.EmployeeFormModule),
+ },
+ {
+ path: 'redigera-konto/:id',
+ loadChildren: () => import('./pages/employee-form/employee-form.module').then(m => m.EmployeeFormModule),
},
];
diff --git a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.html b/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.html
deleted file mode 100644
index f1346c6..0000000
--- a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.html
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
- Skapa nytt konto
-
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam magna neque, interdum vel massa eget, condimentum
- rutrum velit. Sed vitae ullamcorper sem. Aliquam malesuada nunc sed purus mollis scelerisque. Curabitur bibendum
- leo quis ante porttitor tincidunt. Nam tincidunt imperdiet tortor eu suscipit. Maecenas ut dui est.
-
-
-
-
diff --git a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.scss b/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.scss
deleted file mode 100644
index 36b6077..0000000
--- a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.scss
+++ /dev/null
@@ -1,70 +0,0 @@
-@import 'mixins/list';
-
-.create-account {
- &__block {
- max-width: var(--digi--typography--text--max-width);
- }
- &__combined-inputs {
- display: flex;
- gap: var(--digi--layout--gutter);
- }
-
- &__input {
- display: block;
- width: 100%;
- margin-bottom: var(--digi--layout--gutter);
- }
-
- &__permission-checkbox {
- display: flex;
- height: 5rem;
- align-items: center;
- }
-
- &__fieldset {
- padding: 0;
- border: 0;
- margin-top: var(--digi--layout--gutter);
-
- legend {
- width: 100%;
- display: flex;
- align-items: center;
- margin: 0;
- font-weight: var(--digi--typography--font-weight--bold);
- font-size: 1.5rem;
- padding-bottom: var(--digi--layout--gutter--s);
- }
- }
-
- &__pending-out-of-office-list {
- @include dafa__reset-list;
- margin-top: var(--digi--layout--gutter);
-
- li {
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: var(--digi--layout--gutter--s);
- padding: var(--digi--layout--gutter--s);
-
- &:nth-child(odd) {
- background-color: var(--digi--ui--color--background--tertiary);
- }
- }
- }
-
- &__footer {
- margin-top: var(--digi--layout--gutter);
- display: flex;
- gap: var(--digi--layout--gutter);
- }
-
- &__popover {
- margin-left: var(--digi--layout--gutter);
-
- ::ng-deep .digi-ng-popover__container {
- z-index: 1;
- }
- }
-}
diff --git a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.ts b/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.ts
deleted file mode 100644
index 756aa01..0000000
--- a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { FormSelectBaseItem } from '@af/digi-ng/_form/form-select-base';
-import { ChangeDetectionStrategy, Component } from '@angular/core';
-import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
-import { Router } from '@angular/router';
-import { Service } from '@dafa-enums/service.enum';
-import { EmployeeService } from '@dafa-services/api/employee.service';
-import { RequiredValidator } from '@dafa-validators/required.validator';
-import { BehaviorSubject } from 'rxjs';
-
-@Component({
- selector: 'dafa-create-account',
- templateUrl: './create-account.component.html',
- styleUrls: ['./create-account.component.scss'],
- changeDetection: ChangeDetectionStrategy.OnPush,
-})
-export class CreateAccountComponent {
- private _searchValue$ = new BehaviorSubject('');
-
- formGroup: FormGroup;
- todaysDate = new Date();
-
- list: FormSelectBaseItem[] = [
- {
- name: Service.STOM,
- value: '1',
- },
- {
- name: Service.KVL,
- value: '2',
- },
- {
- name: Service.KROM,
- value: '3',
- },
- ];
-
- constructor(private formBuilder: FormBuilder, private employeeService: EmployeeService, private router: Router) {
- this.formGroup = this.formBuilder.group({
- firstName: this.formBuilder.control('', [RequiredValidator('Förnamn')]),
- lastName: this.formBuilder.control('', [RequiredValidator('Efternamn')]),
- phone: this.formBuilder.control('', [RequiredValidator('Telefonnummer')]),
- // ssn: this.formBuilder.control('', [RequiredValidator('Personnummer'), SocialSecurityNumberValidator()]),
- // employeeId: this.formBuilder.control('', [RequiredValidator('Personal-ID')]),
- ssn: this.formBuilder.control(''),
- employeeId: this.formBuilder.control(''),
- service: this.formBuilder.control(''),
- permissions: this.formBuilder.control(false),
- participant: this.formBuilder.control(false),
- infoParticipant: this.formBuilder.control(false),
- orderBills: this.formBuilder.control(false),
- });
- }
-
- handleSearchSubmit(): void {
- // skicka searchvalue till en service och filtrera
- }
-
- handleSearchInput($event: CustomEvent): void {
- this._searchValue$.next($event.detail.target.value);
- }
-
- get formselectItem(): FormSelectBaseItem[] {
- return [
- {
- name: Service.STOM,
- value: '1',
- },
- {
- name: Service.KVL,
- value: '2',
- },
- {
- name: Service.KROM,
- value: '3',
- },
- ];
- }
-
- get firstNameControl(): AbstractControl {
- return this.formGroup.get('firstName');
- }
- get lastNameControl(): AbstractControl {
- return this.formGroup.get('lastName');
- }
- get ssnControl(): AbstractControl {
- return this.formGroup.get('ssn');
- }
- get phoneControl(): AbstractControl {
- return this.formGroup.get('phone');
- }
-
- private _markFormAsDirty(): void {
- Object.keys(this.formGroup.controls).forEach(control => {
- this.formGroup.get(control).markAsDirty();
- this.formGroup.get(control).markAsTouched();
- });
- }
-
- submitForm(): void {
- if (this.formGroup.valid) {
- const submittableValues = {
- ...this.formGroup.value,
- fullName: `${this.firstNameControl.value} ${this.lastNameControl.value}`,
- };
-
- delete submittableValues.outOfOfficeStart;
- delete submittableValues.outOfOfficeEnd;
-
- const post = this.employeeService.postNewEmployee(submittableValues).subscribe({
- next: id => {
- this.router.navigate(['/administration', 'personal', id]);
- },
- complete: () => {
- post.unsubscribe();
- },
- });
-
- // this.formGroup.reset();
- } else {
- console.error('Form is invalid, do something...');
- this._markFormAsDirty();
- }
- }
-}
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employee-card/employee-card.component.html b/apps/dafa-web/src/app/pages/administration/pages/employee-card/employee-card.component.html
index 004fe7d..4ea2bbf 100644
--- a/apps/dafa-web/src/app/pages/administration/pages/employee-card/employee-card.component.html
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-card/employee-card.component.html
@@ -7,76 +7,58 @@
perferendis commodi.
-
-
+
+
-
+
Uppgifter om arbete
- Utförandeverksamhet
-
- {{ detailedEmployeeData.organization.address.city }}
-
Behörigheter
-
- {{ detailedEmployeeData.authorizations.join(', ') }}
-
- Frånvaroperiod
-
-
- {{ date.start | localDate }} - {{ date.end | localDate }}
-
+
+ {{ authorization.name }}
+
+ Tjänster
+
+ {{ service.name }}
- Tjänst
-
- {{ detailedEmployeeData.services.join(', ') }}
-
- Språk
- {{ detailedEmployeeData.languages?.join(', ') }}
-
-
Utförande verksamhet
+
+
Utförande verksamheter
-
-
- {{ agency.name }}
+
+
+ {{ organization.name }}
KA-nummer
- {{ agency.kaNumber }}
+ {{ organization.kaNumber }}
Adress
- {{ agency.address.street }} {{ agency.address.houseNumber }}
- {{ agency.address.postalCode }} {{ agency.address.city }}
+ {{ organization.address.street }} {{ organization.address.houseNumber }}
+ {{ organization.address.postalCode }} {{ organization.address.city }}
-
+
Tilldelade deltagare ({{ detailedEmployeeData.participants?.length || 0 }})
-
- 1" class="staff-card__participant">
+
+ 1" class="employee-card__participant">
-
+
;
+ authorizationsAsString$: Observable;
private _pendingSelectedParticipants$ = new BehaviorSubject([]);
constructor(private activatedRoute: ActivatedRoute, private employeeService: EmployeeService) {
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.html b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.html
new file mode 100644
index 0000000..7ad5713
--- /dev/null
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.html
@@ -0,0 +1,147 @@
+
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.scss b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.scss
new file mode 100644
index 0000000..4e4bf63
--- /dev/null
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.scss
@@ -0,0 +1,84 @@
+@import 'mixins/list';
+@import 'variables/gutters';
+
+.employee-form {
+ &__block {
+ max-width: var(--digi--typography--text--max-width);
+ margin-bottom: $digi--layout--gutter--xl;
+ }
+
+ &__input {
+ display: block;
+ width: 100%;
+ margin-bottom: var(--digi--layout--gutter);
+ }
+
+ &__fieldset {
+ padding: 0;
+ border: 0;
+
+ legend {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ font-weight: var(--digi--typography--font-weight--semibold);
+ font-size: var(--digi--typography--font-size--h2--desktop);
+ margin-bottom: var(--digi-typography--margin--h2);
+ }
+ }
+
+ &__validation-message {
+ display: block;
+ margin-top: var(--digi--layout--gutter--s);
+ }
+
+ &__added-services {
+ margin-top: var(--digi--layout--gutter);
+ max-width: 50rem;
+ }
+
+ &__services,
+ &__authorizations {
+ @include dafa__reset-list;
+ margin-bottom: var(--digi--layout--gutter);
+ }
+
+ &__service-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--digi--layout--gutter--xs) var(--digi--layout--gutter--s);
+
+ &:nth-child(odd) {
+ background-color: var(--digi--ui--color--background--secondary);
+ }
+ }
+
+ &__authorization-item {
+ display: flex;
+ align-items: center;
+
+ &:not(:first-child) {
+ margin-top: var(--digi--layout--gutter);
+ }
+ }
+
+ &__error-list {
+ display: block;
+ margin-top: $digi--layout--gutter--l;
+ }
+
+ &__footer {
+ margin-top: $digi--layout--gutter--xl;
+ display: flex;
+ gap: var(--digi--layout--gutter);
+ }
+
+ &__popover {
+ margin-left: var(--digi--layout--gutter);
+
+ ::ng-deep .digi-ng-popover__container {
+ z-index: 1;
+ }
+ }
+}
diff --git a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.spec.ts b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.spec.ts
similarity index 82%
rename from apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.spec.ts
rename to apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.spec.ts
index ded9697..1776ecb 100644
--- a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.component.spec.ts
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.spec.ts
@@ -9,17 +9,17 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { ReactiveFormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
-import { CreateAccountComponent } from './create-account.component';
+import { EmployeeFormComponent } from './employee-form.component';
-describe('CreateAccountComponent', () => {
- let component: CreateAccountComponent;
- let fixture: ComponentFixture;
+describe('EmployeeFormComponent', () => {
+ let component: EmployeeFormComponent;
+ let fixture: ComponentFixture;
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
- declarations: [CreateAccountComponent],
+ declarations: [EmployeeFormComponent],
imports: [
RouterTestingModule,
HttpClientTestingModule,
@@ -36,7 +36,7 @@ describe('CreateAccountComponent', () => {
);
beforeEach(() => {
- fixture = TestBed.createComponent(CreateAccountComponent);
+ fixture = TestBed.createComponent(EmployeeFormComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.ts b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.ts
new file mode 100644
index 0000000..782c034
--- /dev/null
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.component.ts
@@ -0,0 +1,165 @@
+import { FormSelectBaseItem } from '@af/digi-ng/_form/form-select-base';
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
+import { Router } from '@angular/router';
+import { Authorization } from '@dafa-models/authorization.model';
+import { Service } from '@dafa-models/service.model';
+import { AuthorizationService } from '@dafa-services/api/authorizations.service';
+import { EmployeeService } from '@dafa-services/api/employee.service';
+import { ServiceService } from '@dafa-services/api/service.service';
+import { SocialSecurityNumberValidator } from '@dafa-utils/validators/social-security-number.validator';
+import { RequiredValidator } from '@dafa-validators/required.validator';
+import { BehaviorSubject, Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+@Component({
+ selector: 'dafa-employee-form',
+ templateUrl: './employee-form.component.html',
+ styleUrls: ['./employee-form.component.scss'],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class EmployeeFormComponent {
+ services$: Observable = this.serviceService.services$;
+ authorizations$: Observable = this.authorizationService.authorizations$;
+ servicesSelectItems$: Observable = this.services$.pipe(
+ map(services => services.map(({ name, id }) => ({ name, value: id })))
+ );
+ private _pendingServices$ = new BehaviorSubject([]);
+
+ formGroup: FormGroup = this.formBuilder.group({
+ firstName: this.formBuilder.control('', [RequiredValidator('Förnamn')]),
+ lastName: this.formBuilder.control('', [RequiredValidator('Efternamn')]),
+ ssn: this.formBuilder.control('', [RequiredValidator('Personnummer'), SocialSecurityNumberValidator()]),
+ // services: this.formBuilder.control([], [RequiredValidator('en tjänst')]),
+ services: this.formBuilder.control([]),
+ authorizations: this.formBuilder.control([], [RequiredValidator('en behörighet')]),
+ });
+ todaysDate = new Date();
+ submitted = false;
+
+ constructor(
+ private formBuilder: FormBuilder,
+ private employeeService: EmployeeService,
+ private serviceService: ServiceService,
+ private authorizationService: AuthorizationService,
+ private router: Router
+ ) {
+ this.formGroup.valueChanges.subscribe(values => console.log(this.formGroup));
+ }
+
+ get pendingServices(): Service[] {
+ return this._pendingServices$.getValue();
+ }
+
+ get firstNameControl(): AbstractControl {
+ return this.formGroup.get('firstName');
+ }
+ get lastNameControl(): AbstractControl {
+ return this.formGroup.get('lastName');
+ }
+ get ssnControl(): AbstractControl {
+ return this.formGroup.get('ssn');
+ }
+ get servicesControl(): AbstractControl {
+ return this.formGroup.get('services');
+ }
+ get authorizationsControl(): AbstractControl {
+ return this.formGroup.get('authorizations');
+ }
+
+ get formErrors(): { id: string; message: string }[] {
+ const controlsWithErrors = Object.keys(this.formGroup.controls).filter(
+ key => !!this.formGroup.controls[key].errors
+ );
+
+ return controlsWithErrors.map(key => ({
+ id: key,
+ message: this.formGroup.controls[key].errors.message,
+ }));
+ }
+
+ private _markFormAsDirty(): void {
+ Object.keys(this.formGroup.controls).forEach(control => {
+ this.formGroup.get(control).markAsDirty();
+ this.formGroup.get(control).markAsTouched();
+ });
+ }
+
+ toggleAuthorization(authorization: Authorization, checked: boolean): void {
+ const currentAuthorizations = this.authorizationsControl.value;
+
+ if (checked) {
+ this.authorizationsControl.patchValue([...currentAuthorizations, authorization]);
+ } else {
+ this.authorizationsControl.patchValue(
+ currentAuthorizations.filter(currentAuthorization => currentAuthorization.id !== authorization.id)
+ );
+ }
+ }
+
+ togglePendingService(service: Service, checked: boolean): void {
+ const currentPendingServices = this.pendingServices;
+
+ if (checked) {
+ this._pendingServices$.next([...currentPendingServices, service]);
+ } else {
+ this._pendingServices$.next(currentPendingServices.filter(currentService => currentService.id !== service.id));
+ }
+ }
+
+ toggleAllPendingServices(services: Service[], checked: boolean): void {
+ this._pendingServices$.next(checked ? services : []);
+ }
+
+ resetPendingServices(): void {
+ this._pendingServices$.next([]);
+ }
+
+ addPendingServicesToFormControl(): void {
+ this.servicesControl.patchValue(this.pendingServices);
+ }
+
+ removeServiceFromFormControl(id: string): void {
+ const currentAddedServices = this.servicesControl.value;
+
+ this.servicesControl.patchValue(currentAddedServices.filter(currentService => currentService.id !== id));
+ }
+
+ setFocusOnInvalidInput(event: CustomEvent): void {
+ console.log(event.target);
+ }
+
+ resetForm(event: Event): void {
+ event.preventDefault();
+ this.formGroup.reset({
+ firstName: '',
+ lastName: '',
+ ssn: '',
+ services: [],
+ authorizations: [],
+ });
+ // Object.keys(this.formGroup.controls).forEach(controlKey => this.formGroup.controls[controlKey].markAsPristine());
+ }
+
+ submitForm(): void {
+ this.submitted = true;
+ if (this.formGroup.valid) {
+ const submittableValues = {
+ ...this.formGroup.value,
+ };
+ const post = this.employeeService.postNewEmployee(submittableValues).subscribe({
+ next: id => {
+ this.router.navigate(['/administration', 'personal', id]);
+ },
+ complete: () => {
+ post.unsubscribe();
+ },
+ });
+
+ // this.formGroup.reset();
+ } else {
+ console.error('Form is invalid, do something...');
+ this._markFormAsDirty();
+ }
+ }
+}
diff --git a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.module.ts b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.module.ts
similarity index 82%
rename from apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.module.ts
rename to apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.module.ts
index 3fe912e..14bbc12 100644
--- a/apps/dafa-web/src/app/pages/administration/pages/create-account/create-account.module.ts
+++ b/apps/dafa-web/src/app/pages/administration/pages/employee-form/employee-form.module.ts
@@ -1,22 +1,22 @@
+import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker';
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 { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
import { LocalDatePipeModule } from '@dafa-shared/pipes/local-date/local-date.module';
-import { CreateAccountComponent } from './create-account.component';
-import { DigiNgPopoverModule } from '@af/digi-ng/_popover/popover';
-import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
-import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
+import { EmployeeFormComponent } from './employee-form.component';
@NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
- declarations: [CreateAccountComponent],
+ declarations: [EmployeeFormComponent],
imports: [
CommonModule,
- RouterModule.forChild([{ path: '', component: CreateAccountComponent }]),
+ RouterModule.forChild([{ path: '', component: EmployeeFormComponent }]),
ReactiveFormsModule,
LocalDatePipeModule,
DigiNgFormInputModule,
@@ -27,4 +27,4 @@ import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
DigiNgFormCheckboxModule,
],
})
-export class CreateAccountModule {}
+export class EmployeeFormModule {}
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html
index 92651ab..2a9e35e 100644
--- a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html
+++ b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html
@@ -22,23 +22,37 @@
-
- Utförandeverksamhet
+
+ Utförandeverksamheter
+ Redigera
-
+
- {{ employees.fullName }}
+ {{ employee.fullName }}
- {{ employees.services.length ? employees.services.join(', ') : '-' }}
- {{ employees.organization.address.city || '-' }}
+
+
+ {{ service.name }},
+
+
+
+
+ {{ organization.address.city }},
+
+
+
+
+
+
+
diff --git a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts
index 7404aea..27659b0 100644
--- a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts
+++ b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.ts
@@ -17,8 +17,6 @@ export class EmployeesListComponent {
private _currentPage$ = new BehaviorSubject(1);
private _employeesPerPage = 10;
- private _searchValue$ = new BehaviorSubject('');
-
get currentPage(): number {
return this._currentPage$.getValue();
}
diff --git a/apps/dafa-web/src/app/services/api/authorizations.service.ts b/apps/dafa-web/src/app/services/api/authorizations.service.ts
new file mode 100644
index 0000000..0db6ed8
--- /dev/null
+++ b/apps/dafa-web/src/app/services/api/authorizations.service.ts
@@ -0,0 +1,24 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { environment } from '@dafa-environment';
+import {
+ Authorization,
+ AuthorizationApiResponse,
+ mapAuthorizationApiResponseToAuthorization,
+} from '@dafa-models/authorization.model';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+const API_HEADERS = { headers: environment.api.headers };
+
+@Injectable({
+ providedIn: 'root',
+})
+export class AuthorizationService {
+ private _authorizationsApiUrl = `${environment.api.url}/authorizations`;
+ public authorizations$: Observable = this.httpClient
+ .get(this._authorizationsApiUrl, API_HEADERS)
+ .pipe(map(response => response.map(authorization => mapAuthorizationApiResponseToAuthorization(authorization))));
+
+ constructor(private httpClient: HttpClient) {}
+}
diff --git a/apps/dafa-web/src/app/services/api/employee.service.ts b/apps/dafa-web/src/app/services/api/employee.service.ts
index 1748091..36b0ff2 100644
--- a/apps/dafa-web/src/app/services/api/employee.service.ts
+++ b/apps/dafa-web/src/app/services/api/employee.service.ts
@@ -70,6 +70,8 @@ export class EmployeeService {
}
public postNewEmployee(employeeData: Employee): Observable {
+ console.log(employeeData);
+ return;
return this.httpClient
.post(
this._employeeApiUrl,
diff --git a/apps/dafa-web/src/app/services/api/service.service.ts b/apps/dafa-web/src/app/services/api/service.service.ts
new file mode 100644
index 0000000..f99b59d
--- /dev/null
+++ b/apps/dafa-web/src/app/services/api/service.service.ts
@@ -0,0 +1,20 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { environment } from '@dafa-environment';
+import { mapServiceApiResponseToService, Service, ServiceApiResponse } from '@dafa-models/service.model';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+const API_HEADERS = { headers: environment.api.headers };
+
+@Injectable({
+ providedIn: 'root',
+})
+export class ServiceService {
+ private _servicesApiUrl = `${environment.api.url}/services`;
+ public services$: Observable = this.httpClient
+ .get(this._servicesApiUrl, API_HEADERS)
+ .pipe(map(response => response.map(service => mapServiceApiResponseToService(service))));
+
+ constructor(private httpClient: HttpClient) {}
+}
diff --git a/apps/dafa-web/src/app/utils/validators/required.validator.ts b/apps/dafa-web/src/app/utils/validators/required.validator.ts
index 18954ca..88ab562 100644
--- a/apps/dafa-web/src/app/utils/validators/required.validator.ts
+++ b/apps/dafa-web/src/app/utils/validators/required.validator.ts
@@ -3,8 +3,14 @@ import { ValidationError } from '@dafa-models/validation-error.model';
export function RequiredValidator(label = 'Fältet'): ValidatorFn {
return (control: AbstractControl): ValidationError => {
- if (control && !control.value) {
- return { type: 'required', message: `${label} är obligatoriskt` };
+ if (control) {
+ if (!control.value) {
+ return { type: 'required', message: `${label} är obligatoriskt` };
+ }
+
+ if (Array.isArray(control.value) && !control.value.length) {
+ return { type: 'required', message: `Minst ${label} behöver väljas` };
+ }
}
return null;
diff --git a/apps/dafa-web/src/assets/logo/arbetsformedlingen-light.svg b/apps/dafa-web/src/assets/logo/arbetsformedlingen-light.svg
new file mode 100644
index 0000000..bbf2058
--- /dev/null
+++ b/apps/dafa-web/src/assets/logo/arbetsformedlingen-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/dafa-web/src/environments/environment.pega.ts b/apps/dafa-web/src/environments/environment.pega.ts
index 5cb0a02..099a393 100644
--- a/apps/dafa-web/src/environments/environment.pega.ts
+++ b/apps/dafa-web/src/environments/environment.pega.ts
@@ -3,6 +3,7 @@ export const environment = {
api: {
meet: 'https://dafa-utv.tocp.arbetsformedlingen.se/prweb/api/meettest/v1',
default: 'https://dafa-utv.tocp.arbetsformedlingen.se/prweb/api/v1/data',
+ url: '/api',
headers: {
Authorization: 'Basic dGVzdHVzZXIxOmRhZmFAMTIz', // user: testuser1, password: dafa@123
},
diff --git a/apps/dafa-web/src/styles/styles.scss b/apps/dafa-web/src/styles/styles.scss
index 1c35aab..9150fdd 100644
--- a/apps/dafa-web/src/styles/styles.scss
+++ b/apps/dafa-web/src/styles/styles.scss
@@ -15,7 +15,6 @@
body {
margin: 0;
font-weight: var(--digi--typography--font-weight);
- overflow: hidden;
}
button {
diff --git a/mock-api/dafa-web/scripts/authorizations.js b/mock-api/dafa-web/scripts/authorizations.js
new file mode 100644
index 0000000..c59f8c2
--- /dev/null
+++ b/mock-api/dafa-web/scripts/authorizations.js
@@ -0,0 +1,28 @@
+import faker from 'faker';
+
+faker.locale = 'sv';
+
+function generateAuthorizations() {
+ return [
+ {
+ id: faker.datatype.uuid(),
+ name: 'Hantera behörigheter',
+ },
+ {
+ id: faker.datatype.uuid(),
+ name: 'Hantera användare',
+ },
+ {
+ id: faker.datatype.uuid(),
+ name: 'Hantera organisation',
+ },
+ {
+ id: faker.datatype.uuid(),
+ name: 'Hantera ekonomi',
+ },
+ ];
+}
+
+export default {
+ generate: generateAuthorizations,
+};
diff --git a/mock-api/dafa-web/scripts/current-user.js b/mock-api/dafa-web/scripts/current-user.js
index dd9678b..f85f3ac 100644
--- a/mock-api/dafa-web/scripts/current-user.js
+++ b/mock-api/dafa-web/scripts/current-user.js
@@ -16,9 +16,7 @@ function generateCurrentUser() {
min: 1000,
max: 9999,
})}`,
- phone: `07${faker.datatype.number(9)}-${faker.datatype.number({ min: 1000000, max: 9999999 })}`,
- email: faker.internet.email(),
- organization: ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)],
+ organizations: [ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)]],
authorizations: chooseRandom(AUTHORIZATIONS, faker.datatype.number(3)),
};
}
diff --git a/mock-api/dafa-web/scripts/employees.js b/mock-api/dafa-web/scripts/employees.js
index 24e1850..9ad31c0 100644
--- a/mock-api/dafa-web/scripts/employees.js
+++ b/mock-api/dafa-web/scripts/employees.js
@@ -1,17 +1,12 @@
import faker from 'faker';
-import kommuner from './kommuner.js';
-import languages from './languages.js';
+import authorizations from './authorizations.js';
import organizations from './organizations.js';
import services from './services.js';
faker.locale = 'sv';
const SERVICES = services.generate();
-const KOMMUN = kommuner.generate();
const ORGANIZATIONS = organizations.generate();
-const STATUSES = [true, false];
-const LANGUAGES = languages.generate();
-const AUTHORIZATIONS = ['Hantera användare', 'Hantera origisation', 'Hantera ekonomi'];
function generateEmployees(amount = 10) {
const employees = [];
@@ -27,24 +22,9 @@ function generateEmployees(amount = 10) {
max: 9999,
}
)}`,
- phone: `07${faker.datatype.number(9)}-${faker.datatype.number({ min: 1000000, max: 9999999 })}`,
- email: faker.internet.email(),
- organization: ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)],
- services: [SERVICES[Math.floor(Math.random() * SERVICES.length)].name],
- authorizations: AUTHORIZATIONS,
- // active: STATUSES[Math.floor(Math.random() * STATUSES.length)],
- // languages: [
- // LANGUAGES.find(language => language.name === 'Svenska'),
- // ...chooseRandom(LANGUAGES, faker.datatype.number(3)),
- // ],
- // outOfOffice: STATUSES[Math.floor(Math.random() * STATUSES.length)]
- // ? [
- // {
- // start: new Date('2021-07-12'),
- // end: new Date('2021-07-24'),
- // },
- // ]
- // : [],
+ organizations: [ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)]],
+ services: [SERVICES[Math.floor(Math.random() * SERVICES.length)]],
+ authorizations: authorizations.generate(),
};
employees.push(person);
diff --git a/mock-api/dafa-web/scripts/generate-api.js b/mock-api/dafa-web/scripts/generate-api.js
index 63cea54..0382d0a 100644
--- a/mock-api/dafa-web/scripts/generate-api.js
+++ b/mock-api/dafa-web/scripts/generate-api.js
@@ -1,4 +1,5 @@
import fs from 'fs';
+import authorizations from './authorizations.js';
import currentUser from './current-user.js';
import employees from './employees.js';
import kommuner from './kommuner.js';
@@ -20,6 +21,7 @@ const apiData = {
employeeId: generatedEmployees[Math.floor(Math.random() * generatedEmployees.length)].id,
})),
currentUser: currentUser.generate(),
+ authorizations: authorizations.generate(),
};
fs.writeFileSync('api.json', JSON.stringify(apiData, null, '\t'));
diff --git a/mock-api/dafa-web/scripts/services.js b/mock-api/dafa-web/scripts/services.js
index c03fe2e..bc656a6 100644
--- a/mock-api/dafa-web/scripts/services.js
+++ b/mock-api/dafa-web/scripts/services.js
@@ -1,23 +1,27 @@
+import faker from 'faker';
+
+faker.locale = 'sv';
+
function generateServices() {
const services = [
{
- id: 1,
+ id: faker.datatype.uuid(),
name: 'KROM',
},
{
- id: 2,
+ id: faker.datatype.uuid(),
name: 'KVL',
},
// {
- // id: 3,
+ // id: faker.datatype.uuid(),
// name: 'STOM',
// },
// {
- // id: 4,
+ // id: faker.datatype.uuid(),
// name: 'YSM',
// },
// {
- // id: 5,
+ // id: faker.datatype.uuid(),
// name: 'AUB',
// },
];