fix(forms): Preventing double submit when double-clicking submit buttons. (TV-908)
Merge in TEA/mina-sidor-fa-web from bugfix/TV-908-prevent-double-submit to develop
Squashed commit of the following:
commit b9f0b803a97b104647c835e9244d845b4a6fb41a
Merge: 44fd4ff8 af4f6cbe
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Tue Nov 30 08:53:56 2021 +0100
Merged develop and fixed conflicts
commit 44fd4ff8f3c58361b991142fad9c64bf6e13f329
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Mon Nov 29 11:51:35 2021 +0100
Added custom selector to directive
commit 9c4a82556be3d78183cfa4a13413708876519643
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Mon Nov 29 10:43:45 2021 +0100
Added directive to prevent double submit
This commit is contained in:
@@ -17,10 +17,10 @@ import { AvropModule } from './pages/avrop/avrop.module';
|
|||||||
registerLocaleData(localeSe);
|
registerLocaleData(localeSe);
|
||||||
const providers: Provider[] = [
|
const providers: Provider[] = [
|
||||||
ApmErrorHandler,
|
ApmErrorHandler,
|
||||||
|
|
||||||
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
|
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
|
||||||
{ provide: LOCALE_ID, useValue: 'sv-SE' },
|
{ provide: LOCALE_ID, useValue: 'sv-SE' },
|
||||||
];
|
];
|
||||||
|
|
||||||
// Skip error handler in Dev until "Uncaught Error: ApplicationRef.tick is called recursively" is fixed
|
// Skip error handler in Dev until "Uncaught Error: ApplicationRef.tick is called recursively" is fixed
|
||||||
if (environment.production) {
|
if (environment.production) {
|
||||||
providers.push({
|
providers.push({
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
<ui-link-button [uiRouterLink]="['/administration/personal', employee.id]" uiType="secondary">
|
<ui-link-button [uiRouterLink]="['/administration/personal', employee.id]" uiType="secondary">
|
||||||
Avbryt<span class="msfa__a11y-sr-only"> redigering av personalkontot.</span>
|
Avbryt<span class="msfa__a11y-sr-only"> redigering av personalkontot.</span>
|
||||||
</ui-link-button>
|
</ui-link-button>
|
||||||
<digi-button af-type="submit">Spara ändringar</digi-button>
|
<digi-button af-type="submit" msfaPreventDoubleSubmit>Spara ändringar</digi-button>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</digi-typography>
|
</digi-typography>
|
||||||
|
|||||||
@@ -3,25 +3,26 @@ 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 { 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 { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
|
||||||
import { DigiNgPopoverModule } from '@af/digi-ng/_popover/popover';
|
|
||||||
import { DigiNgLoaderSpinnerModule } from '@af/digi-ng/_loader/loader-spinner';
|
import { DigiNgLoaderSpinnerModule } from '@af/digi-ng/_loader/loader-spinner';
|
||||||
|
import { DigiNgPopoverModule } from '@af/digi-ng/_popover/popover';
|
||||||
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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { ErrorListModule } from '@msfa-shared/components/error-list/error-list.module';
|
import { ErrorListModule } from '@msfa-shared/components/error-list/error-list.module';
|
||||||
import { HideTextModule } from '@msfa-shared/components/hide-text/hide-text.module';
|
import { HideTextModule } from '@msfa-shared/components/hide-text/hide-text.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { RolesDialogModule } from '@msfa-shared/components/roles-dialog/roles-dialog.module';
|
import { RolesDialogModule } from '@msfa-shared/components/roles-dialog/roles-dialog.module';
|
||||||
import { TreeNodesSelectorModule } from '@msfa-shared/components/tree-nodes-selector/tree-nodes-selector.module';
|
import { TreeNodesSelectorModule } from '@msfa-shared/components/tree-nodes-selector/tree-nodes-selector.module';
|
||||||
import { LocalDatePipeModule } from '@msfa-shared/pipes/local-date/local-date.module';
|
import { LocalDatePipeModule } from '@msfa-shared/pipes/local-date/local-date.module';
|
||||||
|
import { UiInputModule } from '@ui/input/input.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
|
import { UiSelectModule } from '@ui/select/select.module';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
import { EmployeeDeleteModule } from '../../components/employee-delete/employee-delete.module';
|
import { EmployeeDeleteModule } from '../../components/employee-delete/employee-delete.module';
|
||||||
import { EditEmployeeFormComponent } from './edit-employee-form/edit-employee-form.component';
|
import { EditEmployeeFormComponent } from './edit-employee-form/edit-employee-form.component';
|
||||||
import { EmployeeFormComponent } from './employee-form.component';
|
import { EmployeeFormComponent } from './employee-form.component';
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
|
||||||
import { UiInputModule } from '@ui/input/input.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -48,6 +49,7 @@ import { UiInputModule } from '@ui/input/input.module';
|
|||||||
RolesDialogModule,
|
RolesDialogModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
UiInputModule,
|
UiInputModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class EmployeeFormModule {}
|
export class EmployeeFormModule {}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
</digi-notification-alert>
|
</digi-notification-alert>
|
||||||
|
|
||||||
<footer class="employee-invite__footer">
|
<footer class="employee-invite__footer">
|
||||||
<digi-button af-size="m" af-type="submit">Skicka inbjudningslänk</digi-button>
|
<digi-button af-size="m" af-type="submit" msfaPreventDoubleSubmit>Skicka inbjudningslänk</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt<span class="msfa__a11y-sr-only"> och gå tillbaka till personallistan</span>
|
Avbryt<span class="msfa__a11y-sr-only"> och gå tillbaka till personallistan</span>
|
||||||
</ui-link-button>
|
</ui-link-button>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
@@ -19,6 +20,7 @@ import { EmployeeInviteComponent } from './employee-invite.component';
|
|||||||
UiTextareaModule,
|
UiTextareaModule,
|
||||||
UiLoaderModule,
|
UiLoaderModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class EmployeeInviteModule {}
|
export class EmployeeInviteModule {}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="avvikelse-report-form__cta-wrapper">
|
<div class="avvikelse-report-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -7,18 +7,19 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.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 { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
|
import { UiSelectModule } from '@ui/select/select.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';
|
||||||
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
||||||
import { AvvikelseReportFormComponent } from './avvikelse-report-form.component';
|
import { AvvikelseReportFormComponent } from './avvikelse-report-form.component';
|
||||||
import { AvvikelseReportFormService } from './avvikelse-report-form.service';
|
import { AvvikelseReportFormService } from './avvikelse-report-form.service';
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -42,6 +43,7 @@ import { UiSelectModule } from '@ui/select/select.module';
|
|||||||
DigiNgDialogModule,
|
DigiNgDialogModule,
|
||||||
UiTextareaModule,
|
UiTextareaModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [AvvikelseReportFormService],
|
providers: [AvvikelseReportFormService],
|
||||||
exports: [AvvikelseReportFormComponent],
|
exports: [AvvikelseReportFormComponent],
|
||||||
|
|||||||
@@ -164,7 +164,7 @@
|
|||||||
|
|
||||||
<footer class="franvaro-report-form__footer">
|
<footer class="franvaro-report-form__footer">
|
||||||
<div class="franvaro-report-form__cta-wrapper">
|
<div class="franvaro-report-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -4,20 +4,21 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
|
import { UiInputModule } from '@ui/input/input.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.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 { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
|
import { UiSelectModule } from '@ui/select/select.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 { UiSelectModule } from '@ui/select/select.module';
|
|
||||||
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.module';
|
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.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';
|
||||||
import { FranvaroReportFormComponent } from './franvaro-report-form.component';
|
import { FranvaroReportFormComponent } from './franvaro-report-form.component';
|
||||||
import { FranvaroReportFormService } from './franvaro-report-form.service';
|
import { FranvaroReportFormService } from './franvaro-report-form.service';
|
||||||
import { UiInputModule } from '@ui/input/input.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -40,6 +41,7 @@ import { UiInputModule } from '@ui/input/input.module';
|
|||||||
UiRadiobuttonGroupModule,
|
UiRadiobuttonGroupModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
UiInputModule,
|
UiInputModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [FranvaroReportFormService],
|
providers: [FranvaroReportFormService],
|
||||||
exports: [FranvaroReportFormComponent],
|
exports: [FranvaroReportFormComponent],
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
|
|
||||||
<footer class="gemensam-planering-form__footer">
|
<footer class="gemensam-planering-form__footer">
|
||||||
<div class="gemensam-planering-form__cta-wrapper">
|
<div class="gemensam-planering-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
@@ -36,6 +37,7 @@ import { GemensamPlaneringFormService } from './gemensam-planering-form.service'
|
|||||||
DigiNgDialogModule,
|
DigiNgDialogModule,
|
||||||
UiValidationMessageModule,
|
UiValidationMessageModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [GemensamPlaneringFormService],
|
providers: [GemensamPlaneringFormService],
|
||||||
exports: [GemensamPlaneringFormComponent],
|
exports: [GemensamPlaneringFormComponent],
|
||||||
|
|||||||
@@ -96,7 +96,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<footer class="informativ-rapport-form__footer">
|
<footer class="informativ-rapport-form__footer">
|
||||||
<div class="informativ-rapport-form__cta-wrapper">
|
<div class="informativ-rapport-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -3,19 +3,20 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.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 { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
|
import { UiFileUploadModule } from '@ui/file-upload/file-upload.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
|
import { UiSelectModule } from '@ui/select/select.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';
|
||||||
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
import { ReportLayoutModule } from '../../../components/report-layout/report-layout.module';
|
||||||
import { InformativRapportFormComponent } from './informativ-rapport-form.component';
|
import { InformativRapportFormComponent } from './informativ-rapport-form.component';
|
||||||
import { InformativRapportFormService } from './informativ-rapport-form.service';
|
import { InformativRapportFormService } from './informativ-rapport-form.service';
|
||||||
import { UiFileUploadModule } from '@ui/file-upload/file-upload.module';
|
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -35,6 +36,7 @@ import { UiLoaderModule } from '@ui/loader/loader.module';
|
|||||||
UiTextareaModule,
|
UiTextareaModule,
|
||||||
UiFileUploadModule,
|
UiFileUploadModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
UiLoaderModule,
|
UiLoaderModule,
|
||||||
],
|
],
|
||||||
providers: [InformativRapportFormService],
|
providers: [InformativRapportFormService],
|
||||||
|
|||||||
@@ -159,7 +159,7 @@
|
|||||||
|
|
||||||
<footer class="periodisk-redovisning-form__footer">
|
<footer class="periodisk-redovisning-form__footer">
|
||||||
<div class="periodisk-redovisning-form__cta-wrapper">
|
<div class="periodisk-redovisning-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
import { UiInputModule } from '@ui/input/input.module';
|
import { UiInputModule } from '@ui/input/input.module';
|
||||||
@@ -38,6 +39,7 @@ import { PeriodiskRedovisningFormService } from './periodisk-redovisning-form.se
|
|||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
UiInputModule,
|
UiInputModule,
|
||||||
UiValidationMessageModule,
|
UiValidationMessageModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [PeriodiskRedovisningFormService],
|
providers: [PeriodiskRedovisningFormService],
|
||||||
exports: [PeriodiskRedovisningFormComponent],
|
exports: [PeriodiskRedovisningFormComponent],
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
|
|
||||||
<footer class="signal-form__footer">
|
<footer class="signal-form__footer">
|
||||||
<div class="signal-form__cta-wrapper">
|
<div class="signal-form__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Förhandsgranska</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Förhandsgranska</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -4,11 +4,13 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.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 { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
import { UiInputModule } from '@ui/input/input.module';
|
import { UiInputModule } from '@ui/input/input.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
import { UiRadiobuttonGroupModule } from '@ui/radiobutton-group/radiobutton-group.module';
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
import { UiSelectModule } from '@ui/select/select.module';
|
||||||
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
import { UiSkeletonModule } from '@ui/skeleton/skeleton.module';
|
||||||
@@ -17,7 +19,6 @@ import { ReportDescriptionListModule } from '../../../components/report-descript
|
|||||||
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';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -40,6 +41,7 @@ import { UiLoaderModule } from '@ui/loader/loader.module';
|
|||||||
UiInputModule,
|
UiInputModule,
|
||||||
UiValidationMessageModule,
|
UiValidationMessageModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [SignalFormService],
|
providers: [SignalFormService],
|
||||||
exports: [SignalFormComponent],
|
exports: [SignalFormComponent],
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
></msfa-slutredovisning-form-step0-other>
|
></msfa-slutredovisning-form-step0-other>
|
||||||
|
|
||||||
<footer class="slutredovisning-form-step0__footer">
|
<footer class="slutredovisning-form-step0__footer">
|
||||||
<digi-button af-type="submit">Vidare till steg 2</digi-button>
|
<digi-button af-type="submit" msfaPreventDoubleSubmit>Vidare till steg 2</digi-button>
|
||||||
<ui-link-button uiRouterLink="../" uiType="secondary">
|
<ui-link-button uiRouterLink="../" uiType="secondary">
|
||||||
Avbryt
|
Avbryt
|
||||||
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
<span class="msfa__a11y-sr-only"> och gå tillbaka till deltagaren</span>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<!-- TODO: If something is required at the top of the form it will be hard to see when at the bottom and clicking next -->
|
<!-- TODO: If something is required at the top of the form it will be hard to see when at the bottom and clicking next -->
|
||||||
|
|
||||||
<footer class="slutredovisning-form-step1__footer">
|
<footer class="slutredovisning-form-step1__footer">
|
||||||
<digi-button af-type="submit">Nästa</digi-button>
|
<digi-button af-type="submit" msfaPreventDoubleSubmit>Nästa</digi-button>
|
||||||
<digi-button af-type="button" af-variation="secondary" (click)="goBack()">
|
<digi-button af-type="button" af-variation="secondary" (click)="goBack()">
|
||||||
Tillbaka
|
Tillbaka
|
||||||
<span class="msfa__a11y-sr-only"> till steg förgående steg</span>
|
<span class="msfa__a11y-sr-only"> till steg förgående steg</span>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
></ui-textarea>
|
></ui-textarea>
|
||||||
|
|
||||||
<footer class="slutredovisning-form-step2__footer">
|
<footer class="slutredovisning-form-step2__footer">
|
||||||
<digi-button af-type="submit">Nästa</digi-button>
|
<digi-button af-type="submit" msfaPreventDoubleSubmit>Nästa</digi-button>
|
||||||
<digi-button af-type="button" af-variation="secondary" (click)="goBack()">
|
<digi-button af-type="button" af-variation="secondary" (click)="goBack()">
|
||||||
Tillbaka
|
Tillbaka
|
||||||
<span class="msfa__a11y-sr-only"> till steg förgående steg</span>
|
<span class="msfa__a11y-sr-only"> till steg förgående steg</span>
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ 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';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { ConfirmDialogModule } from '@msfa-shared/components/confirm-dialog/confirm-dialog.module';
|
import { ConfirmDialogModule } from '@msfa-shared/components/confirm-dialog/confirm-dialog.module';
|
||||||
import { UiIconModule } from '@ui/icon/icon.module';
|
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
import { UiBackLinkModule } from '@ui/back-link/back-link.module';
|
||||||
import { UiCheckboxModule } from '@ui/checkbox/checkbox.module';
|
import { UiCheckboxModule } from '@ui/checkbox/checkbox.module';
|
||||||
import { UiErrorListModule } from '@ui/error-list/error-list.module';
|
import { UiErrorListModule } from '@ui/error-list/error-list.module';
|
||||||
|
import { UiIconModule } from '@ui/icon/icon.module';
|
||||||
import { UiInputModule } from '@ui/input/input.module';
|
import { UiInputModule } from '@ui/input/input.module';
|
||||||
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
import { UiLinkButtonModule } from '@ui/link-button/link-button.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
@@ -75,6 +76,7 @@ import { SlutredovisningFormService } from './slutredovisning-form.service';
|
|||||||
UiInputModule,
|
UiInputModule,
|
||||||
SlutredovisningViewDescriptionListModule,
|
SlutredovisningViewDescriptionListModule,
|
||||||
UiLinkButtonModule,
|
UiLinkButtonModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [SlutredovisningFormService],
|
providers: [SlutredovisningFormService],
|
||||||
exports: [SlutredovisningFormComponent],
|
exports: [SlutredovisningFormComponent],
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
<p>Det finns inga deltagare att exportera. Försök att ändra filtreringen och försök igen.</p>
|
<p>Det finns inga deltagare att exportera. Försök att ändra filtreringen och försök igen.</p>
|
||||||
</digi-notification-alert>
|
</digi-notification-alert>
|
||||||
<div class="deltagare-export__cta-wrapper">
|
<div class="deltagare-export__cta-wrapper">
|
||||||
<digi-button af-type="submit" af-size="m">Exportera deltagare</digi-button>
|
<digi-button af-type="submit" af-size="m" msfaPreventDoubleSubmit>Exportera deltagare</digi-button>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
|
||||||
import { UiCheckboxModule } from '@ui/checkbox/checkbox.module';
|
import { UiCheckboxModule } from '@ui/checkbox/checkbox.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
@@ -21,6 +22,7 @@ import { DeltagareExportService } from './deltagare-export.service';
|
|||||||
UiCheckboxModule,
|
UiCheckboxModule,
|
||||||
UiLoaderModule,
|
UiLoaderModule,
|
||||||
DigiNgFormDatepickerModule,
|
DigiNgFormDatepickerModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
providers: [DeltagareExportService],
|
providers: [DeltagareExportService],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
[uiInvalid]="handledareFormControl.invalid && handledareFormControl.touched || invalid"
|
[uiInvalid]="handledareFormControl.invalid && handledareFormControl.touched || invalid"
|
||||||
(uiOnChange)="handledareChanged()"
|
(uiOnChange)="handledareChanged()"
|
||||||
></ui-select>
|
></ui-select>
|
||||||
<digi-button *ngIf="!skipSubmit" class="handledare-picker-form__submit" af-type="submit">
|
<digi-button *ngIf="!skipSubmit" class="handledare-picker-form__submit" af-type="submit" msfaPreventDoubleSubmit>
|
||||||
{{submitText}}
|
{{submitText}}
|
||||||
</digi-button>
|
</digi-button>
|
||||||
<div class="handledare-picker-form__validation-wrapper">
|
<div class="handledare-picker-form__validation-wrapper">
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
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';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
import { UiLoaderModule } from '@ui/loader/loader.module';
|
import { UiLoaderModule } from '@ui/loader/loader.module';
|
||||||
import { HandledarePickerFormComponent } from './handledare-picker-form.component';
|
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
import { UiSelectModule } from '@ui/select/select.module';
|
||||||
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.module';
|
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.module';
|
||||||
|
import { HandledarePickerFormComponent } from './handledare-picker-form.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
@@ -15,6 +16,7 @@ import { UiValidationMessageModule } from '@ui/validation-message/validation-mes
|
|||||||
UiLoaderModule,
|
UiLoaderModule,
|
||||||
UiSelectModule,
|
UiSelectModule,
|
||||||
UiValidationMessageModule,
|
UiValidationMessageModule,
|
||||||
|
PreventDoubleSubmitModule,
|
||||||
],
|
],
|
||||||
exports: [HandledarePickerFormComponent],
|
exports: [HandledarePickerFormComponent],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -14,5 +14,7 @@
|
|||||||
[uiInvalid]="organizationFormControl.invalid && organizationFormControl.touched"
|
[uiInvalid]="organizationFormControl.invalid && organizationFormControl.touched"
|
||||||
uiValidationMessage="Du måste välja en organisation för att kunna logga in"
|
uiValidationMessage="Du måste välja en organisation för att kunna logga in"
|
||||||
></ui-select>
|
></ui-select>
|
||||||
<digi-button class="organization-picker-form__submit" af-type="submit">{{submitText}}</digi-button>
|
<digi-button class="organization-picker-form__submit" af-type="submit" msfaPreventDoubleSubmit
|
||||||
|
>{{submitText}}</digi-button
|
||||||
|
>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
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';
|
||||||
|
import { PreventDoubleSubmitModule } from '@msfa-directives/prevent-double-submit.module';
|
||||||
|
import { UiSelectModule } from '@ui/select/select.module';
|
||||||
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.module';
|
import { UiValidationMessageModule } from '@ui/validation-message/validation-message.module';
|
||||||
import { OrganizationPickerFormComponent } from './organization-picker-form.component';
|
import { OrganizationPickerFormComponent } from './organization-picker-form.component';
|
||||||
import { UiSelectModule } from '@ui/select/select.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
declarations: [OrganizationPickerFormComponent],
|
declarations: [OrganizationPickerFormComponent],
|
||||||
imports: [CommonModule, ReactiveFormsModule, UiSelectModule, UiValidationMessageModule],
|
imports: [CommonModule, ReactiveFormsModule, UiSelectModule, UiValidationMessageModule, PreventDoubleSubmitModule],
|
||||||
exports: [OrganizationPickerFormComponent],
|
exports: [OrganizationPickerFormComponent],
|
||||||
})
|
})
|
||||||
export class OrganizationPickerFormModule {}
|
export class OrganizationPickerFormModule {}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { Directive, HostListener } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
||||||
|
selector: '[msfaPreventDoubleSubmit]',
|
||||||
|
})
|
||||||
|
export class PreventDoubleSubmitDirective {
|
||||||
|
@HostListener('click', ['$event'])
|
||||||
|
onSubmit(event: UIEvent): void {
|
||||||
|
const clickCount = event.detail;
|
||||||
|
|
||||||
|
if (clickCount > 1) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { PreventDoubleSubmitDirective } from './prevent-double-submit.directive';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [PreventDoubleSubmitDirective],
|
||||||
|
exports: [PreventDoubleSubmitDirective],
|
||||||
|
})
|
||||||
|
export class PreventDoubleSubmitModule {}
|
||||||
Reference in New Issue
Block a user