Skip to content

Commit c6e1ae3

Browse files
Mattia VianelliAndrea Barbasso
authored andcommitted
Merged in task/dspace-cris-2025_02_x/DSC-2694 (pull request DSpace#4076)
[CST-2694] fix accessibility settings retrieval after editing and saving them Approved-by: Andrea Barbasso
2 parents 3d7d87e + 39a22bb commit c6e1ae3

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ import {
22
fakeAsync,
33
flush,
44
} from '@angular/core/testing';
5+
import { Store } from '@ngrx/store';
56
import { of } from 'rxjs';
67

78
import { AppConfig } from '../../config/app-config.interface';
9+
import { AppState } from '../app.reducer';
810
import { AuthService } from '../core/auth/auth.service';
911
import { EPersonDataService } from '../core/eperson/eperson-data.service';
1012
import { EPerson } from '../core/eperson/models/eperson.model';
@@ -32,12 +34,14 @@ describe('accessibilitySettingsService', () => {
3234
let authService: AuthServiceStub;
3335
let ePersonService: EPersonDataService;
3436
let orejimeService: OrejimeServiceStub;
37+
let store: Store<AppState>;
3538
let appConfig: AppConfig;
3639

3740
beforeEach(() => {
3841
cookieService = new CookieServiceMock();
3942
authService = new AuthServiceStub();
4043
orejimeService = new OrejimeServiceStub();
44+
store = jasmine.createSpyObj('store', ['dispatch', 'pipe']);
4145
appConfig = { accessibility: { cookieExpirationDuration: 10 } } as AppConfig;
4246

4347
orejimeService.getSavedPreferences.and.returnValue(of({ accessibility: true }));
@@ -56,6 +60,7 @@ describe('accessibilitySettingsService', () => {
5660
ePersonService,
5761
orejimeService,
5862
appConfig,
63+
store,
5964
);
6065
});
6166

@@ -336,6 +341,7 @@ describe('accessibilitySettingsService', () => {
336341

337342
it('should emit "metadata" when the update succeeded', fakeAsync(() => {
338343
ePersonService.patch = jasmine.createSpy().and.returnValue(createSuccessfulRemoteDataObject$({}));
344+
store.pipe = jasmine.createSpy().and.returnValue(of('metadata'));
339345

340346
service.setSettingsInMetadata(ePerson, { ['liveRegionTimeOut']: '500' })
341347
.subscribe(value => {

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import {
33
Injectable,
44
Optional,
55
} from '@angular/core';
6+
import {
7+
select,
8+
Store,
9+
} from '@ngrx/store';
610
import cloneDeep from 'lodash/cloneDeep';
711
import {
812
combineLatest,
@@ -11,6 +15,7 @@ import {
1115
switchMap,
1216
} from 'rxjs';
1317
import {
18+
filter,
1419
map,
1520
take,
1621
} from 'rxjs/operators';
@@ -20,7 +25,10 @@ import {
2025
AppConfig,
2126
} from '../../config/app-config.interface';
2227
import { environment } from '../../environments/environment';
28+
import { AppState } from '../app.reducer';
29+
import { RetrieveAuthenticatedEpersonSuccessAction } from '../core/auth/auth.actions';
2330
import { AuthService } from '../core/auth/auth.service';
31+
import { getAuthenticatedUser } from '../core/auth/selectors';
2432
import { EPersonDataService } from '../core/eperson/eperson-data.service';
2533
import { EPerson } from '../core/eperson/models/eperson.model';
2634
import { CookieService } from '../core/services/cookie.service';
@@ -91,6 +99,7 @@ export class AccessibilitySettingsService {
9199
protected ePersonService: EPersonDataService,
92100
@Optional() protected orejimeService: OrejimeService,
93101
@Inject(APP_CONFIG) protected appConfig: AppConfig,
102+
private store: Store<AppState>,
94103
) {
95104
}
96105

@@ -234,7 +243,19 @@ export class AccessibilitySettingsService {
234243
switchMap(operations =>
235244
isNotEmpty(operations) ? this.ePersonService.patch(user, operations) : createSuccessfulRemoteDataObject$({})),
236245
getFirstCompletedRemoteData(),
237-
switchMap(rd => rd.hasSucceeded ? ofMetadata() : ofFailed()),
246+
switchMap(rd => {
247+
if (rd.hasSucceeded) {
248+
this.store.dispatch(new RetrieveAuthenticatedEpersonSuccessAction(user));
249+
return this.store.pipe(
250+
select(getAuthenticatedUser),
251+
filter((u) => !!u && u.id === user.id && u.firstMetadataValue(ACCESSIBILITY_SETTINGS_METADATA_KEY) === user.firstMetadataValue(ACCESSIBILITY_SETTINGS_METADATA_KEY)),
252+
take(1),
253+
switchMap(() => ofMetadata()),
254+
);
255+
} else {
256+
return ofFailed();
257+
}
258+
}),
238259
);
239260
}
240261

0 commit comments

Comments
 (0)