lib-portal-angular 0.0.95 → 0.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
2
2
|
import * as i0 from "@angular/core";
|
3
3
|
import * as i1 from "../../service/auth-service.service";
|
4
4
|
import * as i2 from "@angular/common";
|
@@ -9,6 +9,7 @@ export class TabComponent {
|
|
9
9
|
this.tabs = [];
|
10
10
|
this.activeTabIndex = 0;
|
11
11
|
this.tabChanged = new EventEmitter();
|
12
|
+
this.showTabs = true; // Controla a exibição do componente
|
12
13
|
}
|
13
14
|
ngOnInit() {
|
14
15
|
if (this.hasComponentPermission() && this.tabs.length > 0) {
|
@@ -17,15 +18,16 @@ export class TabComponent {
|
|
17
18
|
}
|
18
19
|
ngOnChanges(changes) {
|
19
20
|
if (changes['tabs'] && !changes['tabs'].firstChange) {
|
20
|
-
this.
|
21
|
-
this.
|
21
|
+
this.tabs = [...this.tabs]; // Gera uma nova referência
|
22
|
+
this.activeTabIndex = 0;
|
23
|
+
this.cdr.markForCheck(); // Força a atualização
|
22
24
|
}
|
23
25
|
}
|
24
26
|
selectTab(index, event) {
|
25
27
|
if (event) {
|
26
|
-
event.preventDefault();
|
28
|
+
event.preventDefault();
|
27
29
|
}
|
28
|
-
if (this.hasPermission(this.tabs[index]
|
30
|
+
if (this.hasPermission(this.tabs[index]?.permissions)) {
|
29
31
|
this.activeTabIndex = index;
|
30
32
|
this.tabChanged.emit(this.activeTabIndex);
|
31
33
|
}
|
@@ -34,32 +36,31 @@ export class TabComponent {
|
|
34
36
|
if (!requiredPermissions || requiredPermissions.length === 0) {
|
35
37
|
return true;
|
36
38
|
}
|
37
|
-
|
38
|
-
return this.authService.hasPermission(requiredPermissions);
|
39
|
-
}
|
40
|
-
catch (error) {
|
41
|
-
console.error('Permission error:', error);
|
42
|
-
return false;
|
43
|
-
}
|
39
|
+
return this.authService.hasPermission(requiredPermissions);
|
44
40
|
}
|
45
41
|
hasComponentPermission() {
|
46
42
|
if (!this.componentPermissions || this.componentPermissions.length === 0) {
|
47
|
-
return true;
|
48
|
-
}
|
49
|
-
try {
|
50
|
-
return this.authService.hasPermission(this.componentPermissions);
|
51
|
-
}
|
52
|
-
catch (error) {
|
53
|
-
console.error('Permission error:', error);
|
54
|
-
return false;
|
43
|
+
return true;
|
55
44
|
}
|
45
|
+
return this.authService.hasPermission(this.componentPermissions);
|
46
|
+
}
|
47
|
+
trackByIndex(index) {
|
48
|
+
return index;
|
49
|
+
}
|
50
|
+
// 🔹 Método para reiniciar o componente
|
51
|
+
refreshTabs() {
|
52
|
+
this.showTabs = false; // Remove o componente do DOM
|
53
|
+
setTimeout(() => {
|
54
|
+
this.showTabs = true; // Adiciona novamente
|
55
|
+
this.cdr.detectChanges(); // Força a atualização do template
|
56
|
+
});
|
56
57
|
}
|
57
58
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, deps: [{ token: i1.AuthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
58
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n
|
59
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
59
60
|
}
|
60
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, decorators: [{
|
61
62
|
type: Component,
|
62
|
-
args: [{ selector: 'argenta-tab',
|
63
|
+
args: [{ selector: 'argenta-tab', template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
|
63
64
|
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
|
64
65
|
type: Input
|
65
66
|
}], activeTabIndex: [{
|
@@ -69,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
69
70
|
}], tabChanged: [{
|
70
71
|
type: Output
|
71
72
|
}] } });
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1wb3J0YWwtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQzs7OztBQVN2QixNQUFNLE9BQU8sWUFBWTtJQVFyQixZQUFvQixXQUF3QixFQUFVLEdBQXNCO1FBQXhELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFQbkUsU0FBSSxHQUEyRSxFQUFFLENBQUM7UUFDbEYsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFFMUIsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXhFLGFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxvQ0FBb0M7SUFFMEIsQ0FBQztJQUVoRixRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7WUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtTQUNsRDtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQWtCO1FBQ3ZDLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxtQkFBOEI7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEUsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsNkJBQTZCO1FBQ3BELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLHFCQUFxQjtZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsa0NBQWtDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0EzRFEsWUFBWTttR0FBWixZQUFZLHlOQ25CekIsMjRCQTBCQTs7NEZEUGEsWUFBWTtrQkFOeEIsU0FBUzsrQkFDSSxhQUFhO2tJQU1kLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXV0aC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FyZ2VudGEtdGFiJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgdGFiczogeyBsYWJlbDogc3RyaW5nOyBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+OyBwZXJtaXNzaW9ucz86IHN0cmluZ1tdIH1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGFjdGl2ZVRhYkluZGV4OiBudW1iZXIgPSAwO1xuICAgIEBJbnB1dCgpIGNvbXBvbmVudFBlcm1pc3Npb25zPzogc3RyaW5nW107XG4gICAgQE91dHB1dCgpIHRhYkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBzaG93VGFicyA9IHRydWU7IC8vIENvbnRyb2xhIGEgZXhpYmnDp8OjbyBkbyBjb21wb25lbnRlXG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBvbmVudFBlcm1pc3Npb24oKSAmJiB0aGlzLnRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy5hY3RpdmVUYWJJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0YWJzJ10gJiYgIWNoYW5nZXNbJ3RhYnMnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFic107IC8vIEdlcmEgdW1hIG5vdmEgcmVmZXLDqm5jaWFcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vIEZvcsOnYSBhIGF0dWFsaXphw6fDo29cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRhYihpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1Blcm1pc3Npb24odGhpcy50YWJzW2luZGV4XT8ucGVybWlzc2lvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLnRhYkNoYW5nZWQuZW1pdCh0aGlzLmFjdGl2ZVRhYkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1Blcm1pc3Npb24ocmVxdWlyZWRQZXJtaXNzaW9ucz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmVxdWlyZWRQZXJtaXNzaW9ucyB8fCByZXF1aXJlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbihyZXF1aXJlZFBlcm1pc3Npb25zKTtcbiAgICB9XG5cbiAgICBoYXNDb21wb25lbnRQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UGVybWlzc2lvbnMgfHwgdGhpcy5jb21wb25lbnRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5jb21wb25lbnRQZXJtaXNzaW9ucyk7XG4gICAgfVxuXG4gICAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgLy8g8J+UuSBNw6l0b2RvIHBhcmEgcmVpbmljaWFyIG8gY29tcG9uZW50ZVxuICAgIHJlZnJlc2hUYWJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dUYWJzID0gZmFsc2U7IC8vIFJlbW92ZSBvIGNvbXBvbmVudGUgZG8gRE9NXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93VGFicyA9IHRydWU7IC8vIEFkaWNpb25hIG5vdmFtZW50ZVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBGb3LDp2EgYSBhdHVhbGl6YcOnw6NvIGRvIHRlbXBsYXRlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGFic1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ29tcG9uZW50UGVybWlzc2lvbigpXCI+XG4gICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKHRhYi5wZXJtaXNzaW9ucylcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImkgPT09IGFjdGl2ZVRhYkluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgICA+e3sgdGFiLmxhYmVsIH19PC9hXG4gICAgICAgICAgPlxuICAgICAgICA8L2xpPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIlxuICAgICAgICBjbGFzcz1cInRhYi1wYW5lIGZhZGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdzaG93IGFjdGl2ZSc6IGkgPT09IGFjdGl2ZVRhYkluZGV4IH1cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
@@ -3740,6 +3740,7 @@ class TabComponent {
|
|
3740
3740
|
this.tabs = [];
|
3741
3741
|
this.activeTabIndex = 0;
|
3742
3742
|
this.tabChanged = new EventEmitter();
|
3743
|
+
this.showTabs = true; // Controla a exibição do componente
|
3743
3744
|
}
|
3744
3745
|
ngOnInit() {
|
3745
3746
|
if (this.hasComponentPermission() && this.tabs.length > 0) {
|
@@ -3748,15 +3749,16 @@ class TabComponent {
|
|
3748
3749
|
}
|
3749
3750
|
ngOnChanges(changes) {
|
3750
3751
|
if (changes['tabs'] && !changes['tabs'].firstChange) {
|
3751
|
-
this.
|
3752
|
-
this.
|
3752
|
+
this.tabs = [...this.tabs]; // Gera uma nova referência
|
3753
|
+
this.activeTabIndex = 0;
|
3754
|
+
this.cdr.markForCheck(); // Força a atualização
|
3753
3755
|
}
|
3754
3756
|
}
|
3755
3757
|
selectTab(index, event) {
|
3756
3758
|
if (event) {
|
3757
|
-
event.preventDefault();
|
3759
|
+
event.preventDefault();
|
3758
3760
|
}
|
3759
|
-
if (this.hasPermission(this.tabs[index]
|
3761
|
+
if (this.hasPermission(this.tabs[index]?.permissions)) {
|
3760
3762
|
this.activeTabIndex = index;
|
3761
3763
|
this.tabChanged.emit(this.activeTabIndex);
|
3762
3764
|
}
|
@@ -3765,32 +3767,31 @@ class TabComponent {
|
|
3765
3767
|
if (!requiredPermissions || requiredPermissions.length === 0) {
|
3766
3768
|
return true;
|
3767
3769
|
}
|
3768
|
-
|
3769
|
-
return this.authService.hasPermission(requiredPermissions);
|
3770
|
-
}
|
3771
|
-
catch (error) {
|
3772
|
-
console.error('Permission error:', error);
|
3773
|
-
return false;
|
3774
|
-
}
|
3770
|
+
return this.authService.hasPermission(requiredPermissions);
|
3775
3771
|
}
|
3776
3772
|
hasComponentPermission() {
|
3777
3773
|
if (!this.componentPermissions || this.componentPermissions.length === 0) {
|
3778
|
-
return true;
|
3779
|
-
}
|
3780
|
-
try {
|
3781
|
-
return this.authService.hasPermission(this.componentPermissions);
|
3782
|
-
}
|
3783
|
-
catch (error) {
|
3784
|
-
console.error('Permission error:', error);
|
3785
|
-
return false;
|
3774
|
+
return true;
|
3786
3775
|
}
|
3776
|
+
return this.authService.hasPermission(this.componentPermissions);
|
3777
|
+
}
|
3778
|
+
trackByIndex(index) {
|
3779
|
+
return index;
|
3780
|
+
}
|
3781
|
+
// 🔹 Método para reiniciar o componente
|
3782
|
+
refreshTabs() {
|
3783
|
+
this.showTabs = false; // Remove o componente do DOM
|
3784
|
+
setTimeout(() => {
|
3785
|
+
this.showTabs = true; // Adiciona novamente
|
3786
|
+
this.cdr.detectChanges(); // Força a atualização do template
|
3787
|
+
});
|
3787
3788
|
}
|
3788
3789
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, deps: [{ token: AuthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
3789
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"hasComponentPermission()\">\n
|
3790
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TabComponent, selector: "argenta-tab", inputs: { tabs: "tabs", activeTabIndex: "activeTabIndex", componentPermissions: "componentPermissions" }, outputs: { tabChanged: "tabChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
3790
3791
|
}
|
3791
3792
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabComponent, decorators: [{
|
3792
3793
|
type: Component,
|
3793
|
-
args: [{ selector: 'argenta-tab',
|
3794
|
+
args: [{ selector: 'argenta-tab', template: "<ng-container *ngIf=\"showTabs\">\n <ng-container *ngIf=\"hasComponentPermission()\">\n <ul class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\">\n <li class=\"nav-item\" *ngIf=\"hasPermission(tab.permissions)\">\n <a\n class=\"nav-link\"\n [class.active]=\"i === activeTabIndex\"\n (click)=\"selectTab(i, $event)\"\n href=\"#\"\n >{{ tab.label }}</a\n >\n </li>\n </ng-container>\n </ul>\n <div class=\"tab-content\">\n <div\n *ngFor=\"let tab of tabs; let i = index; trackBy: trackByIndex\"\n class=\"tab-pane fade\"\n [ngClass]=\"{ 'show active': i === activeTabIndex }\"\n >\n <ng-container *ngTemplateOutlet=\"tab.content\"></ng-container>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".nav-tabs .nav-item .nav-link{cursor:pointer;font-family:var(--font-family);border-top-left-radius:.3rem;border-top-right-radius:.3rem;font-size:14px;color:var(--primary-color);border:1px solid #ddd;transition:background-color .3s ease,color .3s ease}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--background-color);border-color:transparent}.nav-tabs .nav-item .nav-link:hover{background-color:var(--secondary-color);color:var(--background-color)}.tab-content .tab-pane{padding:1rem;border:1px solid #ddd;border-top:none}.nav-tabs .nav-item .nav-link{color:var(--primary-color)}.nav-tabs .nav-item .nav-link.active{background-color:var(--primary-color);color:var(--text-color)}\n"] }]
|
3794
3795
|
}], ctorParameters: function () { return [{ type: AuthService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tabs: [{
|
3795
3796
|
type: Input
|
3796
3797
|
}], activeTabIndex: [{
|