Eugenio Romano 210f1d8f59 [#4961] Angular v9 (ivy) compatibility fixes #5153 (#5156)
* Angular 9 compatibility: add explicit types to prevent automatic deep imports

If you do not provide an explicit return type to a function then TypeScript
will try to guess it and create a dynamic import type for the `.d.ts` files.

Often the imports incorrectly point to a path deep within a package,
rather than accessing the type via the correct public facing import.

From Angular v9, using ivy, such deep imports cause compilation
errors and will prevent this library from being used for ivy enabled
applications.

This commit fixes this problem for a component and a service that
the adf-core library exports.

* Angular 9 compatibility: import DOCUMENT from `@angular/common`

In Angular 7 importing `DOCUMENT` from `platform-browser` was
deprecated, and it was removed completely in Angular 8.

* fix type afterlast alpha

* fix type after last alpha

* fix types demo shell
2019-10-15 15:22:42 +01:00

81 lines
2.9 KiB
TypeScript

/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { SearchService } from '@alfresco/adf-core';
import { Injectable } from '@angular/core';
import { ResultSetPaging } from '@alfresco/js-api';
import { Observable } from 'rxjs';
/**
* Internal service used by ContentNodeSelector component.
*/
@Injectable({
providedIn: 'root'
})
export class ContentNodeSelectorService {
constructor(private searchService: SearchService) {
}
/**
* Performs a search for content node selection
*
* @param searchTerm The term to search for
* @param rootNodeId The root is to start the search from
* @param skipCount From where to start the loading
* @param maxItems How many items to load
* @param [extraNodeIds] List of extra node ids to search from. This last parameter is necessary when
* the rootNodeId is one of the supported aliases (e.g. '-my-', '-root-', '-mysites-', etc.)
* and search is not supported for that alias, but can be performed on its corresponding nodes.
*/
public search(searchTerm: string, rootNodeId: string = null, skipCount: number = 0, maxItems: number = 25, extraNodeIds?: string[]): Observable<ResultSetPaging> {
let extraParentFiltering = '';
if (extraNodeIds && extraNodeIds.length) {
extraNodeIds
.filter((id) => id !== rootNodeId)
.forEach((extraId) => {
extraParentFiltering += ` OR ANCESTOR:'workspace://SpacesStore/${extraId}'`;
});
}
const parentFiltering = rootNodeId ? [{ query: `ANCESTOR:'workspace://SpacesStore/${rootNodeId}'${extraParentFiltering}` }] : [];
const defaultSearchNode: any = {
query: {
query: `${searchTerm}* OR name:${searchTerm}*`
},
include: ['path', 'allowableOperations', 'properties'],
paging: {
maxItems: maxItems,
skipCount: skipCount
},
filterQueries: [
{ query: "TYPE:'cm:folder'" },
{ query: 'NOT cm:creator:System' },
...parentFiltering
],
scope: {
locations: ['nodes']
}
};
return this.searchService.searchByQueryBody(defaultSearchNode);
}
}