diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare-routing.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare-routing.module.ts index 756295f..2dbc756 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare-routing.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare-routing.module.ts @@ -16,13 +16,16 @@ const routes: Routes = [ path: 'rapportera/:deltagareId', data: { title: 'Skapa rapport' }, // eslint-disable-next-line max-len - loadChildren: () => import('./pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.module').then(m => m.DeltagareAvvikelseModule), + loadChildren: () => + import('./pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.module').then( + m => m.DeltagareAvvikelseModule + ), }, { path: 'planering/:deltagareId', data: { title: 'Skapa gemensam planering' }, loadChildren: () => - import('./pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.module').then( + import('./pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.module').then( m => m.DeltagareGemensamPlaneringModule ), }, @@ -40,4 +43,4 @@ const routes: Routes = [ imports: [RouterModule.forChild(routes)], exports: [RouterModule], }) -export class DeltagareRoutingModule { } +export class DeltagareRoutingModule {} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html deleted file mode 100644 index dcc7423..0000000 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html +++ /dev/null @@ -1,3 +0,0 @@ - - deltagare-gemensam-planering works! - diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.scss b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts deleted file mode 100644 index 39984b1..0000000 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; - -@Component({ - selector: 'msfa-deltagare-gemensam-planering', - templateUrl: './deltagare-gemensam-planering.component.html', - styleUrls: ['./deltagare-gemensam-planering.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class DeltagareGemensamPlaneringComponent {} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/report-alternatives.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/report-alternatives.ts index 3da09b6..9d45ec4 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/report-alternatives.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-avvikelse/report-alternatives.ts @@ -1,24 +1,25 @@ -import { Alternative } from '@msfa-enums/alternative.enum' -import { DayOrPartOfDay } from '@msfa-enums/day-or-part-of-day.enum' -import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group' +import { Alternative } from '@msfa-enums/alternative.enum'; +import { DayOrPartOfDay } from '@msfa-enums/day-or-part-of-day.enum'; +import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group'; export const avvikelseAlternatives: RadiobuttonModel[] = [ { label: 'Frånvaro', - value: Alternative.FRANVARO + value: Alternative.FRANVARO, }, { label: 'Avvikelse', - value: Alternative.AVVIKELSE - } -] + value: Alternative.AVVIKELSE, + }, +]; -export const dayOrPartOfDay: RadiobuttonModel[] = [{ - label: 'Heldag', - value: DayOrPartOfDay.HELDAG -}, -{ - label: 'Del av dag', - value: DayOrPartOfDay.DEL_AV_DAG -} -] +export const dayOrPartOfDay: RadiobuttonModel[] = [ + { + label: 'Heldag', + value: DayOrPartOfDay.HELDAG, + }, + { + label: 'Del av dag', + value: DayOrPartOfDay.DEL_AV_DAG, + }, +]; diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html new file mode 100644 index 0000000..46c06e4 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.html @@ -0,0 +1,43 @@ + + + + + Deltar arbetssökande på distans? + + + Förhandsgranska + + 1"> + + Tillbaka + + + + Förhandsgranska + + + Skicka in + + + + + diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.scss b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.scss new file mode 100644 index 0000000..dfc3b1d --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.scss @@ -0,0 +1,8 @@ +.gemensam-planering { + &__pages { + margin: 5rem 0rem; + } + &__step-buttons-wrapper--space-right { + margin-right: 1rem; + } +} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts similarity index 76% rename from apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts rename to apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts index 510ef80..4c39341 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.spec.ts @@ -4,6 +4,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { LayoutComponent } from '@msfa-shared/components/layout/layout.component'; import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planering.component'; +import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group'; +import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox'; describe('DeltagareGemensamPlaneringComponent', () => { let component: DeltagareGemensamPlaneringComponent; @@ -13,7 +15,12 @@ describe('DeltagareGemensamPlaneringComponent', () => { await TestBed.configureTestingModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [DeltagareGemensamPlaneringComponent, LayoutComponent], - imports: [RouterTestingModule, HttpClientTestingModule], + imports: [ + RouterTestingModule, + HttpClientTestingModule, + DigiNgFormRadiobuttonGroupModule, + DigiNgFormCheckboxModule, + ], }).compileComponents(); }); diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts new file mode 100644 index 0000000..648f6eb --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.component.ts @@ -0,0 +1,63 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { RadiobuttonGroupDirection, RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group'; +import { AbstractControl, FormArray, FormControl, FormControlName, FormGroup } from '@angular/forms'; +import { RequiredValidator } from '@msfa-utils/validators/required.validator'; +import { GemensamPlaneringService } from '../../services/gemensam-planering.service'; + +@Component({ + selector: 'msfa-deltagare-gemensam-planering', + templateUrl: './deltagare-gemensam-planering.component.html', + styleUrls: ['./deltagare-gemensam-planering.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DeltagareGemensamPlaneringComponent implements OnInit { + totalAmountOfSteps = 2; + currentStep = 1; + direction = RadiobuttonGroupDirection.HORIZONTAL; + planeringFormGroup: FormGroup | null = null; + + readonly participatedOnDistansFormControlName = 'participatedOnDistans'; + distanceChoice: RadiobuttonModel[] = [ + { + label: 'Ja', + value: 'Ja', + }, + { + label: 'Nej', + value: 'Nej', + }, + ]; + + constructor(private gemensamPlaneringService: GemensamPlaneringService) {} + + ngOnInit(): void { + this.planeringFormGroup = new FormGroup({ + participatedOnDistans: new FormControl('', [RequiredValidator()]), + }); + } + + nextStep(): void { + if (this.planeringFormGroup?.valid && this.currentStep < this.totalAmountOfSteps) { + console.log(this.participatedOnDistansFormControl.value); + this.currentStep++; + console.log(this.currentStep); + } + } + + previousStep(): void { + if (this.currentStep > 1) { + this.currentStep--; + console.log(this.currentStep); + } + } + + sendRequest(val: boolean): boolean { + return val; + } + + get participatedOnDistansFormControl(): AbstractControl | undefined { + return this.planeringFormGroup?.get(this.participatedOnDistansFormControlName); + } + + onFormSubmitted(): void {} +} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts similarity index 55% rename from apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts rename to apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts index 3f900ca..e7635e5 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.module.ts @@ -3,6 +3,11 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planering.component'; +import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar'; +import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group'; +import { ReactiveFormsModule } from '@angular/forms'; +import { ReportLayoutModule } from '../../../../shared/report-layout/report-layout.module'; +import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox'; @NgModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], @@ -11,6 +16,11 @@ import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planer CommonModule, RouterModule.forChild([{ path: '', component: DeltagareGemensamPlaneringComponent }]), LayoutModule, + DigiNgProgressProgressbarModule, + DigiNgFormRadiobuttonGroupModule, + ReactiveFormsModule, + ReportLayoutModule, + DigiNgFormCheckboxModule, ], exports: [DeltagareGemensamPlaneringComponent], }) diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/gemensam-planering.service.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/gemensam-planering.service.ts new file mode 100644 index 0000000..7540ff2 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/services/gemensam-planering.service.ts @@ -0,0 +1,20 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from '@msfa-environment'; +import { Activity, ActivityResponse, mapResponseToActivity } from '@msfa-models/activity.model'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root', +}) +export class GemensamPlaneringService { + private _apiBaseUrl = `${environment.api.url}`; + public getActivities$(): Observable { + return this.httpClient.get<{ data: ActivityResponse[] }>(`${this._apiBaseUrl}/activities`).pipe( + filter(response => !!response?.data), + map(({ data }) => data.map(aktivitet => mapResponseToActivity(aktivitet))) + ); + } + constructor(private httpClient: HttpClient) {} +} diff --git a/apps/mina-sidor-fa/src/app/shared/models/activity.model.ts b/apps/mina-sidor-fa/src/app/shared/models/activity.model.ts index 4fac65f..9883365 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/activity.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/activity.model.ts @@ -1,23 +1,26 @@ -import { ActivityResponse } from './api/activity-response.model'; - export interface Activity { - id: string; - name: string; + activityId: number; + activityName: string; description?: string; + subActivities: SubActivity[]; } - export interface SubActivity { - subId: string; - subName: string; - subDescription: string; + id: number; + subActivityName: string; + subActivityDescription: string; +} +export interface ActivityResponse { + id: number; + activityName: string; + description?: string; + subActivities: SubActivity[]; } - export function mapResponseToActivity(data: ActivityResponse): Activity { - const { aktivitets_id, aktivitets_namn } = data; - + const { id, activityName, description, subActivities } = data; return { - id: aktivitets_id, - name: aktivitets_namn - } - + activityId: id, + activityName, + description, + subActivities, + }; } diff --git a/apps/mina-sidor-fa/src/app/shared/models/gemensam-planering.model.ts b/apps/mina-sidor-fa/src/app/shared/models/gemensam-planering.model.ts new file mode 100644 index 0000000..2d460e6 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/models/gemensam-planering.model.ts @@ -0,0 +1,11 @@ +export interface Activity { + activityId: string; + name: string; + description: string; +} + +export interface SubActivity { + subActivityId: string; + name: string; + description: string; +} diff --git a/mock-api/mina-sidor-fa/scripts/activities.js b/mock-api/mina-sidor-fa/scripts/activities.js new file mode 100644 index 0000000..4633a87 --- /dev/null +++ b/mock-api/mina-sidor-fa/scripts/activities.js @@ -0,0 +1,155 @@ +function generateActivities() { + const activities = [ + { + id: 24, + activityName: 'Motiverande samtal', + description: 'test', + subActivities: [], + }, + { + id: 156, + activityName: 'Hälsofrämjande åtgärder', + description: 'test', + subActivities: [], + }, + { + id: 157, + activityName: 'Information', + description: 'test', + subActivities: [], + }, + { + id: 158, + activityName: 'Insats hos annan aktör', + description: 'test', + subActivities: [], + }, + { + id: 159, + activityName: 'Kontakter med arbetsgivare eller andra relevanta aktörer', + description: 'test', + subActivities: [], + }, + { + id: 160, + activityName: 'Kortare utbildning', + description: 'test', + subActivities: [], + }, + { + id: 161, + activityName: 'Vägledning mot arbete eller utbildning', + description: 'test', + subActivities: [], + }, + { + id: 162, + activityName: 'Praktiskt stöd', + description: 'test', + subActivities: [ + { + id: 321, + subActivityName: 'Hitta och söka jobb', + description: '', + }, + { + id: 341, + subActivityName: 'Söka utbildning', + description: '', + }, + { + id: 351, + subActivityName: 'Utforma ansökningar, träning inför intervjuer och arbetsgivarkontakter, uppföljning', + description: '', + }, + ], + }, + { + id: 163, + activityName: 'Stöd för att stärka deltagarens digitala kompetens', + description: 'test', + subActivities: [], + }, + { + id: 164, + activityName: 'Stöd för att stärka deltagarens språkkunskaper', + description: 'test', + subActivities: [], + }, + { + id: 165, + activityName: 'Individuellt utvecklingsmöte', + description: 'test', + subActivities: [], + }, + { + id: 188, + activityName: 'Eget arbete enligt individuell planering med anordnare', + description: 'test', + subActivities: [ + { + id: 21, + subActivityName: 'Skriva ansökningshandlingar', + description: 'Skapa CV och dylikt', + }, + { + id: 22, + subActivityName: 'Kontakta referenter', + description: 'Be om underlag om styrkor och utvecklingsområden', + }, + { + id: 23, + subActivityName: 'Skriva en egen handlingsplan', + description: + 'Deltagaren tar fram förslag på aktiviteter att göra på \ + egen hand för att föra personen närmare arbetsmarknaden', + }, + { + id: 231, + subActivityName: 'Ta fram en egen målbild', + description: 'Beskriv konkret var personen ser sig om ett år', + }, + { + id: 25, + subActivityName: 'Läsa på om arbetsgivares verksamhet', + description: 'Sker inför besök/ praktik/ jobb', + }, + { + id: 26, + subActivityName: 'Titta på yrkesfilmer', + description: 'För att förstå mer om vissa yrken', + }, + { + id: 27, + subActivityName: 'Undersöka krav för olika yrken', + description: 'Exempelvis utbildning', + }, + { + id: 28, + subActivityName: 'Delta på externa jobbmässor och rekryteringsträffar', + description: 'Deltagare får större möjligheter att utöka sitt nätverk', + }, + { + id: 29, + subActivityName: 'Delta i webbinarier med arbetssökarfokus', + description: 'Exempelvis intervjuträning, marknadsför dig själv', + }, + { + id: 30, + subActivityName: 'Kontakta arbetsgivare / utbildningsanordnare', + description: 'Deltagare tar eget initiativ', + }, + { + id: 241, + subActivityName: 'Kontakta CSN', + description: 'Och diverse myndigheter', + }, + ], + }, + ]; + console.log('Activities generated...'); + return activities; +} +export default { + generate: generateActivities, +}; diff --git a/mock-api/mina-sidor-fa/scripts/generate-api.js b/mock-api/mina-sidor-fa/scripts/generate-api.js index 3913356..cb856f2 100644 --- a/mock-api/mina-sidor-fa/scripts/generate-api.js +++ b/mock-api/mina-sidor-fa/scripts/generate-api.js @@ -16,10 +16,12 @@ import orsaksKoderFranvaro from './avvikelse-alternative/orsaks-koder-franvaro.j import orsaksKoderAvvikelse from './avvikelse-alternative/orsaks-koder-avvikelse.js'; import kandaAvvikelseKoder from './avvikelse-alternative/kanda-avvikelse-koder.js'; import fragorForAvvikelser from './avvikelse-alternative/fragor-for-avvikelser.js'; +import activities from './activities.js'; const ORGANIZATIONS = organizations.generate(); const AUTHORIZATIONS = ['Hantera användare', 'Hantera origisation', 'Hantera ekonomi']; +const generatedActivities = activities.generate(); const generatedEmployees = employees.generate(50); const generatedDeltagare = deltagare.generate(50); const generatedDeltagareHandelser = deltagareHandelser.generate(10); @@ -129,6 +131,7 @@ const apiData = { kandaavvikelsekoder: generateKandaAvvikelseKoder, fragorforavvikelser: generateFragorForAvvikelser, minaDeltagare: chooseRandom(generatedAvrop, 3), + activities: generatedActivities, }; fs.writeFileSync('api.json', JSON.stringify(apiData, null, '\t'));
deltagare-gemensam-planering works!