aril 1.2.18 → 2.0.1-dev.0
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.
- package/boot/bridge/src/mfe-bridge.d.ts +42 -2
- package/boot/config/apps/index.d.ts +7 -1
- package/boot/config/apps/src/custom-reuse-outlet.component.d.ts +37 -0
- package/boot/config/apps/src/custom-route-reuse-strategy.class.d.ts +156 -0
- package/boot/config/apps/src/nav-link-context-menu.service.d.ts +33 -0
- package/boot/config/apps/src/nav-link.directive.d.ts +29 -0
- package/boot/config/apps/src/nav.service.d.ts +198 -0
- package/boot/config/apps/src/route-close.service.d.ts +9 -0
- package/boot/config/apps/src/safe-navigate.d.ts +17 -0
- package/boot/config/apps/src/tab-aware-url-serializer.d.ts +22 -0
- package/boot/config/plugins/src/getNgZone.d.ts +9 -1
- package/boot/mfe/src/app.component.d.ts +15 -4
- package/boot/mfe/src/isolated-location-strategy.d.ts +57 -0
- package/esm2022/boot/bridge/src/mfe-bridge.mjs +36 -5
- package/esm2022/boot/config/api/src/api.service.mjs +12 -3
- package/esm2022/boot/config/apps/index.mjs +8 -2
- package/esm2022/boot/config/apps/src/apps.service.mjs +14 -6
- package/esm2022/boot/config/apps/src/custom-reuse-outlet.component.mjs +207 -0
- package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +540 -0
- package/esm2022/boot/config/apps/src/nav-link-context-menu.service.mjs +105 -0
- package/esm2022/boot/config/apps/src/nav-link.directive.mjs +45 -0
- package/esm2022/boot/config/apps/src/nav.service.mjs +675 -0
- package/esm2022/boot/config/apps/src/route-close.service.mjs +19 -0
- package/esm2022/boot/config/apps/src/safe-navigate.mjs +50 -0
- package/esm2022/boot/config/apps/src/tab-aware-url-serializer.mjs +50 -0
- package/esm2022/boot/config/plugins/src/getNgZone.mjs +13 -5
- package/esm2022/boot/host/src/app.component.mjs +1 -2
- package/esm2022/boot/host/src/bootstrap.mjs +22 -7
- package/esm2022/boot/mfe/src/app.component.mjs +143 -39
- package/esm2022/boot/mfe/src/bootstrap.mjs +197 -20
- package/esm2022/boot/mfe/src/isolated-location-strategy.mjs +142 -0
- package/esm2022/keycloak/src/auth.interceptor.mjs +17 -2
- package/esm2022/provider/src/prodiveHost.mjs +3 -5
- package/esm2022/provider/src/prodiveHostRouter.mjs +88 -9
- package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +81 -19
- package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/general-search/general-search.component.mjs +4 -4
- package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/layout/app.layout.component.mjs +422 -20
- package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +24 -35
- package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +85 -27
- package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +3 -3
- package/esm2022/theme/layout/service/breadcrumb-publisher.service.mjs +86 -0
- package/esm2022/theme/layout/service/tab-session.service.mjs +126 -0
- package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +15 -7
- package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +29 -9
- package/fesm2022/aril-app.component-s14ruALV.mjs +183 -0
- package/fesm2022/aril-app.component-s14ruALV.mjs.map +1 -0
- package/fesm2022/aril-boot-bridge.mjs +35 -4
- package/fesm2022/aril-boot-bridge.mjs.map +1 -1
- package/fesm2022/aril-boot-config-api.mjs +11 -2
- package/fesm2022/aril-boot-config-api.mjs.map +1 -1
- package/fesm2022/aril-boot-config-apps.mjs +1678 -10
- package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
- package/fesm2022/aril-boot-config-plugins.mjs +12 -4
- package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
- package/fesm2022/aril-boot-host.mjs +21 -7
- package/fesm2022/aril-boot-host.mjs.map +1 -1
- package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs +183 -0
- package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs.map +1 -0
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs +631 -0
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs.map +1 -0
- package/fesm2022/aril-boot-mfe.mjs +5 -3
- package/fesm2022/aril-boot-mfe.mjs.map +1 -1
- package/fesm2022/aril-keycloak.mjs +16 -1
- package/fesm2022/aril-keycloak.mjs.map +1 -1
- package/fesm2022/aril-provider.mjs +90 -12
- package/fesm2022/aril-provider.mjs.map +1 -1
- package/fesm2022/aril-theme-layout.mjs +2630 -2017
- package/fesm2022/aril-theme-layout.mjs.map +1 -1
- package/fesm2022/aril-ui-business-ref-value.mjs +14 -6
- package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -1
- package/fesm2022/aril-util-sync-active-tab-route.mjs +28 -8
- package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
- package/fesm2022/aril.mjs +354 -25
- package/fesm2022/aril.mjs.map +1 -1
- package/keycloak/src/auth.interceptor.d.ts +7 -0
- package/package.json +216 -216
- package/provider/src/prodiveHost.d.ts +1 -0
- package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +21 -4
- package/theme/layout/app/expandableMenu/expandable-menu.component.html +19 -5
- package/theme/layout/app/expandableMenu/expandable-menu.component.ts +69 -9
- package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.html +1 -0
- package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.ts +3 -1
- package/theme/layout/app/general-search/general-search.component.html +2 -1
- package/theme/layout/app/general-search/general-search.component.ts +2 -2
- package/theme/layout/app/history/history-sidebar.component.html +3 -1
- package/theme/layout/app/history/history-sidebar.component.ts +3 -1
- package/theme/layout/app/layout/app.layout.component.d.ts +105 -5
- package/theme/layout/app/layout/app.layout.component.html +102 -1
- package/theme/layout/app/layout/app.layout.component.scss +372 -0
- package/theme/layout/app/layout/app.layout.component.ts +452 -13
- package/theme/layout/app/layout/mfe.layout.component.d.ts +7 -5
- package/theme/layout/app/layout/mfe.layout.component.ts +13 -39
- package/theme/layout/app/site-map/site-map-sidebar.component.html +1 -0
- package/theme/layout/app/site-map/site-map-sidebar.component.ts +3 -1
- package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +26 -5
- package/theme/layout/app/static-sidebar/static-sidebar.component.html +11 -5
- package/theme/layout/app/static-sidebar/static-sidebar.component.ts +68 -13
- package/theme/layout/app/topbar/app.topbar.component.html +0 -1
- package/theme/layout/app/topbar/app.topbar.component.scss +1 -1
- package/theme/layout/service/breadcrumb-publisher.service.d.ts +24 -0
- package/theme/layout/service/breadcrumb-publisher.service.ts +95 -0
- package/theme/layout/service/tab-session.service.d.ts +52 -0
- package/theme/layout/service/tab-session.service.ts +138 -0
- package/theme/styles/layout/_breadcrumb.scss +95 -0
- package/theme/styles/layout/_content.scss +2 -2
- package/ui-business/ref-value/src/ref-value.component.d.ts +4 -2
- package/util/sync-active-tab-route/src/sync-active-tab-route.directive.d.ts +15 -2
- package/boot/config/apps/src/reuse-strategy.d.ts +0 -4
- package/esm2022/boot/config/apps/src/reuse-strategy.mjs +0 -9
- package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +0 -107
- package/fesm2022/aril-app.component-wxP3y8dg.mjs +0 -81
- package/fesm2022/aril-app.component-wxP3y8dg.mjs.map +0 -1
- package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs +0 -80
- package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs.map +0 -1
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs +0 -315
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs.map +0 -1
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.d.ts +0 -25
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.html +0 -8
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.ts +0 -127
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, EventEmitter, Component, ChangeDetectionStrategy, Output } from '@angular/core';
|
|
3
|
+
import { RouterLink } from '@angular/router';
|
|
3
4
|
import * as i1 from 'primeng/tag';
|
|
4
5
|
import { TagModule } from 'primeng/tag';
|
|
6
|
+
import { NavLinkDirective } from 'aril/boot/config/apps';
|
|
5
7
|
import { DetailedOverlayPanelComponent } from 'aril/ui-business/detailed-overlay-panel';
|
|
6
8
|
import { ValueComponent } from 'aril/ui/value';
|
|
7
9
|
|
|
@@ -23,18 +25,24 @@ class RefValueComponent {
|
|
|
23
25
|
getDisplayValue() {
|
|
24
26
|
return this.valueDesc() ?? this.assetId().toString();
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
getRouterLink() {
|
|
29
|
+
const path = this.detailPageUrl() ?? '';
|
|
30
|
+
return path.startsWith('/') ? `${path}/${this.assetId()}` : `/${path}/${this.assetId()}`;
|
|
28
31
|
}
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
/** `[arilNavLink]` directive'i için NavItem — sağ-tık tab context menüsü açılır. */
|
|
33
|
+
getNavItem() {
|
|
34
|
+
return {
|
|
35
|
+
tabId: '',
|
|
36
|
+
navLink: this.getRouterLink(),
|
|
37
|
+
navName: this.getDisplayValue()
|
|
38
|
+
};
|
|
31
39
|
}
|
|
32
40
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RefValueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: RefValueComponent, isStandalone: true, selector: "aril-ref-value", inputs: { overlayPanelShow: { classPropertyName: "overlayPanelShow", publicName: "overlayPanelShow", isSignal: true, isRequired: false, transformFunction: null }, assetId: { classPropertyName: "assetId", publicName: "assetId", isSignal: true, isRequired: true, transformFunction: null }, valueDesc: { classPropertyName: "valueDesc", publicName: "valueDesc", isSignal: true, isRequired: true, transformFunction: null }, detailPageUrl: { classPropertyName: "detailPageUrl", publicName: "detailPageUrl", isSignal: true, isRequired: true, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "@if (detailPageUrl() && valueDesc() && assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<a [
|
|
41
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: RefValueComponent, isStandalone: true, selector: "aril-ref-value", inputs: { overlayPanelShow: { classPropertyName: "overlayPanelShow", publicName: "overlayPanelShow", isSignal: true, isRequired: false, transformFunction: null }, assetId: { classPropertyName: "assetId", publicName: "assetId", isSignal: true, isRequired: true, transformFunction: null }, valueDesc: { classPropertyName: "valueDesc", publicName: "valueDesc", isSignal: true, isRequired: true, transformFunction: null }, detailPageUrl: { classPropertyName: "detailPageUrl", publicName: "detailPageUrl", isSignal: true, isRequired: true, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickEvent: "clickEvent" }, ngImport: i0, template: "@if (detailPageUrl() && valueDesc() && assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t\t</a>\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t</a>\r\n\t}\r\n} @else if (valueDesc() || assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<p-tag\r\n\t\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t\t[style]=\"tagStyle\"\r\n\t\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<p-tag\r\n\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t[style]=\"tagStyle\"\r\n\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t}\r\n} @else {\r\n\t<aril-value type=\"text\" [model]=\"null\" />\r\n}\r\n", dependencies: [{ kind: "component", type: ValueComponent, selector: "aril-value", inputs: ["model", "type", "format", "isClickable", "groupName", "parentSelectionKey", "isTextClamp", "textClampCharacters", "style", "copyable", "shouldShowCopyForClampedText", "arrayTypeDisplayName", "arrayTypeMaxBadgeCount", "bigDecimalRoundingMode", "bigDecimalScale"] }, { kind: "component", type: DetailedOverlayPanelComponent, selector: "aril-detailed-oveylay-panel", inputs: ["assetId", "style", "styleClass", "columns"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NavLinkDirective, selector: "[arilNavLink]", inputs: ["arilNavLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
34
42
|
}
|
|
35
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RefValueComponent, decorators: [{
|
|
36
44
|
type: Component,
|
|
37
|
-
args: [{ standalone: true, selector: 'aril-ref-value', imports: [ValueComponent, DetailedOverlayPanelComponent, TagModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (detailPageUrl() && valueDesc() && assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<a [
|
|
45
|
+
args: [{ standalone: true, selector: 'aril-ref-value', imports: [ValueComponent, DetailedOverlayPanelComponent, TagModule, RouterLink, NavLinkDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (detailPageUrl() && valueDesc() && assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t\t</a>\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t</a>\r\n\t}\r\n} @else if (valueDesc() || assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<p-tag\r\n\t\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t\t[style]=\"tagStyle\"\r\n\t\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<p-tag\r\n\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t[style]=\"tagStyle\"\r\n\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t}\r\n} @else {\r\n\t<aril-value type=\"text\" [model]=\"null\" />\r\n}\r\n" }]
|
|
38
46
|
}], propDecorators: { clickEvent: [{
|
|
39
47
|
type: Output
|
|
40
48
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aril-ui-business-ref-value.mjs","sources":["../../projects/aril/ui-business/ref-value/src/ref-value.component.ts","../../projects/aril/ui-business/ref-value/src/ref-value.component.html","../../projects/aril/ui-business/ref-value/aril-ui-business-ref-value.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Output, input } from '@angular/core';\r\n\r\nimport { TagModule } from 'primeng/tag';\r\n\r\nimport { DetailedOverlayPanelComponent } from 'aril/ui-business/detailed-overlay-panel';\r\nimport { ValueComponent } from 'aril/ui/value';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-ref-value',\r\n\ttemplateUrl: './ref-value.component.html',\r\n\timports: [ValueComponent, DetailedOverlayPanelComponent, TagModule],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class RefValueComponent {\r\n\toverlayPanelShow = input<boolean>(true);\r\n\tassetId = input.required<number>();\r\n\tvalueDesc = input.required<string>();\r\n\tdetailPageUrl = input.required<string | undefined>();\r\n\ttarget = input<string>('_self');\r\n\r\n\t@Output() clickEvent = new EventEmitter();\r\n\r\n\tprotected readonly tagStyle = {\r\n\t\tbackground: '#f0f0f0',\r\n\t\tcolor: '-webkit-link',\r\n\t\t'font-size': '0.9rem',\r\n\t\t'text-decoration': 'underline'\r\n\t};\r\n\r\n\tprotected getDisplayValue(): string {\r\n\t\treturn this.valueDesc() ?? this.assetId().toString();\r\n\t}\r\n\r\n\
|
|
1
|
+
{"version":3,"file":"aril-ui-business-ref-value.mjs","sources":["../../projects/aril/ui-business/ref-value/src/ref-value.component.ts","../../projects/aril/ui-business/ref-value/src/ref-value.component.html","../../projects/aril/ui-business/ref-value/aril-ui-business-ref-value.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Output, input } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\n\r\nimport { TagModule } from 'primeng/tag';\r\n\r\nimport { NavItem, NavLinkDirective } from 'aril/boot/config/apps';\r\nimport { DetailedOverlayPanelComponent } from 'aril/ui-business/detailed-overlay-panel';\r\nimport { ValueComponent } from 'aril/ui/value';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-ref-value',\r\n\ttemplateUrl: './ref-value.component.html',\r\n\timports: [ValueComponent, DetailedOverlayPanelComponent, TagModule, RouterLink, NavLinkDirective],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class RefValueComponent {\r\n\toverlayPanelShow = input<boolean>(true);\r\n\tassetId = input.required<number>();\r\n\tvalueDesc = input.required<string>();\r\n\tdetailPageUrl = input.required<string | undefined>();\r\n\ttarget = input<string>('_self');\r\n\r\n\t@Output() clickEvent = new EventEmitter();\r\n\r\n\tprotected readonly tagStyle = {\r\n\t\tbackground: '#f0f0f0',\r\n\t\tcolor: '-webkit-link',\r\n\t\t'font-size': '0.9rem',\r\n\t\t'text-decoration': 'underline'\r\n\t};\r\n\r\n\tprotected getDisplayValue(): string {\r\n\t\treturn this.valueDesc() ?? this.assetId().toString();\r\n\t}\r\n\r\n\tprotected getRouterLink(): string {\r\n\t\tconst path = this.detailPageUrl() ?? '';\r\n\t\treturn path.startsWith('/') ? `${path}/${this.assetId()}` : `/${path}/${this.assetId()}`;\r\n\t}\r\n\r\n\t/** `[arilNavLink]` directive'i için NavItem — sağ-tık tab context menüsü açılır. */\r\n\tprotected getNavItem(): NavItem {\r\n\t\treturn {\r\n\t\t\ttabId: '',\r\n\t\t\tnavLink: this.getRouterLink(),\r\n\t\t\tnavName: this.getDisplayValue()\r\n\t\t};\r\n\t}\r\n}\r\n","@if (detailPageUrl() && valueDesc() && assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t\t</a>\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<a [routerLink]=\"getRouterLink()\" [target]=\"target()\" [arilNavLink]=\"getNavItem()\">\r\n\t\t\t<p-tag [value]=\"getDisplayValue()\" [style]=\"tagStyle\" />\r\n\t\t</a>\r\n\t}\r\n} @else if (valueDesc() || assetId()) {\r\n\t@if (overlayPanelShow()) {\r\n\t\t<aril-detailed-oveylay-panel [assetId]=\"assetId()\">\r\n\t\t\t<p-tag\r\n\t\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t\t[style]=\"tagStyle\"\r\n\t\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t\t</aril-detailed-oveylay-panel>\r\n\t} @else {\r\n\t\t<p-tag\r\n\t\t\t[value]=\"getDisplayValue()\"\r\n\t\t\t[style]=\"tagStyle\"\r\n\t\t\t(click)=\"clickEvent.emit({ assetId: assetId(), valueDesc: valueDesc() })\" />\r\n\t}\r\n} @else {\r\n\t<aril-value type=\"text\" [model]=\"null\" />\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,56 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Directive, HostListener } from '@angular/core';
|
|
3
3
|
import { Subscription } from 'rxjs';
|
|
4
|
+
import { bridge } from 'aril/boot/bridge';
|
|
4
5
|
import * as i1 from '@angular/router';
|
|
5
6
|
import * as i2 from 'primeng/tabview';
|
|
6
7
|
import * as i3 from '@angular/common';
|
|
7
8
|
|
|
8
9
|
class SyncActiveTabRouteDirective {
|
|
9
|
-
constructor(router, tabView, location) {
|
|
10
|
+
constructor(router, tabView, location, urlSerializer) {
|
|
10
11
|
this.router = router;
|
|
11
12
|
this.tabView = tabView;
|
|
12
13
|
this.location = location;
|
|
14
|
+
this.urlSerializer = urlSerializer;
|
|
13
15
|
this.subscription = new Subscription();
|
|
16
|
+
/**
|
|
17
|
+
* Host (shell) modunda MFE Router `IsolatedLocationStrategy` kullanır — browser hash'ına
|
|
18
|
+
* YAZMAZ (tab izolasyonu, bkz. `isolated-location-strategy.ts`). Bu yüzden `?activeTab`
|
|
19
|
+
* adres çubuğunda görünsün/okunsun diye HOST Router + HOST Location'a köprüleriz.
|
|
20
|
+
* Standalone MFE modunda (`bridge.hostRouter` null) eski davranış korunur: enjekte edilen
|
|
21
|
+
* child Router + child Location (gerçek `LocationStrategy` adres çubuğuna yazar).
|
|
22
|
+
*
|
|
23
|
+
* `replaceState` (navigate DEĞİL) kullanılır: NavigationEnd fire ETMEZ → app.component'in
|
|
24
|
+
* host-NavigationEnd handler'ı tetiklenmez → MFE yeniden navigate olmaz (döngü yok).
|
|
25
|
+
*/
|
|
26
|
+
this.hostRouter = bridge.hostRouter;
|
|
27
|
+
this.effectiveRouter = this.hostRouter ?? this.router;
|
|
14
28
|
}
|
|
15
29
|
ngOnInit() {
|
|
16
|
-
this.subscription.add(this.
|
|
30
|
+
this.subscription.add(this.effectiveRouter.routerState.root.queryParamMap.subscribe((params) => {
|
|
17
31
|
if (params.has('activeTab')) {
|
|
18
32
|
this.tabView.activeIndex = Number(params.get('activeTab'));
|
|
19
33
|
}
|
|
20
34
|
}));
|
|
21
35
|
}
|
|
22
36
|
onTabChange(e) {
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
// `UrlTree.toString()` built-in `DefaultUrlSerializer` kullanır → `_tab` adres çubuğunda
|
|
38
|
+
// görünür kalırdı. Router'a kayıtlı `UrlSerializer` (child injector'da
|
|
39
|
+
// `TabAwareUrlSerializer`) ile serialize edip `_tab`'ı gizliyoruz; `activeTab` korunur.
|
|
40
|
+
const url = this.urlSerializer.serialize(this.effectiveRouter.createUrlTree([], {
|
|
25
41
|
queryParams: { activeTab: e },
|
|
26
42
|
queryParamsHandling: 'merge'
|
|
27
|
-
})
|
|
28
|
-
|
|
43
|
+
}));
|
|
44
|
+
const location = this.hostRouter ? bridge.hostLocation : this.location;
|
|
45
|
+
// `history.state` (içindeki `_tab`) KORUNMALI: `Location.replaceState(path, query, state)`
|
|
46
|
+
// default `state=null` — 3. argüman verilmezse `_tab` silinir ve tab tespiti
|
|
47
|
+
// (`nav.service`/`app.component` `history.state._tab` okur) bozulur.
|
|
48
|
+
location?.replaceState(url, '', window.history.state);
|
|
29
49
|
}
|
|
30
50
|
ngOnDestroy() {
|
|
31
51
|
this.subscription.unsubscribe();
|
|
32
52
|
}
|
|
33
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SyncActiveTabRouteDirective, deps: [{ token: i1.Router }, { token: i2.TabView }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SyncActiveTabRouteDirective, deps: [{ token: i1.Router }, { token: i2.TabView }, { token: i3.Location }, { token: i1.UrlSerializer }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
34
54
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: SyncActiveTabRouteDirective, isStandalone: true, selector: "[syncActiveTabRoute]", host: { listeners: { "activeIndexChange": "onTabChange($event)" } }, ngImport: i0 }); }
|
|
35
55
|
}
|
|
36
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SyncActiveTabRouteDirective, decorators: [{
|
|
@@ -39,7 +59,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
39
59
|
selector: '[syncActiveTabRoute]',
|
|
40
60
|
standalone: true
|
|
41
61
|
}]
|
|
42
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TabView }, { type: i3.Location }], propDecorators: { onTabChange: [{
|
|
62
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TabView }, { type: i3.Location }, { type: i1.UrlSerializer }], propDecorators: { onTabChange: [{
|
|
43
63
|
type: HostListener,
|
|
44
64
|
args: ['activeIndexChange', ['$event']]
|
|
45
65
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aril-util-sync-active-tab-route.mjs","sources":["../../projects/aril/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts","../../projects/aril/util/sync-active-tab-route/aril-util-sync-active-tab-route.ts"],"sourcesContent":["import { Location } from '@angular/common';\r\nimport { Directive, HostListener, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { TabView } from 'primeng/tabview';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n\tselector: '[syncActiveTabRoute]',\r\n\tstandalone: true\r\n})\r\nexport class SyncActiveTabRouteDirective implements OnInit, OnDestroy {\r\n\tprivate readonly subscription = new Subscription();\r\n\r\n\tconstructor(\r\n\t\tprivate readonly router: Router,\r\n\t\tprivate readonly tabView: TabView,\r\n\t\tprivate readonly location: Location\r\n\t) {}\r\n\r\n\tngOnInit() {\r\n\t\tthis.subscription.add(\r\n\t\t\tthis.
|
|
1
|
+
{"version":3,"file":"aril-util-sync-active-tab-route.mjs","sources":["../../projects/aril/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts","../../projects/aril/util/sync-active-tab-route/aril-util-sync-active-tab-route.ts"],"sourcesContent":["import { Location } from '@angular/common';\r\nimport { Directive, HostListener, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router, UrlSerializer } from '@angular/router';\r\n\r\nimport { TabView } from 'primeng/tabview';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { bridge } from 'aril/boot/bridge';\r\n\r\n@Directive({\r\n\tselector: '[syncActiveTabRoute]',\r\n\tstandalone: true\r\n})\r\nexport class SyncActiveTabRouteDirective implements OnInit, OnDestroy {\r\n\tprivate readonly subscription = new Subscription();\r\n\r\n\t/**\r\n\t * Host (shell) modunda MFE Router `IsolatedLocationStrategy` kullanır — browser hash'ına\r\n\t * YAZMAZ (tab izolasyonu, bkz. `isolated-location-strategy.ts`). Bu yüzden `?activeTab`\r\n\t * adres çubuğunda görünsün/okunsun diye HOST Router + HOST Location'a köprüleriz.\r\n\t * Standalone MFE modunda (`bridge.hostRouter` null) eski davranış korunur: enjekte edilen\r\n\t * child Router + child Location (gerçek `LocationStrategy` adres çubuğuna yazar).\r\n\t *\r\n\t * `replaceState` (navigate DEĞİL) kullanılır: NavigationEnd fire ETMEZ → app.component'in\r\n\t * host-NavigationEnd handler'ı tetiklenmez → MFE yeniden navigate olmaz (döngü yok).\r\n\t */\r\n\tprivate readonly hostRouter = bridge.hostRouter;\r\n\tprivate readonly effectiveRouter: Router;\r\n\r\n\tconstructor(\r\n\t\tprivate readonly router: Router,\r\n\t\tprivate readonly tabView: TabView,\r\n\t\tprivate readonly location: Location,\r\n\t\tprivate readonly urlSerializer: UrlSerializer\r\n\t) {\r\n\t\tthis.effectiveRouter = this.hostRouter ?? this.router;\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.subscription.add(\r\n\t\t\tthis.effectiveRouter.routerState.root.queryParamMap.subscribe((params) => {\r\n\t\t\t\tif (params.has('activeTab')) {\r\n\t\t\t\t\tthis.tabView.activeIndex = Number(params.get('activeTab'));\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\t@HostListener('activeIndexChange', ['$event'])\r\n\tonTabChange(e: number) {\r\n\t\t// `UrlTree.toString()` built-in `DefaultUrlSerializer` kullanır → `_tab` adres çubuğunda\r\n\t\t// görünür kalırdı. Router'a kayıtlı `UrlSerializer` (child injector'da\r\n\t\t// `TabAwareUrlSerializer`) ile serialize edip `_tab`'ı gizliyoruz; `activeTab` korunur.\r\n\t\tconst url = this.urlSerializer.serialize(\r\n\t\t\tthis.effectiveRouter.createUrlTree([], {\r\n\t\t\t\tqueryParams: { activeTab: e },\r\n\t\t\t\tqueryParamsHandling: 'merge'\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tconst location = this.hostRouter ? bridge.hostLocation : this.location;\r\n\t\t// `history.state` (içindeki `_tab`) KORUNMALI: `Location.replaceState(path, query, state)`\r\n\t\t// default `state=null` — 3. argüman verilmezse `_tab` silinir ve tab tespiti\r\n\t\t// (`nav.service`/`app.component` `history.state._tab` okur) bozulur.\r\n\t\tlocation?.replaceState(url, '', window.history.state);\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis.subscription.unsubscribe();\r\n\t}\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAca,2BAA2B,CAAA;AAgBvC,IAAA,WAAA,CACkB,MAAc,EACd,OAAgB,EAChB,QAAkB,EAClB,aAA4B,EAAA;QAH5B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;AAnB7B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnD;;;;;;;;;AASG;AACc,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAS/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;KACtD;IAED,QAAQ,GAAA;QACP,IAAI,CAAC,YAAY,CAAC,GAAG,CACpB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACxE,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;aAC3D;SACD,CAAC,CACF,CAAC;KACF;AAGD,IAAA,WAAW,CAAC,CAAS,EAAA;;;;AAIpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CACvC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,EAAE;AACtC,YAAA,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;AAC7B,YAAA,mBAAmB,EAAE,OAAO;AAC5B,SAAA,CAAC,CACF,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;AAIvE,QAAA,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACtD;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KAChC;8GAxDW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,iBAAA,CAAA;oJAqCA,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACjD9C;;AAEG;;;;"}
|