From 0a0decfc33b0717599b33b24c88be5945df64eb9 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 17 Nov 2020 14:21:14 +0100 Subject: [PATCH] 74609: Fix TypeError on search pages --- .../edit-in-place-field.component.html | 4 +- .../edit-in-place-field.component.spec.ts | 4 +- .../filter-input-suggestions.component.html | 12 ++- ...filter-input-suggestions.component.spec.ts | 12 +-- .../filter-input-suggestions.component.ts | 47 +--------- .../validation-suggestions.component.html | 24 ++++++ .../validation-suggestions.component.spec.ts | 63 ++++++++++++++ .../validation-suggestions.component.ts | 85 +++++++++++++++++++ src/app/shared/shared.module.ts | 2 + 9 files changed, 189 insertions(+), 64 deletions(-) create mode 100644 src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.html create mode 100644 src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.spec.ts create mode 100644 src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.ts diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html index 8f0776e4d3..cf226f7733 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html +++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html @@ -4,7 +4,7 @@ {{metadata?.key?.split('.').join('.​')}}
- + >
{{"item.edit.metadata.metadatafield.invalid" | translate}} diff --git a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts index 60419f41b2..4ecdb21e24 100644 --- a/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts +++ b/src/app/+item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts @@ -20,9 +20,9 @@ import { } from '../../../../shared/remote-data.utils'; import { followLink } from '../../../../shared/utils/follow-link-config.model'; import { EditInPlaceFieldComponent } from './edit-in-place-field.component'; -import { FilterInputSuggestionsComponent } from '../../../../shared/input-suggestions/filter-suggestions/filter-input-suggestions.component'; import { MockComponent, MockDirective } from 'ng-mocks'; import { DebounceDirective } from '../../../../shared/utils/debounce.directive'; +import { ValidationSuggestionsComponent } from '../../../../shared/input-suggestions/validation-suggestions/validation-suggestions.component'; let comp: EditInPlaceFieldComponent; let fixture: ComponentFixture; @@ -88,7 +88,7 @@ describe('EditInPlaceFieldComponent', () => { declarations: [ EditInPlaceFieldComponent, MockDirective(DebounceDirective), - MockComponent(FilterInputSuggestionsComponent) + MockComponent(ValidationSuggestionsComponent) ], providers: [ { provide: RegistryService, useValue: metadataFieldService }, diff --git a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.html b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.html index 91d8217ade..7a9481f2f1 100644 --- a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.html +++ b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.html @@ -1,15 +1,14 @@ -
- + + [ngModelOptions]="{standalone: true}" autocomplete="off"/> -
- + \ No newline at end of file diff --git a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.spec.ts b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.spec.ts index cb36071c28..51664039f7 100644 --- a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.spec.ts +++ b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.spec.ts @@ -3,11 +3,9 @@ import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angula import { TranslateModule } from '@ngx-translate/core'; import { By } from '@angular/platform-browser'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; -import { MetadataFieldDataService } from '../../../core/data/metadata-field-data.service'; -import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { FilterInputSuggestionsComponent } from './filter-input-suggestions.component'; describe('FilterInputSuggestionsComponent', () => { @@ -23,13 +21,9 @@ describe('FilterInputSuggestionsComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, FormsModule, ReactiveFormsModule], + imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, FormsModule], declarations: [FilterInputSuggestionsComponent], - providers: [FormsModule, - ReactiveFormsModule, - { provide: MetadataFieldDataService, useValue: {} }, - { provide: ObjectUpdatesService, useValue: {} }, - ], + providers: [], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(FilterInputSuggestionsComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } diff --git a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.ts b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.ts index 49aa46b757..9e7d84d9ed 100644 --- a/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.ts +++ b/src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.ts @@ -1,8 +1,5 @@ -import { Component, forwardRef, Input, OnInit } from '@angular/core'; -import { FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; -import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; -import { MetadatumViewModel } from '../../../core/shared/metadata.models'; -import { MetadataFieldValidator } from '../../utils/metadatafield-validator.directive'; +import { Component, forwardRef, Input } from '@angular/core'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { InputSuggestionsComponent } from '../input-suggestions.component'; import { InputSuggestion } from '../input-suggestions.model'; @@ -24,39 +21,12 @@ import { InputSuggestion } from '../input-suggestions.model'; /** * Component representing a form with a autocomplete functionality */ -export class FilterInputSuggestionsComponent extends InputSuggestionsComponent implements OnInit { - - form: FormGroup; - - /** - * The current url of this page - */ - @Input() url: string; - - /** - * The metadatum of this field - */ - @Input() metadata: MetadatumViewModel; - +export class FilterInputSuggestionsComponent extends InputSuggestionsComponent { /** * The suggestions that should be shown */ @Input() suggestions: InputSuggestion[] = []; - constructor(private metadataFieldValidator: MetadataFieldValidator, - private objectUpdatesService: ObjectUpdatesService) { - super(); - } - - ngOnInit() { - this.form = new FormGroup({ - metadataNameField: new FormControl(this._value, { - asyncValidators: [this.metadataFieldValidator.validate.bind(this.metadataFieldValidator)], - validators: [Validators.required] - }) - }); - } - onSubmit(data) { this.value = data; this.submitSuggestion.emit(data); @@ -70,15 +40,4 @@ export class FilterInputSuggestionsComponent extends InputSuggestionsComponent i this.queryInput.nativeElement.focus(); return false; } - - /** - * Check if the input is valid according to validator and send (in)valid state to store - * @param form Form with input - */ - checkIfValidInput(form) { - this.valid = !(form.get('metadataNameField').status === 'INVALID' && (form.get('metadataNameField').dirty || form.get('metadataNameField').touched)); - this.objectUpdatesService.setValidFieldUpdate(this.url, this.metadata.uuid, this.valid); - return this.valid; - } - } diff --git a/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.html b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.html new file mode 100644 index 0000000000..91d8217ade --- /dev/null +++ b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.html @@ -0,0 +1,24 @@ +
+ + + +
+ diff --git a/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.spec.ts b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.spec.ts new file mode 100644 index 0000000000..82e838effc --- /dev/null +++ b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.spec.ts @@ -0,0 +1,63 @@ +import { ChangeDetectionStrategy, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; + +import { TranslateModule } from '@ngx-translate/core'; +import { By } from '@angular/platform-browser'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MetadataFieldDataService } from '../../../core/data/metadata-field-data.service'; +import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; +import { ValidationSuggestionsComponent } from './validation-suggestions.component'; + +describe('ValidationSuggestionsComponent', () => { + + let comp: ValidationSuggestionsComponent; + let fixture: ComponentFixture; + let de: DebugElement; + let el: HTMLElement; + const suggestions = [{ displayValue: 'suggestion uno', value: 'suggestion uno' }, { + displayValue: 'suggestion dos', + value: 'suggestion dos' + }, { displayValue: 'suggestion tres', value: 'suggestion tres' }]; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NoopAnimationsModule, FormsModule, ReactiveFormsModule], + declarations: [ValidationSuggestionsComponent], + providers: [FormsModule, + ReactiveFormsModule, + { provide: MetadataFieldDataService, useValue: {} }, + { provide: ObjectUpdatesService, useValue: {} }, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ValidationSuggestionsComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ValidationSuggestionsComponent); + + comp = fixture.componentInstance; // LoadingComponent test instance + comp.suggestions = suggestions; + // query for the message