diff --git a/src/common/entities/SearchQueryDTO.ts b/src/common/entities/SearchQueryDTO.ts index dc0d4203..550347f7 100644 --- a/src/common/entities/SearchQueryDTO.ts +++ b/src/common/entities/SearchQueryDTO.ts @@ -90,6 +90,80 @@ export namespace SearchQueryDTO { case SearchQueryTypes.SOME_OF: throw new Error('Some of not supported'); + + default: + throw new Error('Unknown type' + query.type); + } + }; + export const stringify = (query: SearchQueryDTO): string => { + if (!query || !query.type) { + return ''; + } + switch (query.type) { + case SearchQueryTypes.AND: + return '(' + (query).list.map(q => SearchQueryDTO.stringify(q)).join(' AND ') + ')'; + + case SearchQueryTypes.OR: + return '(' + (query).list.map(q => SearchQueryDTO.stringify(q)).join(' OR ') + ')'; + + case SearchQueryTypes.SOME_OF: + if ((query).min) { + return (query).min + ' OF: (' + + (query).list.map(q => SearchQueryDTO.stringify(q)).join(', ') + ')'; + } + return 'SOME OF: (' + + (query).list.map(q => SearchQueryDTO.stringify(q)).join(', ') + ')'; + + + case SearchQueryTypes.orientation: + return 'orientation: ' + (query).landscape ? 'landscape' : 'portrait'; + + case SearchQueryTypes.date: + let ret = ''; + if ((query).after) { + ret += 'from: ' + (query).after; + } + if ((query).before) { + ret += ' to: ' + (query).before; + } + return ret.trim(); + case SearchQueryTypes.rating: + let rating = ''; + if ((query).min) { + rating += 'min-rating: ' + (query).min; + } + if ((query).max) { + rating += ' max-rating: ' + (query).max; + } + return rating.trim(); + case SearchQueryTypes.resolution: + let res = ''; + if ((query).min) { + res += 'min-resolution: ' + (query).min; + } + if ((query).max) { + res += ' max-resolution: ' + (query).max; + } + return res.trim(); + case SearchQueryTypes.distance: + return (query).distance + ' km from: ' + (query).from.text; + + case SearchQueryTypes.any_text: + return (query).text; + + case SearchQueryTypes.person: + case SearchQueryTypes.position: + case SearchQueryTypes.keyword: + case SearchQueryTypes.caption: + case SearchQueryTypes.file_name: + case SearchQueryTypes.directory: + if (!(query).text) { + return ''; + } + return SearchQueryTypes[query.type] + ':' + (query).text; + + default: + throw new Error('Unknown type: ' + query.type); } }; } diff --git a/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.html b/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.html index e86db9cc..b04c690b 100644 --- a/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.html +++ b/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.html @@ -6,7 +6,7 @@ name="listSearchType" class="form-control" [(ngModel)]="queryEntry.type" - (ngModelChange)="onChangeType($event)"> + (ngModelChange)="onChangeType()"> @@ -51,7 +51,7 @@ name="searchType" class="form-control" [(ngModel)]="queryEntry.type" - (ngModelChange)="onChangeType(queryEntry)"> + (ngModelChange)="onChangeType()"> diff --git a/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.ts b/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.ts index a3c004ab..21a4202d 100644 --- a/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.ts +++ b/src/frontend/app/ui/gallery/search/query-enrty/query-entry.search.gallery.component.ts @@ -97,7 +97,7 @@ export class GallerySearchQueryEntryComponent implements ControlValueAccessor, V this.AsListQuery.list.push({type: SearchQueryTypes.any_text, text: ''}); } - onChangeType($event: any) { + onChangeType() { if (this.IsListQuery) { delete this.AsTextQuery.text; this.AsListQuery.list = this.AsListQuery.list || [ diff --git a/src/frontend/app/ui/gallery/search/search.gallery.component.ts b/src/frontend/app/ui/gallery/search/search.gallery.component.ts index 76c56e44..4f0e7532 100644 --- a/src/frontend/app/ui/gallery/search/search.gallery.component.ts +++ b/src/frontend/app/ui/gallery/search/search.gallery.component.ts @@ -48,12 +48,11 @@ export class GallerySearchComponent implements OnDestroy { }); } - public get rawSearchText() { - return JSON.stringify(this.searchQueryDTO); + public get rawSearchText(): string { + return SearchQueryDTO.stringify(this.searchQueryDTO); } - public set rawSearchText(val: any) { - + public set rawSearchText(val: string) { } get HTMLSearchQuery() {