Skip to content

Commit 010b2f9

Browse files
committed
119602: Improve types & docs
1 parent cdec488 commit 010b2f9

6 files changed

Lines changed: 41 additions & 51 deletions

File tree

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

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {
22
AccessibilitySettingsService,
3-
AccessibilitySetting,
43
AccessibilitySettings,
54
ACCESSIBILITY_SETTINGS_METADATA_KEY,
65
ACCESSIBILITY_COOKIE
@@ -41,17 +40,6 @@ describe('accessibilitySettingsService', () => {
4140
);
4241
});
4342

44-
describe('getALlAccessibilitySettingsKeys', () => {
45-
it('should return an array containing all accessibility setting names', () => {
46-
const settingNames: AccessibilitySetting[] = [
47-
AccessibilitySetting.NotificationTimeOut,
48-
AccessibilitySetting.LiveRegionTimeOut,
49-
];
50-
51-
expect(service.getAllAccessibilitySettingKeys()).toEqual(settingNames);
52-
});
53-
});
54-
5543
describe('get', () => {
5644
it('should return the setting if it is set', () => {
5745
const settings: AccessibilitySettings = {
@@ -60,7 +48,7 @@ describe('accessibilitySettingsService', () => {
6048

6149
service.getAll = jasmine.createSpy('getAll').and.returnValue(of(settings));
6250

63-
service.get(AccessibilitySetting.NotificationTimeOut, 'default').subscribe(value =>
51+
service.get('notificationTimeOut', 'default').subscribe(value =>
6452
expect(value).toEqual('1000')
6553
);
6654
});
@@ -72,7 +60,7 @@ describe('accessibilitySettingsService', () => {
7260

7361
service.getAll = jasmine.createSpy('getAll').and.returnValue(of(settings));
7462

75-
service.get(AccessibilitySetting.LiveRegionTimeOut, 'default').subscribe(value =>
63+
service.get('liveRegionTimeOut', 'default').subscribe(value =>
7664
expect(value).toEqual('default')
7765
);
7866
});
@@ -82,23 +70,23 @@ describe('accessibilitySettingsService', () => {
8270
it('should return the setting as number if the value for the setting can be parsed to a number', () => {
8371
service.get = jasmine.createSpy('get').and.returnValue(of('1000'));
8472

85-
service.getAsNumber(AccessibilitySetting.NotificationTimeOut).subscribe(value =>
73+
service.getAsNumber('notificationTimeOut').subscribe(value =>
8674
expect(value).toEqual(1000)
8775
);
8876
});
8977

9078
it('should return the default value if no value is set for the setting', () => {
9179
service.get = jasmine.createSpy('get').and.returnValue(of(null));
9280

93-
service.getAsNumber(AccessibilitySetting.NotificationTimeOut, 123).subscribe(value =>
81+
service.getAsNumber('notificationTimeOut', 123).subscribe(value =>
9482
expect(value).toEqual(123)
9583
);
9684
});
9785

9886
it('should return the default value if the value for the setting can not be parsed to a number', () => {
9987
service.get = jasmine.createSpy('get').and.returnValue(of('text'));
10088

101-
service.getAsNumber(AccessibilitySetting.NotificationTimeOut, 123).subscribe(value =>
89+
service.getAsNumber('notificationTimeOut', 123).subscribe(value =>
10290
expect(value).toEqual(123)
10391
);
10492
});
@@ -176,7 +164,7 @@ describe('accessibilitySettingsService', () => {
176164
it('should correctly update the chosen setting', () => {
177165
service.updateSettings = jasmine.createSpy('updateSettings');
178166

179-
service.set(AccessibilitySetting.LiveRegionTimeOut, '500');
167+
service.set('liveRegionTimeOut', '500');
180168
expect(service.updateSettings).toHaveBeenCalledWith({ liveRegionTimeOut: '500' });
181169
});
182170
});
@@ -307,7 +295,7 @@ describe('accessibilitySettingsService', () => {
307295
});
308296

309297
it('should set the settings in metadata', () => {
310-
service.setSettingsInMetadata(ePerson, { [AccessibilitySetting.LiveRegionTimeOut]: '500' }).subscribe();
298+
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' }).subscribe();
311299
expect(ePerson.setMetadata).toHaveBeenCalled();
312300
});
313301

@@ -318,19 +306,19 @@ describe('accessibilitySettingsService', () => {
318306
});
319307

320308
it('should create a patch with the metadata changes', () => {
321-
service.setSettingsInMetadata(ePerson, { [AccessibilitySetting.LiveRegionTimeOut]: '500' }).subscribe();
309+
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' }).subscribe();
322310
expect(ePersonService.createPatchFromCache).toHaveBeenCalled();
323311
});
324312

325313
it('should send the patch request', () => {
326-
service.setSettingsInMetadata(ePerson, { [AccessibilitySetting.LiveRegionTimeOut]: '500' }).subscribe();
314+
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' }).subscribe();
327315
expect(ePersonService.patch).toHaveBeenCalled();
328316
});
329317

330318
it('should emit true when the update succeeded', fakeAsync(() => {
331319
ePersonService.patch = jasmine.createSpy().and.returnValue(createSuccessfulRemoteDataObject$({}));
332320

333-
service.setSettingsInMetadata(ePerson, { [AccessibilitySetting.LiveRegionTimeOut]: '500' })
321+
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' })
334322
.subscribe(value => {
335323
expect(value).toBeTrue();
336324
});
@@ -341,7 +329,7 @@ describe('accessibilitySettingsService', () => {
341329
it('should emit false when the update failed', fakeAsync(() => {
342330
ePersonService.patch = jasmine.createSpy().and.returnValue(createFailedRemoteDataObject$());
343331

344-
service.setSettingsInMetadata(ePerson, { [AccessibilitySetting.LiveRegionTimeOut]: '500' })
332+
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' })
345333
.subscribe(value => {
346334
expect(value).toBeFalse();
347335
});
@@ -357,7 +345,7 @@ describe('accessibilitySettingsService', () => {
357345
});
358346

359347
it('should store the settings in a cookie', () => {
360-
service.setSettingsInCookie({ [AccessibilitySetting.LiveRegionTimeOut]: '500' });
348+
service.setSettingsInCookie({ ['liveRegionTimeOut']: '500' });
361349
expect(cookieService.set).toHaveBeenCalled();
362350
});
363351

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

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@ export const ACCESSIBILITY_COOKIE = 'dsAccessibilityCookie';
2222
export const ACCESSIBILITY_SETTINGS_METADATA_KEY = 'dspace.accessibility.settings';
2323

2424
/**
25-
* Enum containing all possible accessibility settings.
26-
* When adding new settings, make sure to add the new setting to the accessibility-settings component.
25+
* Type containing all possible accessibility settings.
26+
* When adding new settings, make sure to add the new setting to the accessibility-settings component form.
2727
* The converter methods to convert from stored format to form format (and vice-versa) need to be updated as well.
2828
*/
29-
export enum AccessibilitySetting {
30-
NotificationTimeOut = 'notificationTimeOut',
31-
LiveRegionTimeOut = 'liveRegionTimeOut',
32-
}
29+
export type AccessibilitySetting = 'notificationTimeOut' | 'liveRegionTimeOut';
3330

3431
/**
35-
* Type representing an object that contains accessibility settings values.
32+
* Type representing an object that contains accessibility settings values for all accessibility settings.
3633
*/
37-
export type AccessibilitySettings = { [key in AccessibilitySetting]?: string };
34+
export type FullAccessibilitySettings = { [key in AccessibilitySetting]: string };
35+
36+
/**
37+
* Type representing an object that contains accessibility settings values for some accessibility settings.
38+
*/
39+
export type AccessibilitySettings = Partial<FullAccessibilitySettings>;
3840

3941
/**
4042
* The accessibility settings object format used by the accessibility-settings component form.
@@ -63,10 +65,6 @@ export class AccessibilitySettingsService {
6365
) {
6466
}
6567

66-
getAllAccessibilitySettingKeys(): AccessibilitySetting[] {
67-
return Object.entries(AccessibilitySetting).map(([_, val]) => val);
68-
}
69-
7068
/**
7169
* Get the stored value for the provided {@link AccessibilitySetting}. If the value does not exist or if it is empty,
7270
* the provided defaultValue is emitted instead.
@@ -238,9 +236,9 @@ export class AccessibilitySettingsService {
238236
*/
239237
getPlaceholder(setting: AccessibilitySetting): string {
240238
switch (setting) {
241-
case AccessibilitySetting.NotificationTimeOut:
239+
case 'notificationTimeOut':
242240
return millisecondsToSeconds(environment.notifications.timeOut.toString());
243-
case AccessibilitySetting.LiveRegionTimeOut:
241+
case 'liveRegionTimeOut':
244242
return millisecondsToSeconds(environment.liveRegion.messageTimeOutDurationMs.toString());
245243
default:
246244
return '';
@@ -250,11 +248,11 @@ export class AccessibilitySettingsService {
250248
/**
251249
* Convert values in the provided accessibility settings object to values ready to be stored.
252250
*/
253-
convertFormValuesToStoredValues(settings: AccessibilitySettingsFormValues): AccessibilitySettings {
251+
convertFormValuesToStoredValues(settings: AccessibilitySettingsFormValues): FullAccessibilitySettings {
254252
return {
255-
'notificationTimeOut': settings.disableNotificationTimeOut ? '0'
253+
notificationTimeOut: settings.disableNotificationTimeOut ? '0'
256254
: secondsToMilliseconds(settings.notificationTimeOut),
257-
'liveRegionTimeOut': secondsToMilliseconds(settings.liveRegionTimeOut),
255+
liveRegionTimeOut: secondsToMilliseconds(settings.liveRegionTimeOut),
258256
};
259257
}
260258

@@ -271,6 +269,10 @@ export class AccessibilitySettingsService {
271269

272270
}
273271

272+
/**
273+
* Converts a string representing seconds to a string representing milliseconds
274+
* Returns null if the input could not be parsed to a float
275+
*/
274276
function secondsToMilliseconds(secondsStr: string): string {
275277
const seconds = parseFloat(secondsStr);
276278
if (isNaN(seconds)) {
@@ -280,6 +282,10 @@ function secondsToMilliseconds(secondsStr: string): string {
280282
}
281283
}
282284

285+
/**
286+
* Converts a string representing milliseconds to a string representing seconds
287+
* Returns null if the input could not be parsed to a float
288+
*/
283289
function millisecondsToSeconds(millisecondsStr: string): string {
284290
const milliseconds = parseFloat(millisecondsStr);
285291
if (isNaN(milliseconds)) {

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

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

3131
<div class="col-sm-4">
3232
<input [type]="'number'" [id]="'notificationTimeOutInput'" class="form-control"
33-
[placeholder]="getPlaceholder(AccessibilitySetting.NotificationTimeOut)"
33+
[placeholder]="getPlaceholder('notificationTimeOut')"
3434
[readOnly]="formValues.disableNotificationTimeOut"
3535
[(ngModel)]="formValues.notificationTimeOut" [ngModelOptions]="{ standalone: true }"
3636
[attr.aria-describedby]="'notificationTimeOutHint'">
@@ -56,7 +56,7 @@ <h2>{{ 'info.accessibility-settings.title' | translate }}</h2>
5656

5757
<div class="col-sm-4">
5858
<input [type]="'number'" [id]="'liveRegionTimeOutInput'" class="form-control"
59-
[placeholder]="getPlaceholder(AccessibilitySetting.LiveRegionTimeOut)"
59+
[placeholder]="getPlaceholder('liveRegionTimeOut')"
6060
[(ngModel)]="formValues.liveRegionTimeOut" [ngModelOptions]="{ standalone: true }"
6161
[attr.aria-describedby]="'liveRegionTimeOutHint'">
6262
</div>

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ import { TranslateService } from '@ngx-translate/core';
1818
})
1919
export class AccessibilitySettingsComponent implements OnInit {
2020

21-
// Re-export for use in template
22-
protected readonly AccessibilitySetting = AccessibilitySetting;
23-
2421
protected formValues: AccessibilitySettingsFormValues;
2522

2623
constructor(

src/app/shared/live-region/live-region.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
22
import { BehaviorSubject, map, Observable, switchMap, take, timer } from 'rxjs';
33
import { environment } from '../../../environments/environment';
44
import { UUIDService } from '../../core/shared/uuid.service';
5-
import { AccessibilitySettingsService, AccessibilitySetting } from '../../accessibility/accessibility-settings.service';
5+
import { AccessibilitySettingsService } from '../../accessibility/accessibility-settings.service';
66

77
export const MIN_MESSAGE_DURATION = 200;
88

@@ -130,7 +130,7 @@ export class LiveRegionService {
130130
*/
131131
getConfiguredMessageTimeOutMs(): Observable<number> {
132132
return this.accessibilitySettingsService.getAsNumber(
133-
AccessibilitySetting.LiveRegionTimeOut,
133+
'liveRegionTimeOut',
134134
this.getMessageTimeOutMs(),
135135
).pipe(map(timeOut => Math.max(timeOut, MIN_MESSAGE_DURATION)));
136136
}

src/app/shared/notifications/notifications-board/notifications-board.component.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ import { INotification } from '../models/notification.model';
1818
import { NotificationsState } from '../notifications.reducers';
1919
import { INotificationBoardOptions } from '../../../../config/notifications-config.interfaces';
2020
import {
21-
AccessibilitySettingsService,
22-
AccessibilitySetting
21+
AccessibilitySettingsService
2322
} from '../../../accessibility/accessibility-settings.service';
2423
import cloneDeep from 'lodash/cloneDeep';
2524
import differenceWith from 'lodash/differenceWith';
@@ -98,7 +97,7 @@ export class NotificationsBoardComponent implements OnInit, OnDestroy {
9897

9998
// It would be a bit better to handle the retrieval of configured settings in the NotificationsService.
10099
// Due to circular dependencies this is difficult to implement.
101-
this.accessibilitySettingsService.getAsNumber(AccessibilitySetting.NotificationTimeOut, item.options.timeOut)
100+
this.accessibilitySettingsService.getAsNumber('notificationTimeOut', item.options.timeOut)
102101
.pipe(take(1)).subscribe(timeOut => {
103102
if (timeOut < 0) {
104103
timeOut = 0;

0 commit comments

Comments
 (0)