Skip to content

Commit dcd32c4

Browse files
committed
119602: Rework settings validation
1 parent cd825ac commit dcd32c4

4 files changed

Lines changed: 23 additions & 16 deletions

File tree

src/app/accessibility/accessibility-settings.service.stub.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,5 @@ export class AccessibilitySettingsServiceStub {
4040

4141
isValid = jasmine.createSpy('isValid').and.returnValue(true);
4242

43-
allValid = jasmine.createSpy('allValid').and.returnValue(true);
43+
formValuesValid = jasmine.createSpy('allValid').and.returnValue(true);
4444
}

src/app/accessibility/accessibility-settings.service.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,16 @@ export const ACCESSIBILITY_COOKIE = 'dsAccessibilityCookie';
2424
export const ACCESSIBILITY_SETTINGS_METADATA_KEY = 'dspace.accessibility.settings';
2525

2626
/**
27-
* Type containing all possible accessibility settings.
27+
* Array containing all possible accessibility settings.
2828
* When adding new settings, make sure to add the new setting to the accessibility-settings component form.
2929
* The converter methods to convert from stored format to form format (and vice-versa) need to be updated as well.
3030
*/
31-
export type AccessibilitySetting = 'notificationTimeOut' | 'liveRegionTimeOut';
31+
export const accessibilitySettingKeys = ['notificationTimeOut', 'liveRegionTimeOut'] as const;
32+
33+
/**
34+
* Type representing the possible accessibility settings
35+
*/
36+
export type AccessibilitySetting = typeof accessibilitySettingKeys[number];
3237

3338
/**
3439
* Type representing an object that contains accessibility settings values for all accessibility settings.
@@ -294,24 +299,26 @@ export class AccessibilitySettingsService {
294299
}
295300

296301
/**
297-
* Returns true if the provided value is a valid value for the provided AccessibilitySetting.
302+
* Returns true if the provided AccessibilitySetting is valid in regard to the provided formValues.
298303
*/
299-
isValid(setting: AccessibilitySetting | string, value: string): boolean {
304+
isValid(setting: AccessibilitySetting, formValues: AccessibilitySettingsFormValues): boolean {
300305
switch (setting) {
301306
case 'notificationTimeOut':
302-
return hasNoValue(value) || parseFloat(value) > 0;
307+
return formValues.notificationTimeOutEnabled ?
308+
hasNoValue(formValues.notificationTimeOut) || parseFloat(formValues.notificationTimeOut) > 0 :
309+
true;
303310
case 'liveRegionTimeOut':
304-
return hasNoValue(value) || parseFloat(value) > 0;
311+
return hasNoValue(formValues.liveRegionTimeOut) || parseFloat(formValues.liveRegionTimeOut) > 0;
305312
default:
306313
throw new Error(`Unhandled accessibility setting during validity check: ${setting}`);
307314
}
308315
}
309316

310317
/**
311-
* Returns true if all settings in the provided AccessibilitySettings object are valid
318+
* Returns true if all settings in the provided AccessibilitySettingsFormValues object are valid
312319
*/
313-
allValid(settings: AccessibilitySettings) {
314-
return Object.entries(settings).every(([setting, value], _) => this.isValid(setting, value));
320+
formValuesValid(formValues: AccessibilitySettingsFormValues) {
321+
return accessibilitySettingKeys.every(setting => this.isValid(setting, formValues));
315322
}
316323
}
317324

src/app/info/accessibility-settings/accessibility-settings.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ <h2>{{ 'info.accessibility-settings.title' | translate }}</h2>
3030

3131
<div class="col-sm-4">
3232
<input [type]="'number'" [id]="'notificationTimeOutInput'" class="form-control"
33-
[ngClass]="{'is-invalid': !settingsService.isValid('notificationTimeOut', formValues.notificationTimeOut)}"
33+
[ngClass]="{'is-invalid': !settingsService.isValid('notificationTimeOut', formValues)}"
3434
[min]="1"
3535
[readOnly]="!formValues.notificationTimeOutEnabled"
3636
[(ngModel)]="formValues.notificationTimeOut" [ngModelOptions]="{ standalone: true }"
3737
[attr.aria-describedby]="'notificationTimeOutHint'">
38-
<div class="invalid-feedback" [ngClass]="{ 'd-block': !settingsService.isValid('notificationTimeOut', formValues.notificationTimeOut) }">
38+
<div class="invalid-feedback" [ngClass]="{ 'd-block': !settingsService.isValid('notificationTimeOut', formValues) }">
3939
{{ 'info.accessibility-settings.notificationTimeOut.invalid' | translate }}
4040
</div>
4141
</div>
@@ -57,11 +57,11 @@ <h2>{{ 'info.accessibility-settings.title' | translate }}</h2>
5757

5858
<div class="col-sm-4">
5959
<input [type]="'number'" [id]="'liveRegionTimeOutInput'" class="form-control"
60-
[ngClass]="{'is-invalid': !settingsService.isValid('liveRegionTimeOut', formValues.liveRegionTimeOut)}"
60+
[ngClass]="{'is-invalid': !settingsService.isValid('liveRegionTimeOut', formValues)}"
6161
[min]="1"
6262
[(ngModel)]="formValues.liveRegionTimeOut" [ngModelOptions]="{ standalone: true }"
6363
[attr.aria-describedby]="'liveRegionTimeOutHint'">
64-
<div class="invalid-feedback" [ngClass]="{ 'd-block': !settingsService.isValid('liveRegionTimeOut', formValues.liveRegionTimeOut) }">
64+
<div class="invalid-feedback" [ngClass]="{ 'd-block': !settingsService.isValid('liveRegionTimeOut', formValues) }">
6565
{{ 'info.accessibility-settings.liveRegionTimeOut.invalid' | translate }}
6666
</div>
6767
</div>

src/app/info/accessibility-settings/accessibility-settings.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ export class AccessibilitySettingsComponent implements OnInit, OnDestroy {
6161
*/
6262
saveSettings() {
6363
const formValues = this.formValues;
64-
const convertedValues = this.settingsService.convertFormValuesToStoredValues(formValues);
6564

66-
if (this.settingsService.allValid(convertedValues)) {
65+
if (this.settingsService.formValuesValid(formValues)) {
66+
const convertedValues = this.settingsService.convertFormValuesToStoredValues(formValues);
6767
this.settingsService.setSettings(convertedValues).pipe(take(1)).subscribe(location => {
6868
if (location !== 'failed') {
6969
this.notificationsService.success(null, this.translateService.instant('info.accessibility-settings.save-notification.' + location));

0 commit comments

Comments
 (0)