feat(ui): Added radiobutton-group to ui-libs. (TV-854)
Squashed commit of the following: commit 04465cb065382fa481a0b257e5f9190b5dcb1c4d Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Nov 4 15:21:21 2021 +0100 Updated components to use radiobutton-group from ui-libs commit 5aa465c04ce01659dfb4f339970ed821c4431f5a Merge: a2f347bd28d128c1Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Nov 4 10:10:07 2021 +0100 Merge branch 'develop' into feature/TV-854-radiobutton-group commit a2f347bdb03411014819a48a935899c7bcffaca0 Merge: b326e0bb5c12b2b7Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Nov 4 08:35:44 2021 +0100 Merge branch 'develop' into feature/TV-854-radiobutton-group commit b326e0bbd843c43cc18661b53e06a214cb7259c8 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Thu Nov 4 08:01:38 2021 +0100 WIP
This commit is contained in:
@@ -127,11 +127,13 @@
|
|||||||
af-name="wholeDay"
|
af-name="wholeDay"
|
||||||
af-form="franvaro-report-form"
|
af-form="franvaro-report-form"
|
||||||
>
|
>
|
||||||
<digi-ng-form-radiobutton-group
|
<ui-radiobutton-group
|
||||||
[afRadiobuttons]="wholeDayOrPartOfDayRadiobuttons"
|
formControlName="wholeDay"
|
||||||
[afRequired]="true"
|
[uiRadiobuttons]="wholeDayOrPartOfDayRadiobuttons"
|
||||||
[formControl]="wholeDayFormControl"
|
[uiBooleanValues]="true"
|
||||||
></digi-ng-form-radiobutton-group>
|
[uiRequired]="true"
|
||||||
|
[uiAnnounceIfOptional]="true"
|
||||||
|
></ui-radiobutton-group>
|
||||||
</digi-form-fieldset>
|
</digi-form-fieldset>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group';
|
|
||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { FormControl, FormGroup } from '@angular/forms';
|
import { FormControl, FormGroup } from '@angular/forms';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
@@ -9,6 +8,7 @@ import { CustomError } from '@msfa-models/error/custom-error';
|
|||||||
import { FranvaroReason } from '@msfa-models/franvaro-reason.model';
|
import { FranvaroReason } from '@msfa-models/franvaro-reason.model';
|
||||||
import { Franvaro } from '@msfa-models/franvaro.model';
|
import { Franvaro } from '@msfa-models/franvaro.model';
|
||||||
import { formatDate } from '@msfa-utils/format-to-date.util';
|
import { formatDate } from '@msfa-utils/format-to-date.util';
|
||||||
|
import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model';
|
||||||
import { addDays } from 'date-fns';
|
import { addDays } from 'date-fns';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
||||||
@@ -52,14 +52,12 @@ export class FranvaroReportFormComponent {
|
|||||||
reasons$: Observable<FranvaroReason[]> = this.franvaroReportFormService.reasons$;
|
reasons$: Observable<FranvaroReason[]> = this.franvaroReportFormService.reasons$;
|
||||||
otherKnownReasons$: Observable<FranvaroReason[]> = this.franvaroReportFormService.otherKnownReasons$;
|
otherKnownReasons$: Observable<FranvaroReason[]> = this.franvaroReportFormService.otherKnownReasons$;
|
||||||
|
|
||||||
wholeDayOrPartOfDayRadiobuttons: RadiobuttonModel[] = [
|
wholeDayOrPartOfDayRadiobuttons: Radiobutton[] = [
|
||||||
{ label: 'Heldag', value: true },
|
{ label: 'Heldag', value: true },
|
||||||
{ label: 'Del av dag', value: false },
|
{ label: 'Del av dag', value: false },
|
||||||
];
|
];
|
||||||
|
|
||||||
constructor(private franvaroReportFormService: FranvaroReportFormService, private activatedRoute: ActivatedRoute) {
|
constructor(private franvaroReportFormService: FranvaroReportFormService, private activatedRoute: ActivatedRoute) {}
|
||||||
this.dateFormControl.valueChanges.subscribe(value => console.log(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
get showOtherKnownReasonsSelect(): boolean {
|
get showOtherKnownReasonsSelect(): boolean {
|
||||||
return this.reasonFormControl.value === ANNAN_KAND_ORSAK_ID;
|
return this.reasonFormControl.value === ANNAN_KAND_ORSAK_ID;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
||||||
import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker';
|
import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker';
|
||||||
import { DigiNgFormInputModule } from '@af/digi-ng/_form/form-input';
|
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 { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
||||||
import { DigiNgFormValidationMessageModule } from '@af/digi-ng/_form/form-validation-message';
|
import { DigiNgFormValidationMessageModule } from '@af/digi-ng/_form/form-validation-message';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
@@ -11,6 +10,7 @@ import { RouterModule } from '@angular/router';
|
|||||||
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
|
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
import { UiTextareaModule } from '@ui/textarea/textarea.module';
|
import { UiTextareaModule } from '@ui/textarea/textarea.module';
|
||||||
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
||||||
@@ -32,12 +32,12 @@ import { FranvaroReportFormService } from './franvaro-report-form.service';
|
|||||||
ReportDescriptionListModule,
|
ReportDescriptionListModule,
|
||||||
DigiNgFormSelectModule,
|
DigiNgFormSelectModule,
|
||||||
DigiNgFormDatepickerModule,
|
DigiNgFormDatepickerModule,
|
||||||
DigiNgFormRadiobuttonGroupModule,
|
|
||||||
UiSkeletonModule,
|
UiSkeletonModule,
|
||||||
DigiNgFormInputModule,
|
DigiNgFormInputModule,
|
||||||
DigiNgFormValidationMessageModule,
|
DigiNgFormValidationMessageModule,
|
||||||
DigiNgDialogModule,
|
DigiNgDialogModule,
|
||||||
UiTextareaModule,
|
UiTextareaModule,
|
||||||
|
UiRadiobuttonGroupModule,
|
||||||
],
|
],
|
||||||
providers: [FranvaroReportFormService],
|
providers: [FranvaroReportFormService],
|
||||||
exports: [FranvaroReportFormComponent],
|
exports: [FranvaroReportFormComponent],
|
||||||
|
|||||||
@@ -46,12 +46,14 @@
|
|||||||
af-name="distance"
|
af-name="distance"
|
||||||
af-form="gemensam-planering-form-form"
|
af-form="gemensam-planering-form-form"
|
||||||
>
|
>
|
||||||
<digi-ng-form-radiobutton-group
|
<ui-radiobutton-group
|
||||||
[afRadiobuttons]="distanceRadiobuttons"
|
|
||||||
formControlName="distance"
|
formControlName="distance"
|
||||||
[afRequired]="true"
|
[uiBooleanValues]="true"
|
||||||
[afRadiobuttonGroupDirection]="RadiobuttonGroupDirection.HORIZONTAL"
|
[uiRequired]="true"
|
||||||
></digi-ng-form-radiobutton-group>
|
[uiAnnounceIfOptional]="true"
|
||||||
|
[uiRadiobuttons]="distanceRadiobuttons"
|
||||||
|
uiDirection="horizontal"
|
||||||
|
></ui-radiobutton-group>
|
||||||
</digi-form-fieldset>
|
</digi-form-fieldset>
|
||||||
<digi-form-fieldset af-legend="Aktiviteter" af-name="aktivitetsIds" af-form="gemensam-planering-form-form">
|
<digi-form-fieldset af-legend="Aktiviteter" af-name="aktivitetsIds" af-form="gemensam-planering-form-form">
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { RadiobuttonGroupDirection, RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group';
|
import { RadiobuttonGroupDirection } from '@af/digi-ng/_form/form-radiobutton-group';
|
||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
GemensamPlanering,
|
GemensamPlanering,
|
||||||
mapGemensamPlaneringToGemensamPlaneringPostRequest,
|
mapGemensamPlaneringToGemensamPlaneringPostRequest,
|
||||||
} from '@msfa-models/gemensam-planering.model';
|
} from '@msfa-models/gemensam-planering.model';
|
||||||
|
import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model';
|
||||||
import { addDays } from 'date-fns';
|
import { addDays } from 'date-fns';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
||||||
@@ -48,7 +49,7 @@ export class GemensamPlaneringFormComponent {
|
|||||||
[GemensamPlaneringFormValidator.isGemensamPlaneringValid(this.obligatoryActivityIds)]
|
[GemensamPlaneringFormValidator.isGemensamPlaneringValid(this.obligatoryActivityIds)]
|
||||||
);
|
);
|
||||||
|
|
||||||
distanceRadiobuttons: RadiobuttonModel[] = [
|
distanceRadiobuttons: Radiobutton[] = [
|
||||||
{ label: 'Ja', value: true },
|
{ label: 'Ja', value: true },
|
||||||
{ label: 'Nej', value: false },
|
{ label: 'Nej', value: false },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
||||||
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
|
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
|
||||||
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
|
|
||||||
import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar';
|
import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
@@ -9,6 +8,7 @@ import { RouterModule } from '@angular/router';
|
|||||||
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
|
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
||||||
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
||||||
@@ -23,7 +23,7 @@ import { GemensamPlaneringFormService } from './gemensam-planering-form.service'
|
|||||||
RouterModule.forChild([{ path: '', component: GemensamPlaneringFormComponent }]),
|
RouterModule.forChild([{ path: '', component: GemensamPlaneringFormComponent }]),
|
||||||
LayoutModule,
|
LayoutModule,
|
||||||
DigiNgProgressProgressbarModule,
|
DigiNgProgressProgressbarModule,
|
||||||
DigiNgFormRadiobuttonGroupModule,
|
UiRadiobuttonGroupModule,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
ReportLayoutModule,
|
ReportLayoutModule,
|
||||||
BackLinkModule,
|
BackLinkModule,
|
||||||
|
|||||||
@@ -51,23 +51,17 @@
|
|||||||
af-name="languageSupport"
|
af-name="languageSupport"
|
||||||
af-form="periodisk-redovisning-form"
|
af-form="periodisk-redovisning-form"
|
||||||
>
|
>
|
||||||
<digi-ng-form-radiobutton-group
|
<ui-radiobutton-group
|
||||||
[afRadiobuttonGroupDirection]="radiobuttonGroupDirection.HORIZONTAL"
|
formControlName="hasOfferedLanguageSupport"
|
||||||
[afRadiobuttons]="[{label:'Ja', value: true}, {label:'Nej', value: false}]"
|
[uiBooleanValues]="true"
|
||||||
[formControl]="hasOfferedLanguageSupportFormControl"
|
[uiRequired]="true"
|
||||||
[afRequired]="true"
|
[uiAnnounceIfOptional]="true"
|
||||||
class="periodisk-redovisning-form__radio-buttons"
|
[uiRadiobuttons]="yesNoRadiobuttons"
|
||||||
[ngClass]="{'periodisk-redovisning-form__radio-buttons--invalid': formControlIsInvalid(hasOfferedLanguageSupportFormControl)}"
|
[uiInvalid]="formControlIsInvalid(hasOfferedLanguageSupportFormControl)"
|
||||||
></digi-ng-form-radiobutton-group>
|
uiValidationMessage="Ett val är obligatoriskt"
|
||||||
|
uiDirection="horizontal"
|
||||||
|
></ui-radiobutton-group>
|
||||||
</digi-form-fieldset>
|
</digi-form-fieldset>
|
||||||
<div aria-atomic="true" role="alert">
|
|
||||||
<digi-form-validation-message
|
|
||||||
*ngIf="formControlIsInvalid(hasOfferedLanguageSupportFormControl)"
|
|
||||||
af-variation="error"
|
|
||||||
>
|
|
||||||
Ett val är obligatoriskt
|
|
||||||
</digi-form-validation-message>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@@ -76,22 +70,17 @@
|
|||||||
af-name="jobOffered"
|
af-name="jobOffered"
|
||||||
af-form="periodisk-redovisning-form"
|
af-form="periodisk-redovisning-form"
|
||||||
>
|
>
|
||||||
<digi-ng-form-radiobutton-group
|
<ui-radiobutton-group
|
||||||
[afRadiobuttonGroupDirection]="radiobuttonGroupDirection.HORIZONTAL"
|
formControlName="hasOfferedJob"
|
||||||
[afRadiobuttons]="[{label:'Ja', value: true}, {label:'Nej', value: false}]"
|
[uiBooleanValues]="true"
|
||||||
[formControl]="hasOfferedJobFormControl"
|
[uiRequired]="true"
|
||||||
class="periodisk-redovisning-form__radio-buttons"
|
[uiAnnounceIfOptional]="true"
|
||||||
[ngClass]="{'periodisk-redovisning-form__radio-buttons--invalid': formControlIsInvalid(hasOfferedJobFormControl)}"
|
[uiRadiobuttons]="yesNoRadiobuttons"
|
||||||
></digi-ng-form-radiobutton-group>
|
[uiInvalid]="formControlIsInvalid(hasOfferedJobFormControl)"
|
||||||
|
uiValidationMessage="Ett val är obligatoriskt"
|
||||||
|
uiDirection="horizontal"
|
||||||
|
></ui-radiobutton-group>
|
||||||
</digi-form-fieldset>
|
</digi-form-fieldset>
|
||||||
<div aria-atomic="true" role="alert">
|
|
||||||
<digi-form-validation-message
|
|
||||||
*ngIf="formControlIsInvalid(hasOfferedJobFormControl)"
|
|
||||||
af-variation="error"
|
|
||||||
>
|
|
||||||
Ett val är obligatoriskt
|
|
||||||
</digi-form-validation-message>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { CustomError } from '@msfa-models/error/custom-error';
|
|||||||
import { capitalizeWords } from '@msfa-utils/capitalize-words.util';
|
import { capitalizeWords } from '@msfa-utils/capitalize-words.util';
|
||||||
import { formatDate, formatToDate } from '@msfa-utils/format-to-date.util';
|
import { formatDate, formatToDate } from '@msfa-utils/format-to-date.util';
|
||||||
import { RequiredValidator } from '@msfa-validators/required.validator';
|
import { RequiredValidator } from '@msfa-validators/required.validator';
|
||||||
|
import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model';
|
||||||
import { subMonths } from 'date-fns';
|
import { subMonths } from 'date-fns';
|
||||||
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
|
||||||
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
||||||
@@ -67,6 +68,11 @@ export class PeriodiskRedovisningFormComponent implements OnInit {
|
|||||||
shareReplay(1)
|
shareReplay(1)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
yesNoRadiobuttons: Radiobutton[] = [
|
||||||
|
{ label: 'Ja', value: true },
|
||||||
|
{ label: 'Nej', value: false },
|
||||||
|
];
|
||||||
|
|
||||||
periods$: Observable<AvropPeriod[]> = this.avrop$.pipe(
|
periods$: Observable<AvropPeriod[]> = this.avrop$.pipe(
|
||||||
map(avrop => extractAvropPeriods(avrop.startDate, avrop.endDate))
|
map(avrop => extractAvropPeriods(avrop.startDate, avrop.endDate))
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
||||||
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
|
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
|
||||||
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
|
|
||||||
import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
@@ -9,6 +8,7 @@ import { RouterModule } from '@angular/router';
|
|||||||
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
|
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
import { ReportDescriptionListModule } from '../../../components/report-description-list/report-description-list.module';
|
||||||
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
||||||
@@ -30,8 +30,8 @@ import { PeriodiskRedovisningFormService } from './periodisk-redovisning-form.se
|
|||||||
UiSkeletonModule,
|
UiSkeletonModule,
|
||||||
DigiNgDialogModule,
|
DigiNgDialogModule,
|
||||||
DigiNgFormSelectModule,
|
DigiNgFormSelectModule,
|
||||||
DigiNgFormRadiobuttonGroupModule,
|
|
||||||
DigiNgFormCheckboxModule,
|
DigiNgFormCheckboxModule,
|
||||||
|
UiRadiobuttonGroupModule,
|
||||||
],
|
],
|
||||||
providers: [PeriodiskRedovisningFormService],
|
providers: [PeriodiskRedovisningFormService],
|
||||||
exports: [PeriodiskRedovisningFormComponent],
|
exports: [PeriodiskRedovisningFormComponent],
|
||||||
|
|||||||
@@ -44,11 +44,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="signal-form__form-item">
|
<div class="signal-form__form-item">
|
||||||
<digi-form-fieldset af-legend="Omfattning" af-name="omfattning" af-form="signal-form">
|
<digi-form-fieldset af-legend="Omfattning" af-name="omfattning" af-form="signal-form">
|
||||||
<digi-ng-form-radiobutton-group
|
<ui-radiobutton-group
|
||||||
[afRadiobuttons]="omfattningRadioButtons"
|
formControlName="omfattning"
|
||||||
[afRequired]="true"
|
[uiRequired]="true"
|
||||||
[formControl]="omfattningFormControl"
|
[uiAnnounceIfOptional]="true"
|
||||||
></digi-ng-form-radiobutton-group>
|
[uiRadiobuttons]="omfattningRadioButtons"
|
||||||
|
></ui-radiobutton-group>
|
||||||
</digi-form-fieldset>
|
</digi-form-fieldset>
|
||||||
<div aria-atomic="true" role="alert">
|
<div aria-atomic="true" role="alert">
|
||||||
<digi-ng-form-validation-message
|
<digi-ng-form-validation-message
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group';
|
|
||||||
import { FormSelectItem } from '@af/digi-ng/_form/form-select';
|
import { FormSelectItem } from '@af/digi-ng/_form/form-select';
|
||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { FormControl, FormGroup } from '@angular/forms';
|
import { FormControl, FormGroup } from '@angular/forms';
|
||||||
@@ -8,6 +7,7 @@ import { Avrop } from '@msfa-models/avrop.model';
|
|||||||
import { CustomError } from '@msfa-models/error/custom-error';
|
import { CustomError } from '@msfa-models/error/custom-error';
|
||||||
import { Signal } from '@msfa-models/signal.model';
|
import { Signal } from '@msfa-models/signal.model';
|
||||||
import { formatDate } from '@msfa-utils/format-to-date.util';
|
import { formatDate } from '@msfa-utils/format-to-date.util';
|
||||||
|
import { Radiobutton } from '@ui/radiobutton-group/radiobutton.model';
|
||||||
import { add } from 'date-fns';
|
import { add } from 'date-fns';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
import { map, shareReplay, switchMap, take } from 'rxjs/operators';
|
||||||
@@ -45,25 +45,13 @@ export class SignalFormComponent {
|
|||||||
);
|
);
|
||||||
|
|
||||||
typeSelectItems: FormSelectItem[] = [
|
typeSelectItems: FormSelectItem[] = [
|
||||||
{
|
{ name: 'Arbete', value: 'arbete' },
|
||||||
name: 'Arbete',
|
{ name: 'Utbildning', value: 'utbildning' },
|
||||||
value: 'arbete',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Utbildning',
|
|
||||||
value: 'utbildning',
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
omfattningRadioButtons: RadiobuttonModel[] = [
|
omfattningRadioButtons: Radiobutton[] = [
|
||||||
{
|
{ label: 'Heltid', value: 'heltid' },
|
||||||
label: 'Heltid',
|
{ label: 'Deltid', value: 'deltid' },
|
||||||
value: 'heltid',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Deltid',
|
|
||||||
value: 'deltid',
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
constructor(private signalFormService: SignalFormService, private activatedRoute: ActivatedRoute) {}
|
constructor(private signalFormService: SignalFormService, private activatedRoute: ActivatedRoute) {}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog';
|
||||||
import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker';
|
import { DigiNgFormDatepickerModule } from '@af/digi-ng/_form/form-datepicker';
|
||||||
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
|
|
||||||
import { DigiNgFormRangeModule } from '@af/digi-ng/_form/form-range';
|
import { DigiNgFormRangeModule } from '@af/digi-ng/_form/form-range';
|
||||||
import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
import { DigiNgFormSelectModule } from '@af/digi-ng/_form/form-select';
|
||||||
import { DigiNgFormValidationMessageModule } from '@af/digi-ng/_form/form-validation-message';
|
import { DigiNgFormValidationMessageModule } from '@af/digi-ng/_form/form-validation-message';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
import { ReactiveFormsModule } from '@angular/forms';
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
@@ -12,6 +10,8 @@ import { RouterModule } from '@angular/router';
|
|||||||
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
import { BackLinkModule } from '@msfa-shared/components/back-link/back-link.module';
|
||||||
import { ConfirmDialogModule } from '@msfa-shared/components/confirm-dialog/confirm-dialog.module';
|
import { ConfirmDialogModule } from '@msfa-shared/components/confirm-dialog/confirm-dialog.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
|
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
||||||
import { SignalFormComponent } from './signal-form.component';
|
import { SignalFormComponent } from './signal-form.component';
|
||||||
import { SignalFormService } from './signal-form.service';
|
import { SignalFormService } from './signal-form.service';
|
||||||
@@ -27,7 +27,7 @@ import { SignalFormService } from './signal-form.service';
|
|||||||
ReportLayoutModule,
|
ReportLayoutModule,
|
||||||
ConfirmDialogModule,
|
ConfirmDialogModule,
|
||||||
BackLinkModule,
|
BackLinkModule,
|
||||||
DigiNgFormRadiobuttonGroupModule,
|
UiRadiobuttonGroupModule,
|
||||||
DigiNgFormDatepickerModule,
|
DigiNgFormDatepickerModule,
|
||||||
UiSkeletonModule,
|
UiSkeletonModule,
|
||||||
DigiNgDialogModule,
|
DigiNgDialogModule,
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export enum RadiobuttonGroupDirection {
|
||||||
|
HORIZONTAL = 'horizontal',
|
||||||
|
VERTICAL = 'vertical',
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<div class="ui-radiobutton-group" [ngClass]="{'ui-radiobutton-group--invalid': uiInvalid}">
|
||||||
|
<div class="ui-radiobutton-group__radiobuttons" [ngClass]="radiobuttonsModifierClass">
|
||||||
|
<digi-form-radiobutton
|
||||||
|
*ngFor="let item of uiRadiobuttons"
|
||||||
|
class="ui-radiobutton-group__radiobutton"
|
||||||
|
[afLabel]="getLabelText(item.label)"
|
||||||
|
[afValue]="item.value"
|
||||||
|
[afChecked]="currentValue === item.value"
|
||||||
|
[afName]="name"
|
||||||
|
[afRequired]="uiRequired"
|
||||||
|
[afValidation]="uiInvalid ? 'error' : 'neutral'"
|
||||||
|
[afVariation]="uiSecondary ? 'secondary' : 'primary'"
|
||||||
|
(afOnChange)="checkForChange($event.detail.target.value)"
|
||||||
|
></digi-form-radiobutton>
|
||||||
|
</div>
|
||||||
|
<div aria-atomic="true" role="alert">
|
||||||
|
<digi-form-validation-message *ngIf="uiInvalid && uiValidationMessage" af-variation="error"
|
||||||
|
>{{uiValidationMessage}}</digi-form-validation-message
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
@import 'variables/gutters';
|
||||||
|
|
||||||
|
.ui-radiobutton-group {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&--invalid {
|
||||||
|
gap: var(--digi--layout--gutter--xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__radiobuttons {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--digi--layout--gutter--s);
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&--horizontal {
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: $digi--layout--gutter--l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__radiobutton {
|
||||||
|
::ng-deep .digi-form-radiobutton__circle {
|
||||||
|
top: 50% !important;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
top: 50% !important;
|
||||||
|
left: 50% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::ng-deep .digi-form-radiobutton__input:focus ~ .digi-form-radiobutton__circle {
|
||||||
|
box-shadow: var(--digi--ui--box-shadow--focus) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/* tslint:disable:no-unused-variable */
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { RadiobuttonGroupComponent } from './radiobutton-group.component';
|
||||||
|
|
||||||
|
describe('RadiobuttonGroupComponent', () => {
|
||||||
|
let component: RadiobuttonGroupComponent;
|
||||||
|
let fixture: ComponentFixture<RadiobuttonGroupComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
declarations: [RadiobuttonGroupComponent],
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
}).compileComponents();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(RadiobuttonGroupComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
|
import { RadiobuttonGroupComponent } from './radiobutton-group.component';
|
||||||
|
import { UiRadiobuttonGroupModule } from './radiobutton-group.module';
|
||||||
|
|
||||||
|
export default { title: 'RadiobuttonGroup', component: RadiobuttonGroupComponent };
|
||||||
|
|
||||||
|
const componentModule = {
|
||||||
|
moduleMetadata: {
|
||||||
|
imports: [ReactiveFormsModule, UiRadiobuttonGroupModule],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const standard = () => ({
|
||||||
|
...componentModule,
|
||||||
|
template: '<ui-radiobutton-group></ui-radiobutton-group>',
|
||||||
|
});
|
||||||
122
libs/ui/src/radiobutton-group/radiobutton-group.component.ts
Normal file
122
libs/ui/src/radiobutton-group/radiobutton-group.component.ts
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
import {
|
||||||
|
AfterViewInit,
|
||||||
|
ChangeDetectionStrategy,
|
||||||
|
ChangeDetectorRef,
|
||||||
|
Component,
|
||||||
|
EventEmitter,
|
||||||
|
Injector,
|
||||||
|
Input,
|
||||||
|
OnChanges,
|
||||||
|
Output,
|
||||||
|
} from '@angular/core';
|
||||||
|
import { ControlValueAccessor, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
||||||
|
import { RadiobuttonGroupDirection } from './radiobutton-group-direction.enum';
|
||||||
|
import { Radiobutton } from './radiobutton.model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A radiobutton-group component.
|
||||||
|
*
|
||||||
|
* ## Usage
|
||||||
|
* ``import {UiRadiobuttonGroupModule} from '@ui/radiobutton-group/radiobutton-group.module';``
|
||||||
|
*/
|
||||||
|
@Component({
|
||||||
|
selector: 'ui-radiobutton-group',
|
||||||
|
templateUrl: './radiobutton-group.component.html',
|
||||||
|
styleUrls: ['./radiobutton-group.component.scss'],
|
||||||
|
providers: [
|
||||||
|
{
|
||||||
|
provide: NG_VALUE_ACCESSOR,
|
||||||
|
useExisting: RadiobuttonGroupComponent,
|
||||||
|
multi: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
|
})
|
||||||
|
export class RadiobuttonGroupComponent implements ControlValueAccessor, AfterViewInit, OnChanges {
|
||||||
|
@Input() uiDirection: RadiobuttonGroupDirection;
|
||||||
|
@Input() uiInvalid: boolean;
|
||||||
|
@Input() uiValidationMessage: string;
|
||||||
|
@Input() uiRadiobuttons: Radiobutton[];
|
||||||
|
@Input() uiBooleanValues: boolean;
|
||||||
|
@Input() uiSecondary: boolean;
|
||||||
|
@Input() uiRequired: boolean;
|
||||||
|
@Input() uiName: string;
|
||||||
|
@Input() uiAnnounceIfOptional: boolean;
|
||||||
|
@Output() uiOnChange = new EventEmitter<any>();
|
||||||
|
|
||||||
|
name: string | number;
|
||||||
|
onTouched: () => {};
|
||||||
|
private onChange: (value: any) => {};
|
||||||
|
private _value: any;
|
||||||
|
|
||||||
|
constructor(private injector: Injector, private changeDetectorRef: ChangeDetectorRef) {}
|
||||||
|
|
||||||
|
get currentValue(): any {
|
||||||
|
return this._value;
|
||||||
|
}
|
||||||
|
|
||||||
|
get radiobuttonsModifierClass(): string {
|
||||||
|
if (this.uiDirection === RadiobuttonGroupDirection.HORIZONTAL) {
|
||||||
|
return `ui-radiobutton-group__radiobuttons--horizontal`;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
private _transformValue(value: any): any {
|
||||||
|
return this.uiBooleanValues ? value === 'true' : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private get _requiredText() {
|
||||||
|
if (this.uiRequired && !this.uiAnnounceIfOptional) {
|
||||||
|
return ' (obligatoriskt)';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.uiRequired && this.uiAnnounceIfOptional) {
|
||||||
|
return ' (frivilligt)';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
getLabelText(label: string): string {
|
||||||
|
return `${label}${this._requiredText}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit(): void {
|
||||||
|
const ngControl: NgControl = this.injector.get(NgControl, null);
|
||||||
|
if (ngControl) {
|
||||||
|
this.name = ngControl.name || this.uiName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnChanges(): void {
|
||||||
|
const ngControl: NgControl = this.injector.get(NgControl, null);
|
||||||
|
if (ngControl) {
|
||||||
|
this.name = ngControl.name || this.uiName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkForChange(rawValue: any): void {
|
||||||
|
const value = this._transformValue(rawValue);
|
||||||
|
if (this._value !== value) {
|
||||||
|
if (this.onChange) {
|
||||||
|
this.onChange(value);
|
||||||
|
}
|
||||||
|
this._value = value;
|
||||||
|
this.uiOnChange.emit(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writeValue(value: any): void {
|
||||||
|
this._value = value;
|
||||||
|
this.changeDetectorRef.detectChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
registerOnChange(fn: (value: any) => {}) {
|
||||||
|
this.onChange = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerOnTouched(fn: () => {}) {
|
||||||
|
this.onTouched = fn;
|
||||||
|
}
|
||||||
|
}
|
||||||
11
libs/ui/src/radiobutton-group/radiobutton-group.module.ts
Normal file
11
libs/ui/src/radiobutton-group/radiobutton-group.module.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
|
import { RadiobuttonGroupComponent } from './radiobutton-group.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
imports: [CommonModule],
|
||||||
|
declarations: [RadiobuttonGroupComponent],
|
||||||
|
exports: [RadiobuttonGroupComponent],
|
||||||
|
})
|
||||||
|
export class UiRadiobuttonGroupModule {}
|
||||||
4
libs/ui/src/radiobutton-group/radiobutton.model.ts
Normal file
4
libs/ui/src/radiobutton-group/radiobutton.model.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export interface Radiobutton {
|
||||||
|
value: any;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user