mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
[MNT-24950] Fix process file preview button state (#10790)
* [MNT-24950] Fix process file preview button state * [MNT-24950] cr fix * [MNT-24950] fix unit tests error
This commit is contained in:
parent
c8f9bd21ea
commit
a426338f94
@ -83,7 +83,7 @@
|
||||
<mat-menu #fileActionMenu="matMenu" xPosition="before">
|
||||
<button
|
||||
id="{{ 'file-' + file.id + '-show-file' }}"
|
||||
[disabled]="file.isExternal || !file.contentAvailable || !file.mimeType"
|
||||
[disabled]="file.isExternal || !file.mimeType || (!file.sourceId && (isStartProcessPage || !file.contentAvailable))"
|
||||
mat-menu-item
|
||||
(click)="onAttachFileClicked(file)"
|
||||
>
|
||||
|
@ -26,7 +26,8 @@ import {
|
||||
FormFieldMetadata,
|
||||
DownloadService,
|
||||
AppConfigService,
|
||||
AppConfigValues
|
||||
AppConfigValues,
|
||||
UnitTestingUtils
|
||||
} from '@alfresco/adf-core';
|
||||
import { ContentNodeDialogService } from '@alfresco/adf-content-services';
|
||||
import { of } from 'rxjs';
|
||||
@ -37,6 +38,9 @@ import { ActivitiContentService } from '../../services/activiti-alfresco.service
|
||||
import { ProcessContentService } from '../../services/process-content.service';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatMenuHarness } from '@angular/material/menu/testing';
|
||||
|
||||
const fakeRepositoryListAnswer = [
|
||||
{
|
||||
@ -145,6 +149,8 @@ const fakePngAnswer: any = {
|
||||
describe('AttachFileWidgetComponent', () => {
|
||||
let widget: AttachFileWidgetComponent;
|
||||
let fixture: ComponentFixture<AttachFileWidgetComponent>;
|
||||
let loader: HarnessLoader;
|
||||
let unitTestingUtils: UnitTestingUtils;
|
||||
let element: HTMLInputElement;
|
||||
let activitiContentService: ActivitiContentService;
|
||||
let router: Router;
|
||||
@ -173,6 +179,8 @@ describe('AttachFileWidgetComponent', () => {
|
||||
});
|
||||
fixture = TestBed.createComponent(AttachFileWidgetComponent);
|
||||
widget = fixture.componentInstance;
|
||||
loader = TestbedHarnessEnvironment.loader(fixture);
|
||||
unitTestingUtils = new UnitTestingUtils(fixture.debugElement);
|
||||
element = fixture.nativeElement;
|
||||
router = TestBed.inject(Router);
|
||||
activatedRoute = TestBed.inject(ActivatedRoute);
|
||||
@ -189,6 +197,16 @@ describe('AttachFileWidgetComponent', () => {
|
||||
fixture.destroy();
|
||||
});
|
||||
|
||||
const isPreviewButtonDisabled = async (fileId: string): Promise<boolean> => {
|
||||
const menu = await loader.getHarness(MatMenuHarness);
|
||||
unitTestingUtils.clickByCSS(`#file-${fileId}-option-menu`);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const items = await menu.getItems();
|
||||
const showFileButton = items[0];
|
||||
return showFileButton.isDisabled();
|
||||
};
|
||||
|
||||
it('should add file to tempFilesList when form has value and file source is configured', () => {
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(fakeRepositoryListAnswer));
|
||||
spyOn(widget, 'isFileSourceConfigured').and.returnValue(true);
|
||||
@ -608,6 +626,115 @@ describe('AttachFileWidgetComponent', () => {
|
||||
const showOption = fixture.debugElement.query(By.css('#file-1155-show-file')).nativeElement as HTMLButtonElement;
|
||||
expect(showOption.disabled).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should set isStartProcessPage to true when URL contains start-process', () => {
|
||||
spyOnProperty(router, 'url', 'get').and.returnValue('/start-process?foo=bar');
|
||||
widget.ngOnInit();
|
||||
expect(widget.isStartProcessPage).toBeTrue();
|
||||
});
|
||||
|
||||
it('should set isStartProcessPage to false when URL does not contain start-process', () => {
|
||||
spyOnProperty(router, 'url', 'get').and.returnValue('/other-page?foo=start-process');
|
||||
widget.ngOnInit();
|
||||
expect(widget.isStartProcessPage).toBeFalse();
|
||||
});
|
||||
|
||||
it('should disable preview button when file is external', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: true,
|
||||
mimeType: 'application/pdf',
|
||||
contentAvailable: true
|
||||
};
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should disable preview button when file has no mime type', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: false,
|
||||
mimeType: null,
|
||||
contentAvailable: true
|
||||
};
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should disable preview button when content is not available and is start process page', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: false,
|
||||
mimeType: 'application/pdf',
|
||||
contentAvailable: false,
|
||||
sourceId: null
|
||||
};
|
||||
widget.isStartProcessPage = true;
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeTrue();
|
||||
});
|
||||
|
||||
it('should enable preview button when all conditions are met', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: false,
|
||||
mimeType: 'application/pdf',
|
||||
contentAvailable: true,
|
||||
sourceId: '456'
|
||||
};
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeFalse();
|
||||
});
|
||||
|
||||
it('should enable preview button and ignore start process page check when content is available', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: false,
|
||||
mimeType: 'application/pdf',
|
||||
contentAvailable: true,
|
||||
sourceId: '1234'
|
||||
};
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
widget.isStartProcessPage = true;
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeFalse();
|
||||
});
|
||||
|
||||
it('should enable preview button when sourceId exists even if content is not available', async () => {
|
||||
const testFile = {
|
||||
id: '123',
|
||||
isExternal: false,
|
||||
mimeType: 'application/pdf',
|
||||
contentAvailable: false,
|
||||
sourceId: '456'
|
||||
};
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [testFile]
|
||||
});
|
||||
|
||||
expect(await isPreviewButtonDisabled('123')).toBeFalse();
|
||||
});
|
||||
});
|
||||
|
||||
it('should be able to upload files when a defined folder from external content service', async () => {
|
||||
|
@ -18,21 +18,9 @@
|
||||
/* eslint-disable @angular-eslint/component-selector */
|
||||
|
||||
import { Component, DestroyRef, inject, isDevMode, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import {
|
||||
AppConfigService,
|
||||
AppConfigValues,
|
||||
DownloadService,
|
||||
ErrorWidgetComponent,
|
||||
FormService,
|
||||
ThumbnailService
|
||||
} from '@alfresco/adf-core';
|
||||
import { AppConfigService, AppConfigValues, DownloadService, ErrorWidgetComponent, FormService, ThumbnailService } from '@alfresco/adf-core';
|
||||
import { AlfrescoIconComponent, ContentNodeDialogService, ContentService } from '@alfresco/adf-content-services';
|
||||
import {
|
||||
AlfrescoEndpointRepresentation,
|
||||
Node,
|
||||
NodeChildAssociation,
|
||||
RelatedContentRepresentation
|
||||
} from '@alfresco/js-api';
|
||||
import { AlfrescoEndpointRepresentation, Node, NodeChildAssociation, RelatedContentRepresentation } from '@alfresco/js-api';
|
||||
import { from, of, zip } from 'rxjs';
|
||||
import { mergeMap } from 'rxjs/operators';
|
||||
import { AttachFileWidgetDialogService } from './attach-file-widget-dialog.service';
|
||||
@ -79,6 +67,8 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
export class AttachFileWidgetComponent extends UploadWidgetComponent implements OnInit {
|
||||
typeId = 'AttachFileWidgetComponent';
|
||||
repositoryList: AlfrescoEndpointRepresentation[] = [];
|
||||
isStartProcessPage = false;
|
||||
|
||||
private tempFilesList = [];
|
||||
|
||||
private readonly destroyRef = inject(DestroyRef);
|
||||
@ -101,7 +91,7 @@ export class AttachFileWidgetComponent extends UploadWidgetComponent implements
|
||||
|
||||
ngOnInit() {
|
||||
super.ngOnInit();
|
||||
|
||||
this.isStartProcessPage = this.router.url.split('?')[0].includes('start-process');
|
||||
if (Array.isArray(this.field.value) && this.isFileSourceConfigured()) {
|
||||
this.tempFilesList.push(...this.field.value);
|
||||
}
|
||||
@ -185,7 +175,7 @@ export class AttachFileWidgetComponent extends UploadWidgetComponent implements
|
||||
}
|
||||
|
||||
onAttachFileClicked(file: any) {
|
||||
if (file.isExternal || !file.contentAvailable) {
|
||||
if (file.isExternal || (!file.sourceId && (this.isStartProcessPage || !file.contentAvailable))) {
|
||||
return;
|
||||
}
|
||||
if (this.isTemporaryFile(file)) {
|
||||
@ -292,16 +282,12 @@ export class AttachFileWidgetComponent extends UploadWidgetComponent implements
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private updateNodesParams(): void {
|
||||
this.router.navigate(
|
||||
[],
|
||||
{
|
||||
relativeTo: this.activatedRoute,
|
||||
queryParams: { nodes: this.tempFilesList.map(file => file.id).join(',') },
|
||||
queryParamsHandling: 'merge'
|
||||
}
|
||||
);
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.activatedRoute,
|
||||
queryParams: { nodes: this.tempFilesList.map((file) => file.id).join(',') },
|
||||
queryParamsHandling: 'merge'
|
||||
});
|
||||
}
|
||||
|
||||
private getDomainHost(urlToCheck: string): string {
|
||||
|
Loading…
x
Reference in New Issue
Block a user