@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
114 lines • 15.6 kB
JavaScript
import { Component, Input, ViewChild } from '@angular/core';
import { AbstractViewWithHeadersComponent } from '../abstract/view-with-headers';
import { HeaderType } from '../../header/models/header-type';
import { Net } from '../../process/net';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { FormControl } from "@angular/forms";
import { debounceTime, filter, map } from "rxjs/operators";
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "./workflow-view.service";
import * as i3 from "../../logger/services/logger.service";
import * as i4 from "../../process/process.service";
import * as i5 from "@angular/router";
export class AbstractWorkflowViewComponent extends AbstractViewWithHeadersComponent {
_dialog;
_workflowViewService;
_log;
_processService;
footerSize;
showDeleteMenu = false;
workflowHeader;
headerType = HeaderType.WORKFLOW;
workflows$;
loading$;
fullTextFormControl;
viewport;
constructor(_dialog, _workflowViewService, _log, _processService, _activatedRoute) {
super(_workflowViewService, _activatedRoute);
this._dialog = _dialog;
this._workflowViewService = _workflowViewService;
this._log = _log;
this._processService = _processService;
this.workflows$ = this._workflowViewService.workflows$;
this.loading$ = this._workflowViewService.loading$;
this.footerSize = 0;
this.fullTextFormControl = new FormControl();
}
ngOnInit() {
this.fullTextFormControl.valueChanges.pipe(debounceTime(600), filter(newValue => typeof newValue === 'string'), map((newValue) => newValue.trim())).subscribe((fulltext) => {
if (fulltext.length === 0) {
this._workflowViewService.clearSearchTitle();
}
else {
this._workflowViewService.setSearchTitle(fulltext);
}
});
}
ngAfterViewInit() {
this.initializeHeader(this.workflowHeader);
}
importSidemenuNet(component) {
const dialogRef = this._dialog.open(component, {
width: '40%',
minWidth: '300px',
panelClass: "dialog-responsive",
});
dialogRef.afterClosed().subscribe(event => {
if (event.data?.net !== undefined) {
this._workflowViewService.reload();
if (event.data?.net) {
this._processService.updateNet(new Net(event.data.net));
}
}
else {
this._log.debug('');
}
});
}
trackBy(i) {
return i;
}
loadNextPage() {
if (!this.viewport) {
return;
}
this._workflowViewService.nextPage(this.viewport.getRenderedRange(), this.viewport.getDataLength());
}
calculateListHeight(preciseHeight) {
if (!this.viewport) {
return;
}
const element = this.viewport.getElementRef().nativeElement;
if (preciseHeight !== null && preciseHeight !== undefined) {
element.style.height = preciseHeight + 'px';
}
else {
const viewportHeight = window.innerHeight - element.offsetTop - this.footerSize;
if (element.style.height !== viewportHeight + 'px') {
this._log.info('Virtual scroll height change to: ' + viewportHeight);
element.style.height = viewportHeight + 'px';
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractWorkflowViewComponent, deps: [{ token: i1.MatDialog }, { token: i2.WorkflowViewService }, { token: i3.LoggerService }, { token: i4.ProcessService }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractWorkflowViewComponent, selector: "ncc-abstract-workflow-view", inputs: { footerSize: "footerSize", showDeleteMenu: "showDeleteMenu" }, viewQueries: [{ propertyName: "workflowHeader", first: true, predicate: ["header"], descendants: true }, { propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractWorkflowViewComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-workflow-view',
template: ''
}]
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.WorkflowViewService }, { type: i3.LoggerService }, { type: i4.ProcessService }, { type: i5.ActivatedRoute }], propDecorators: { footerSize: [{
type: Input
}], showDeleteMenu: [{
type: Input
}], workflowHeader: [{
type: ViewChild,
args: ['header']
}], viewport: [{
type: ViewChild,
args: [CdkVirtualScrollViewport]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtd29ya2Zsb3ctdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3ZpZXcvd29ya2Zsb3ctdmlldy9hYnN0cmFjdC13b3JrZmxvdy12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2pGLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdEMsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFLaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBWSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBT3BFLE1BQU0sT0FBZ0IsNkJBQThCLFNBQVEsZ0NBQWdDO0lBYXhEO0lBQ0E7SUFDQTtJQUNBO0lBZGhCLFVBQVUsQ0FBUztJQUMxQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ0osY0FBYyxDQUEwQjtJQUVwRCxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxVQUFVLENBQXlCO0lBQ25DLFFBQVEsQ0FBc0I7SUFDOUIsbUJBQW1CLENBQWM7SUFFSSxRQUFRLENBQTJCO0lBRS9FLFlBQWdDLE9BQWtCLEVBQ2xCLG9CQUF5QyxFQUN6QyxJQUFtQixFQUNuQixlQUErQixFQUN6QyxlQUFnQztRQUNsRCxLQUFLLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENB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QUFLLFNBQVMsRUFBRTtZQUN2RCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQy9DO2FBQU07WUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNoRixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLGNBQWMsR0FBRyxJQUFJLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDO2FBQ2hEO1NBQ0o7SUFDTCxDQUFDO3dHQXRGaUIsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsK1FBV3BDLHdCQUF3Qix1RUFiekIsRUFBRTs7NEZBRU0sNkJBQTZCO2tCQUpsRCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRSxFQUFFO2lCQUNmO3NNQUdtQixVQUFVO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ3NCLGNBQWM7c0JBQXpDLFNBQVM7dUJBQUMsUUFBUTtnQkFPeUIsUUFBUTtzQkFBbkQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V29ya2Zsb3dWaWV3U2VydmljZX0gZnJvbSAnLi93b3JrZmxvdy12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtBYnN0cmFjdEhlYWRlckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vaGVhZGVyL2Fic3RyYWN0LWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtBYnN0cmFjdFZpZXdXaXRoSGVhZGVyc0NvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3Qvdmlldy13aXRoLWhlYWRlcnMnO1xuaW1wb3J0IHtIZWFkZXJUeXBlfSBmcm9tICcuLi8uLi9oZWFkZXIvbW9kZWxzL2hlYWRlci10eXBlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05ldH0gZnJvbSAnLi4vLi4vcHJvY2Vzcy9uZXQnO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9jZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vcHJvY2Vzcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3Qtd29ya2Zsb3ctdmlldycsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0V29ya2Zsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RWaWV3V2l0aEhlYWRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gICAgQElucHV0KCkgcHVibGljIGZvb3RlclNpemU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzaG93RGVsZXRlTWVudSA9IGZhbHNlO1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlcicpIHB1YmxpYyB3b3JrZmxvd0hlYWRlcjogQWJzdHJhY3RIZWFkZXJDb21wb25lbnQ7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVyVHlwZSA9IEhlYWRlclR5cGUuV09SS0ZMT1c7XG4gICAgcHVibGljIHdvcmtmbG93cyQ6IE9ic2VydmFibGU8QXJyYXk8TmV0Pj47XG4gICAgcHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBmdWxsVGV4dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSBwdWJsaWMgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3dvcmtmbG93Vmlld1NlcnZpY2U6IFdvcmtmbG93Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Byb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2FjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpIHtcbiAgICAgICAgc3VwZXIoX3dvcmtmbG93Vmlld1NlcnZpY2UsIF9hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzJCA9IHRoaXMuX3dvcmtmbG93Vmlld1NlcnZpY2Uud29ya2Zsb3dzJDtcbiAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuX3dvcmtmbG93Vmlld1NlcnZpY2UubG9hZGluZyQ7XG4gICAgICAgIHRoaXMuZm9vdGVyU2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuZnVsbFRleHRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZ1bGxUZXh0Rm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoNjAwKSxcbiAgICAgICAgICAgIGZpbHRlcihuZXdWYWx1ZSA9PiB0eXBlb2YgbmV3VmFsdWUgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgICAgIG1hcCgobmV3VmFsdWU6IHN0cmluZykgPT4gbmV3VmFsdWUudHJpbSgpKVxuICAgICAgICApLnN1YnNjcmliZSgoZnVsbHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGZ1bGx0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93Vmlld1NlcnZpY2UuY2xlYXJTZWFyY2hUaXRsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93b3JrZmxvd1ZpZXdTZXJ2aWNlLnNldFNlYXJjaFRpdGxlKGZ1bGx0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVIZWFkZXIodGhpcy53b3JrZmxvd0hlYWRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydFNpZGVtZW51TmV0KGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3Blbihjb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNDAlJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogXCJkaWFsb2ctcmVzcG9uc2l2ZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhPy5uZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93Vmlld1NlcnZpY2UucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGE/Lm5ldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzU2VydmljZS51cGRhdGVOZXQobmV3IE5ldChldmVudC5kYXRhLm5ldCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNrQnkoaSk6IGFueSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dvcmtmbG93Vmlld1NlcnZpY2UubmV4dFBhZ2UodGhpcy52aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksIHRoaXMudmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2FsY3VsYXRlTGlzdEhlaWdodChwcmVjaXNlSGVpZ2h0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnZpZXdwb3J0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAocHJlY2lzZUhlaWdodCAhPT0gbnVsbCAmJiBwcmVjaXNlSGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gcHJlY2lzZUhlaWdodCArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5mb290ZXJTaXplO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3R5bGUuaGVpZ2h0ICE9PSB2aWV3cG9ydEhlaWdodCArICdweCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbygnVmlydHVhbCBzY3JvbGwgaGVpZ2h0IGNoYW5nZSB0bzogJyArIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19