UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

83 lines 17.3 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { LoadingEmitter } from '@netgrif/components-core'; import { map } from "rxjs/operators"; import * as i0 from "@angular/core"; import * as i1 from "@netgrif/components-core"; import * as i2 from "@ngx-translate/core"; import * as i3 from "@angular/common"; import * as i4 from "@angular/material/button"; import * as i5 from "@angular/material/icon"; export class CreateCaseButtonComponent { _caseViewService; _translateService; caseCreatedEvent = new EventEmitter(); newCaseCreationConfig; disabled; _resolvedCaseButtonTitle; _resolvedCaseButtonIcon; _loading; constructor(_caseViewService, _translateService) { this._caseViewService = _caseViewService; this._translateService = _translateService; this._loading = new LoadingEmitter(); } get resolvedCaseButtonTitle() { return this._resolvedCaseButtonTitle; } get resolvedCaseButtonIcon() { return this._resolvedCaseButtonIcon; } get loading$() { return this._loading; } ngOnInit() { const config = this.newCaseCreationConfig['newCaseButtonConfig']; if (!!config) { this._resolvedCaseButtonIcon = config.createCaseButtonIcon; this._resolvedCaseButtonTitle = this.resolveTranslation(config); } } resolveTranslation(config) { const locale = this._translateService.currentLang; if (!config.createCaseButtonTitle.defaultValue && !config.createCaseButtonTitle.translations) { return ""; } return locale in config.createCaseButtonTitle.translations ? config.createCaseButtonTitle.translations[locale] : config.createCaseButtonTitle.defaultValue; } shouldShowCreateButton() { const blockNets = this.newCaseCreationConfig?.blockNets || []; return this._caseViewService.getNewCaseAllowedNets(blockNets).pipe(map(allowedNets => allowedNets.length > 0)); } createNewCase() { let myCase; this._loading.on(); if (this.newCaseCreationConfig.enableCaseTitle === false && this._caseViewService.getAllowedNetsCount() === 1) { myCase = this._caseViewService.createDefaultNewCase(this.newCaseCreationConfig); } else { myCase = this._caseViewService.createNewCase(this.newCaseCreationConfig); } myCase.subscribe(kaze => { if (this._caseViewService.viewEnabled(kaze)) { this.caseCreatedEvent.next(kaze); } }, error => { }, () => this._loading.off()); return myCase; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateCaseButtonComponent, deps: [{ token: i1.CaseViewService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateCaseButtonComponent, selector: "nc-create-case-button", inputs: { newCaseCreationConfig: "newCaseCreationConfig", disabled: "disabled" }, outputs: { caseCreatedEvent: "caseCreatedEvent" }, ngImport: i0, template: "<!-- Button without title -->\n<button *ngIf=\"(!resolvedCaseButtonTitle && (shouldShowCreateButton() | async)); else titleButton\"\n class=\"create-case-mat-mini-fab\"\n mat-mini-fab color=\"primary\" (click)=\"createNewCase()\"\n [class.spinner]=\"loading$ | async\" [disabled]=\"(loading$ | async) || disabled\">\n <mat-icon *ngIf=\"(loading$ | async) === false\" class=\"net-upload\" aria-hidden=\"false\">\n {{ !!resolvedCaseButtonIcon ? resolvedCaseButtonIcon : 'add' }}\n </mat-icon>\n</button>\n\n<!-- Button with title -->\n<ng-template #titleButton>\n <button *ngIf=\"shouldShowCreateButton() | async\" mat-flat-button class=\"height-44\" color=\"primary\"\n (click)=\"createNewCase()\" [class.spinner]=\"loading$ | async\"\n [disabled]=\"(loading$ | async) || disabled\">\n <mat-icon *ngIf=\"!!resolvedCaseButtonIcon && (loading$ | async) === false\" class=\"button-icon\"\n aria-hidden=\"false\">\n {{ resolvedCaseButtonIcon }}\n </mat-icon>\n <span *ngIf=\"(loading$ | async) === false\">{{ resolvedCaseButtonTitle }}</span>\n </button>\n</ng-template>\n", styles: [".button-icon{padding-right:4px;padding-bottom:2px}.height-44{height:44px}.create-case-mat-mini-fab{border-radius:6px;box-shadow:none;height:44px!important;min-width:44px;margin-right:8px;margin-top:2px}@keyframes spinner{to{transform:rotate(360deg)}}.spinner:before{content:\"\";box-sizing:border-box;position:absolute;top:50%;left:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;border-radius:50%;border:2px solid #ffffff;border-top-color:#000;animation:spinner .8s linear infinite}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateCaseButtonComponent, decorators: [{ type: Component, args: [{ selector: 'nc-create-case-button', template: "<!-- Button without title -->\n<button *ngIf=\"(!resolvedCaseButtonTitle && (shouldShowCreateButton() | async)); else titleButton\"\n class=\"create-case-mat-mini-fab\"\n mat-mini-fab color=\"primary\" (click)=\"createNewCase()\"\n [class.spinner]=\"loading$ | async\" [disabled]=\"(loading$ | async) || disabled\">\n <mat-icon *ngIf=\"(loading$ | async) === false\" class=\"net-upload\" aria-hidden=\"false\">\n {{ !!resolvedCaseButtonIcon ? resolvedCaseButtonIcon : 'add' }}\n </mat-icon>\n</button>\n\n<!-- Button with title -->\n<ng-template #titleButton>\n <button *ngIf=\"shouldShowCreateButton() | async\" mat-flat-button class=\"height-44\" color=\"primary\"\n (click)=\"createNewCase()\" [class.spinner]=\"loading$ | async\"\n [disabled]=\"(loading$ | async) || disabled\">\n <mat-icon *ngIf=\"!!resolvedCaseButtonIcon && (loading$ | async) === false\" class=\"button-icon\"\n aria-hidden=\"false\">\n {{ resolvedCaseButtonIcon }}\n </mat-icon>\n <span *ngIf=\"(loading$ | async) === false\">{{ resolvedCaseButtonTitle }}</span>\n </button>\n</ng-template>\n", styles: [".button-icon{padding-right:4px;padding-bottom:2px}.height-44{height:44px}.create-case-mat-mini-fab{border-radius:6px;box-shadow:none;height:44px!important;min-width:44px;margin-right:8px;margin-top:2px}@keyframes spinner{to{transform:rotate(360deg)}}.spinner:before{content:\"\";box-sizing:border-box;position:absolute;top:50%;left:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;border-radius:50%;border:2px solid #ffffff;border-top-color:#000;animation:spinner .8s linear infinite}\n"] }] }], ctorParameters: () => [{ type: i1.CaseViewService }, { type: i2.TranslateService }], propDecorators: { caseCreatedEvent: [{ type: Output }], newCaseCreationConfig: [{ type: Input }], disabled: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNhc2UtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy9zcmMvbGliL3ZpZXcvY2FzZS12aWV3L2NvbXBvbmVudHMvY3JlYXRlLWNhc2UtYnV0dG9uL2NyZWF0ZS1jYXNlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi92aWV3L2Nhc2Utdmlldy9jb21wb25lbnRzL2NyZWF0ZS1jYXNlLWJ1dHRvbi9jcmVhdGUtY2FzZS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBS0gsY0FBYyxFQUNqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVFuQyxNQUFNLE9BQU8seUJBQXlCO0lBVVo7SUFDQTtJQVRMLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDN0MscUJBQXFCLENBQW1DO0lBQ3hELFFBQVEsQ0FBVTtJQUV4Qix3QkFBd0IsQ0FBUztJQUNqQyx1QkFBdUIsQ0FBUztJQUNoQyxRQUFRLENBQWlCO0lBRW5DLFlBQXNCLGdCQUFpQyxFQUNqQyxpQkFBbUM7UUFEbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsd0JB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aXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDYXNlLFxuICAgIENhc2VWaWV3U2VydmljZSxcbiAgICBOZXdDYXNlQ3JlYXRpb25Db25maWd1cmF0aW9uRGF0YSxcbiAgICBOZXdDYXNlQnV0dG9uQ29uZmlndXJhdGlvbixcbiAgICBMb2FkaW5nRW1pdHRlclxufSBmcm9tICdAbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUnO1xuaW1wb3J0IHttYXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYy1jcmVhdGUtY2FzZS1idXR0b24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtY2FzZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NyZWF0ZS1jYXNlLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNhc2VCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBjYXNlQ3JlYXRlZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXNlPigpO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuZXdDYXNlQ3JlYXRpb25Db25maWc6IE5ld0Nhc2VDcmVhdGlvbkNvbmZpZ3VyYXRpb25EYXRhO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBfcmVzb2x2ZWRDYXNlQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3Jlc29sdmVkQ2FzZUJ1dHRvbkljb246IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xvYWRpbmc6IExvYWRpbmdFbWl0dGVyO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jYXNlVmlld1NlcnZpY2U6IENhc2VWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgIH1cblxuICAgIGdldCByZXNvbHZlZENhc2VCdXR0b25UaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRDYXNlQnV0dG9uVGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJlc29sdmVkQ2FzZUJ1dHRvbkljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkQ2FzZUJ1dHRvbkljb247XG4gICAgfVxuXG4gICAgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnOiBOZXdDYXNlQnV0dG9uQ29uZmlndXJhdGlvbiA9IHRoaXMubmV3Q2FzZUNyZWF0aW9uQ29uZmlnWyduZXdDYXNlQnV0dG9uQ29uZmlnJ107XG4gICAgICAgIGlmICghIWNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZWRDYXNlQnV0dG9uSWNvbiA9IGNvbmZpZy5jcmVhdGVDYXNlQnV0dG9uSWNvbjtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVkQ2FzZUJ1dHRvblRpdGxlID0gdGhpcy5yZXNvbHZlVHJhbnNsYXRpb24oY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlVHJhbnNsYXRpb24oY29uZmlnOiBOZXdDYXNlQnV0dG9uQ29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgICAgIGlmKCFjb25maWcuY3JlYXRlQ2FzZUJ1dHRvblRpdGxlLmRlZmF1bHRWYWx1ZSAmJiAhY29uZmlnLmNyZWF0ZUNhc2VCdXR0b25UaXRsZS50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGUgaW4gY29uZmlnLmNyZWF0ZUNhc2VCdXR0b25UaXRsZS50cmFuc2xhdGlvbnNcbiAgICAgICAgICAgID8gY29uZmlnLmNyZWF0ZUNhc2VCdXR0b25UaXRsZS50cmFuc2xhdGlvbnNbbG9jYWxlXVxuICAgICAgICAgICAgOiBjb25maWcuY3JlYXRlQ2FzZUJ1dHRvblRpdGxlLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkU2hvd0NyZWF0ZUJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgYmxvY2tOZXRzID0gdGhpcy5uZXdDYXNlQ3JlYXRpb25Db25maWc/LmJsb2NrTmV0cyB8fCBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VWaWV3U2VydmljZS5nZXROZXdDYXNlQWxsb3dlZE5ldHMoYmxvY2tOZXRzKS5waXBlKFxuICAgICAgICAgICAgbWFwKGFsbG93ZWROZXRzID0+IGFsbG93ZWROZXRzLmxlbmd0aCA+IDApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU5ld0Nhc2UoKTogT2JzZXJ2YWJsZTxDYXNlPiB7XG4gICAgICAgIGxldCBteUNhc2U6IE9ic2VydmFibGU8Q2FzZT47XG4gICAgICAgIHRoaXMuX2xvYWRpbmcub24oKTtcbiAgICAgICAgaWYgKHRoaXMubmV3Q2FzZUNyZWF0aW9uQ29uZmlnLmVuYWJsZUNhc2VUaXRsZSA9PT0gZmFsc2UgJiYgdGhpcy5fY2FzZVZpZXdTZXJ2aWNlLmdldEFsbG93ZWROZXRzQ291bnQoKSA9PT0gMSkge1xuICAgICAgICAgICAgbXlDYXNlID0gdGhpcy5fY2FzZVZpZXdTZXJ2aWNlLmNyZWF0ZURlZmF1bHROZXdDYXNlKHRoaXMubmV3Q2FzZUNyZWF0aW9uQ29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG15Q2FzZSA9IHRoaXMuX2Nhc2VWaWV3U2VydmljZS5jcmVhdGVOZXdDYXNlKHRoaXMubmV3Q2FzZUNyZWF0aW9uQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBteUNhc2Uuc3Vic2NyaWJlKGthemUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Nhc2VWaWV3U2VydmljZS52aWV3RW5hYmxlZChrYXplKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FzZUNyZWF0ZWRFdmVudC5uZXh0KGthemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIH0sICgpID0+IHRoaXMuX2xvYWRpbmcub2ZmKCkpO1xuXG4gICAgICAgIHJldHVybiBteUNhc2U7XG4gICAgfVxuXG59XG4iLCI8IS0tIEJ1dHRvbiB3aXRob3V0IHRpdGxlIC0tPlxuPGJ1dHRvbiAqbmdJZj1cIighcmVzb2x2ZWRDYXNlQnV0dG9uVGl0bGUgJiYgKHNob3VsZFNob3dDcmVhdGVCdXR0b24oKSB8IGFzeW5jKSk7IGVsc2UgdGl0bGVCdXR0b25cIlxuICAgICAgICBjbGFzcz1cImNyZWF0ZS1jYXNlLW1hdC1taW5pLWZhYlwiXG4gICAgICAgIG1hdC1taW5pLWZhYiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY3JlYXRlTmV3Q2FzZSgpXCJcbiAgICAgICAgW2NsYXNzLnNwaW5uZXJdPVwibG9hZGluZyQgfCBhc3luY1wiIFtkaXNhYmxlZF09XCIobG9hZGluZyQgfCBhc3luYykgfHwgZGlzYWJsZWRcIj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIobG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlXCIgY2xhc3M9XCJuZXQtdXBsb2FkXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiPlxuICAgICAgICB7eyAhIXJlc29sdmVkQ2FzZUJ1dHRvbkljb24gPyByZXNvbHZlZENhc2VCdXR0b25JY29uIDogJ2FkZCcgfX1cbiAgICA8L21hdC1pY29uPlxuPC9idXR0b24+XG5cbjwhLS0gQnV0dG9uIHdpdGggdGl0bGUgLS0+XG48bmctdGVtcGxhdGUgI3RpdGxlQnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG91bGRTaG93Q3JlYXRlQnV0dG9uKCkgfCBhc3luY1wiIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cImhlaWdodC00NFwiIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlTmV3Q2FzZSgpXCIgW2NsYXNzLnNwaW5uZXJdPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGxvYWRpbmckIHwgYXN5bmMpIHx8IGRpc2FibGVkXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiEhcmVzb2x2ZWRDYXNlQnV0dG9uSWNvbiAmJiAobG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlXCIgY2xhc3M9XCJidXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCI+XG4gICAgICAgICAgICB7eyByZXNvbHZlZENhc2VCdXR0b25JY29uIH19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiKGxvYWRpbmckIHwgYXN5bmMpID09PSBmYWxzZVwiPnt7IHJlc29sdmVkQ2FzZUJ1dHRvblRpdGxlIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==