44024: simple search bugfixing

This commit is contained in:
Lotte Hofstede
2017-09-18 14:42:03 +02:00
parent b95900da84
commit b853a00561
5 changed files with 46 additions and 37 deletions

View File

@@ -1,4 +1,4 @@
<div class="search-page">
<ds-search-form [query]="query" [scope]="scopeObject?.payload" [currentParams]="currentParams" [scopes]="scopeList?.payload | async"></ds-search-form>
<ds-search-form [query]="query" [scope]="scopeObject?.payload | async" [currentParams]="currentParams" [scopes]="scopeList?.payload"></ds-search-form>
<ds-search-results [searchResults]="results" [searchConfig]="searchOptions"></ds-search-results>
</div>
</div>

View File

@@ -8,7 +8,7 @@ import { SortOptions } from '../core/cache/models/sort-options.model';
import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model';
import { SearchOptions } from '../search/search-options.model';
import { CommunityDataService } from '../core/data/community-data.service';
import { hasValue } from '../shared/empty.util';
import { isNotEmpty } from '../shared/empty.util';
import { Community } from '../core/shared/community.model';
/**
@@ -29,21 +29,14 @@ export class SearchPageComponent implements OnInit, OnDestroy {
scopeObject: RemoteData<DSpaceObject>;
private page: number;
results: RemoteData<Array<SearchResult<DSpaceObject>>>;
private currentParams = {};
currentParams = {};
searchOptions: SearchOptions;
scopeList: RemoteData<Community[]>;
constructor(private service: SearchService,
private route: ActivatedRoute,
private communityService: CommunityDataService,) {
// Sample scope data
const defaultScope: Community = new Community();
defaultScope.id = '';
this.scopeList = communityService.findAll();
this.scopeList.payload = this.scopeList.payload.map((list) => {
list.unshift(defaultScope);
return list
});
}
ngOnInit(): void {
@@ -61,7 +54,7 @@ export class SearchPageComponent implements OnInit, OnDestroy {
const sort: SortOptions = new SortOptions(params.sortField, params.sortDirection);
this.searchOptions = { pagination: pagination, sort: sort };
this.results = this.service.search(this.query, this.scope, this.searchOptions);
if (hasValue(this.scope)) {
if (isNotEmpty(this.scope)) {
this.scopeObject = this.communityService.findById(this.scope);
} else {
this.scopeObject = undefined;

View File

@@ -1,12 +1,16 @@
<form #form="ngForm" (ngSubmit)="onSubmit(form.value)">
<form #form="ngForm" (ngSubmit)="onSubmit(form.value)" class="row">
<div class="col-12 col-sm-3">
<select ngif="isNotEmpty(scopes | async)" [(ngModel)]="selectedId" name="scope" class="form-control" aria-label="Search scope" [compareWith]="byId">
<option value>{{'search.form.search_dspace' | translate}}</option>
<option *ngFor="let scopeOption of scopes | async" [value]="scopeOption.id">{{scopeOption?.name ? scopeOption.name : 'search.form.search_dspace' | translate}}</option>
</select>
</div>
<div class="col-12 col-sm-9">
<div class="form-group input-group">
<input type="text" [(ngModel)]="query" name="query" class="form-control" aria-label="Search input">
<input type="text" [(ngModel)]="scopeId" name="scopeId" class="form-control" aria-label="Search input scopeId">
<select ngif="isNotEmpty(scopes)" [(ngModel)]="scopeId" name="scope" class="form-control" aria-label="Search scope" (change)="onChange()" [compareWith]="byId">
<option *ngFor="let scopeOption of scopes" [ngValue]="scopeOption.id" [value]="scopeOption.id">{{scopeOption?.name ? scopeOption.name : 'search.form.search_dspace' | translate}}</option>
</select>
<div class="input-group-btn">
<span class="input-group-btn">
<button type="submit" class="search-button btn btn-secondary">{{ ('search.form.search' | translate) }}</button>
</div>
</span>
</div>
</div>
</form>

View File

@@ -1 +1,7 @@
@import '../../../styles/shared_imports.scss';
// temporary fix for bootstrap 4 beta btn color issue
.btn-secondary {
background-color: $input-bg;
color: $input-color;
}

View File

@@ -1,8 +1,8 @@
import { Component, Input, OnInit } from '@angular/core';
import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { Router } from '@angular/router';
import { isNotEmpty, isEmpty, hasNoValue } from '../empty.util';
import { Observable } from 'rxjs';
import { isNotEmpty, hasValue, isEmpty } from '../empty.util';
import { Observable } from 'rxjs/Observable';
/**
* This component renders a simple item page.
@@ -17,17 +17,27 @@ import { Observable } from 'rxjs';
})
export class SearchFormComponent implements OnInit {
@Input() query: string;
@Input() scope: Observable<DSpaceObject>;
scopeId: string;
selectedId = '';
// Optional existing search parameters
@Input() currentParams: {};
@Input() scopes: DSpaceObject[];
@Input() scopes: Observable<DSpaceObject[]>;
scopeOptions: string[] = [];
@Input()
set scope(dso: DSpaceObject) {
if (hasValue(dso)) {
this.selectedId = dso.id;
}
}
ngOnInit(): void {
this.scope.subscribe((scopeObject) => {
this.scopeId = scopeObject.id;
console.log("Initialized: ", scopeObject.id);
});
this.scopes
.filter((scopes: DSpaceObject[]) => isEmpty(scopes))
.subscribe((scopes: DSpaceObject[]) => {
this.scopeOptions = scopes
.map((scope: DSpaceObject) => scope.id);
}
);
}
constructor(private router: Router) {
@@ -38,11 +48,12 @@ export class SearchFormComponent implements OnInit {
}
updateSearch(data: any) {
this.router.navigate(['/search'], {
queryParams: Object.assign({}, this.currentParams,
{
query: data.query,
scope: data.scope,
scope: data.scope || undefined,
page: data.page || 1
}
)
@@ -50,15 +61,10 @@ export class SearchFormComponent implements OnInit {
;
}
private isNotEmpty(object: any) {
return isNotEmpty(object);
}
byId(id1: string, id2: string) {
if (isEmpty(id1) && isEmpty(id2)) {
return true;
}
return id1 === id2;
}
onChange(): void {
console.log('Scope: ', this.scope);
}
}