[ACA-4497] allow user to extend the search configuration (#2204)

* * support search extension

* * unit test added

* * fix lints

* Update application-features.md
This commit is contained in:
Dharan 2021-06-29 17:01:36 +05:30 committed by GitHub
parent 7cd333f22b
commit 9df2c8eaa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 493 additions and 212 deletions

View File

@ -15,6 +15,7 @@ The ACA supports the following set of extension points:
- Viewer - Viewer
- Sidebar (aka Info Drawer) - Sidebar (aka Info Drawer)
- Content metadata presets (for `Properties` tab) - Content metadata presets (for `Properties` tab)
- Search
All the customizations are stored in the `features` section of the configuration file: All the customizations are stored in the `features` section of the configuration file:
@ -699,3 +700,202 @@ Here is the initial setting from `app.extension.json`:
**Tip:** In order to allow the content-metadata presets to be extended, the settings from `app.config.json` must be copied to the `app.extensions.json` file and its ids must be added to all the items. **Tip:** In order to allow the content-metadata presets to be extended, the settings from `app.config.json` must be copied to the `app.extensions.json` file and its ids must be added to all the items.
Having ids allows external plugins to extend the current setting. Having ids allows external plugins to extend the current setting.
## Search
The search configurations are needed by the [Search Filter Component](https://www.alfresco.com/abn/adf/docs/content-services/components/search-filter.component/) to render the filters.
This is can be configured either in `app.config.json` or `app.extensions.json`.
Configuring search from `app.extensions.json` will overwrite/update the application search.
Settings them from custom plugins allows user to disable, update or extend.
```json
{
"search": {
"id": "app.search-extension",
"order": 100,
"name": "APP.BROWSE.SEARCH.DEFAULT_SEARCH",
"default": true,
"filterWithContains": true,
"aca:fields": ["cm:name", "cm:title", "cm:description", "TEXT", "TAG"],
"include": ["path", "allowableOperations", "properties"],
"sorting": {
"options": [
{
"key": "score",
"label": "SEARCH.SORT.RELEVANCE",
"type": "SCORE",
"field": "score",
"ascending": false
},
{
"key": "name",
"label": "SEARCH.SORT.FILENAME",
"type": "FIELD",
"field": "cm:name",
"ascending": true
},
{
"key": "title",
"label": "SEARCH.SORT.TITLE",
"type": "FIELD",
"field": "cm:title",
"ascending": true
},
{
"key": "modified",
"label": "SEARCH.SORT.MODIFIED_DATE",
"type": "FIELD",
"field": "cm:modified",
"ascending": true
},
{
"key": "modifier",
"label": "SEARCH.SORT.MODIFIER",
"type": "FIELD",
"field": "cm:modifier",
"ascending": true
},
{
"key": "created",
"label": "SEARCH.SORT.CREATE_DATE",
"type": "FIELD",
"field": "cm:created",
"ascending": true
},
{
"key": "content.sizeInBytes",
"label": "SEARCH.SORT.SIZE",
"type": "FIELD",
"field": "content.size",
"ascending": true
},
{
"key": "content.mimetype",
"label": "SEARCH.SORT.TYPE",
"type": "FIELD",
"field": "content.mimetype",
"ascending": true
}
],
"defaults": [
{
"key": "score",
"type": "SCORE",
"field": "score",
"ascending": false
}
]
},
"aca:triggeredOnChange": false,
"resetButton": true,
"filterQueries": [
{ "query": "+TYPE:'cm:folder' OR +TYPE:'cm:content'" },
{
"query": "-TYPE:'cm:thumbnail' AND -TYPE:'cm:failedThumbnail' AND -TYPE:'cm:rating'"
},
{ "query": "-cm:creator:System AND -QNAME:comment" },
{
"query": "-TYPE:'st:site' AND -ASPECT:'st:siteContainer' AND -ASPECT:'sys:hidden'"
},
{
"query": "-TYPE:'dl:dataList' AND -TYPE:'dl:todoList' AND -TYPE:'dl:issue'"
},
{ "query": "-TYPE:'fm:topic' AND -TYPE:'fm:post'" },
{ "query": "-TYPE:'lnk:link'" },
{ "query": "-PNAME:'0/wiki'" }
],
"facetFields": {
"expanded": true,
"fields": [
{
"mincount": 1,
"field": "content.mimetype",
"label": "SEARCH.FACET_FIELDS.FILE_TYPE",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
}
]
},
"facetQueries": {
"label": "SEARCH.CATEGORIES.MODIFIED_DATE",
"expanded": true,
"queries": [
{
"label": "SEARCH.FACET_QUERIES.TODAY",
"query": "cm:modified:[TODAY to TODAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_WEEK",
"query": "cm:modified:[NOW/DAY-7DAYS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_MONTH",
"query": "cm:modified:[NOW/DAY-1MONTH TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.LAST_6_MONTHS",
"query": "cm:modified:[NOW/DAY-6MONTHS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_YEAR",
"query": "cm:modified:[NOW/DAY-1YEAR TO NOW/DAY+1DAY]"
}
],
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
"categories": [
{
"id": "size",
"name": "SEARCH.CATEGORIES.SIZE",
"enabled": true,
"component": {
"selector": "check-list",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"options": [
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.SMALL",
"value": "content.size:[0 TO 1048576>"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.MEDIUM",
"value": "content.size:[1048576 TO 52428800]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.LARGE",
"value": "content.size:<52428800 TO 524288000]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.HUGE",
"value": "content.size:<524288000 TO MAX]"
}
]
}
}
},
{
"id": "createdDateRange",
"name": "SEARCH.CATEGORIES.CREATED_DATE",
"enabled": true,
"component": {
"selector": "date-range",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"field": "cm:created",
"dateFormat": "DD-MMM-YY",
"maxDate": "today"
}
}
}
]
}
}
```

View File

@ -873,4 +873,59 @@ describe('AppExtensionService', () => {
expect(actions.children[1].id).toBe('header.action.1'); expect(actions.children[1].id).toBe('header.action.1');
}); });
}); });
describe('search', () => {
beforeEach(() => {
applyConfig({
$id: 'test',
$name: 'test',
$version: '1.0.0',
$license: 'MIT',
$vendor: 'Good company',
$runtime: '1.5.0',
features: {
search: [
{
id: 'app.search',
order: 100,
name: 'default',
default: true,
filterWithContains: true,
'aca:fields': ['cm:name', 'cm:title', 'cm:description', 'TEXT', 'TAG'],
include: ['path', 'allowableOperations', 'properties'],
categories: [
{
id: 'size',
name: 'SEARCH.CATEGORIES.SIZE',
enabled: true
}
]
},
{
id: 'app.search-1',
order: 200,
name: 'default',
default: false
},
{
id: 'app.search-2',
order: 200,
name: 'default',
disabled: true
}
]
}
});
});
it('should load the search extension', () => {
expect(service.search.length).toBe(2);
expect(service.search[0].id).toBe('app.search');
expect(service.search[1].id).toBe('app.search-1');
});
it('should not load the disabled search extension', () => {
expect(service.search.find(({ id }) => id === 'app.search-2')).toBe(undefined, 'disabled configuration shown in the result');
});
});
}); });

View File

@ -47,7 +47,8 @@ import {
ExtensionRef, ExtensionRef,
RuleContext, RuleContext,
DocumentListPresetRef, DocumentListPresetRef,
IconRef IconRef,
mergeArrays
} from '@alfresco/adf-extensions'; } from '@alfresco/adf-extensions';
import { AppConfigService, AuthenticationService, LogService } from '@alfresco/adf-core'; import { AppConfigService, AuthenticationService, LogService } from '@alfresco/adf-core';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable } from 'rxjs';
@ -73,6 +74,7 @@ export class AppExtensionService implements RuleContext {
sidebarTabs: Array<SidebarTabRef> = []; sidebarTabs: Array<SidebarTabRef> = [];
sidebarActions: Array<ContentActionRef> = []; sidebarActions: Array<ContentActionRef> = [];
contentMetadata: any; contentMetadata: any;
search: any;
viewerRules: ViewerRules = {}; viewerRules: ViewerRules = {};
settingGroups: Array<SettingsGroupRef> = []; settingGroups: Array<SettingsGroupRef> = [];
@ -150,6 +152,7 @@ export class AppExtensionService implements RuleContext {
this.navbar = this.loadNavBar(config); this.navbar = this.loadNavBar(config);
this.sidebarTabs = this.loader.getElements<SidebarTabRef>(config, 'features.sidebar.tabs'); this.sidebarTabs = this.loader.getElements<SidebarTabRef>(config, 'features.sidebar.tabs');
this.contentMetadata = this.loadContentMetadata(config); this.contentMetadata = this.loadContentMetadata(config);
this.search = this.loadSearchForms(config);
this.documentListPresets = { this.documentListPresets = {
files: this.getDocumentListPreset(config, 'files'), files: this.getDocumentListPreset(config, 'files'),
@ -286,6 +289,25 @@ export class AppExtensionService implements RuleContext {
return { presets }; return { presets };
} }
loadSearchForms(config: ExtensionConfig): any {
const elements = this.loader.getElements<any>(config, 'features.search');
if (!elements.length) {
return null;
}
let search = [];
search = mergeArrays(search, elements)
.filter((entry) => !entry.disabled)
.sort(sortByOrder);
try {
this.appConfig.config['search'] = search;
} catch (error) {
this.logger.error(error, '- could not change search from app.config -');
}
return search;
}
filterDisabled(object: Array<{ disabled: boolean }> | { disabled: boolean }) { filterDisabled(object: Array<{ disabled: boolean }> | { disabled: boolean }) {
if (Array.isArray(object)) { if (Array.isArray(object)) {
return object.filter((item) => !item.disabled).map((item) => this.filterDisabled(item)); return object.filter((item) => !item.disabled).map((item) => this.filterDisabled(item));

View File

@ -189,217 +189,6 @@
"multi-value-pipe-separator": ", ", "multi-value-pipe-separator": ", ",
"multi-value-chips": true "multi-value-chips": true
}, },
"search": [{
"filterWithContains": true,
"aca:fields": ["cm:name", "cm:title", "cm:description", "TEXT", "TAG"],
"include": ["path", "allowableOperations", "properties"],
"sorting": {
"options": [
{
"key": "score",
"label": "SEARCH.SORT.RELEVANCE",
"type": "SCORE",
"field": "score",
"ascending": false
},
{
"key": "name",
"label": "SEARCH.SORT.FILENAME",
"type": "FIELD",
"field": "cm:name",
"ascending": true
},
{
"key": "title",
"label": "SEARCH.SORT.TITLE",
"type": "FIELD",
"field": "cm:title",
"ascending": true
},
{
"key": "modified",
"label": "SEARCH.SORT.MODIFIED_DATE",
"type": "FIELD",
"field": "cm:modified",
"ascending": true
},
{
"key": "modifier",
"label": "SEARCH.SORT.MODIFIER",
"type": "FIELD",
"field": "cm:modifier",
"ascending": true
},
{
"key": "created",
"label": "SEARCH.SORT.CREATE_DATE",
"type": "FIELD",
"field": "cm:created",
"ascending": true
},
{
"key": "content.sizeInBytes",
"label": "SEARCH.SORT.SIZE",
"type": "FIELD",
"field": "content.size",
"ascending": true
},
{
"key": "content.mimetype",
"label": "SEARCH.SORT.TYPE",
"type": "FIELD",
"field": "content.mimetype",
"ascending": true
}
],
"defaults": [
{
"key": "score",
"type": "SCORE",
"field": "score",
"ascending": false
}
]
},
"aca:triggeredOnChange": false,
"resetButton": true,
"filterQueries": [
{ "query": "+TYPE:'cm:folder' OR +TYPE:'cm:content'" },
{
"query": "-TYPE:'cm:thumbnail' AND -TYPE:'cm:failedThumbnail' AND -TYPE:'cm:rating'"
},
{ "query": "-cm:creator:System AND -QNAME:comment" },
{
"query": "-TYPE:'st:site' AND -ASPECT:'st:siteContainer' AND -ASPECT:'sys:hidden'"
},
{
"query": "-TYPE:'dl:dataList' AND -TYPE:'dl:todoList' AND -TYPE:'dl:issue'"
},
{ "query": "-TYPE:'fm:topic' AND -TYPE:'fm:post'" },
{ "query": "-TYPE:'lnk:link'" },
{ "query": "-PNAME:'0/wiki'" }
],
"facetFields": {
"expanded": true,
"fields": [
{
"mincount": 1,
"field": "content.mimetype",
"label": "SEARCH.FACET_FIELDS.FILE_TYPE",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "creator",
"label": "SEARCH.FACET_FIELDS.CREATOR",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "modifier",
"label": "SEARCH.FACET_FIELDS.MODIFIER",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "SITE",
"label": "SEARCH.FACET_FIELDS.LOCATION",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
}
]
},
"facetQueries": {
"label": "SEARCH.CATEGORIES.MODIFIED_DATE",
"expanded": true,
"queries": [
{
"label": "SEARCH.FACET_QUERIES.TODAY",
"query": "cm:modified:[TODAY to TODAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_WEEK",
"query": "cm:modified:[NOW/DAY-7DAYS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_MONTH",
"query": "cm:modified:[NOW/DAY-1MONTH TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.LAST_6_MONTHS",
"query": "cm:modified:[NOW/DAY-6MONTHS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_YEAR",
"query": "cm:modified:[NOW/DAY-1YEAR TO NOW/DAY+1DAY]"
}
],
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
"categories": [
{
"id": "size",
"name": "SEARCH.CATEGORIES.SIZE",
"enabled": true,
"component": {
"selector": "check-list",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"options": [
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.SMALL",
"value": "content.size:[0 TO 1048576>"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.MEDIUM",
"value": "content.size:[1048576 TO 52428800]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.LARGE",
"value": "content.size:<52428800 TO 524288000]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.HUGE",
"value": "content.size:<524288000 TO MAX]"
}
]
}
}
},
{
"id": "createdDateRange",
"name": "SEARCH.CATEGORIES.CREATED_DATE",
"enabled": true,
"component": {
"selector": "date-range",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"field": "cm:created",
"dateFormat": "DD-MMM-YY",
"maxDate": "today"
}
}
}
],
"name": "APP.BROWSE.SEARCH.DEFAULT_SEARCH",
"default": true
}],
"search-headers": { "search-headers": {
"filterWithContains": true, "filterWithContains": true,
"app:fields": [ "app:fields": [

View File

@ -1178,6 +1178,221 @@
} }
] ]
}, },
"search": [
{
"id": "app.search.default",
"order": 100,
"filterWithContains": true,
"aca:fields": ["cm:name", "cm:title", "cm:description", "TEXT", "TAG"],
"include": ["path", "allowableOperations", "properties"],
"sorting": {
"options": [
{
"key": "score",
"label": "SEARCH.SORT.RELEVANCE",
"type": "SCORE",
"field": "score",
"ascending": false
},
{
"key": "name",
"label": "SEARCH.SORT.FILENAME",
"type": "FIELD",
"field": "cm:name",
"ascending": true
},
{
"key": "title",
"label": "SEARCH.SORT.TITLE",
"type": "FIELD",
"field": "cm:title",
"ascending": true
},
{
"key": "modified",
"label": "SEARCH.SORT.MODIFIED_DATE",
"type": "FIELD",
"field": "cm:modified",
"ascending": true
},
{
"key": "modifier",
"label": "SEARCH.SORT.MODIFIER",
"type": "FIELD",
"field": "cm:modifier",
"ascending": true
},
{
"key": "created",
"label": "SEARCH.SORT.CREATE_DATE",
"type": "FIELD",
"field": "cm:created",
"ascending": true
},
{
"key": "content.sizeInBytes",
"label": "SEARCH.SORT.SIZE",
"type": "FIELD",
"field": "content.size",
"ascending": true
},
{
"key": "content.mimetype",
"label": "SEARCH.SORT.TYPE",
"type": "FIELD",
"field": "content.mimetype",
"ascending": true
}
],
"defaults": [
{
"key": "score",
"type": "SCORE",
"field": "score",
"ascending": false
}
]
},
"aca:triggeredOnChange": false,
"resetButton": true,
"filterQueries": [
{ "query": "+TYPE:'cm:folder' OR +TYPE:'cm:content'" },
{
"query": "-TYPE:'cm:thumbnail' AND -TYPE:'cm:failedThumbnail' AND -TYPE:'cm:rating'"
},
{ "query": "-cm:creator:System AND -QNAME:comment" },
{
"query": "-TYPE:'st:site' AND -ASPECT:'st:siteContainer' AND -ASPECT:'sys:hidden'"
},
{
"query": "-TYPE:'dl:dataList' AND -TYPE:'dl:todoList' AND -TYPE:'dl:issue'"
},
{ "query": "-TYPE:'fm:topic' AND -TYPE:'fm:post'" },
{ "query": "-TYPE:'lnk:link'" },
{ "query": "-PNAME:'0/wiki'" }
],
"facetFields": {
"expanded": true,
"fields": [
{
"mincount": 1,
"field": "content.mimetype",
"label": "SEARCH.FACET_FIELDS.FILE_TYPE",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "creator",
"label": "SEARCH.FACET_FIELDS.CREATOR",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "modifier",
"label": "SEARCH.FACET_FIELDS.MODIFIER",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
{
"mincount": 1,
"field": "SITE",
"label": "SEARCH.FACET_FIELDS.LOCATION",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
}
]
},
"facetQueries": {
"label": "SEARCH.CATEGORIES.MODIFIED_DATE",
"expanded": true,
"queries": [
{
"label": "SEARCH.FACET_QUERIES.TODAY",
"query": "cm:modified:[TODAY to TODAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_WEEK",
"query": "cm:modified:[NOW/DAY-7DAYS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_MONTH",
"query": "cm:modified:[NOW/DAY-1MONTH TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.LAST_6_MONTHS",
"query": "cm:modified:[NOW/DAY-6MONTHS TO NOW/DAY+1DAY]"
},
{
"label": "SEARCH.FACET_QUERIES.THIS_YEAR",
"query": "cm:modified:[NOW/DAY-1YEAR TO NOW/DAY+1DAY]"
}
],
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true
}
},
"categories": [
{
"id": "size",
"name": "SEARCH.CATEGORIES.SIZE",
"enabled": true,
"component": {
"selector": "check-list",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"options": [
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.SMALL",
"value": "content.size:[0 TO 1048576>"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.MEDIUM",
"value": "content.size:[1048576 TO 52428800]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.LARGE",
"value": "content.size:<52428800 TO 524288000]"
},
{
"name": "SEARCH.CATEGORIES.SIZE_OPTIONS.HUGE",
"value": "content.size:<524288000 TO MAX]"
}
]
}
}
},
{
"id": "createdDateRange",
"name": "SEARCH.CATEGORIES.CREATED_DATE",
"enabled": true,
"component": {
"selector": "date-range",
"settings": {
"allowUpdateOnChange": false,
"hideDefaultAction": true,
"field": "cm:created",
"dateFormat": "DD-MMM-YY",
"maxDate": "today"
}
}
}
],
"name": "APP.BROWSE.SEARCH.DEFAULT_SEARCH",
"default": true
}
],
"content-metadata-presets": [ "content-metadata-presets": [
{ {
"id": "app.content.metadata.custom", "id": "app.content.metadata.custom",