Skip to content

Commit 83fbf8b

Browse files
114077: Fixed ViewChild not working correctly
1 parent f5f00ca commit 83fbf8b

3 files changed

Lines changed: 35 additions & 19 deletions

File tree

src/app/profile-page/profile-page.component.spec.ts

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ProfilePageComponent } from './profile-page.component';
22
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
33
import { VarDirective } from '../shared/utils/var.directive';
44
import { TranslateModule } from '@ngx-translate/core';
5-
import { RouterTestingModule } from '@angular/router/testing';
5+
import { RouterModule } from '@angular/router';
66
import { NO_ERRORS_SCHEMA } from '@angular/core';
77
import { EPerson } from '../core/eperson/models/eperson.model';
88
import { StoreModule } from '@ngrx/store';
@@ -93,7 +93,7 @@ describe('ProfilePageComponent', () => {
9393
imports: [
9494
StoreModule.forRoot({ auth: authReducer }, storeModuleConfig),
9595
TranslateModule.forRoot(),
96-
RouterTestingModule.withRoutes([])
96+
RouterModule.forRoot([]),
9797
],
9898
providers: [
9999
{ provide: EPersonDataService, useValue: epersonService },
@@ -122,9 +122,13 @@ describe('ProfilePageComponent', () => {
122122
describe('updateProfile', () => {
123123
describe('when the metadata form returns false and the security form returns true', () => {
124124
beforeEach(() => {
125-
component.metadataForm = jasmine.createSpyObj('metadataForm', {
126-
updateProfile: false
127-
});
125+
component.metadataForm = {
126+
compRef: {
127+
instance: {
128+
updateProfile: () => false,
129+
},
130+
},
131+
} as any;
128132
spyOn(component, 'updateSecurity').and.returnValue(true);
129133
component.updateProfile();
130134
});
@@ -136,9 +140,13 @@ describe('ProfilePageComponent', () => {
136140

137141
describe('when the metadata form returns true and the security form returns false', () => {
138142
beforeEach(() => {
139-
component.metadataForm = jasmine.createSpyObj('metadataForm', {
140-
updateProfile: true
141-
});
143+
component.metadataForm = {
144+
compRef: {
145+
instance: {
146+
updateProfile: () => true,
147+
},
148+
},
149+
} as any;
142150
component.updateProfile();
143151
});
144152

@@ -149,9 +157,13 @@ describe('ProfilePageComponent', () => {
149157

150158
describe('when the metadata form returns true and the security form returns true', () => {
151159
beforeEach(() => {
152-
component.metadataForm = jasmine.createSpyObj('metadataForm', {
153-
updateProfile: true
154-
});
160+
component.metadataForm = {
161+
compRef: {
162+
instance: {
163+
updateProfile: () => true,
164+
},
165+
},
166+
} as any;
155167
component.updateProfile();
156168
});
157169

@@ -162,9 +174,13 @@ describe('ProfilePageComponent', () => {
162174

163175
describe('when the metadata form returns false and the security form returns false', () => {
164176
beforeEach(() => {
165-
component.metadataForm = jasmine.createSpyObj('metadataForm', {
166-
updateProfile: false
167-
});
177+
component.metadataForm = {
178+
compRef: {
179+
instance: {
180+
updateProfile: () => false,
181+
},
182+
},
183+
} as any;
168184
component.updateProfile();
169185
});
170186

src/app/profile-page/profile-page.component.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Component, OnInit, ViewChild } from '@angular/core';
22
import { BehaviorSubject, Observable } from 'rxjs';
33
import { EPerson } from '../core/eperson/models/eperson.model';
4-
import { ProfilePageMetadataFormComponent } from './profile-page-metadata-form/profile-page-metadata-form.component';
4+
import { ThemedProfilePageMetadataFormComponent } from './profile-page-metadata-form/themed-profile-page-metadata-form.component';
55
import { NotificationsService } from '../shared/notifications/notifications.service';
66
import { TranslateService } from '@ngx-translate/core';
77
import { Group } from '../core/eperson/models/group.model';
@@ -32,7 +32,7 @@ export class ProfilePageComponent implements OnInit {
3232
/**
3333
* A reference to the metadata form component
3434
*/
35-
@ViewChild(ProfilePageMetadataFormComponent) metadataForm: ProfilePageMetadataFormComponent;
35+
@ViewChild(ThemedProfilePageMetadataFormComponent) metadataForm: ThemedProfilePageMetadataFormComponent;
3636

3737
/**
3838
* The authenticated user as observable
@@ -114,8 +114,8 @@ export class ProfilePageComponent implements OnInit {
114114
* Fire an update on both the metadata and security forms
115115
* Show a warning notification when no changes were made in both forms
116116
*/
117-
updateProfile() {
118-
const metadataChanged = this.metadataForm.updateProfile();
117+
updateProfile(): void {
118+
const metadataChanged = this.metadataForm.compRef.instance.updateProfile();
119119
const securityChanged = this.updateSecurity();
120120
if (!metadataChanged && !securityChanged) {
121121
this.notificationsService.warning(

src/app/shared/theme-support/themed.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { BASE_THEME_NAME } from './theme.constants';
2727
export abstract class ThemedComponent<T> implements OnInit, OnDestroy, OnChanges {
2828
@ViewChild('vcr', { read: ViewContainerRef }) vcr: ViewContainerRef;
2929
@ViewChild('content') themedElementContent: ElementRef;
30-
protected compRef: ComponentRef<T>;
30+
compRef: ComponentRef<T>;
3131

3232
/**
3333
* A reference to the themed component. Will start as undefined and emit every time the themed

0 commit comments

Comments
 (0)