mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[AAE-3113] Node selector - Be able to restrict the breadcrums to a specific root (#5912)
* Be able to restrict the breadcrums to a specific root * Add unit test for breadcrumbs restriction * Fix refresh
This commit is contained in:
@@ -37,7 +37,7 @@ Opens a [Content Node Selector](content-node-selector.component.md) in its own
|
|||||||
| imageResolver | [`ImageResolver`](../../../lib/content-services/src/lib/document-list/data/image-resolver.model.ts) | null | Custom image resolver function. See the [Image Resolver Model](image-resolver.model.md) page for more information. |
|
| imageResolver | [`ImageResolver`](../../../lib/content-services/src/lib/document-list/data/image-resolver.model.ts) | null | Custom image resolver function. See the [Image Resolver Model](image-resolver.model.md) page for more information. |
|
||||||
| isSelectionValid | [`ValidationFunction`](../../../lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts) | defaultValidation | Function used to decide if the selected node has permission to be selected. Default value is a function that always returns true. |
|
| isSelectionValid | [`ValidationFunction`](../../../lib/content-services/src/lib/content-node-selector/content-node-selector-panel.component.ts) | defaultValidation | Function used to decide if the selected node has permission to be selected. Default value is a function that always returns true. |
|
||||||
| pageSize | `number` | | Number of items shown per page in the list. |
|
| pageSize | `number` | | Number of items shown per page in the list. |
|
||||||
| restrictSearchToCurrentFolderId | `boolean` | false | If true will restrict the search to the currentFolderId |
|
| restrictRootToCurrentFolderId | `boolean` | false | If true will restrict the search and breadcrumbs to the currentFolderId |
|
||||||
| where | `string` | | Custom _where_ filter function. See the [Document List component](../../content-services/components/document-list.component.md) for more information. |
|
| where | `string` | | Custom _where_ filter function. See the [Document List component](../../content-services/components/document-list.component.md) for more information. |
|
||||||
| excludeSiteContent | `string[]` | | Custom list of site content componentIds. Used to filter out the corresponding items from the displayed nodes |
|
| excludeSiteContent | `string[]` | | Custom list of site content componentIds. Used to filter out the corresponding items from the displayed nodes |
|
||||||
| rowFilter | [`RowFilter`](../../../lib/content-services/src/lib/document-list/data/row-filter.model.ts) | | Custom row filter function. See the [Row Filter Model](row-filter.model.md) page for more information. |
|
| rowFilter | [`RowFilter`](../../../lib/content-services/src/lib/document-list/data/row-filter.model.ts) | | Custom row filter function. See the [Row Filter Model](row-filter.model.md) page for more information. |
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
class="adf-content-node-selector-content-breadcrumb"
|
class="adf-content-node-selector-content-breadcrumb"
|
||||||
(navigate)="clearSearch()"
|
(navigate)="clearSearch()"
|
||||||
[target]="documentList"
|
[target]="documentList"
|
||||||
|
[rootId]="breadcrumbRootId"
|
||||||
[transform]="breadcrumbTransform"
|
[transform]="breadcrumbTransform"
|
||||||
[folderNode]="breadcrumbFolderNode"
|
[folderNode]="breadcrumbFolderNode"
|
||||||
[root]="breadcrumbFolderTitle"
|
[root]="breadcrumbFolderTitle"
|
||||||
|
@@ -638,7 +638,7 @@ describe('ContentNodeSelectorComponent', () => {
|
|||||||
|
|
||||||
it('should restrict the search to the currentFolderId in case is defined', () => {
|
it('should restrict the search to the currentFolderId in case is defined', () => {
|
||||||
component.currentFolderId = 'my-root-id';
|
component.currentFolderId = 'my-root-id';
|
||||||
component.restrictSearchToCurrentFolderId = true;
|
component.restrictRootToCurrentFolderId = true;
|
||||||
component.ngOnInit();
|
component.ngOnInit();
|
||||||
component.search('search');
|
component.search('search');
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ describe('ContentNodeSelectorComponent', () => {
|
|||||||
|
|
||||||
it('should restrict the search to the site and not to the currentFolderId in case is changed', () => {
|
it('should restrict the search to the site and not to the currentFolderId in case is changed', () => {
|
||||||
component.currentFolderId = 'my-root-id';
|
component.currentFolderId = 'my-root-id';
|
||||||
component.restrictSearchToCurrentFolderId = true;
|
component.restrictRootToCurrentFolderId = true;
|
||||||
component.ngOnInit();
|
component.ngOnInit();
|
||||||
component.siteChanged(<SiteEntry> { entry: { guid: 'my-site-id' } });
|
component.siteChanged(<SiteEntry> { entry: { guid: 'my-site-id' } });
|
||||||
component.search('search');
|
component.search('search');
|
||||||
@@ -655,6 +655,20 @@ describe('ContentNodeSelectorComponent', () => {
|
|||||||
expect(cnSearchSpy).toHaveBeenCalledWith('search', 'my-site-id', 0, 25, [], false);
|
expect(cnSearchSpy).toHaveBeenCalledWith('search', 'my-site-id', 0, 25, [], false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should restrict the breadcrumb to the currentFolderId in case restrictedRoot is true', () => {
|
||||||
|
component.currentFolderId = 'my-root-id';
|
||||||
|
component.restrictRootToCurrentFolderId = true;
|
||||||
|
component.ngOnInit();
|
||||||
|
expect(component.breadcrumbRootId).toEqual('my-root-id');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should NOT restrict the breadcrumb to the currentFolderId in case restrictedRoot is false', () => {
|
||||||
|
component.currentFolderId = 'my-root-id';
|
||||||
|
component.restrictRootToCurrentFolderId = false;
|
||||||
|
component.ngOnInit();
|
||||||
|
expect(component.breadcrumbRootId).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
it('should clear the search field, nodes and chosenNode when deleting the search input', fakeAsync(() => {
|
it('should clear the search field, nodes and chosenNode when deleting the search input', fakeAsync(() => {
|
||||||
spyOn(component, 'clear').and.callThrough();
|
spyOn(component, 'clear').and.callThrough();
|
||||||
typeToSearchBox('a');
|
typeToSearchBox('a');
|
||||||
|
@@ -60,9 +60,9 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy {
|
|||||||
private showSearchField = true;
|
private showSearchField = true;
|
||||||
private showFiles = false;
|
private showFiles = false;
|
||||||
|
|
||||||
/** If true will restrict the search to the currentFolderId */
|
/** If true will restrict the search and breadcrumbs to the currentFolderId */
|
||||||
@Input()
|
@Input()
|
||||||
restrictSearchToCurrentFolderId: boolean = false;
|
restrictRootToCurrentFolderId: boolean = false;
|
||||||
|
|
||||||
/** Node ID of the folder currently listed. */
|
/** Node ID of the folder currently listed. */
|
||||||
@Input()
|
@Input()
|
||||||
@@ -198,6 +198,7 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
nodePaging: NodePaging | null = null;
|
nodePaging: NodePaging | null = null;
|
||||||
siteId: null | string;
|
siteId: null | string;
|
||||||
|
breadcrumbRootId: null | string;
|
||||||
searchTerm: string = '';
|
searchTerm: string = '';
|
||||||
showingSearchResults: boolean = false;
|
showingSearchResults: boolean = false;
|
||||||
loadingSearchResults: boolean = false;
|
loadingSearchResults: boolean = false;
|
||||||
@@ -252,7 +253,8 @@ export class ContentNodeSelectorPanelComponent implements OnInit, OnDestroy {
|
|||||||
this.target = this.documentList;
|
this.target = this.documentList;
|
||||||
this.folderIdToShow = this.currentFolderId;
|
this.folderIdToShow = this.currentFolderId;
|
||||||
if (this.currentFolderId) {
|
if (this.currentFolderId) {
|
||||||
if (this.restrictSearchToCurrentFolderId) {
|
if (this.restrictRootToCurrentFolderId) {
|
||||||
|
this.breadcrumbRootId = this.currentFolderId;
|
||||||
this.siteId = this.currentFolderId;
|
this.siteId = this.currentFolderId;
|
||||||
} else {
|
} else {
|
||||||
this.getStartSite();
|
this.getStartSite();
|
||||||
|
@@ -23,6 +23,7 @@ export interface ContentNodeSelectorComponentData {
|
|||||||
actionName?: string;
|
actionName?: string;
|
||||||
currentFolderId: string;
|
currentFolderId: string;
|
||||||
dropdownHideMyFiles?: boolean;
|
dropdownHideMyFiles?: boolean;
|
||||||
|
restrictRootToCurrentFolderId?: boolean;
|
||||||
dropdownSiteList?: SitePaging;
|
dropdownSiteList?: SitePaging;
|
||||||
rowFilter?: any;
|
rowFilter?: any;
|
||||||
where?: string;
|
where?: string;
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<mat-dialog-content>
|
<mat-dialog-content>
|
||||||
<adf-content-node-selector-panel
|
<adf-content-node-selector-panel
|
||||||
[currentFolderId]="data?.currentFolderId"
|
[currentFolderId]="data?.currentFolderId"
|
||||||
|
[restrictRootToCurrentFolderId]="data?.restrictRootToCurrentFolderId"
|
||||||
[dropdownHideMyFiles]="data?.dropdownHideMyFiles"
|
[dropdownHideMyFiles]="data?.dropdownHideMyFiles"
|
||||||
[dropdownSiteList]="data?.dropdownSiteList"
|
[dropdownSiteList]="data?.dropdownSiteList"
|
||||||
[rowFilter]="data?.rowFilter"
|
[rowFilter]="data?.rowFilter"
|
||||||
|
@@ -45,6 +45,7 @@ export class ContentCloudNodeSelectorService {
|
|||||||
title: 'Select a file',
|
title: 'Select a file',
|
||||||
actionName: 'Choose',
|
actionName: 'Choose',
|
||||||
currentFolderId,
|
currentFolderId,
|
||||||
|
restrictRootToCurrentFolderId: true,
|
||||||
select,
|
select,
|
||||||
selectionMode,
|
selectionMode,
|
||||||
isSelectionValid: (entry: Node) => entry.isFile,
|
isSelectionValid: (entry: Node) => entry.isFile,
|
||||||
|
Reference in New Issue
Block a user