From bfec78aec92e3b0edc06d8d21e3462ef705bb0af Mon Sep 17 00:00:00 2001 From: Suzana Dirla Date: Thu, 21 Feb 2019 14:49:47 +0200 Subject: [PATCH] [ADF-4083] search facetFields - empty spaced labels support (#4322) * [ADF-4083] ignore wrapping quotes for facet labels - bucket selection needs fixing * [ADF-4083] fix bucket selection - generate missing filterQuery values * [ADF-4083] fix label display * [ADF-4083] renaming * [ADF-4083] support also single quotes label wrappings - update documentation - tests * [ADF-4083] automatically escape facet field labels having spaces - better fix * [ADF-4083] remove unneeded mentions from documentation * [ADF-4083] clean-up code * [ADF-4083] better naming param * [ADF-4083] small refactoring --- .../search-filter.component.md | 21 +++++---- docs/docassets/images/search-facet-fields.png | Bin 19660 -> 39016 bytes .../search-filter/search-filter.component.ts | 12 ++++- .../search-query-builder.service.spec.ts | 43 ++++++++++++++++++ .../search/search-query-builder.service.ts | 12 ++++- 5 files changed, 76 insertions(+), 12 deletions(-) diff --git a/docs/content-services/search-filter.component.md b/docs/content-services/search-filter.component.md index b4af1f0de0..9666a0f693 100644 --- a/docs/content-services/search-filter.component.md +++ b/docs/content-services/search-filter.component.md @@ -66,7 +66,7 @@ A typical configuration is shown below: "expanded": true, "fields": [ { "field": "content.mimetype", "mincount": 1, "label": "Type" }, - { "field": "content.size", "mincount": 1, "label": "Size" }, + { "field": "content.size", "mincount": 1, "label": "File Size" }, { "field": "creator", "mincount": 1, "label": "Creator" }, { "field": "modifier", "mincount": 1, "label": "Modifier" } ] @@ -254,13 +254,16 @@ export interface SearchWidgetSettings { ```json { "search": { - "facetFields": [ - { "field": "content.mimetype", "mincount": 1, "label": "Type" }, - { "field": "content.size", "mincount": 1, "label": "Size" }, - { "field": "creator", "mincount": 1, "label": "Creator" }, - { "field": "modifier", "mincount": 1, "label": "Modifier" }, - { "field": "created", "mincount": 1, "label": "Created" } - ] + "facetFields": { + "expanded": true, + "fields": [ + { "field": "content.mimetype", "mincount": 1, "label": "Type" }, + { "field": "content.size", "mincount": 1, "label": "File Size" }, + { "field": "creator", "mincount": 1, "label": "Creator" }, + { "field": "modifier", "mincount": 1, "label": "Modifier" }, + { "field": "created", "mincount": 1, "label": "Created" } + ] + } } } ``` @@ -268,7 +271,7 @@ export interface SearchWidgetSettings { Every field declared within the `facetFields` group is presented by a separate collapsible category at runtime. By default, users see only the top 5 entries. -If there are more than 5 entries, the "Show more" button is displayed to let the user move to +If there are more than 5 entries, a button to show more items is displayed to let the user move to the next block of results. ![Facet Fields](../docassets/images/search-facet-fields.png) diff --git a/docs/docassets/images/search-facet-fields.png b/docs/docassets/images/search-facet-fields.png index 3e87f851b783b5cebbcf56547b88fcbe3087dbfc..ac39e551d6aeb021e83e6f8fbf3a5358c0f46906 100644 GIT binary patch literal 39016 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 literal 19660 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 diff --git a/lib/content-services/search/components/search-filter/search-filter.component.ts b/lib/content-services/search/components/search-filter/search-filter.component.ts index b618447c8b..57010bb9a2 100644 --- a/lib/content-services/search/components/search-filter/search-filter.component.ts +++ b/lib/content-services/search/components/search-filter/search-filter.component.ts @@ -192,7 +192,7 @@ export class SearchFilterComponent implements OnInit, OnDestroy { private parseFacetItems(context: ResultSetContext, configFacetFields, itemType): FacetField[] { return configFacetFields.map((field) => { const responseField = (context.facets || []).find((response) => response.type === itemType && response.label === field.label) || {}; - const responseBuckets = this.getResponseBuckets(responseField) + const responseBuckets = this.getResponseBuckets(responseField, field) .filter(this.getFilterByMinCount(field.mincount)); const bucketList = new SearchFilterList(responseBuckets, field.pageSize); @@ -270,10 +270,11 @@ export class SearchFilterComponent implements OnInit, OnDestroy { return result; } - private getResponseBuckets(responseField: GenericFacetResponse): FacetFieldBucket[] { + private getResponseBuckets(responseField: GenericFacetResponse, configField: FacetField): FacetFieldBucket[] { return ((responseField && responseField.buckets) || []).map((respBucket) => { respBucket['count'] = this.getCountValue(respBucket); + respBucket.filterQuery = respBucket.filterQuery || this.getCorrespondingFilterQuery(configField, respBucket.label); return { ...respBucket, checked: false, @@ -312,4 +313,11 @@ export class SearchFilterComponent implements OnInit, OnDestroy { return bucket.count >= mincount; }; } + + private getCorrespondingFilterQuery (configFacetItem: FacetField, bucketLabel: string): string { + if (!configFacetItem.field || !bucketLabel) { + return null; + } + return `${configFacetItem.field}:"${bucketLabel}"`; + } } diff --git a/lib/content-services/search/search-query-builder.service.spec.ts b/lib/content-services/search/search-query-builder.service.spec.ts index 79e2df7434..96c97f916a 100644 --- a/lib/content-services/search/search-query-builder.service.spec.ts +++ b/lib/content-services/search/search-query-builder.service.spec.ts @@ -216,6 +216,20 @@ describe('SearchQueryBuilder', () => { expect(field).toBeFalsy(); }); + it('should fetch facets from the config by label with spaces and return field with request compatible label (escaped)', () => { + const config: SearchConfiguration = { + categories: [], + facetFields: { 'fields': [ + { 'field': 'content.size', 'mincount': 1, 'label': 'Label with spaces' } + ]} + }; + const builder = new SearchQueryBuilderService(buildConfig(config), null); + const field = builder.getFacetField('Label with spaces'); + + expect(field.label).toBe('"Label with spaces"'); + expect(field.field).toBe('content.size'); + }); + xit('should build query and raise an event on update', async () => { const builder = new SearchQueryBuilderService(buildConfig({}), null); const query = {}; @@ -371,6 +385,35 @@ describe('SearchQueryBuilder', () => { expect(compiled.facetFields.facets).toEqual(jasmine.objectContaining(config.facetFields.fields)); }); + it('should build query with custom facet fields automatically getting their request compatible labels', () => { + const spacesLabel = { + configValue: 'label with spaces', + requestCompatibleValue: '"label with spaces"' + }; + const noSpacesLabel = { + configValue: 'label', + requestCompatibleValue: 'label' + }; + + const config: SearchConfiguration = { + categories: [ + { id: 'cat1', enabled: true } + ], + facetFields: { fields: [ + { field: 'field1', label: spacesLabel.configValue, mincount: 1, limit: null, offset: 0, prefix: null }, + { field: 'field2', label: noSpacesLabel.configValue, mincount: 1, limit: null, offset: 0, prefix: null } + ]} + }; + const builder = new SearchQueryBuilderService(buildConfig(config), null); + builder.queryFragments['cat1'] = 'cm:name:test'; + + const compiled = builder.buildQuery(); + expect(compiled.facetFields.facets[0].label).toEqual(spacesLabel.requestCompatibleValue); + expect(compiled.facetFields.facets[0].label).not.toEqual(spacesLabel.configValue); + expect(compiled.facetFields.facets[1].label).toEqual(noSpacesLabel.requestCompatibleValue); + expect(compiled.facetFields.facets[1].label).toEqual(noSpacesLabel.configValue); + }); + it('should build query with custom facet intervals', () => { const config: SearchConfiguration = { categories: [ diff --git a/lib/content-services/search/search-query-builder.service.ts b/lib/content-services/search/search-query-builder.service.ts index c6037242c3..3385632d4a 100644 --- a/lib/content-services/search/search-query-builder.service.ts +++ b/lib/content-services/search/search-query-builder.service.ts @@ -175,6 +175,7 @@ export class SearchQueryBuilderService { const fields = this.config.facetFields.fields || []; const result = fields.find((field) => field.label === label); if (result) { + result.label = this.getSupportedLabel(result.label); return { ...result }; } } @@ -352,6 +353,7 @@ export class SearchQueryBuilderService { if (this.userFacetBuckets) { Object.keys(this.userFacetBuckets).forEach((key) => { const subQuery = (this.userFacetBuckets[key] || []) + .filter((bucket) => bucket.filterQuery) .map((bucket) => bucket.filterQuery) .join(' OR '); if (subQuery) { @@ -374,7 +376,7 @@ export class SearchQueryBuilderService { facets: facetFields.map((facet) => { field: facet.field, mincount: facet.mincount, - label: facet.label, + label: this.getSupportedLabel(facet.label), limit: facet.limit, offset: facet.offset, prefix: facet.prefix @@ -384,4 +386,12 @@ export class SearchQueryBuilderService { return null; } + + getSupportedLabel(configLabel: string): string { + const spaceInsideLabelIndex = configLabel.search(/\s/g); + if (spaceInsideLabelIndex > -1) { + return `"${configLabel}"`; + } + return configLabel; + } }