@zambon-dev/framework 1.1.0 → 1.1.1

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 +1 @@
1
- {"version":3,"file":"zambon-dev-framework.mjs","sources":["../../../../libs/framework/src/lib/services/auth.service.ts","../../../../libs/framework/src/lib/services/custom-reuse-strategy.ts","../../../../libs/framework/src/lib/services/tab-view.service.ts","../../../../libs/framework/src/lib/services/tab.service.ts","../../../../libs/framework/src/lib/components/buttons/base-button.ts","../../../../libs/framework/src/lib/components/buttons/base-form-view-button.ts","../../../../libs/framework/src/lib/helpers/backend-form-validation-helper.ts","../../../../libs/framework/src/lib/helpers/route-helper.ts","../../../../libs/framework/src/lib/components/modals/confirm-modal/confirm-modal.component.ts","../../../../libs/framework/src/lib/components/modals/confirm-modal/confirm-modal.component.html","../../../../libs/framework/src/lib/components/modals/error-modal/error-modal.component.ts","../../../../libs/framework/src/lib/components/modals/error-modal/error-modal.component.html","../../../../libs/framework/src/lib/components/modals/modals.module.ts","../../../../libs/framework/src/lib/components/buttons/button-confirm/button-confirm.component.ts","../../../../libs/framework/src/lib/components/buttons/button-confirm/button-confirm.component.html","../../../../libs/framework/src/lib/components/buttons/button-delete/button-delete.component.ts","../../../../libs/framework/src/lib/components/buttons/button-delete/button-delete.component.html","../../../../libs/framework/src/lib/views/view-base.ts","../../../../libs/framework/src/lib/views/modals/modal-base.ts","../../../../libs/framework/src/lib/components/buttons/button-edit/button-edit.component.ts","../../../../libs/framework/src/lib/components/buttons/button-edit/button-edit.component.html","../../../../libs/framework/src/lib/components/buttons/button-export/button-export.component.ts","../../../../libs/framework/src/lib/components/buttons/button-export/button-export.component.html","../../../../libs/framework/src/lib/components/buttons/button-filters/button-filters.component.ts","../../../../libs/framework/src/lib/components/buttons/button-filters/button-filters.component.html","../../../../libs/framework/src/lib/models/route-data.ts","../../../../libs/framework/src/lib/models/tab.ts","../../../../libs/framework/src/lib/components/buttons/button-new/button-new.component.ts","../../../../libs/framework/src/lib/components/buttons/button-new/button-new.component.html","../../../../libs/framework/src/lib/components/buttons/button-open-record/button-open-record.component.ts","../../../../libs/framework/src/lib/components/buttons/button-open-record/button-open-record.component.html","../../../../libs/framework/src/lib/components/buttons/button-refresh/button-refresh.component.ts","../../../../libs/framework/src/lib/components/buttons/button-refresh/button-refresh.component.html","../../../../libs/framework/src/lib/components/buttons/button-save/button-save.component.ts","../../../../libs/framework/src/lib/components/buttons/button-save/button-save.component.html","../../../../libs/framework/src/lib/components/buttons/button-views/button-views.component.ts","../../../../libs/framework/src/lib/components/buttons/button-views/button-views.component.html","../../../../libs/framework/src/lib/components/buttons/button/button.component.ts","../../../../libs/framework/src/lib/components/buttons/button/button.component.html","../../../../libs/framework/src/lib/views/child-list.ts","../../../../libs/framework/src/lib/views/child-list-legacy.ts","../../../../libs/framework/src/lib/views/tabview-base.ts","../../../../libs/framework/src/lib/views/form-view.ts","../../../../libs/framework/src/lib/views/legacy/legacy-sub-view-form.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-base.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-details.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-list.ts","../../../../libs/framework/src/lib/views/tabview-list.ts","../../../../libs/framework/src/lib/views/list-view.ts","../../../../libs/framework/src/lib/views/modals/multi-editor-legacy.modal.ts","../../../../libs/framework/src/lib/views/modals/multi-editor.modal.ts","../../../../libs/framework/src/lib/views/modals/multi-select.modal.ts","../../../../libs/framework/src/lib/views/modals/view.modal.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-edit/button-edit.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-edit/button-edit.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-new/button-new.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-new/button-new.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-open-record/button-open-record.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-open-record/button-open-record.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-save/button-save.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-save/button-save.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-views/button-views.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-views/button-views.component.html","../../../../libs/framework/src/lib/components/buttons/buttons.module.ts","../../../../libs/framework/src/lib/components/views/default-tab-view/default-tab-view.component.ts","../../../../libs/framework/src/lib/components/views/default-tab-view/default-tab-view.component.html","../../../../libs/framework/src/lib/components/views/default-details-tab-view/default-details-tab-view.component.ts","../../../../libs/framework/src/lib/components/views/default-details-tab-view/default-details-tab-view.component.html","../../../../libs/framework/src/lib/components/views/tab-breadcrumbs/tab-breadcrumbs.component.ts","../../../../libs/framework/src/lib/components/views/tab-breadcrumbs/tab-breadcrumbs.component.html","../../../../libs/framework/src/lib/components/views/tabs/tabs.component.ts","../../../../libs/framework/src/lib/components/views/tabs/tabs.component.html","../../../../libs/framework/src/lib/components/views/views.module.ts","../../../../libs/framework/src/lib/components/components.module.ts","../../../../libs/framework/src/lib/configs/app-config.ts","../../../../libs/framework/src/lib/configs-providers/grid-configs.provider.ts","../../../../libs/framework/src/lib/framework.module.ts","../../../../libs/framework/src/lib/i18n/framework-i18n.ts","../../../../libs/framework/src/zambon-dev-framework.ts"],"sourcesContent":["import { JwtHelperService } from '@auth0/angular-jwt';\nimport { map, Observable, of, ReplaySubject, switchMap, take } from 'rxjs';\nimport { TabService } from './tab.service';\n\nconst ADMINISTRATIVE_MASTER_ACTION: string = 'AdministrativeMaster';\n\nexport abstract class AuthService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private actionsCache$: ReplaySubject<string[]> = new ReplaySubject<string[]>(1);\n private isActionsCacheInitialized: boolean = false;\n //#endregion\n\n //#region Properties\n public abstract get adminAction(): string;\n public get isAuthenticated(): boolean {\n return this.username !== null;\n }\n public get isTokenExpired(): boolean {\n return this.token !== null && this.jwtHelper.isTokenExpired(this.token);\n }\n public get token(): string | null {\n return localStorage.getItem('token')\n ?? sessionStorage.getItem('token'); }\n public get userID(): number | undefined { return 0; }\n protected get refreshToken(): string | null {\n return localStorage.getItem('refreshToken')\n ?? sessionStorage.getItem('refreshToken');\n }\n protected get userInfo(): string | null {\n return localStorage.getItem('userInfo')\n ?? sessionStorage.getItem('userInfo');\n }\n protected get username(): string | null {\n return localStorage.getItem('username')\n ?? sessionStorage.getItem('username');\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor(\n protected jwtHelper: JwtHelperService,\n protected tabService: TabService,\n ) {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public checkActionIsAllowed(actionToCheck: string): Observable<boolean> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$\n .pipe(map((actions: string[]) => actions.includes(this.adminAction) || actions.includes(actionToCheck)));\n }\n\n public checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster: boolean = true): Observable<boolean[]> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$\n .pipe(switchMap((actions: string[]) => of(actionsToCheck.map((actionsToCheck: string) => (checkForAdministrativeMaster && actions.indexOf(ADMINISTRATIVE_MASTER_ACTION) >= 0) || actions.indexOf(actionsToCheck) >= 0))));\n }\n\n public signOut(): void {\n localStorage.clear();\n sessionStorage.clear();\n \n this.tabService.closeAllTabs();\n this.resetActionsCache();\n }\n\n protected setStorage(key : 'username' | 'token' | 'refreshToken' | 'userInfo', value : string | null, useLocalStorage: boolean | null = null) {\n if (useLocalStorage === null) {\n useLocalStorage = sessionStorage.getItem(key) === null;\n }\n\n if (value) {\n if (useLocalStorage) {\n localStorage.setItem(key, value);\n } else {\n sessionStorage.setItem(key, value);\n }\n } else {\n localStorage.removeItem(key);\n sessionStorage.removeItem(key);\n }\n }\n //#endregion\n\n //#region Private methods\n protected resetActionsCache(): void {\n this.isActionsCacheInitialized = false;\n this.actionsCache$ = new ReplaySubject<string[]>(1);\n }\n //#endregion\n\n //#region Abstract methods\n public abstract getActions(): Observable<string[]>;\n //#endregion\n}","import { ApplicationRef, Inject, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy, UrlSegment } from '@angular/router';\nimport { TabService } from './tab.service';\n\n@Inject({})\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public clones: { [key: string]: string } = {};\n public redirects: { [key: string]: string } = {};\n public tabService?: TabService;\n\n private applicationRef: ApplicationRef = inject(ApplicationRef);\n private cachedHandles: { [key: string]: DetachedRouteHandle | null } = {};\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearAllHandles(): void {\n this.cachedHandles = {};\n }\n\n public clearHandle(url: string): void {\n const keysToRemove: string[] = Object.keys(this.cachedHandles)\n .filter((key: string) => key.startsWith(`${url}-`));\n\n keysToRemove.forEach((key: string) => {\n const handle: DetachedRouteHandle | null = this.cachedHandles[key];\n\n if (handle) {\n if ((<any>handle)?.componentRef?.instance?.ngOnDestroy) {\n (<any>handle).componentRef.instance.ngOnDestroy();\n }\n }\n delete this.cachedHandles[key];\n });\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.component) {\n return null;\n }\n\n const cacheKey: string = this.getCacheKey(route);\n const handle: DetachedRouteHandle | null = this.cachedHandles[cacheKey];\n\n if (handle) {\n // Schedule global change detection after Angular finishes reattaching the component.\n // Without this, reattached components may render stale views (e.g., empty ribbon)\n // because NgTemplateOutlet does not re-create its embedded view automatically.\n // ApplicationRef.tick() ensures the entire app tree is checked, including embedded views.\n setTimeout(() => {\n this.applicationRef.tick();\n });\n }\n\n return handle;\n }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent: boolean = !!route.component;\n\n if ((this.tabService?.isUrlOpen(url) ?? false) && hasComponent)\n {\n const cacheKey: string = this.getCacheKey(route);\n const isCached: boolean = !!this.cachedHandles[cacheKey];\n return isCached;\n }\n return false;\n }\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent: boolean = !!route.component;\n\n return (this.tabService?.isUrlOpen(url) ?? false) && hasComponent;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {\n const futureUrl: string = this.getUrlFromRoute(future);\n const currentUrl: string = this.getUrlFromRoute(current);\n\n return (futureUrl === currentUrl && future.routeConfig === current.routeConfig) || this.redirects[currentUrl] === futureUrl || this.clones[futureUrl] === currentUrl;\n }\n\n public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n const cacheKey: string = this.getCacheKey(route);\n this.cachedHandles[cacheKey] = handle;\n }\n //#endregion\n\n //#region Private methods\n private getCacheKey(route: ActivatedRouteSnapshot): string {\n let url: string = this.getUrlFromRoute(route);\n if (this.clones[url]) {\n url = this.clones[url];\n }\n\n const componentName: string = route.component?.name ?? '';\n return `${url}-${componentName}`;\n }\n\n private getUrlFromRoute(route: ActivatedRouteSnapshot): string {\n const segments: string[] = [];\n\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (!!route) {\n if (!!route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(route.parent);\n }\n };\n\n buildRoute(route);\n\n return `/${segments.reverse().join('/')}`;\n }\n //#endregion\n}","import { Injectable, TemplateRef } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n@Injectable()\nexport class TabViewService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined> = new ReplaySubject<TemplateRef<any> | undefined>(1);\n public onViewChanged: Subject<string> = new Subject<string>();\n\n private _activeView?: string;\n //#endregion\n\n //#region Properties\n public get activeView(): string {\n return this._activeView ?? '';\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public setActiveView(viewId: string): void {\n if (viewId === this._activeView) {\n return;\n }\n \n this._activeView = viewId;\n this.onViewChanged.next(viewId);\n }\n\n public updateRibbonTemplate(template: TemplateRef<any>| undefined): void {\n this.onUpdateRibbonTemplate.next(template);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Location } from '@angular/common';\nimport { ApplicationRef, ChangeDetectorRef, Injectable } from '@angular/core';\nimport { Router, RouteReuseStrategy } from '@angular/router';\nimport { CustomReuseStrategy } from './custom-reuse-strategy';\nimport { ITab } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TabService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private activeTabIndex: number = -1;\n private customReuseStrategy: CustomReuseStrategy;\n private displayTitleIndices: number[] = [];\n private openTabs: ITab[][] = [];\n //#endregion\n\n //#region Properties\n public get activeTabHistory(): ITab[] {\n return this.openTabs[this.activeTabIndex] ?? [];\n }\n\n public get activeTabs(): ITab[] {\n return this.openTabs.map((tabs: ITab[]) => tabs[0]) ?? [];\n }\n\n public get activeTabsDisplayTitles(): (string | undefined)[] {\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.title;\n });\n }\n\n public get activeTabsLoadingStates(): boolean[] {\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.isTitleLoading ?? true;\n });\n }\n\n private get activeTab(): ITab[] | null {\n if (this.activeTabIndex < 0) {\n return null;\n }\n return this.openTabs[this.activeTabIndex];\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor(\n private applicationRef: ApplicationRef,\n private location: Location,\n private router: Router,\n routeReuseStrategy: RouteReuseStrategy,\n ) {\n this.customReuseStrategy = <CustomReuseStrategy>routeReuseStrategy;\n this.customReuseStrategy.tabService = this;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public activateTab(tab: ITab): void {\n this.activeTabIndex = this.activeTabs.indexOf(tab);\n const tabStack: ITab[] = this.openTabs[this.activeTabIndex];\n const currentView: ITab = tabStack[tabStack.length - 1];\n this.navigateTo(currentView);\n }\n\n public cloneCurrentTab(url: string): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n this.customReuseStrategy.clones[url] = tab.url;\n if (tab.clones.indexOf(url) === -1) {\n tab.clones.push(url);\n }\n\n this.navigateTo(tab, url);\n }\n\n public closeActiveTab(): void {\n this.closeTab(this.activeTabIndex);\n }\n\n public closeAllTabs(): void {\n this.openTabs = [];\n this.displayTitleIndices = [];\n this.activeTabIndex = -1;\n this.customReuseStrategy.clearAllHandles();\n }\n\n public closeTab(index: number): void {\n if (index > this.activeTabs.length - 1 || this.activeTabs.length === 0) {\n return;\n }\n\n const wasActive: boolean = index === this.activeTabIndex;\n const closedTab: ITab[] = this.openTabs[index];\n this.openTabs.splice(index, 1);\n this.displayTitleIndices.splice(index, 1);\n\n if (wasActive) {\n // Closed the active tab — pick an adjacent tab to focus.\n if (this.activeTabIndex >= this.activeTabs.length) {\n this.activeTabIndex = this.activeTabs.length - 1;\n }\n\n this.navigateTo(this.activeTabs[this.activeTabIndex]);\n } else if (index < this.activeTabIndex) {\n // Closed a tab before the active one — shift index to keep the same tab active.\n this.activeTabIndex--;\n }\n\n closedTab.forEach((tab: ITab) => {\n if (!this.isUrlOpen(tab.url)) {\n // Tab is not in use by any other tab, we're clear to remove.\n this.customReuseStrategy.clearHandle(tab.url);\n }\n });\n }\n\n public isTabActive(tab: ITab): boolean {\n return this.activeTabs[this.activeTabIndex] === tab;\n }\n\n public isUrlActive(url: string, checkForClones: boolean = false): boolean {\n if (!this.activeTab) {\n return false;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n if (tab.url === url) {\n return true;\n } else if (checkForClones) {\n return tab.clones.indexOf(url) !== -1;\n }\n\n return false\n }\n\n public isUrlOpen(url: string): boolean {\n const tabs: ITab[] = this.openTabs\n .flatMap((tabs: ITab[]) => tabs);\n\n return this.isTabExists(tabs, url);\n }\n\n public navigateBackOrCloseActiveTab(): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n if (this.activeTab.length <= 1) {\n this.closeTab(this.activeTabIndex);\n } else {\n const previousEntry: ITab = this.activeTab[this.activeTab.length - 2];\n this.navigateCurrentTabBack(previousEntry);\n }\n }\n\n public navigateCurrentTab(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // Check other tabs for entity match first, then fall back to current behavior.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl, this.activeTabIndex);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n const otherTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n } else {\n // Fallback for tabs without entityBaseUrl (existing behavior).\n const showingIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex, true);\n if (showingIndex !== -1) {\n this.activeTabIndex = showingIndex;\n const otherTab: ITab[] = this.openTabs[showingIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n }\n\n // Check if URL already in current tab's stack — navigate back.\n const tabIsAlreadyOpen: ITab | undefined = this.findTab(this.activeTab, tab.url);\n if (tabIsAlreadyOpen) {\n this.navigateCurrentTabBack(tabIsAlreadyOpen);\n return;\n }\n\n // Inherit title from an existing tab entry with the same URL, if available.\n this.inheritTitleIfKnown(tab);\n\n // Push new entry onto the stack.\n let clonedUrl: string | undefined = undefined;\n if (tab.clones.length > 0) {\n clonedUrl = tab.clones[0];\n this.customReuseStrategy.clones[clonedUrl] = tab.url;\n }\n\n this.activeTab.push(tab);\n this.displayTitleIndices[this.activeTabIndex] = this.activeTab.length - 1;\n\n this.navigateTo(tab, clonedUrl);\n }\n\n public navigateCurrentTabBack(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // If another tab is currently showing this URL, focus it instead.\n const otherTabIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex);\n if (otherTabIndex !== -1) {\n this.activeTabIndex = otherTabIndex;\n const otherTab: ITab[] = this.openTabs[otherTabIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n\n const lastIndex: number = this.activeTab.lastIndexOf(tab);\n if (lastIndex !== -1) {\n this.activeTab.slice(lastIndex + 1)\n .forEach((tab: ITab) => {\n this.customReuseStrategy.clearHandle(tab.url);\n });\n\n this.openTabs[this.activeTabIndex] = this.activeTab.slice(0, lastIndex + 1);\n\n if (this.displayTitleIndices[this.activeTabIndex] > lastIndex) {\n this.displayTitleIndices[this.activeTabIndex] = lastIndex;\n }\n }\n\n this.navigateTo(tab);\n }\n\n public navigateTo(tab: ITab | undefined, clonedUrl?: string): void {\n let url: string = tab?.url ?? '/';\n if (!!clonedUrl) {\n url = clonedUrl;\n }\n\n this.router.navigate([ url ], { queryParams: tab?.queryParams })\n .then((navigated: boolean) => {\n this.customReuseStrategy.redirects = {};\n\n // Clean up clone mapping after successful clone-based navigation.\n if (navigated && this.customReuseStrategy.clones[url]) {\n delete this.customReuseStrategy.clones[url];\n }\n\n this.applicationRef.tick();\n });\n }\n\n public openTab(tab: ITab): void {\n // 1. Exact URL match at top-of-stack — focus that tab.\n const exactMatchIndex: number = this.findTabIndexByCurrentView(tab.url);\n if (exactMatchIndex !== -1) {\n this.activeTabIndex = exactMatchIndex;\n const currentTab: ITab[] = this.openTabs[exactMatchIndex];\n this.navigateTo(currentTab[currentTab.length - 1]);\n return;\n }\n\n // 2. Entity match (only when entityBaseUrl is set) — focus that tab, keep current view.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n const existingTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(existingTab[existingTab.length - 1]);\n return;\n }\n }\n\n // 3. No match — open a new tab.\n this.inheritTitleIfKnown(tab);\n this.openTabs.push([tab]);\n this.displayTitleIndices.push(0);\n this.activeTabIndex = this.openTabs.length - 1;\n this.navigateTo(tab);\n }\n\n public replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n // Find the anchor entry (the detail view whose URL matches baseUrl).\n // Keep all entries up to and including the anchor.\n const anchorIndex: number = this.activeTab.findIndex((t: ITab) => t.url === baseUrl);\n const keepUntil: number = anchorIndex !== -1 ? anchorIndex + 1 : 1;\n\n const keptEntries: ITab[] = this.activeTab.slice(0, keepUntil);\n const removedEntries: ITab[] = this.activeTab.slice(keepUntil);\n\n // Update history: keep entries up to anchor, optionally add new sub-view\n if (tab) {\n // Propagate entityBaseUrl from the anchor so entity matching works on sub-views.\n const anchor: ITab | undefined = keptEntries[anchorIndex !== -1 ? anchorIndex : 0];\n if (!tab.entityBaseUrl && anchor?.entityBaseUrl) {\n tab.entityBaseUrl = anchor.entityBaseUrl;\n }\n\n this.openTabs[this.activeTabIndex] = [...keptEntries, tab];\n } else {\n this.openTabs[this.activeTabIndex] = keptEntries;\n }\n\n // Clear reuse-strategy handles for removed entries no longer open anywhere\n removedEntries.forEach((entry: ITab) => {\n if (!this.isUrlOpen(entry.url)) {\n this.customReuseStrategy.clearHandle(entry.url);\n }\n });\n\n // Navigate to the topmost entry\n const current: ITab[] = this.openTabs[this.activeTabIndex];\n this.navigateTo(current[current.length - 1]);\n }\n\n public redirectCurrentTab(url: string, updateLocation: boolean = true): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n // Update entityBaseUrl if it was pointing to the old URL (e.g., /new → /:id after save).\n if (tab.entityBaseUrl === tab.url) {\n tab.entityBaseUrl = url;\n }\n\n tab.url = url;\n tab.queryParams = {};\n\n if (updateLocation) {\n this.location.replaceState(url);\n }\n }\n\n public setRouteRedirect(fromUrl: string, toUrl: string): void {\n this.customReuseStrategy.redirects[fromUrl] = toUrl;\n }\n\n public updateActiveTabRootTitle(title: string): void {\n if (this.activeTab && this.activeTab.length > 0) {\n this.activeTab[0].title = title;\n }\n }\n\n public updateTabTitle(url: string, title: string): void {\n this.openTabs.flatMap((tabs: ITab[]) => tabs)\n .filter((tab: ITab) => tab.url === url)\n .forEach((tab: ITab) => {\n tab.title = title;\n });\n }\n //#endregion\n \n //#region Private methods\n private findTab(tabs: ITab[], url: string): ITab | undefined {\n return tabs.find((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndex(tabs: ITab[], url: string): number {\n return tabs.findIndex((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private isTabExists(tabs: ITab[], url: string): boolean {\n return tabs.some((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndexByEntityMatch(entityBaseUrl: string, excludeIndex: number = -1): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n // Only check the current view (top of stack), not the full history.\n const currentView: ITab = tabStack[tabStack.length - 1];\n return currentView.entityBaseUrl === entityBaseUrl || currentView.url === entityBaseUrl;\n });\n }\n\n private findTabIndexByCurrentView(url: string, excludeIndex: number = -1, includeChildRoutes: boolean = false): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n const currentView: ITab = tabStack[tabStack.length - 1];\n return this.matchTabUrl(currentView, url)\n || (includeChildRoutes && this.isChildRoute(currentView.url, url));\n });\n }\n\n private inheritTitleIfKnown(tab: ITab): void {\n if (tab.title || !tab.isTitleLoading) {\n return;\n }\n\n const existing: ITab | undefined = this.openTabs\n .flatMap((stack: ITab[]) => stack)\n .find((entry: ITab) => entry.url === tab.url && !entry.isTitleLoading && !!entry.title);\n\n if (existing) {\n tab.title = existing.title;\n tab.isTitleLoading = false;\n }\n }\n\n private isChildRoute(currentUrl: string, parentUrl: string): boolean {\n return currentUrl.startsWith(parentUrl + '/');\n }\n\n private matchTabUrl(tab: ITab, url: string): boolean {\n return tab.url === url\n || tab.clones.indexOf(url) !== -1;\n }\n //#endregion\n}","import { Component, inject, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Subject, take } from 'rxjs';\nimport { AuthService } from '../../services';\n\n@Component({ template: '' })\nexport class BaseButton extends RibbonGroupChild implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(RibbonButtonComponent) protected button!: RibbonButtonComponent;\n \n @Input() public set allowedActions(value: string[]) {\n if (this._allowedActions !== value) {\n this._allowedActions = value;\n this.checkAccessIsAllowed();\n }\n }\n @Input() public disabled: boolean = false;\n @Input() public iconSize: 'small' | 'large' = 'large';\n @Input() public loading: boolean = false;\n @Input() public set options(value: IRibbonButtonOption[]) {\n if (this._options !== value) {\n this._options = value;\n this.checkAccessIsAllowedToOptions();\n }\n }\n //#endregion\n\n //#region Variables\n public visible: boolean = true;\n\n protected authService: AuthService = inject(AuthService);\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected isAccessLoaded: boolean = false;\n\n private _allowedActions: string[] = new Array<string>;\n private _options: IRibbonButtonOption[] = [];\n //#endregion\n\n //#region Properties\n public get allowedActions(): string[] {\n return this._allowedActions;\n }\n\n public get isVisible(): boolean {\n return this.visible;\n }\n\n public get options(): IRibbonButtonOption[] {\n return this._options;\n }\n\n protected get isButtonDisabled(): boolean {\n return this.disabled || !this.isAccessLoaded;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.checkAccessIsAllowed();\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public startLoading(): void {\n this.button.startLoading();\n }\n\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.button.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private checkAccessIsAllowed(): void {\n if (this.allowedActions.length === 0) {\n this.isAccessLoaded = true;\n this.visible = true;\n return;\n }\n\n this.authService.checkActionsAreAllowed(this.allowedActions)\n .pipe(take(1))\n .subscribe((result: boolean[]) => {\n this.isAccessLoaded = true;\n this.visible = result.some((isAllowed: boolean) => isAllowed === true);\n });\n }\n\n private checkAccessIsAllowedToOptions(): void {\n if (this.options.length === 0) {\n return;\n }\n\n const optionsToCheckActions: IRibbonButtonOption[] = this.options\n .filter((option: IRibbonButtonOption) => (option.allowedActions?.length ?? 0) > 0);\n\n if (optionsToCheckActions.length > 0) {\n optionsToCheckActions.forEach((option: IRibbonButtonOption, index: number) => {\n this.authService.checkActionsAreAllowed(option.allowedActions!)\n .pipe(take(1))\n .subscribe((result: boolean[]) => {\n option.isAccessAllowed = result.some((isAllowed: boolean) => isAllowed === true);\n });\n });\n }\n }\n //#endregion\n}","import { Component, inject } from '@angular/core';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { BaseButton } from './base-button';\n\n@Component({ template: '' })\nexport abstract class BaseFormViewButton extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProviderService!: DataProviderService<any>;\n protected formService!: FormService;\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProviderService = inject(DataProviderService<any>);\n this.formService = inject(FormService);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { FormGroup } from '@angular/forms';\n\nexport abstract class BackendFormValidationHelper {\n public static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup) {\n if (!httpErrorResponse || !formGroup) {\n return;\n }\n\n // Error 400 = Validation issues\n if (httpErrorResponse.status === 400 && httpErrorResponse.error && httpErrorResponse.error.errors) {\n const controls: string[] = Object.keys(formGroup.controls);\n const validationErrors: { [id: string]: string[] } = <{ [id: string]: string[]; }>httpErrorResponse.error.errors;\n\n Object.keys(validationErrors)\n .forEach((fieldName: string) => {\n setTimeout(() => {\n const controlName: string | undefined = controls.find((controlName: string) => controlName.toLocaleLowerCase() === fieldName.toLocaleLowerCase());\n if (!controlName || !formGroup.get(controlName)) {\n return;\n }\n\n formGroup.get(controlName)!.setErrors({ [validationErrors[fieldName][0]]: true });\n formGroup.get(controlName)!.markAsTouched();\n });\n });\n }\n }\n}","import { ActivatedRouteSnapshot, UrlSegment } from '@angular/router';\n\nexport abstract class RouteHelper {\n public static getRouteByData(routeSnapshot: ActivatedRouteSnapshot | null, key: string, value: any): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.data[key] === value ? routeSnapshot : this.getRouteByData(routeSnapshot.firstChild, key, value);\n }\n\n public static getRouteWithComponent(routeSnapshot: ActivatedRouteSnapshot | null, component: any): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.component === component ? routeSnapshot : this.getRouteWithComponent(routeSnapshot.firstChild, component);\n }\n\n public static getRouteURL(route: ActivatedRouteSnapshot, rootLevel: boolean = false): string {\n let segments: string[] = [];\n \n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (route) {\n if (route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(rootLevel ? route.firstChild : route.parent);\n }\n };\n\n buildRoute(route);\n\n if (!rootLevel) {\n segments = segments.reverse();\n }\n\n return `/${segments.join('/')}`;\n }\n}","import { NgClass, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, ViewChild } from '@angular/core';\nimport { ControlContainer, FormGroup } from '@angular/forms';\nimport { FormService, IModal, ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { BackendFormValidationHelper } from '../../../helpers';\n\n@Component({\n selector: 'framework-confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss'],\n imports: [\n ModalComponent,\n NgClass,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class ConfirmModalComponent implements IModal {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public errorMessage: string = '';\n @Input() public message: string = '';\n @Input() public messageIcon: string = 'fa-regular fa-circle-question';\n @Input() public messageIconColor: string = 'text-cyan-500';\n @Input() public showMessageIcon: boolean = true;\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public title!: string;\n //#endregion\n\n //#region Variables\n public isLoading: boolean = false;\n\n protected formService: FormService | undefined = inject(FormService, { optional: true }) ?? undefined;\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this.modal.isShown;\n }\n\n protected get hasErrorMessage(): boolean {\n return !!this.errorMessage && this.errorMessage.length > 0;\n }\n\n protected get hasMessage(): boolean {\n return !!this.message && this.message.length > 0;\n }\n\n private controlContainer: ControlContainer | null = inject(ControlContainer, { optional: true });\n\n private get formGroup(): FormGroup | null {\n return this.controlContainer?.control as FormGroup ?? null;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public beginLoading(): void {\n this.clearErrorMessage();\n this.isLoading = true;\n }\n \n public clearErrorMessage(): void {\n this.errorMessage = '';\n }\n\n public closeModal(): void {\n this.modal.closeModal();\n }\n\n public finishLoading(closeModal?: boolean): void {\n this.isLoading = false;\n\n if (this.formGroup && this.formGroup.disabled) {\n this.formGroup.enable();\n }\n\n if (closeModal) {\n this.closeModal();\n }\n }\n\n public setErrorMessage(httpErrorResponse: HttpErrorResponse): void {\n this.finishLoading();\n\n if (httpErrorResponse.status === 400 && !!this.formGroup) {\n BackendFormValidationHelper.validateAllFormFields(httpErrorResponse, this.formGroup);\n } else {\n if (typeof httpErrorResponse.error === 'string') {\n this.errorMessage = httpErrorResponse.error;\n } else {\n this.errorMessage = 'Modal-Failed-DefaultMessage';\n }\n }\n }\n\n public toggleModal(): void {\n if (!!this.formService && this.formService.loading) {\n return;\n }\n\n if (!!this.formGroup) {\n // TODO: TEST THIS CHANGE\n this.formGroup.reset()\n this.formService?.resetForm();\n }\n\n \n this.clearErrorMessage();\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\nposition=\"top\"\n[closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n[size]=\"size\"\n[title]=\"title | translate\">\n <div body>\n <div *ngIf=\"hasMessage\" class=\"message\">\n <i *ngIf=\"showMessageIcon\" class=\"fa-3x\" [ngClass]=\"[ messageIcon, messageIconColor ]\"></i>\n <h4 [innerHTML]=\"message | translate\"></h4>\n </div> \n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasErrorMessage\" class=\"erro\">\n <h4>{{ errorMessage | translate }}</h4>\n <span>{{ 'Modal-Failed-Administrator' | translate }}</span>\n </div>\n </div>\n <div footer>\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</lib-modal>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'framework-error-modal',\n templateUrl: './error-modal.component.html',\n styleUrls: ['./error-modal.component.scss'],\n imports: [\n ModalComponent,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class ErrorModalComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public errorMessage: string = '';\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public subtitle: string = 'Modal-Failed-Administrator';\n @Input() public title: string = 'Modal-Failed-Title';\n\n @Output() public closed: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this.modal.isShown;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public closeModal(): void {\n this.modal.closeModal();\n }\n\n public showModal(error: string | HttpErrorResponse): void {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (typeof error.error === 'string') {\n errorMessage = error.error;\n }\n this.errorMessage = errorMessage;\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\nposition=\"top\"\n[closeButtonText]=\"'Button-Modal-Close' | translate\"\n[size]=\"size\"\n[title]=\"title | translate\"\n(closed)=\"closed.emit()\">\n <div body>\n <div class=\"erro\">\n <h4>{{ errorMessage | translate }}</h4>\n <span *ngIf=\"subtitle\">{{ subtitle | translate }}</span>\n </div>\n </div>\n</lib-modal>","import { NgModule } from '@angular/core';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { ErrorModalComponent } from './error-modal/error-modal.component';\n\n\n@NgModule({\n declarations: [],\n imports: [\n ConfirmModalComponent,\n ErrorModalComponent,\n ],\n exports: [\n ConfirmModalComponent,\n ErrorModalComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModalsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModalsModule { }","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-confirm',\n templateUrl: './button-confirm.component.html',\n imports: [\n ConfirmModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonConfirmComponent)}]\n})\nexport class ButtonConfirmComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ConfirmModalComponent) private confirmModal!: ConfirmModalComponent;\n\n @Input() public action!: Observable<any>;\n @Input() public color: string = 'text-primary-500';\n @Input() public icon!: string;\n @Input() public label!: string;\n @Input() public modalConfirmButtonColor!: string;\n @Input() public modalConfirmButtonLabel!: string;\n @Input() public modalMessage!: string;\n @Input() public modalMessageIcon: string = 'fa-solid fa-circle-question';\n @Input() public modalMessageIconColor!: string;\n @Input() public modalTitle!: string;\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = true;\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal.toggleModal();\n }\n\n protected onDelete(): void {\n if (this.confirmModal.isLoading || !this.confirmModal.isShown) {\n return;\n }\n \n this.confirmModal.beginLoading();\n\n this.action\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n this.confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n this.confirmModal.setErrorMessage(e);\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\n[color]=\"color\"\n[disabled]=\"disabled\"\n[icon]=\"icon\"\n[label]=\"label\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>\n\n<framework-confirm-modal #modal\n[message]=\"modalMessage\"\n[messageIcon]=\"modalMessageIcon\"\n[messageIconColor]=\"modalMessageIconColor\"\n[title]=\"modalTitle\">\n <div footer>\n <button\n class=\"btn {{ modalConfirmButtonColor }}\"\n type=\"button\"\n [class.loading]=\"modal.isLoading\"\n (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel | translate }}\n </button>\n </div>\n</framework-confirm-modal>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, Input, ViewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-delete',\n templateUrl: './button-delete.component.html',\n imports: [\n ConfirmModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonDeleteComponent)}]\n})\nexport class ButtonDeleteComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ConfirmModalComponent) private confirmModal!: ConfirmModalComponent;\n\n @Input() public action!: Observable<any>;\n @Input() public label: string = 'Button-Delete';\n @Input() public modalConfirmButtonLabel: string = 'Modal-Delete-Confirm';\n @Input() public modalMessage: string = 'Modal-Delete-Message';\n @Input() public modalTitle: string = 'Modal-Delete-Title';\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = true;\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal.toggleModal();\n }\n\n protected onDelete(): void {\n if (this.confirmModal.isLoading || !this.confirmModal.isShown) {\n return;\n }\n \n this.confirmModal.beginLoading();\n\n this.action\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n this.confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n this.confirmModal.setErrorMessage(e);\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible\"\ncolor=\"text-red-500\"\nicon=\"fa-trash-alt\"\n[disabled]=\"disabled\"\n[label]=\"label\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>\n\n<framework-confirm-modal #modal\nmessageIcon=\"fa-solid fa-circle-exclamation\"\nmessageIconColor=\"text-red-500\"\n[message]=\"modalMessage\"\n[title]=\"modalTitle\">\n <div footer>\n <button\n class=\"btn red-500\"\n type=\"button\"\n [class.loading]=\"modal.isLoading\"\n (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel | translate }}\n </button>\n </div>\n</framework-confirm-modal>","import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class ViewBase implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n\n private _loading: boolean = false;\n //#endregion\n\n //#region Properties\n public get loading(): boolean {\n return this._loading;\n }\n public set loading(value: boolean) {\n this._loading = value;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { ViewBase } from '../view-base';\n\nexport abstract class ModalBase extends ViewBase {\n abstract toggle(): void;\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from '../../../views/modals/modal-base';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-edit',\n templateUrl: './button-edit.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditComponent)}]\n})\nexport class ButtonEditComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public cancelColor: string = 'text-red-500';\n @Input() public cancelIcon: string = 'fa-ban';\n @Input() public cancelLabel: string = 'Button-Cancel-Edit';\n @Input() public editIcon: string = 'fa-edit';\n @Input() public editLabel: string = 'Button-Edit';\n @Input() public modal?: ModalBase;\n //#endregion\n\n //#region Variables\n protected isButtonCancelVisible: boolean = false;\n\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n //#endregion\n\n //#region Properties\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.formService.editCanceled\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isButtonCancelVisible = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onCancelClicked(): void {\n if (this.isButtonCancelVisible) {\n this.isButtonCancelVisible = false;\n this.formService.cancelEdit();\n }\n }\n\n protected onEditClicked(): void {\n if (!!this.modal) {\n this.modal.toggle();\n } else {\n this.isButtonCancelVisible = true;\n this.formService.beginEdit();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible && !isButtonCancelVisible && hasDataProviderEntityID\"\n[disabled]=\"disabled || !isAccessLoaded || isFormLoading\"\n[icon]=\"editIcon\"\n[iconSize]=\"iconSize\"\n[label]=\"editLabel\"\n[loading]=\"loading\"\n(action)=\"onEditClicked()\">\n</lib-ribbon-button>\n\n<lib-ribbon-button *ngIf=\"visible && isButtonCancelVisible && hasDataProviderEntityID\"\n[color]=\"cancelColor\"\n[disabled]=\"disabled || !isAccessLoaded || isFormLoading\"\n[icon]=\"cancelIcon\"\n[label]=\"cancelLabel\"\n[loading]=\"loading\"\n(action)=\"onCancelClicked()\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DataGridDataset, IListParameters, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\nexport type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';\n\nexport const MaxExportRows: number = 50000;\n\n@Component({\n selector: 'framework-button-export',\n templateUrl: './button-export.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonExportComponent)}]\n})\nexport class ButtonExportComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public fileBaseName: string = 'export';\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n private translateService: TranslateService = inject(TranslateService);\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.isExceedingExportLimit;\n }\n\n protected get tooltip(): string {\n if (this.isExceedingExportLimit) {\n return this.translateService.instant('Button-Export-LimitExceeded', { max: MaxExportRows });\n }\n return '';\n }\n\n private get isExceedingExportLimit(): boolean {\n const totalRows: number | undefined = this.dataGridDataset?.totalRows;\n return totalRows !== undefined && totalRows > MaxExportRows;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'xlsx', label: 'Button-Export-Excel', icon: 'fa-file-excel' },\n { id: 'pdf', label: 'Button-Export-PDF', icon: 'fa-file-pdf' },\n { id: 'csv', label: 'Button-Export-CSV', icon: 'fa-file-csv' },\n { id: 'xml', label: 'Button-Export-XML', icon: 'fa-file-code' },\n { id: 'mhtml', label: 'Button-Export-MHTML', icon: 'fa-file-archive' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(format?: string): void {\n if (!this.dataGridDataset) {\n return;\n }\n\n const resolvedFormat: ExportFormat = (format as ExportFormat) ?? 'xlsx';\n\n this.startLoading();\n\n const parameters: IListParameters = {\n endRow: 0,\n filters: this.dataGridDataset.filters,\n startRow: 0,\n };\n\n this.dataGridDataset.export(resolvedFormat, parameters)\n .pipe(take(1))\n .subscribe({\n next: (response: HttpResponse<Blob>) => {\n this.download(response);\n this.finishLoading('success');\n },\n error: (_: HttpErrorResponse) => {\n this.finishLoading('failure');\n }\n });\n }\n //#endregion\n\n //#region Private methods\n private download(response: HttpResponse<Blob>): void {\n if (!response.body) {\n return;\n }\n\n const contentDisposition: string = response.headers.get('Content-Disposition') ?? '';\n const match: RegExpExecArray | null = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(contentDisposition);\n const fileName: string = match ? decodeURIComponent(match[1]) : this.fileBaseName;\n\n const url: string = URL.createObjectURL(response.body);\n const anchor: HTMLAnchorElement = document.createElement('a');\n anchor.href = url;\n anchor.download = fileName;\n anchor.click();\n URL.revokeObjectURL(url);\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Export\"\nicon=\"fa-file-export\"\n[disabled]=\"isButtonDisabled\"\n[loading]=\"loading\"\n[options]=\"options\"\n[tooltip]=\"tooltip\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input, OnInit, ViewChild, forwardRef } from '@angular/core';\nimport { FormGroupDirective } from '@angular/forms';\nimport { DataGridDataset, FormService, ModalComponent, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-filters',\n templateUrl: './button-filters.component.html',\n styleUrls: ['./button-filters.component.scss'],\n imports: [\n ModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [\n FormService,\n { provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonFiltersComponent)},\n ]\n})\nexport class ButtonFiltersComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) modal!: ModalComponent;\n\n @Input() public modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public modalTitle!: string;\n @Input() public validateFormFunction?: Function;\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n protected readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\n\n private filters: { [key: string]: string; } = {};\n //#endregion\n\n //#region Properties\n protected get hasFiltersApplied(): boolean {\n return Object.keys(this.filters).length > 0;\n }\n\n protected get singleColumn(): boolean {\n return this.modalSize === 'sm' || this.modalSize === 'md' || this.modalSize === 'lg' || this.modalSize === 'xl';\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the filter disabled.\n this.disabled = true;\n }\n\n public ngOnInit(): void {\n this.gridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.disabled = true;\n if (this.button.loading) {\n this.finishLoading('success');\n }\n });\n\n this.gridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.disabled = false;\n if (this.button.loading) {\n this.finishLoading('success');\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onFiltersButtonClicked(): void {\n this.modal.toggleModal();\n this.formGroup.form.reset();\n this.formGroup.form.patchValue(this.filters, { emitEvent: false });\n }\n\n protected onFiltersSubmitClicked(): void {\n if (this.validateFormFunction) {\n this.validateFormFunction();\n }\n\n if (this.formGroup.form.valid) {\n this.button.startLoading();\n this.modal.toggleModal();\n \n const formValue: any = this.formGroup.form.getRawValue();\n const formFilters: { [key: string ] : any } = Object.fromEntries(Object.entries(formValue).filter(([_, v]) => (!!v && v !== '') || v === 0));\n\n this.setFilters(formFilters);\n }\n }\n\n protected onResetButtonClicked(): void {\n this.button.startLoading();\n \n this.formGroup.form.reset();\n this.filters = {};\n\n this.gridDataset.setFilters();\n }\n //#endregion\n\n //#region Public methods\n public setFilters(filters: { [key: string ] : any }): void {\n this.filters = filters;\n\n if (this.hasFiltersApplied) {\n this.gridDataset.setFilters(filters);\n } else {\n this.gridDataset.setFilters();\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n[disabled]=\"disabled\"\n[icon]=\"'fa-filter'\"\n[iconSize]=\"iconSize\"\n[label]=\"'Button-Filters'\"\n[loading]=\"loading\"\n(action)=\"onFiltersButtonClicked()\">\n</lib-ribbon-button>\n\n<lib-ribbon-button\n*ngIf=\"hasFiltersApplied\"\n[color]=\"'text-red-500'\"\n[disabled]=\"disabled\"\n[icon]=\"'fa-broom'\"\n[iconSize]=\"iconSize\"\n[label]=\"'Button-Filters-Clear'\"\n[loading]=\"loading\"\n(action)=\"onResetButtonClicked()\">\n</lib-ribbon-button>\n\n<lib-modal position=\"top\" [size]=\"modalSize\" [title]=\"modalTitle | translate\" [closeButtonText]=\"'Button-Modal-Cancel' | translate\">\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <button type=\"submit\" class=\"btn blue-500\" (click)=\"onFiltersSubmitClicked()\">{{ 'Button-Filters-Modal-Confirm' | translate }}</button>\n </div>\n</lib-modal>","/**\n * Key used in Angular route `data` to identify the framework tab view type.\n *\n * Usage in route config:\n * ```ts\n * {\n * path: ':id',\n * component: MyDetailsViewComponent,\n * data: { [FRAMEWORK_VIEW_TYPE]: FrameworkViewType.Details, ... },\n * }\n * ```\n */\nexport const FRAMEWORK_VIEW_TYPE: string = 'frameworkViewType';\n\n/**\n * Values for the {@link FRAMEWORK_VIEW_TYPE} route data key.\n */\nexport enum FrameworkViewType {\n /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */\n Details = 'details',\n /** A list/grid view (no data provider, no sub-views). */\n List = 'list',\n}\n","export interface ITab {\n clones: string[];\n entityBaseUrl?: string;\n isTitleLoading: boolean;\n queryParams?: { [key: string]: string };\n title?: string;\n url: string;\n}\n\nexport class Tab implements ITab{\n private _title?: string | undefined;\n\n public clones: string[] = [];\n\n public entityBaseUrl?: string;\n\n public isTitleLoading: boolean = true;\n\n public queryParams?: { [key: string]: string };\n \n public get title(): string | undefined {\n return this._title;\n }\n public set title(value: string | undefined) {\n if (this._title !== value) {\n this._title = value;\n \n if (!!value) {\n this.isTitleLoading = false;\n }\n }\n }\n\n public url: string = '';\n\n constructor(init?: Partial<Tab>) {\n Object.assign(this, init);\n }\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { DataProviderService, IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-new',\n templateUrl: './button-new.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewComponent)}]\n})\nexport class ButtonNewComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public parameters?: { [key: string]: string };\n @Input() public path?: string;\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get hasDataProvider(): boolean {\n return !!this.dataProviderService;\n }\n\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(optionId?: string): void {\n let option: IRibbonButtonOption | undefined = undefined;\n if (optionId) {\n option = this.options.find(o => o.id === optionId);\n }\n\n let path: string | undefined = this.path;\n if (option && option.path && option.path.length > 0) {\n path = option.path ?? optionId;\n }\n\n let queryParameters: { [key: string]: string } | undefined = this.parameters;\n if (option && option.parameters && Object.keys(option.parameters).length > 0) {\n queryParameters = { ...queryParameters, ...option.parameters };\n }\n\n let url: string = '';\n\n // Try to find the route with ':id' parameters.\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n if (!targetRoute) {\n // If not found, uses the current route.\n url = RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n } else {\n url = RouteHelper.getRouteURL(targetRoute!.parent!);\n }\n\n if (path && path.length > 0) {\n url += `/${path}`;\n }\n\n const entityUrl: string = `${url}/${this.endpoint}`;\n const tab: ITab = new Tab({\n entityBaseUrl: entityUrl,\n queryParams: queryParameters,\n url: entityUrl,\n });\n\n this.tabService.navigateCurrentTab(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible && (!hasDataProvider || hasDataProviderEntityID)\"\nicon=\"fa-plus\"\nlabel=\"Button-New\"\n[disabled]=\"disabled || !isAccessLoaded\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-open-record',\n templateUrl: './button-open-record.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordComponent)}]\n})\nexport class ButtonOpenRecordComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public elementPath?: string;\n @Input() public rootPath?: string;\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n private router: Router = inject(Router);\n private selectionCount: number = 0;\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isSelectedOneRecord(): boolean {\n return this.selectionCount === 1;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled || !this.isAccessLoaded || !this.isSelectedOneRecord || !this.visible) {\n return;\n }\n\n let path: string = this.rootPath ?? this.router.url;\n\n if (this.elementPath) {\n path += `/${this.elementPath}`;\n }\n\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n path += `/${selectedID}`;\n\n this.tabService.navigateCurrentTab(new Tab({ entityBaseUrl: path, url: path }));\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nicon=\"fa-eye\"\nlabel=\"Button-Open-Record\"\n[disabled]=\"disabled || !isAccessLoaded || !isSelectedOneRecord\"\n[iconSize]=\"iconSize\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>","import { Component, forwardRef, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-refresh',\n templateUrl: './button-refresh.component.html',\n imports: [\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonRefreshComponent)}]\n})\nexport class ButtonRefreshComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = false;\n }\n\n public ngOnInit(): void {\n this.dataGridDataset?.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.loading = true;\n this.dataGridDataset?.refresh();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\nlabel=\"Button-Refresh\"\nicon=\"fa-sync-alt\"\n[disabled]=\"disabled\"\n[loading]=\"loading\"\n[iconSize]=\"iconSize\"\n(action)=\"onButtonClicked()\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Observable, take, throwError } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-save',\n templateUrl: './button-save.component.html',\n imports: [\n ErrorModalComponent,\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveComponent)}]\n})\nexport class ButtonSaveComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n\n @Input() public defaultOption: number = 0;\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isFormEditMode(): boolean {\n return this.formService.isEditMode;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(option?: string): void {\n this.startLoading();\n\n this.formService.markAllAsTouched();\n if (!this.formService.isValid) {\n this.finishLoading('warning');\n return;\n }\n\n this.saveModel()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n this.formService.enableForm();\n this.formService.model = model;\n this.formService.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.navigateBackOrCloseActiveTab();\n break;\n case 'save-and-new': {\n this.dataProviderService.updateModel(model);\n\n const detailsRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n const savedEntityUrl: string = `${RouteHelper.getRouteURL(detailsRoute!.parent!)}/${model.id}`;\n const currentRouteUrl: string = RouteHelper.getRouteURL(detailsRoute!);\n\n if (currentRouteUrl !== savedEntityUrl) {\n // Router URL differs from saved entity (new entity, or regular save\n // that only used location.replaceState). Redirect to sync the router\n // to /{id} invisibly, then navigate to /new normally. The real second\n // navigation detaches and caches the /{id} component so back-navigation\n // reattaches it instantly without reloading from the server.\n this.tabService.redirectCurrentTab(savedEntityUrl);\n this.tabService.setRouteRedirect(currentRouteUrl, savedEntityUrl);\n this.router.navigateByUrl(savedEntityUrl).then(() => {\n this.navigateToNew();\n });\n } else {\n // Router is already at /{id}. Navigate to /new directly.\n // The /{id} component is cached by the reuse strategy.\n this.navigateToNew();\n }\n break;\n }\n default:\n this.dataProviderService.updateModel(model);\n\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n const url: string = `${RouteHelper.getRouteURL(targetRoute!.parent!)}/${model.id}`;\n\n if (!this.tabService.isUrlActive(url)) {\n const currentRoute: string = RouteHelper.getRouteURL(targetRoute!);\n this.tabService.redirectCurrentTab(url);\n\n // Sync the Angular router to /{id} invisibly. Without this, the router\n // stays at the old URL (e.g., /new) and subsequent navigations to that\n // URL become no-ops (the New button would stop working after Save).\n if (currentRoute !== url) {\n this.tabService.setRouteRedirect(currentRoute, url);\n this.router.navigateByUrl(url);\n }\n }\n break;\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n this.formService.enableForm();\n\n if (e.status === 400) {\n this.formService.setValidationErrorsFromHttpResponse(e);\n } else {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n this.errorModal.showModal(errorMessage);\n }\n },\n complete: () => {\n this.formService.loading = false;\n }\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private navigateToNew(): void {\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n\n let url: string = '';\n if (targetRoute) {\n url = RouteHelper.getRouteURL(targetRoute.parent!);\n } else {\n url = RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n }\n\n const tab: ITab = new Tab({ entityBaseUrl: `${url}/new`, url: `${url}/new` });\n this.tabService.navigateCurrentTab(tab);\n }\n\n private saveModel(): Observable<any> {\n this.formService.disableForm();\n const model: any = this.formService.getModelFromForm();\n return this.dataProviderService.saveModel(model);\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Save\"\nicon=\"fa-save\"\n[defaultOption]=\"defaultOption\"\n[disabled]=\"disabled || !isAccessLoaded || !isFormEditMode || isFormLoading\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>\n\n<framework-error-modal></framework-error-modal>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, Route, Router, UrlSegment } from '@angular/router';\nimport { DataProviderService, IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { filter, takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-views',\n templateUrl: './button-views.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsComponent)}]\n})\nexport class ButtonViewsComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public detailsViewRoute: ActivatedRouteSnapshot | null = null;\n //#endregion\n\n //#region Variables\n private baseUrlPath?: string;\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private isInternalNavigation: boolean = false;\n private router: Router = inject(Router);\n private selectedViewId?: string;\n private tabService: TabService = inject(TabService);\n private tabViewService: TabViewService = inject(TabViewService);\n //#endregion\n\n //#region Properties\n protected get hasOptions(): boolean {\n return this.options.some((option: IRibbonButtonOption) => (option.isVisible ?? true) && (option.allowedActions === undefined || option.allowedActions.length === 0 || option.isAccessAllowed === true || (option.isAccessAllowed === undefined && option.allowedActions?.length > 0)));\n }\n\n protected get isNewEntity(): boolean {\n return !(this.dataProviderService?.hasEntityID ?? false);\n }\n\n protected get selectedView(): IRibbonButtonOption | undefined {\n return this.options.find((option: IRibbonButtonOption) => option.id === this.selectedViewId);\n }\n\n private get defaultViewId(): string {\n return this.options[0].id ?? '';\n }\n\n private get selectedViewUrl(): string {\n let url: string = this.baseUrlPath ?? '';\n\n const selectedView: IRibbonButtonOption | undefined = this.selectedView;\n if (selectedView && selectedView.id) {\n url += `/${selectedView.id}`;\n }\n\n return url;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n if (!!this.detailsViewRoute) {\n this.options = this.detailsViewRoute.routeConfig?.children\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\n ?.map((route: Route) => {\n const data: { [key: string | symbol]: any } = route.data ?? {};\n\n const option: IRibbonButtonOption = {\n id: route.path ?? '',\n isDisabled: false,\n isVisible: true,\n label: data['title'] ?? '',\n };\n\n const icon: string | undefined = data['icon'];\n if (icon) {\n option.icon = icon;\n }\n\n const allowedActions: string[] | undefined = data['allowedActions'];\n if (allowedActions && allowedActions.length > 0) {\n option.allowedActions = allowedActions;\n }\n\n return option;\n }) ?? [];\n\n const url: string = RouteHelper.getRouteURL(this.detailsViewRoute);\n this.baseUrlPath = url;\n\n const option: string = this.detailsViewRoute.children[0]?.url?.map((segment: UrlSegment) => segment.path)?.join('/') ?? '';\n if (option === this.defaultViewId) {\n // We just need to check if the current option is the default, otherwise the router.events will handle the option selection.\n this.changeSelectedView(this.defaultViewId);\n }\n }\n\n this.router.events\n .pipe(\n filter((event: any) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event: NavigationEnd) => {\n if (this.detailsViewRoute) {\n // Use the current router state to get the up-to-date URL, since the stored\n // detailsViewRoute snapshot is immutable and becomes stale after save redirects\n // (e.g., /new → /:id).\n const currentRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n\n if (currentRoute) {\n const url: string = RouteHelper.getRouteURL(currentRoute);\n this.baseUrlPath = url;\n\n const activeViewId: string = this.getActiveOption(event.url);\n\n if (!this.isInternalNavigation) {\n if (this.selectedViewId !== activeViewId) {\n this.changeSelectedView(activeViewId);\n }\n } else {\n this.isInternalNavigation = false;\n }\n }\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onViewClicked(selectedOption: string | undefined): void {\n this.changeSelectedView(selectedOption);\n this.isInternalNavigation = true;\n\n if (selectedOption === this.defaultViewId) {\n // Default view: remove sub-view entry, navigate back to detail view\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!);\n } else {\n const tab: ITab = new Tab({\n title: this.selectedView?.label,\n url: this.selectedViewUrl,\n });\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!, tab);\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private changeSelectedView(viewId: string | undefined): void {\n if (this.selectedView) {\n this.selectedView.isDisabled = false;\n }\n\n this.selectedViewId = viewId;\n this.tabViewService.setActiveView(viewId ?? '');\n\n if (this.selectedView) {\n this.selectedView.isDisabled = true;\n }\n }\n\n private getActiveOption(url: string): string {\n const option: string = url.replace(this.baseUrlPath ?? '', '').substring(1);\n\n if (this.options.some((o: IRibbonButtonOption) => o.id === option)) {\n return option;\n }\n\n return this.defaultViewId;\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"hasOptions\"\nicon=\"fa-eye\"\nlabel=\"Button-Views\"\n[disabled]=\"!isAccessLoaded || isNewEntity\"\n[options]=\"options\"\n(action)=\"onViewClicked($event)\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button',\n templateUrl: './button.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonComponent)}]\n})\nexport class ButtonComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public color: string = 'text-primary-500';\n @Input() public icon?: string;\n @Input() public label: string = '';\n\n @Output() public action: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled || !this.isAccessLoaded || !this.visible) {\n return;\n }\n\n this.action.emit();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\n[color]=\"color\"\n[disabled]=\"disabled || !isAccessLoaded\"\n[icon]=\"icon\"\n[iconSize]=\"iconSize\"\n[label]=\"label\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, DataProviderService, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { skip, takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n@Component({ template: '' })\nexport abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n protected selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n protected get isLoading(): boolean {\n return this.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n\n this.resultDataset?.savedChanges\n ?.pipe(takeUntil(this.destroy$))\n ?.subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n this.dataProvider?.getModel$()\n .pipe(skip(1), takeUntil(this.destroy$))\n .subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n //#endregion\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { DataGridDataset, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n/**\n * @deprecated Use standalone {@link ChildList} instead. Migrate by extending ChildList\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class ChildListLegacy extends ViewBase implements OnInit {\n\n private _entityId?: number;\n\n protected selectionCount: number = 0;\n\n get entityId(): number | undefined {\n return this._entityId;\n }\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = value;\n }\n }\n }\n\n @Input() disabled: boolean = false;\n\n\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected resultDataset: MultiSelectResultDataset | null = inject(MultiSelectResultDataset, { optional: true });\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n\n if (!this.dataGridDataset.loadedRows) {\n this.loading = true;\n }\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n \n\n selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n}","import { AfterViewInit, Component, inject, TemplateRef, ViewChild } from '@angular/core';\nimport { TabViewService } from '../services';\nimport { ViewBase } from './view-base';\n\n@Component({ template: '' })\nexport abstract class TabViewBase extends ViewBase implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('ribbon') private ribbonTemplate?: TemplateRef<any>;\n //#endregion\n \n //#region Variables\n private tabViewService: TabViewService | null;\n //#endregion\n \n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n this.tabViewService = inject(TabViewService, { optional: true });\n }\n\n public ngAfterViewInit(): void {\n this.tabViewService?.updateRibbonTemplate(this.ribbonTemplate);\n }\n //#endregion\n \n //#region Event handlers\n //#endregion\n \n //#region Public methods\n //#endregion\n \n //#region Private methods\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { take, takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n@Component({ template: '' })\nexport abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n //#endregion\n\n //#region Properties\n protected get hasEntityID(): boolean {\n return this.dataProvider?.hasEntityID ?? false;\n }\n\n protected get isLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.formService.loading = true;\n this.dataProvider?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: TEntityModel | null) => {\n this.formService.loading = false;\n this.formService.model = model;\n this.formService.resetForm();\n\n if (!this.dataProvider?.hasEntityID) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n //#endregion\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { Observable, take, tap, throwError } from 'rxjs';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link FormView} instead. Migrate by extending FormView\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: ''})\nexport abstract class LegacySubViewForm extends ViewBase implements OnInit {\n @Input() entityId?: number;\n @Input() set model(value: any | null) {\n if (this._model !== value) {\n this._model = value;\n \n if (this.dataForm) {\n this.dataForm.patchValue(this.model);\n }\n }\n }\n\n override get loading(): boolean {\n return false;\n return this.formService.loading;\n }\n\n override set loading(value: boolean) {\n this.formService.loading = value;\n }\n\n get isNew(): boolean {\n return !this.entityId;\n }\n get model(): any | null {\n return this._model;\n }\n\n dataForm!: FormGroup;\n viewMode: 'view' | 'edit' = 'view';\n\n private _model: any | null = null;\n\n protected dataProvider: DataProviderService<any> | null;\n\n\n constructor(\n protected formBuilder: FormBuilder,\n protected formService: FormService,\n ) {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n }\n\n ngOnInit(): void {\n this.dataForm = this.formSetup();\n\n this.updateModel(this.model);\n\n if (this.dataProvider) {\n this.formService.loading = true;\n\n this.dataProvider.getModel$()\n .pipe(take(1))\n .subscribe((_: any) => {\n this.formService.loading = false;\n })\n }\n }\n\n \n protected updateModel(model: any): void {\n this._model = model;\n\n if (this.isNew) {\n this.beginEdit();\n }\n else {\n this.cancelEdit();\n }\n }\n\n beginEdit(resetValues: boolean = true): void {\n setTimeout(() => {\n this.viewMode = 'edit';\n this.dataForm.enable();\n\n if (resetValues) {\n this.dataForm.patchValue(this.model);\n }\n });\n }\n\n cancelEdit(): void {\n this.viewMode = 'view';\n this.dataForm.patchValue(this.model);\n this.dataForm.disable();\n }\n\n protected validate(formModel: any): void {\n }\n\n save(): Observable<any> {\n \n this.validate(this.dataForm.getRawValue());\n \n if (this.dataForm.valid) {\n this.dataForm.disable();\n\n return this.saveModel()\n .pipe(\n tap(() => this.dataForm.enable())\n );\n }\n else {\n this.dataForm.markAllAsTouched();\n return throwError(() => new HttpErrorResponse({ error: { message: 'Form invalid', errors: null }, status: 400 }));\n }\n }\n\n protected abstract formSetup(): FormGroup;\n protected abstract saveModel(): Observable<any>;\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ITabView, RouterFormatter } from '@zambon-dev/library';\nimport { TabService } from '../../services';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} instead. Migrate by extending TabViewBase\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewBase extends ViewBase implements OnInit, ITabView {\n\n title: string = '';\n url: string;\n activeView?: string;\n\n \n constructor(\n protected route: ActivatedRoute,\n protected tabService: TabService\n ) {\n super();\n \n this.url = RouterFormatter.getURL(this.route.snapshot);\n }\n\n ngOnInit(): void {\n this.openTabView();\n }\n\n\n protected openTabView() {\n // this.tabService.openView(this);\n }\n\n protected updateTitle(title: string): void {\n this.title = title;\n this.tabService.updateTabTitle(this.url, title);\n }\n}","import { AfterViewInit, Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormService, IRibbonButtonOption } from '@zambon-dev/library';\nimport { Observable, takeUntil } from 'rxjs';\nimport { ButtonNewLegacyComponent } from '../../components';\nimport { Tab } from '../../models';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} with {@link DefaultDetailsTabViewComponent} pattern instead.\n * Migrate by extending TabViewBase and composing detail/history views as child routes\n * with standalone component imports.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ButtonNewLegacyComponent) public buttonNew!: ButtonNewLegacyComponent;\n //#endregion\n \n //#region Variables\n public override title: string = '';\n\n protected defaultView: string = 'details';\n protected entityId?: number;\n protected views: IRibbonButtonOption[] = [\n { id: 'details', label: 'Button-Views-Details', icon: 'fa-dice-d6' },\n { id: 'history', label: 'Button-Views-History', icon: 'fa-history' }\n ];\n //#endregion\n\n //#region Properties\n public override get loading(): boolean {\n return super.loading;\n }\n \n public override set loading(value: boolean) {\n super.loading = value;\n this.formService.loading = value;\n }\n\n protected get currentView(): string {\n return this.activeView ?? this.defaultView;\n }\n\n protected get model(): any {\n return this.formService.model;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n route: ActivatedRoute,\n tabService: TabService,\n protected formService: FormService\n ) {\n super(route, tabService);\n }\n\n public ngAfterViewInit(): void {\n this.onViewVisible();\n }\n\n public override ngOnInit(): void {\n this.refreshParameters();\n\n super.ngOnInit();\n\n this.formService.modelRefreshed\n .pipe(takeUntil(this.destroy$))\n .subscribe((_: any) => {\n const id: number | null = this.getModelId();\n if (id && this.entityId !== id) {\n this.entityId = id;\n this.tabService.redirectCurrentTab(`${this.url.substring(0, this.url.indexOf('/new'))}/${id}`);\n }\n\n this.updateTitle(this.getModelDescription());\n });\n\n this.refresh();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n protected override openTabView(): void {\n super.openTabView();\n\n const activeView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === this.activeView);\n if (activeView) {\n activeView.isDisabled = true;\n }\n }\n\n protected refresh(): void {\n this.loading = true;\n this.title = '';\n this.formService.model = null;\n\n this.loadModel()\n .pipe(takeUntil(this.destroy$))\n .subscribe(model => {\n this.loading = false;\n this.formService.model = model;\n });\n }\n protected refreshParameters(): void {\n const currentID: string | null = this.route.snapshot.paramMap.get('id');\n this.entityId = currentID ? Number(currentID) : undefined;\n\n let viewID: string | null = this.route.snapshot.paramMap.get('view');\n if (!viewID || !this.views.some((view: IRibbonButtonOption) => view.id === viewID)) {\n this.switchView(this.defaultView);\n } else {\n this.activeView = viewID;\n }\n }\n protected switchView(viewId?: string): void {\n if (!viewId) {\n viewId = this.defaultView;\n }\n\n const activeView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === (this.activeView ?? this.defaultView));\n if (activeView) {\n activeView.isDisabled = false;\n }\n\n const newView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === viewId);\n if (newView) {\n newView.isDisabled = true;\n\n let urlViewPath: string = viewId === this.defaultView ? '' : `/${viewId}`;\n let url: string = this.url;\n if (this.activeView && url.endsWith(this.activeView)) {\n url = url.replace(`/${this.activeView}`, urlViewPath);\n } else {\n url += urlViewPath;\n }\n this.tabService.navigateCurrentTab(new Tab({ url }));\n // this.tabService.changeTabView(this, viewId !== this.defaultView ? viewId : undefined);\n \n this.activeView = newView.id;\n\n // if (!this.activeView) {\n // this.activeView = this.defaultView;\n // }\n }\n\n this.onViewVisible();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n protected abstract getModelDescription(): string;\n protected abstract getModelId(): number | null;\n protected abstract loadModel(): Observable<any | null>;\n protected abstract newModel(): any;\n protected abstract onViewVisible(): void;\n //#endregion\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DataGridDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewList} instead. Migrate by extending TabViewList\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private _selectedItem?: TListModel;\n private selectedRows: number = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectedRows > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected dataGridDataset: DataGridDataset,\n route: ActivatedRoute,\n tabService: TabService,\n ) {\n super(route, tabService);\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n setTimeout(() => this.loading = false);\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectedRows = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectedRows === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0])\n }\n }\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n@Component({ template: '' })\nexport abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n\n private _selectedItem?: TListModel;\n private selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectionCount > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n setTimeout(() => this.loading = false);\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectionCount === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0])\n }\n }\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { DataProviderService, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { TabViewList } from './tabview-list';\n\n@Component({ template: '' })\nexport abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataGridDataset, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {\n protected _entityId?: number;\n\n @ViewChild(MultiEditorComponent) multiEditor!: MultiEditorComponent;\n\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n this.multiEditorDataset.parentEntityId = value;\n }\n }\n\n @Output() savedChanges = new EventEmitter();\n\n form!: FormGroup;\n\n\n constructor(\n protected dataGridDataset: DataGridDataset,\n protected multiEditorDataset: MultiEditorDataset,\n protected formBuilder: FormBuilder\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.form = this.formSetup();\n\n this.multiEditorDataset.savedChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.savedChanges.emit();\n });\n }\n\n\n toggle(): void {\n this.multiEditor.toggleModal();\n }\n\n abstract formSetup(): FormGroup;\n}","import { Component, EventEmitter, inject, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataGridDataset, DataProviderService, FormService, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(MultiEditorComponent) protected multiEditor!: MultiEditorComponent;\n\n @Input() public overrideParentID?: number;\n\n @Output() public savedChanges: EventEmitter<any> = new EventEmitter();\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected multiEditorDataset: MultiEditorDataset;\n protected selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n this.multiEditorDataset = inject(MultiEditorDataset);\n\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.multiEditorDataset.savedChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.savedChanges.emit();\n });\n\n this.updateParentID();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(): void {\n if (!this.multiEditor.isShown) {\n this.updateParentID();\n }\n\n this.multiEditor.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n private updateParentID(): void {\n let parentID: number | undefined = this.dataProvider?.entityID;\n if (this.overrideParentID) {\n parentID = this.overrideParentID;\n }\n\n if (parentID) {\n this.dataGridDataset.parentEntityId = parentID;\n this.multiEditorDataset.parentEntityId = parentID;\n }\n }\n //#endregion\n}\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { MultiSelectComponent } from '@zambon-dev/library';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiSelectModal extends ModalBase {\n @ViewChild(MultiSelectComponent) multiSelect!: MultiSelectComponent;\n @Output() public savedChanges: EventEmitter<void> = new EventEmitter();\n\n toggle(): void {\n this.multiSelect.toggleModal(); \n }\n}","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormService, IModal } from '@zambon-dev/library';\nimport { Observable, Subject, switchMap, takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('modal') protected modalComponent!: IModal;\n //#endregion\n\n //#region Variables\n protected beginEditOnEntityLoad: boolean = false;\n protected data$: Observable<TEntityModel | null>;\n protected dataForm!: FormGroup;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected selectionCount: number = 0;\n\n private entityIdSubject: Subject<number | undefined> = new Subject<number | undefined>();\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n\n this.data$ = this.entityIdSubject\n .pipe(switchMap((entityID: number | undefined) => this.loadData(entityID)));\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((data: TEntityModel | null) => {\n this.formService.model = data;\n this.formService.loading = false;\n this.dataForm.patchValue(<any>data);\n\n if (this.beginEditOnEntityLoad) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(entityID?: number): void {\n this.formService.model = null;\n this.formService.loading = true;\n this.dataForm.reset();\n\n if (!this.modalComponent.isShown) {\n this.entityIdSubject.next(entityID);\n } else {\n this.formService.resetForm();\n }\n this.modalComponent.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;\n //#endregion\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, Input } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { LegacySubViewForm, ModalBase } from '../../../../views';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-edit-legacy',\n templateUrl: './button-edit.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonEditComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonEditLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public cancelColor: string = 'text-red-500';\n @Input() public cancelIcon: string = 'fa-ban';\n @Input() public cancelLabel: string = 'Button-Cancel-Edit';\n @Input() public editIcon: string = 'fa-edit';\n @Input() public editLabel: string = 'Button-Edit';\n @Input() public form?: LegacySubViewForm;\n @Input() public modal?: ModalBase;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onCancelAction(): void {\n if (this.form) {\n this.form.cancelEdit();\n }\n }\n\n protected onEditAction(): void {\n if (this.form) {\n this.form.beginEdit();\n }\n else if (this.modal) {\n this.modal.toggle();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible && (!form || form.viewMode !== 'edit')\"\n[disabled]=\"disabled || (!!form && form.loading)\"\n[icon]=\"editIcon\"\n[iconSize]=\"iconSize\"\n[label]=\"editLabel\"\n[loading]=\"loading\"\n(action)=\"onEditAction()\"\n></lib-ribbon-button>\n\n<lib-ribbon-button *ngIf=\"visible && form && form.viewMode === 'edit' && !form.isNew\"\n[color]=\"cancelColor\"\n[disabled]=\"disabled || form.loading\"\n[icon]=\"cancelIcon\"\n[label]=\"cancelLabel\"\n[loading]=\"loading\"\n(action)=\"onCancelAction()\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-new-legacy',\n templateUrl: './button-new.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonNewComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonNewLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public path!: string;\n @Input() public tabView!: ITabView;\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n this.tabService.navigateTo(new Tab({ url: `${this.path}/${this.endpoint}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.endpoint}`);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[label]=\"'Button-New'\"\n[icon]=\"'fa-plus'\"\n[disabled]=\"disabled\"\n[loading]=\"loading\"\n(action)=\"clicked()\"\n*ngIf=\"visible\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { DataGridDataset, ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-open-record-legacy',\n templateUrl: './button-open-record.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonOpenRecordComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public path!: string;\n @Input() public tabView!: ITabView;\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected selectionCount: number = 0;\n\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n if (this.dataGridDataset.hasSelectedRows && this.selectionCount === 1) {\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n\n this.tabService.navigateTo(new Tab({ url: `${this.path}/${selectedID}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.dataGridDataset.selectedRows[0]}`);\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[label]=\"'Button-Open-Record'\"\n[icon]=\"'fa-eye'\"\n[disabled]=\"disabled || selectionCount !== 1\"\n[loading]=\"loading\"\n(action)=\"clicked()\"\n*ngIf=\"visible\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { BackendFormValidationHelper } from '../../../../helpers';\nimport { TabService } from '../../../../services';\nimport { LegacySubViewForm, LegacyTabViewDetails } from '../../../../views';\nimport { ErrorModalComponent } from '../../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-save-legacy',\n templateUrl: './button-save.component.html',\n imports: [\n ErrorModalComponent,\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonSaveComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonSaveLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n\n @Input() public defaultOption: number = 0;\n @Input() public form?: LegacySubViewForm;\n @Input() public tabView!: LegacyTabViewDetails;\n //#endregion\n\n //#region Variables\n private formService: FormService = inject(FormService);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClick(option?: string): void {\n if (!this.form) {\n return;\n }\n\n this.startLoading();\n this.tabView.loading = true;\n \n this.form.save()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n \n this.formService.model = model;\n this.form?.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.closeActiveTab();\n // this.tabService.closeTab(this.tabView);\n break;\n case 'save-and-new':\n if (this.tabView.buttonNew) {\n this.tabView.buttonNew.clicked();\n }\n break;\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n this.form?.beginEdit(false);\n\n if (e.status === 400 && !!this.form) {\n BackendFormValidationHelper.validateAllFormFields(e, this.form.dataForm);\n } else {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n\n this.errorModal.showModal(errorMessage);\n }\n }\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.tabView.loading = false;\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Save\"\nicon=\"fa-save\"\n[defaultOption]=\"defaultOption\"\n[disabled]=\"disabled || (form?.viewMode !== 'edit') || (form?.loading ?? false)\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClick($event)\">\n</lib-ribbon-button>\n\n<framework-error-modal></framework-error-modal>","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-views-legacy',\n templateUrl: './button-views.component.html',\n imports: [\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonViewsComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonViewsLegacyComponent extends BaseButton {\n @Input() views!: IRibbonButtonOption[];\n\n @Output() viewChanged = new EventEmitter<string | undefined>();\n\n\n clicked(option?: string): void {\n this.viewChanged.emit(option);\n }\n}","<lib-ribbon-button\n[label]=\"'Button-Views'\"\n[icon]=\"'fa-eye'\"\n[options]=\"views\"\n(action)=\"clicked($event)\"\n></lib-ribbon-button>","import { NgModule } from '@angular/core';\nimport { ButtonDeleteComponent } from './button-delete/button-delete.component';\nimport { ButtonEditComponent } from './button-edit/button-edit.component';\nimport { ButtonExportComponent } from './button-export/button-export.component';\nimport { ButtonFiltersComponent } from './button-filters/button-filters.component';\nimport { ButtonNewComponent } from './button-new/button-new.component';\nimport { ButtonOpenRecordComponent } from './button-open-record/button-open-record.component';\nimport { ButtonRefreshComponent } from './button-refresh/button-refresh.component';\nimport { ButtonSaveComponent } from './button-save/button-save.component';\nimport { ButtonViewsComponent } from './button-views/button-views.component';\nimport { ButtonEditLegacyComponent, ButtonNewLegacyComponent, ButtonOpenRecordLegacyComponent, ButtonSaveLegacyComponent, ButtonViewsLegacyComponent } from './legacy';\n\n\n@NgModule({\n declarations: [],\n imports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n \n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ],\n exports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n\n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkButtonsModule.\n * Import individual button components directly in your component's `imports` array.\n */\nexport class FrameworkButtonsModule { }\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RibbonComponent } from '@zambon-dev/library';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TabViewService } from '../../../services';\n\n@Component({\n selector: 'framework-default-tab-view',\n templateUrl: './default-tab-view.component.html',\n styleUrls: ['./default-tab-view.component.scss'],\n imports: [\n NgTemplateOutlet,\n RibbonComponent,\n RouterModule,\n ],\n providers: [{ provide: TabViewService }]\n})\nexport class DefaultTabViewComponent implements AfterViewInit, OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('emptyRibbon') private emptyRibbonTemplate!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected ribbonTemplate!: TemplateRef<any>;\n\n private ribbonViewTemplate: { [viewId: string]: TemplateRef<any> | undefined } = {};\n //#endregion\n \n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected changeDetectorRef: ChangeDetectorRef,\n protected tabViewService: TabViewService,\n ) {\n \n }\n\n public ngAfterViewInit(): void {\n if (!this.ribbonTemplate) {\n // If there are no template assigned to the ribbon, we use the empty template.\n this.updateRibbonTemplate();\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n this.tabViewService.onUpdateRibbonTemplate\n .pipe(takeUntil(this.destroy$))\n .subscribe((template: TemplateRef<any> | undefined) => {\n this.ribbonViewTemplate[this.tabViewService.activeView] = template;\n this.updateRibbonTemplate(template);\n });\n\n this.tabViewService.onViewChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((viewId: string) => {\n this.updateRibbonTemplate(this.ribbonViewTemplate[viewId]); \n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private updateRibbonTemplate(template: TemplateRef<any> | undefined = undefined): void {\n const isRealTemplate: boolean = !!template;\n\n if (!template) {\n template = this.emptyRibbonTemplate;\n }\n\n this.ribbonTemplate = template!;\n\n if (isRealTemplate) {\n // Real template from a child view — render immediately so buttons appear\n // without waiting for the next change detection cycle (user interaction).\n this.changeDetectorRef.detectChanges();\n } else {\n // Empty/fallback template — defer rendering to avoid briefly flashing\n // an empty ribbon during component creation (the child view will push\n // the real template moments later in the same initialization cycle).\n this.changeDetectorRef.markForCheck();\n }\n }\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate\"></ng-container>\n\n <ng-template #emptyRibbon>\n </ng-template>\n</lib-ribbon>\n\n<router-outlet>\n</router-outlet>","import { NgTemplateOutlet } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterModule } from '@angular/router';\nimport { DataProviderService, GroupContainerComponent, RibbonComponent, RibbonGroupComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { ITab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\nimport { ButtonViewsComponent } from '../../buttons';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { DefaultTabViewComponent } from '../default-tab-view/default-tab-view.component';\n\nfunction dataProviderFactory(route: ActivatedRoute): DataProviderService<any> {\n return <DataProviderService<any>>route.snapshot.data['dataProvider']();\n}\n\n@Component({\n selector: 'framework-default-details-tab-view',\n templateUrl: './default-details-tab-view.component.html',\n styleUrls: ['./default-details-tab-view.component.scss'],\n imports: [\n ButtonViewsComponent,\n ErrorModalComponent,\n GroupContainerComponent,\n NgTemplateOutlet,\n RibbonComponent,\n RibbonGroupComponent,\n RouterModule,\n TranslatePipe,\n ],\n providers: [\n { provide: TabViewService },\n { provide: DataProviderService, useFactory: dataProviderFactory, deps: [ActivatedRoute] },\n ]\n})\nexport class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements AfterViewInit, OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n //#endregion\n\n //#region Variables\n protected containerIcon?: string;\n protected containerTitle?: string;\n protected dataProviderClassName?: any;\n protected detailsViewRoute: ActivatedRouteSnapshot | null = null;\n\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private hasEntityID: boolean | null = null;\n private hasLoadError: boolean = false;\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get componentName(): string {\n return DefaultDetailsTabViewComponent.name;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n const changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n const tabViewService: TabViewService = inject(TabViewService);\n super(changeDetectorRef, tabViewService);\n\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.detailsViewRoute = RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent);\n this.hasEntityID = this.dataProviderService?.hasEntityID ?? null;\n\n this.dataProviderService?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: any) => {\n if (this.hasEntityID !== this.dataProviderService!.hasEntityID || !this.detailsViewRoute) {\n // If the entity ID changes, we need update the detailsViewRoute to get the correct route URL later.\n this.hasEntityID = this.dataProviderService!.hasEntityID;\n this.detailsViewRoute = RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent);\n }\n\n if (!!this.detailsViewRoute) {\n let title: string = this.detailsViewRoute.data['defaultTitle'];\n if (this.dataProviderService!.hasEntityID) {\n title = this.dataProviderService!.getTitle(model);\n }\n\n this.containerIcon = '';\n this.containerTitle = title;\n\n const url: string = RouteHelper.getRouteURL(this.detailsViewRoute);\n this.tabService.updateTabTitle(url, title);\n }\n });\n\n this.dataProviderService?.getError$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((error: HttpErrorResponse) => {\n this.hasLoadError = true;\n\n if (error.status === 404) {\n this.errorModal.title = 'Modal-NotFound-Title';\n this.errorModal.subtitle = '';\n this.errorModal.showModal('Modal-NotFound-Message');\n } else {\n this.errorModal.title = 'Modal-Failed-Title';\n this.errorModal.subtitle = 'Modal-Failed-Administrator';\n this.errorModal.showModal(error);\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onErrorModalClosed(): void {\n if (!this.hasLoadError) {\n return;\n }\n\n const history: ITab[] = this.tabService.activeTabHistory;\n const entityBaseUrl: string | undefined = history[history.length - 1]?.entityBaseUrl;\n\n // Find the entry before the invalid entity in the tab history.\n if (entityBaseUrl && history.length > 1) {\n const entityIndex: number = history.findIndex((entry: ITab) => entry.entityBaseUrl === entityBaseUrl);\n if (entityIndex > 0) {\n this.tabService.navigateCurrentTabBack(history[entityIndex - 1]);\n return;\n }\n }\n\n this.tabService.closeActiveTab();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate\"></ng-container>\n\n <ng-template #emptyRibbon>\n </ng-template>\n\n <div right>\n <lib-ribbon-group [label]=\"'RibbonGroup-Page' | translate\">\n <framework-button-views [detailsViewRoute]=\"detailsViewRoute\">\n </framework-button-views>\n </lib-ribbon-group>\n </div>\n</lib-ribbon>\n\n<lib-group-container\n[icon]=\"containerIcon\"\n[title]=\"containerTitle\">\n <router-outlet>\n </router-outlet>\n</lib-group-container>\n\n<framework-error-modal (closed)=\"onErrorModalClosed()\"></framework-error-modal>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ITab } from '../../../models';\nimport { TabService } from '../../../services';\n\n@Component({\n selector: 'framework-tab-breadcrumbs',\n templateUrl: './tab-breadcrumbs.component.html',\n styleUrls: ['./tab-breadcrumbs.component.scss'],\n imports: [\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class TabBreadcrumbsComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get tabHistory(): ITab[] {\n return this.tabService.activeTabHistory;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onTitleClick(tab: ITab): void {\n this.tabService.navigateCurrentTabBack(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<i class=\"fa-solid fa-angles-right\"></i>\n\n<a *ngFor=\"let history of tabHistory\" (click)=\"onTitleClick(history)\">\n <span *ngIf=\"!history.isTitleLoading\">{{ (history.title ?? '') | translate }}</span>\n\n <svg *ngIf=\"history.isTitleLoading\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n</a>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { ITabHistory } from '../../../models/tab-history';\nimport { TabService } from '../../../services/tab.service';\nimport { TabBreadcrumbsComponent } from '../tab-breadcrumbs/tab-breadcrumbs.component';\n\n@Component({\n selector: 'framework-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n imports: [\n NgFor,\n NgIf,\n TabBreadcrumbsComponent,\n TranslatePipe,\n ]\n})\nexport class TabsComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get activeHistory(): ITabHistory[] | null {\n return null; // this.tabService.activeHistory;\n }\n\n protected get activeTab(): string | null {\n return null; // this.tabService.activeTab;\n }\n\n protected get hasTabs(): boolean {\n return this.tabService.activeTabs.length > 0;\n }\n\n protected get openTabs(): ITab[] {\n return this.tabService.activeTabs ?? [];\n }\n\n protected get tabDisplayTitles(): (string | undefined)[] {\n return this.tabService.activeTabsDisplayTitles;\n }\n\n protected get tabLoadingStates(): boolean[] {\n return this.tabService.activeTabsLoadingStates;\n }\n\n protected trackByFn: (index: number, tab: ITab) => string = (_: number, tab: ITab): string => tab.url;\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n private router: Router,\n private tabService: TabService,\n ) {\n\n }\n\n public ngOnInit(): void {\n const activatedDetailsTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.snapshot.root, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n if (activatedDetailsTabView) {\n const shouldIgnoreFirstChildRoute: boolean = !!activatedDetailsTabView.firstChild && activatedDetailsTabView.firstChild.data && activatedDetailsTabView.firstChild.data['ignoreRoute'] === true;\n\n const url: string = RouteHelper.getRouteURL(activatedDetailsTabView);\n const clones: string[] = [];\n\n if (shouldIgnoreFirstChildRoute) {\n clones.push(RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!));\n\n } else if (!!activatedDetailsTabView.firstChild) {\n const childPath: string = activatedDetailsTabView.firstChild.url.map((s: any) => s.path).join('/');\n const defaultChildPath: string = activatedDetailsTabView.routeConfig?.children\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\n ?.[0]?.path ?? '';\n\n if (childPath !== defaultChildPath) {\n const entityID: number = Number(activatedDetailsTabView.paramMap.get('id'));\n if (!entityID) {\n // New entity: inner views are not available, redirect to base URL.\n this.router.navigate([url], { replaceUrl: true });\n } else {\n // Non-default child route (e.g. direct navigation to /audit): add sub-view to history for breadcrumbs.\n const childTitle: string = activatedDetailsTabView.firstChild?.data?.['title'] ?? '';\n queueMicrotask(() => {\n const childUrl: string = RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!);\n this.tabService.replaceCurrentTabSubView(url, new Tab({\n title: childTitle,\n url: childUrl,\n }));\n });\n }\n }\n }\n\n this.tabService.openTab(new Tab({\n clones: clones,\n entityBaseUrl: url,\n queryParams: activatedDetailsTabView.queryParams,\n url: url,\n }));\n\n } else {\n const activatedTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.snapshot.root, FRAMEWORK_VIEW_TYPE, FrameworkViewType.List);\n if (activatedTabView) {\n const url: string = RouteHelper.getRouteURL(activatedTabView);\n this.tabService.openTab(new Tab({\n queryParams: activatedTabView.queryParams,\n url: url,\n }));\n } else {\n this.router.navigate(['/']);\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n protected onActivateTab(tab: ITab): void {\n this.tabService.activateTab(tab);\n }\n\n protected onCloseTab(index: number): void {\n this.tabService.closeTab(index);\n }\n //#endregion\n\n //#region Public methods\n protected isTabActive(tab: ITab): boolean {\n return this.tabService.isTabActive(tab);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<div class=\"tabs-container\" *ngIf=\"hasTabs\">\n <ul class=\"tabs-nav\">\n <li *ngFor=\"let tab of openTabs; let i = index; trackBy: trackByFn\"\n [class.active]=\"isTabActive(tab)\">\n <a class=\"tab-item\" (click)=\"onActivateTab(tab)\">\n <span *ngIf=\"!tabLoadingStates[i]\">{{ (tabDisplayTitles[i] ?? tab.title ?? '') | translate }}</span>\n\n <svg *ngIf=\"tabLoadingStates[i]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </a>\n\n <a class=\"tab-close\" (click)=\"onCloseTab(i)\">\n <i class=\"fas fa-times\"></i>\n </a>\n </li>\n </ul>\n</div>\n\n<div class=\"tab-content\" *ngIf=\"hasTabs\">\n <framework-tab-breadcrumbs></framework-tab-breadcrumbs>\n \n <ng-content></ng-content>\n</div>","import { NgModule } from '@angular/core';\nimport { DefaultDetailsTabViewComponent } from './default-details-tab-view/default-details-tab-view.component';\nimport { DefaultTabViewComponent } from './default-tab-view/default-tab-view.component';\nimport { TabBreadcrumbsComponent } from './tab-breadcrumbs/tab-breadcrumbs.component';\nimport { TabsComponent } from './tabs/tabs.component';\n\n\n@NgModule({\n declarations: [],\n imports: [\n DefaultDetailsTabViewComponent,\n DefaultTabViewComponent,\n TabBreadcrumbsComponent,\n TabsComponent,\n ],\n exports: [\n DefaultDetailsTabViewComponent,\n DefaultTabViewComponent,\n TabsComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkViewsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkViewsModule { }","import { NgModule } from '@angular/core';\nimport { FrameworkButtonsModule } from './buttons/buttons.module';\nimport { FrameworkModalsModule } from './modals/modals.module';\nimport { FrameworkViewsModule } from './views/views.module';\n\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [\n FrameworkButtonsModule,\n FrameworkModalsModule,\n FrameworkViewsModule,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkComponentsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkComponentsModule { }","import { InjectionToken } from '@angular/core';\n\nexport const APP_CONFIG: InjectionToken<AppConfig> = new InjectionToken<AppConfig>('Manually constructed AppConfig', {\n providedIn: 'root',\n factory: () => new AppConfig(''),\n});\n\nexport class AppConfig {\n public BASE_URL: string;\n\n constructor(baseUrl: string) {\n this.BASE_URL = baseUrl;\n }\n}","import { Injectable } from '@angular/core';\nimport { DataGridConfigs, DataGridConfigsProvider } from '@zambon-dev/library';\n\n@Injectable()\nexport class FrameworkGridConfigsProvider extends DataGridConfigsProvider {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n Object.assign(this.configs, {\n loadingDisplayText: 'Grid-Loading',\n messageOnEmpty: 'Grid-Message-Empty',\n messageOnFailed: 'Grid-Message-Failed',\n messageOnLazyLoad: 'Grid-Message-LazyLoad',\n } as DataGridConfigs);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion \n}","import { NgModule } from '@angular/core';\nimport { FrameworkComponentsModule } from './components';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [\n FrameworkComponentsModule,\n ],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModule {}","import { HttpBackend } from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\n\nexport interface AngularAssetPattern {\n glob: string;\n input: string;\n output: string;\n}\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/framework';\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern = {\n glob: '**/*.json',\n input: 'node_modules/@zambon-dev/framework/i18n',\n output: ZAMBON_FRAMEWORK_I18N_ASSET_PATH,\n};\n\nexport const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[] = [\n { prefix: `/${ZAMBON_FRAMEWORK_I18N_ASSET_PATH}/`, suffix: '.json' },\n];\n\nexport interface ZambonFrameworkTranslateConfig {\n defaultLanguage?: string;\n appResources?: (string | TranslationResource)[];\n}\n\nexport function createZambonFrameworkTranslateLoader(\n httpBackend: HttpBackend,\n appResources: (string | TranslationResource)[] = [],\n): MultiTranslateHttpLoader {\n return new MultiTranslateHttpLoader(httpBackend, [\n ...ZAMBON_FRAMEWORK_I18N_RESOURCES,\n ...appResources,\n ]);\n}\n\nexport function provideZambonFrameworkTranslateLoader(\n appResources: (string | TranslationResource)[] = [],\n): Provider {\n return {\n provide: TranslateLoader,\n useFactory: (httpBackend: HttpBackend) => createZambonFrameworkTranslateLoader(httpBackend, appResources),\n deps: [HttpBackend],\n };\n}\n\nexport function provideZambonFrameworkTranslateService(\n config: ZambonFrameworkTranslateConfig = {},\n): EnvironmentProviders {\n return provideTranslateService({\n defaultLanguage: config.defaultLanguage,\n loader: provideZambonFrameworkTranslateLoader(config.appResources),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i2.TabService","i3","i3.TabService","i1.TabViewService"],"mappings":"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"}
1
+ {"version":3,"file":"zambon-dev-framework.mjs","sources":["../../../../libs/framework/src/lib/services/auth.service.ts","../../../../libs/framework/src/lib/services/custom-reuse-strategy.ts","../../../../libs/framework/src/lib/services/tab-view.service.ts","../../../../libs/framework/src/lib/services/tab.service.ts","../../../../libs/framework/src/lib/components/buttons/base-button.ts","../../../../libs/framework/src/lib/components/buttons/base-form-view-button.ts","../../../../libs/framework/src/lib/helpers/backend-form-validation-helper.ts","../../../../libs/framework/src/lib/helpers/route-helper.ts","../../../../libs/framework/src/lib/components/modals/confirm-modal/confirm-modal.component.ts","../../../../libs/framework/src/lib/components/modals/confirm-modal/confirm-modal.component.html","../../../../libs/framework/src/lib/components/modals/error-modal/error-modal.component.ts","../../../../libs/framework/src/lib/components/modals/error-modal/error-modal.component.html","../../../../libs/framework/src/lib/components/modals/modals.module.ts","../../../../libs/framework/src/lib/components/buttons/button-confirm/button-confirm.component.ts","../../../../libs/framework/src/lib/components/buttons/button-confirm/button-confirm.component.html","../../../../libs/framework/src/lib/components/buttons/button-delete/button-delete.component.ts","../../../../libs/framework/src/lib/components/buttons/button-delete/button-delete.component.html","../../../../libs/framework/src/lib/views/view-base.ts","../../../../libs/framework/src/lib/views/modals/modal-base.ts","../../../../libs/framework/src/lib/components/buttons/button-edit/button-edit.component.ts","../../../../libs/framework/src/lib/components/buttons/button-edit/button-edit.component.html","../../../../libs/framework/src/lib/components/buttons/button-export/button-export.component.ts","../../../../libs/framework/src/lib/components/buttons/button-export/button-export.component.html","../../../../libs/framework/src/lib/components/buttons/button-filters/button-filters.component.ts","../../../../libs/framework/src/lib/components/buttons/button-filters/button-filters.component.html","../../../../libs/framework/src/lib/models/route-data.ts","../../../../libs/framework/src/lib/models/tab.ts","../../../../libs/framework/src/lib/components/buttons/button-new/button-new.component.ts","../../../../libs/framework/src/lib/components/buttons/button-new/button-new.component.html","../../../../libs/framework/src/lib/components/buttons/button-open-record/button-open-record.component.ts","../../../../libs/framework/src/lib/components/buttons/button-open-record/button-open-record.component.html","../../../../libs/framework/src/lib/components/buttons/button-refresh/button-refresh.component.ts","../../../../libs/framework/src/lib/components/buttons/button-refresh/button-refresh.component.html","../../../../libs/framework/src/lib/components/buttons/button-save/button-save.component.ts","../../../../libs/framework/src/lib/components/buttons/button-save/button-save.component.html","../../../../libs/framework/src/lib/components/buttons/button-views/button-views.component.ts","../../../../libs/framework/src/lib/components/buttons/button-views/button-views.component.html","../../../../libs/framework/src/lib/components/buttons/button/button.component.ts","../../../../libs/framework/src/lib/components/buttons/button/button.component.html","../../../../libs/framework/src/lib/views/child-list.ts","../../../../libs/framework/src/lib/views/child-list-legacy.ts","../../../../libs/framework/src/lib/views/tabview-base.ts","../../../../libs/framework/src/lib/views/form-view.ts","../../../../libs/framework/src/lib/views/legacy/legacy-sub-view-form.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-base.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-details.ts","../../../../libs/framework/src/lib/views/legacy/legacy-tabview-list.ts","../../../../libs/framework/src/lib/views/tabview-list.ts","../../../../libs/framework/src/lib/views/list-view.ts","../../../../libs/framework/src/lib/views/modals/multi-editor-legacy.modal.ts","../../../../libs/framework/src/lib/views/modals/multi-editor.modal.ts","../../../../libs/framework/src/lib/views/modals/multi-select.modal.ts","../../../../libs/framework/src/lib/views/modals/view.modal.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-edit/button-edit.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-edit/button-edit.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-new/button-new.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-new/button-new.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-open-record/button-open-record.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-open-record/button-open-record.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-save/button-save.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-save/button-save.component.html","../../../../libs/framework/src/lib/components/buttons/legacy/button-views/button-views.component.ts","../../../../libs/framework/src/lib/components/buttons/legacy/button-views/button-views.component.html","../../../../libs/framework/src/lib/components/buttons/buttons.module.ts","../../../../libs/framework/src/lib/components/views/default-tab-view/default-tab-view.component.ts","../../../../libs/framework/src/lib/components/views/default-tab-view/default-tab-view.component.html","../../../../libs/framework/src/lib/components/views/default-details-tab-view/default-details-tab-view.component.ts","../../../../libs/framework/src/lib/components/views/default-details-tab-view/default-details-tab-view.component.html","../../../../libs/framework/src/lib/components/views/tab-breadcrumbs/tab-breadcrumbs.component.ts","../../../../libs/framework/src/lib/components/views/tab-breadcrumbs/tab-breadcrumbs.component.html","../../../../libs/framework/src/lib/components/views/tabs/tabs.component.ts","../../../../libs/framework/src/lib/components/views/tabs/tabs.component.html","../../../../libs/framework/src/lib/components/views/views.module.ts","../../../../libs/framework/src/lib/components/components.module.ts","../../../../libs/framework/src/lib/configs/app-config.ts","../../../../libs/framework/src/lib/configs-providers/grid-configs.provider.ts","../../../../libs/framework/src/lib/framework.module.ts","../../../../libs/framework/src/lib/i18n/framework-i18n.ts","../../../../libs/framework/src/zambon-dev-framework.ts"],"sourcesContent":["import { JwtHelperService } from '@auth0/angular-jwt';\nimport { map, Observable, of, ReplaySubject, switchMap, take } from 'rxjs';\nimport { TabService } from './tab.service';\n\nconst ADMINISTRATIVE_MASTER_ACTION: string = 'AdministrativeMaster';\n\nexport abstract class AuthService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private actionsCache$: ReplaySubject<string[]> = new ReplaySubject<string[]>(1);\n private isActionsCacheInitialized: boolean = false;\n //#endregion\n\n //#region Properties\n public abstract get adminAction(): string;\n public get isAuthenticated(): boolean {\n return this.username !== null;\n }\n public get isTokenExpired(): boolean {\n return this.token !== null && this.jwtHelper.isTokenExpired(this.token);\n }\n public get token(): string | null {\n return localStorage.getItem('token')\n ?? sessionStorage.getItem('token'); }\n public get userID(): number | undefined { return 0; }\n protected get refreshToken(): string | null {\n return localStorage.getItem('refreshToken')\n ?? sessionStorage.getItem('refreshToken');\n }\n protected get userInfo(): string | null {\n return localStorage.getItem('userInfo')\n ?? sessionStorage.getItem('userInfo');\n }\n protected get username(): string | null {\n return localStorage.getItem('username')\n ?? sessionStorage.getItem('username');\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor(\n protected jwtHelper: JwtHelperService,\n protected tabService: TabService,\n ) {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public checkActionIsAllowed(actionToCheck: string): Observable<boolean> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$\n .pipe(map((actions: string[]) => actions.includes(this.adminAction) || actions.includes(actionToCheck)));\n }\n\n public checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster: boolean = true): Observable<boolean[]> {\n if (!this.isActionsCacheInitialized) {\n this.isActionsCacheInitialized = true;\n\n this.getActions()\n .pipe(take(1))\n .subscribe((actions: string[]) => {\n this.actionsCache$.next(actions);\n });\n }\n\n return this.actionsCache$\n .pipe(switchMap((actions: string[]) => of(actionsToCheck.map((actionsToCheck: string) => (checkForAdministrativeMaster && actions.indexOf(ADMINISTRATIVE_MASTER_ACTION) >= 0) || actions.indexOf(actionsToCheck) >= 0))));\n }\n\n public signOut(): void {\n localStorage.clear();\n sessionStorage.clear();\n \n this.tabService.closeAllTabs();\n this.resetActionsCache();\n }\n\n protected setStorage(key : 'username' | 'token' | 'refreshToken' | 'userInfo', value : string | null, useLocalStorage: boolean | null = null) {\n if (useLocalStorage === null) {\n useLocalStorage = sessionStorage.getItem(key) === null;\n }\n\n if (value) {\n if (useLocalStorage) {\n localStorage.setItem(key, value);\n } else {\n sessionStorage.setItem(key, value);\n }\n } else {\n localStorage.removeItem(key);\n sessionStorage.removeItem(key);\n }\n }\n //#endregion\n\n //#region Private methods\n protected resetActionsCache(): void {\n this.isActionsCacheInitialized = false;\n this.actionsCache$ = new ReplaySubject<string[]>(1);\n }\n //#endregion\n\n //#region Abstract methods\n public abstract getActions(): Observable<string[]>;\n //#endregion\n}","import { ApplicationRef, Inject, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy, UrlSegment } from '@angular/router';\nimport { TabService } from './tab.service';\n\n@Inject({})\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public clones: { [key: string]: string } = {};\n public redirects: { [key: string]: string } = {};\n public tabService?: TabService;\n\n private applicationRef: ApplicationRef = inject(ApplicationRef);\n private cachedHandles: { [key: string]: DetachedRouteHandle | null } = {};\n //#endregion\n\n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clearAllHandles(): void {\n this.cachedHandles = {};\n }\n\n public clearHandle(url: string): void {\n const keysToRemove: string[] = Object.keys(this.cachedHandles)\n .filter((key: string) => key.startsWith(`${url}-`));\n\n keysToRemove.forEach((key: string) => {\n const handle: DetachedRouteHandle | null = this.cachedHandles[key];\n\n if (handle) {\n if ((<any>handle)?.componentRef?.instance?.ngOnDestroy) {\n (<any>handle).componentRef.instance.ngOnDestroy();\n }\n }\n delete this.cachedHandles[key];\n });\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.component) {\n return null;\n }\n\n const cacheKey: string = this.getCacheKey(route);\n const handle: DetachedRouteHandle | null = this.cachedHandles[cacheKey];\n\n if (handle) {\n // Schedule global change detection after Angular finishes reattaching the component.\n // Without this, reattached components may render stale views (e.g., empty ribbon)\n // because NgTemplateOutlet does not re-create its embedded view automatically.\n // ApplicationRef.tick() ensures the entire app tree is checked, including embedded views.\n setTimeout(() => {\n this.applicationRef.tick();\n });\n }\n\n return handle;\n }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent: boolean = !!route.component;\n\n if ((this.tabService?.isUrlOpen(url) ?? false) && hasComponent)\n {\n const cacheKey: string = this.getCacheKey(route);\n const isCached: boolean = !!this.cachedHandles[cacheKey];\n return isCached;\n }\n return false;\n }\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n const url: string = this.getUrlFromRoute(route);\n const hasComponent: boolean = !!route.component;\n\n return (this.tabService?.isUrlOpen(url) ?? false) && hasComponent;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {\n const futureUrl: string = this.getUrlFromRoute(future);\n const currentUrl: string = this.getUrlFromRoute(current);\n\n return (futureUrl === currentUrl && future.routeConfig === current.routeConfig) || this.redirects[currentUrl] === futureUrl || this.clones[futureUrl] === currentUrl;\n }\n\n public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n const cacheKey: string = this.getCacheKey(route);\n this.cachedHandles[cacheKey] = handle;\n }\n //#endregion\n\n //#region Private methods\n private getCacheKey(route: ActivatedRouteSnapshot): string {\n let url: string = this.getUrlFromRoute(route);\n if (this.clones[url]) {\n url = this.clones[url];\n }\n\n const componentName: string = route.component?.name ?? '';\n return `${url}-${componentName}`;\n }\n\n private getUrlFromRoute(route: ActivatedRouteSnapshot): string {\n const segments: string[] = [];\n\n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (!!route) {\n if (!!route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(route.parent);\n }\n };\n\n buildRoute(route);\n\n return `/${segments.reverse().join('/')}`;\n }\n //#endregion\n}","import { Injectable, TemplateRef } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\n\n@Injectable()\nexport class TabViewService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n public onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined> = new ReplaySubject<TemplateRef<any> | undefined>(1);\n public onViewChanged: Subject<string> = new Subject<string>();\n\n private _activeView?: string;\n //#endregion\n\n //#region Properties\n public get activeView(): string {\n return this._activeView ?? '';\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public setActiveView(viewId: string): void {\n if (viewId === this._activeView) {\n return;\n }\n \n this._activeView = viewId;\n this.onViewChanged.next(viewId);\n }\n\n public updateRibbonTemplate(template: TemplateRef<any>| undefined): void {\n this.onUpdateRibbonTemplate.next(template);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Location } from '@angular/common';\nimport { ApplicationRef, ChangeDetectorRef, Injectable } from '@angular/core';\nimport { Router, RouteReuseStrategy } from '@angular/router';\nimport { CustomReuseStrategy } from './custom-reuse-strategy';\nimport { ITab } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TabService {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private activeTabIndex: number = -1;\n private customReuseStrategy: CustomReuseStrategy;\n private displayTitleIndices: number[] = [];\n private openTabs: ITab[][] = [];\n //#endregion\n\n //#region Properties\n public get activeTabHistory(): ITab[] {\n return this.openTabs[this.activeTabIndex] ?? [];\n }\n\n public get activeTabs(): ITab[] {\n return this.openTabs.map((tabs: ITab[]) => tabs[0]) ?? [];\n }\n\n public get activeTabsDisplayTitles(): (string | undefined)[] {\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.title;\n });\n }\n\n public get activeTabsLoadingStates(): boolean[] {\n return this.openTabs.map((tabs: ITab[], i: number) => {\n const displayIndex: number = this.displayTitleIndices[i] ?? 0;\n return tabs[displayIndex]?.isTitleLoading ?? true;\n });\n }\n\n private get activeTab(): ITab[] | null {\n if (this.activeTabIndex < 0) {\n return null;\n }\n return this.openTabs[this.activeTabIndex];\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor(\n private applicationRef: ApplicationRef,\n private location: Location,\n private router: Router,\n routeReuseStrategy: RouteReuseStrategy,\n ) {\n this.customReuseStrategy = <CustomReuseStrategy>routeReuseStrategy;\n this.customReuseStrategy.tabService = this;\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public activateTab(tab: ITab): void {\n this.activeTabIndex = this.activeTabs.indexOf(tab);\n const tabStack: ITab[] = this.openTabs[this.activeTabIndex];\n const currentView: ITab = tabStack[tabStack.length - 1];\n this.navigateTo(currentView);\n }\n\n public cloneCurrentTab(url: string): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n this.customReuseStrategy.clones[url] = tab.url;\n if (tab.clones.indexOf(url) === -1) {\n tab.clones.push(url);\n }\n\n this.navigateTo(tab, url);\n }\n\n public closeActiveTab(): void {\n this.closeTab(this.activeTabIndex);\n }\n\n public closeAllTabs(): void {\n this.openTabs = [];\n this.displayTitleIndices = [];\n this.activeTabIndex = -1;\n this.customReuseStrategy.clearAllHandles();\n }\n\n public closeTab(index: number): void {\n if (index > this.activeTabs.length - 1 || this.activeTabs.length === 0) {\n return;\n }\n\n const wasActive: boolean = index === this.activeTabIndex;\n const closedTab: ITab[] = this.openTabs[index];\n this.openTabs.splice(index, 1);\n this.displayTitleIndices.splice(index, 1);\n\n if (wasActive) {\n // Closed the active tab — pick an adjacent tab to focus.\n if (this.activeTabIndex >= this.activeTabs.length) {\n this.activeTabIndex = this.activeTabs.length - 1;\n }\n\n this.navigateTo(this.activeTabs[this.activeTabIndex]);\n } else if (index < this.activeTabIndex) {\n // Closed a tab before the active one — shift index to keep the same tab active.\n this.activeTabIndex--;\n }\n\n closedTab.forEach((tab: ITab) => {\n if (!this.isUrlOpen(tab.url)) {\n // Tab is not in use by any other tab, we're clear to remove.\n this.customReuseStrategy.clearHandle(tab.url);\n }\n });\n }\n\n public isTabActive(tab: ITab): boolean {\n return this.activeTabs[this.activeTabIndex] === tab;\n }\n\n public isUrlActive(url: string, checkForClones: boolean = false): boolean {\n if (!this.activeTab) {\n return false;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n if (tab.url === url) {\n return true;\n } else if (checkForClones) {\n return tab.clones.indexOf(url) !== -1;\n }\n\n return false\n }\n\n public isUrlOpen(url: string): boolean {\n const tabs: ITab[] = this.openTabs\n .flatMap((tabs: ITab[]) => tabs);\n\n return this.isTabExists(tabs, url);\n }\n\n public navigateBackOrCloseActiveTab(): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n if (this.activeTab.length <= 1) {\n this.closeTab(this.activeTabIndex);\n } else {\n const previousEntry: ITab = this.activeTab[this.activeTab.length - 2];\n this.navigateCurrentTabBack(previousEntry);\n }\n }\n\n public navigateCurrentTab(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // Check other tabs for entity match first, then fall back to current behavior.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl, this.activeTabIndex);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n const otherTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n } else {\n // Fallback for tabs without entityBaseUrl (existing behavior).\n const showingIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex, true);\n if (showingIndex !== -1) {\n this.activeTabIndex = showingIndex;\n const otherTab: ITab[] = this.openTabs[showingIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n }\n\n // Check if URL already in current tab's stack — navigate back.\n const tabIsAlreadyOpen: ITab | undefined = this.findTab(this.activeTab, tab.url);\n if (tabIsAlreadyOpen) {\n this.navigateCurrentTabBack(tabIsAlreadyOpen);\n return;\n }\n\n // Inherit title from an existing tab entry with the same URL, if available.\n this.inheritTitleIfKnown(tab);\n\n // Push new entry onto the stack.\n let clonedUrl: string | undefined = undefined;\n if (tab.clones.length > 0) {\n clonedUrl = tab.clones[0];\n this.customReuseStrategy.clones[clonedUrl] = tab.url;\n }\n\n this.activeTab.push(tab);\n this.displayTitleIndices[this.activeTabIndex] = this.activeTab.length - 1;\n\n this.navigateTo(tab, clonedUrl);\n }\n\n public navigateCurrentTabBack(tab: ITab): void {\n if (!this.activeTab) {\n return;\n }\n\n // If another tab is currently showing this URL, focus it instead.\n const otherTabIndex: number = this.findTabIndexByCurrentView(tab.url, this.activeTabIndex);\n if (otherTabIndex !== -1) {\n this.activeTabIndex = otherTabIndex;\n const otherTab: ITab[] = this.openTabs[otherTabIndex];\n this.navigateTo(otherTab[otherTab.length - 1]);\n return;\n }\n\n const lastIndex: number = this.activeTab.lastIndexOf(tab);\n if (lastIndex !== -1) {\n this.activeTab.slice(lastIndex + 1)\n .forEach((tab: ITab) => {\n this.customReuseStrategy.clearHandle(tab.url);\n });\n\n this.openTabs[this.activeTabIndex] = this.activeTab.slice(0, lastIndex + 1);\n\n if (this.displayTitleIndices[this.activeTabIndex] > lastIndex) {\n this.displayTitleIndices[this.activeTabIndex] = lastIndex;\n }\n }\n\n this.navigateTo(tab);\n }\n\n public navigateTo(tab: ITab | undefined, clonedUrl?: string): void {\n let url: string = tab?.url ?? '/';\n if (!!clonedUrl) {\n url = clonedUrl;\n }\n\n this.router.navigate([ url ], { queryParams: tab?.queryParams })\n .then((navigated: boolean) => {\n this.customReuseStrategy.redirects = {};\n\n // Clean up clone mapping after successful clone-based navigation.\n if (navigated && this.customReuseStrategy.clones[url]) {\n delete this.customReuseStrategy.clones[url];\n }\n\n this.applicationRef.tick();\n });\n }\n\n public openTab(tab: ITab): void {\n // 1. Exact URL match at top-of-stack — focus that tab.\n const exactMatchIndex: number = this.findTabIndexByCurrentView(tab.url);\n if (exactMatchIndex !== -1) {\n this.activeTabIndex = exactMatchIndex;\n const currentTab: ITab[] = this.openTabs[exactMatchIndex];\n this.navigateTo(currentTab[currentTab.length - 1]);\n return;\n }\n\n // 2. Entity match (only when entityBaseUrl is set) — focus that tab, keep current view.\n if (tab.entityBaseUrl) {\n const entityMatchIndex: number = this.findTabIndexByEntityMatch(tab.entityBaseUrl);\n if (entityMatchIndex !== -1) {\n this.activeTabIndex = entityMatchIndex;\n const existingTab: ITab[] = this.openTabs[entityMatchIndex];\n this.navigateTo(existingTab[existingTab.length - 1]);\n return;\n }\n }\n\n // 3. No match — open a new tab.\n this.inheritTitleIfKnown(tab);\n this.openTabs.push([tab]);\n this.displayTitleIndices.push(0);\n this.activeTabIndex = this.openTabs.length - 1;\n this.navigateTo(tab);\n }\n\n public replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void {\n if (!this.activeTab || this.activeTab.length === 0) {\n return;\n }\n\n // Find the anchor entry (the detail view whose URL matches baseUrl).\n // Keep all entries up to and including the anchor.\n const anchorIndex: number = this.activeTab.findIndex((t: ITab) => t.url === baseUrl);\n const keepUntil: number = anchorIndex !== -1 ? anchorIndex + 1 : 1;\n\n const keptEntries: ITab[] = this.activeTab.slice(0, keepUntil);\n const removedEntries: ITab[] = this.activeTab.slice(keepUntil);\n\n // Update history: keep entries up to anchor, optionally add new sub-view\n if (tab) {\n // Propagate entityBaseUrl from the anchor so entity matching works on sub-views.\n const anchor: ITab | undefined = keptEntries[anchorIndex !== -1 ? anchorIndex : 0];\n if (!tab.entityBaseUrl && anchor?.entityBaseUrl) {\n tab.entityBaseUrl = anchor.entityBaseUrl;\n }\n\n this.openTabs[this.activeTabIndex] = [...keptEntries, tab];\n } else {\n this.openTabs[this.activeTabIndex] = keptEntries;\n }\n\n // Clear reuse-strategy handles for removed entries no longer open anywhere\n removedEntries.forEach((entry: ITab) => {\n if (!this.isUrlOpen(entry.url)) {\n this.customReuseStrategy.clearHandle(entry.url);\n }\n });\n\n // Navigate to the topmost entry\n const current: ITab[] = this.openTabs[this.activeTabIndex];\n this.navigateTo(current[current.length - 1]);\n }\n\n public redirectCurrentTab(url: string, updateLocation: boolean = true): void {\n if (!this.activeTab) {\n return;\n }\n\n const tab: ITab = this.activeTab[this.activeTab.length - 1];\n\n // Update entityBaseUrl if it was pointing to the old URL (e.g., /new → /:id after save).\n if (tab.entityBaseUrl === tab.url) {\n tab.entityBaseUrl = url;\n }\n\n tab.url = url;\n tab.queryParams = {};\n\n if (updateLocation) {\n this.location.replaceState(url);\n }\n }\n\n public setRouteRedirect(fromUrl: string, toUrl: string): void {\n this.customReuseStrategy.redirects[fromUrl] = toUrl;\n }\n\n public updateActiveTabRootTitle(title: string): void {\n if (this.activeTab && this.activeTab.length > 0) {\n this.activeTab[0].title = title;\n }\n }\n\n public updateTabTitle(url: string, title: string): void {\n this.openTabs.flatMap((tabs: ITab[]) => tabs)\n .filter((tab: ITab) => tab.url === url)\n .forEach((tab: ITab) => {\n tab.title = title;\n });\n }\n //#endregion\n \n //#region Private methods\n private findTab(tabs: ITab[], url: string): ITab | undefined {\n return tabs.find((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndex(tabs: ITab[], url: string): number {\n return tabs.findIndex((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private isTabExists(tabs: ITab[], url: string): boolean {\n return tabs.some((tab: ITab) => this.matchTabUrl(tab, url));\n }\n\n private findTabIndexByEntityMatch(entityBaseUrl: string, excludeIndex: number = -1): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n // Only check the current view (top of stack), not the full history.\n const currentView: ITab = tabStack[tabStack.length - 1];\n return currentView.entityBaseUrl === entityBaseUrl || currentView.url === entityBaseUrl;\n });\n }\n\n private findTabIndexByCurrentView(url: string, excludeIndex: number = -1, includeChildRoutes: boolean = false): number {\n return this.openTabs.findIndex((tabStack: ITab[], index: number) => {\n if (index === excludeIndex) {\n return false;\n }\n const currentView: ITab = tabStack[tabStack.length - 1];\n return this.matchTabUrl(currentView, url)\n || (includeChildRoutes && this.isChildRoute(currentView.url, url));\n });\n }\n\n private inheritTitleIfKnown(tab: ITab): void {\n if (tab.title || !tab.isTitleLoading) {\n return;\n }\n\n const existing: ITab | undefined = this.openTabs\n .flatMap((stack: ITab[]) => stack)\n .find((entry: ITab) => entry.url === tab.url && !entry.isTitleLoading && !!entry.title);\n\n if (existing) {\n tab.title = existing.title;\n tab.isTitleLoading = false;\n }\n }\n\n private isChildRoute(currentUrl: string, parentUrl: string): boolean {\n return currentUrl.startsWith(parentUrl + '/');\n }\n\n private matchTabUrl(tab: ITab, url: string): boolean {\n return tab.url === url\n || tab.clones.indexOf(url) !== -1;\n }\n //#endregion\n}","import { Component, inject, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Subject, take } from 'rxjs';\nimport { AuthService } from '../../services';\n\n@Component({ template: '' })\nexport class BaseButton extends RibbonGroupChild implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(RibbonButtonComponent) protected button!: RibbonButtonComponent;\n \n @Input() public set allowedActions(value: string[]) {\n if (this._allowedActions !== value) {\n this._allowedActions = value;\n this.checkAccessIsAllowed();\n }\n }\n @Input() public disabled: boolean = false;\n @Input() public iconSize: 'small' | 'large' = 'large';\n @Input() public loading: boolean = false;\n @Input() public set options(value: IRibbonButtonOption[]) {\n if (this._options !== value) {\n this._options = value;\n this.checkAccessIsAllowedToOptions();\n }\n }\n //#endregion\n\n //#region Variables\n public visible: boolean = true;\n\n protected authService: AuthService = inject(AuthService);\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected isAccessLoaded: boolean = false;\n\n private _allowedActions: string[] = new Array<string>;\n private _options: IRibbonButtonOption[] = [];\n //#endregion\n\n //#region Properties\n public get allowedActions(): string[] {\n return this._allowedActions;\n }\n\n public get isVisible(): boolean {\n return this.visible;\n }\n\n public get options(): IRibbonButtonOption[] {\n return this._options;\n }\n\n protected get isButtonDisabled(): boolean {\n return this.disabled || !this.isAccessLoaded;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.checkAccessIsAllowed();\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public startLoading(): void {\n this.button.startLoading();\n }\n\n public finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.button.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private checkAccessIsAllowed(): void {\n if (this.allowedActions.length === 0) {\n this.isAccessLoaded = true;\n this.visible = true;\n return;\n }\n\n this.authService.checkActionsAreAllowed(this.allowedActions)\n .pipe(take(1))\n .subscribe((result: boolean[]) => {\n this.isAccessLoaded = true;\n this.visible = result.some((isAllowed: boolean) => isAllowed === true);\n });\n }\n\n private checkAccessIsAllowedToOptions(): void {\n if (this.options.length === 0) {\n return;\n }\n\n const optionsToCheckActions: IRibbonButtonOption[] = this.options\n .filter((option: IRibbonButtonOption) => (option.allowedActions?.length ?? 0) > 0);\n\n if (optionsToCheckActions.length > 0) {\n optionsToCheckActions.forEach((option: IRibbonButtonOption, index: number) => {\n this.authService.checkActionsAreAllowed(option.allowedActions!)\n .pipe(take(1))\n .subscribe((result: boolean[]) => {\n option.isAccessAllowed = result.some((isAllowed: boolean) => isAllowed === true);\n });\n });\n }\n }\n //#endregion\n}","import { Component, inject } from '@angular/core';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { BaseButton } from './base-button';\n\n@Component({ template: '' })\nexport abstract class BaseFormViewButton extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProviderService!: DataProviderService<any>;\n protected formService!: FormService;\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProviderService = inject(DataProviderService<any>);\n this.formService = inject(FormService);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { HttpErrorResponse } from '@angular/common/http';\nimport { FormGroup } from '@angular/forms';\n\nexport abstract class BackendFormValidationHelper {\n public static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup) {\n if (!httpErrorResponse || !formGroup) {\n return;\n }\n\n // Error 400 = Validation issues\n if (httpErrorResponse.status === 400 && httpErrorResponse.error && httpErrorResponse.error.errors) {\n const controls: string[] = Object.keys(formGroup.controls);\n const validationErrors: { [id: string]: string[] } = <{ [id: string]: string[]; }>httpErrorResponse.error.errors;\n\n Object.keys(validationErrors)\n .forEach((fieldName: string) => {\n setTimeout(() => {\n const controlName: string | undefined = controls.find((controlName: string) => controlName.toLocaleLowerCase() === fieldName.toLocaleLowerCase());\n if (!controlName || !formGroup.get(controlName)) {\n return;\n }\n\n formGroup.get(controlName)!.setErrors({ [validationErrors[fieldName][0]]: true });\n formGroup.get(controlName)!.markAsTouched();\n });\n });\n }\n }\n}","import { ActivatedRouteSnapshot, UrlSegment } from '@angular/router';\n\nexport abstract class RouteHelper {\n public static getRouteByData(routeSnapshot: ActivatedRouteSnapshot | null, key: string, value: any): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.data[key] === value ? routeSnapshot : this.getRouteByData(routeSnapshot.firstChild, key, value);\n }\n\n public static getRouteWithComponent(routeSnapshot: ActivatedRouteSnapshot | null, component: any): ActivatedRouteSnapshot | null {\n if (!routeSnapshot) {\n return null;\n }\n return routeSnapshot.component === component ? routeSnapshot : this.getRouteWithComponent(routeSnapshot.firstChild, component);\n }\n\n public static getRouteURL(route: ActivatedRouteSnapshot, rootLevel: boolean = false): string {\n let segments: string[] = [];\n \n const buildRoute: (route: ActivatedRouteSnapshot | null) => void = (route: ActivatedRouteSnapshot | null): void => {\n if (route) {\n if (route.url.length) {\n segments.push(...route.url.map((segment: UrlSegment) => segment.path));\n }\n buildRoute(rootLevel ? route.firstChild : route.parent);\n }\n };\n\n buildRoute(route);\n\n if (!rootLevel) {\n segments = segments.reverse();\n }\n\n return `/${segments.join('/')}`;\n }\n}","import { NgClass, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, ViewChild } from '@angular/core';\nimport { ControlContainer, FormGroup } from '@angular/forms';\nimport { FormService, IModal, ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { BackendFormValidationHelper } from '../../../helpers';\n\n@Component({\n selector: 'framework-confirm-modal',\n templateUrl: './confirm-modal.component.html',\n styleUrls: ['./confirm-modal.component.scss'],\n imports: [\n ModalComponent,\n NgClass,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class ConfirmModalComponent implements IModal {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public errorMessage: string = '';\n @Input() public message: string = '';\n @Input() public messageIcon: string = 'fa-regular fa-circle-question';\n @Input() public messageIconColor: string = 'text-cyan-500';\n @Input() public showMessageIcon: boolean = true;\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public title!: string;\n //#endregion\n\n //#region Variables\n public isLoading: boolean = false;\n\n protected formService: FormService | undefined = inject(FormService, { optional: true }) ?? undefined;\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this.modal.isShown;\n }\n\n protected get hasErrorMessage(): boolean {\n return !!this.errorMessage && this.errorMessage.length > 0;\n }\n\n protected get hasMessage(): boolean {\n return !!this.message && this.message.length > 0;\n }\n\n private controlContainer: ControlContainer | null = inject(ControlContainer, { optional: true });\n\n private get formGroup(): FormGroup | null {\n return this.controlContainer?.control as FormGroup ?? null;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public beginLoading(): void {\n this.clearErrorMessage();\n this.isLoading = true;\n }\n \n public clearErrorMessage(): void {\n this.errorMessage = '';\n }\n\n public closeModal(): void {\n this.modal.closeModal();\n }\n\n public finishLoading(closeModal?: boolean): void {\n this.isLoading = false;\n\n if (this.formGroup && this.formGroup.disabled) {\n this.formGroup.enable();\n }\n\n if (closeModal) {\n this.closeModal();\n }\n }\n\n public setErrorMessage(httpErrorResponse: HttpErrorResponse): void {\n this.finishLoading();\n\n if (httpErrorResponse.status === 400 && !!this.formGroup) {\n BackendFormValidationHelper.validateAllFormFields(httpErrorResponse, this.formGroup);\n } else {\n if (typeof httpErrorResponse.error === 'string') {\n this.errorMessage = httpErrorResponse.error;\n } else {\n this.errorMessage = 'Modal-Failed-DefaultMessage';\n }\n }\n }\n\n public toggleModal(): void {\n if (!!this.formService && this.formService.loading) {\n return;\n }\n\n if (!!this.formGroup) {\n // TODO: TEST THIS CHANGE\n this.formGroup.reset()\n this.formService?.resetForm();\n }\n\n \n this.clearErrorMessage();\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\nposition=\"top\"\n[closeButtonText]=\"'Button-Modal-Cancel' | translate\"\n[size]=\"size\"\n[title]=\"title | translate\">\n <div body>\n <div *ngIf=\"hasMessage\" class=\"message\">\n <i *ngIf=\"showMessageIcon\" class=\"fa-3x\" [ngClass]=\"[ messageIcon, messageIconColor ]\"></i>\n <h4 [innerHTML]=\"message | translate\"></h4>\n </div> \n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasErrorMessage\" class=\"erro\">\n <h4>{{ errorMessage | translate }}</h4>\n <span>{{ 'Modal-Failed-Administrator' | translate }}</span>\n </div>\n </div>\n <div footer>\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</lib-modal>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { ModalComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'framework-error-modal',\n templateUrl: './error-modal.component.html',\n styleUrls: ['./error-modal.component.scss'],\n imports: [\n ModalComponent,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class ErrorModalComponent {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) private modal!: ModalComponent;\n\n @Input() public errorMessage: string = '';\n @Input() public size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public subtitle: string = 'Modal-Failed-Administrator';\n @Input() public title: string = 'Modal-Failed-Title';\n\n @Output() public closed: EventEmitter<void> = new EventEmitter<void>();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n public get isShown(): boolean {\n return this.modal.isShown;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public closeModal(): void {\n this.modal.closeModal();\n }\n\n public showModal(error: string | HttpErrorResponse): void {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (typeof error.error === 'string') {\n errorMessage = error.error;\n }\n this.errorMessage = errorMessage;\n this.modal.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-modal\nposition=\"top\"\n[closeButtonText]=\"'Button-Modal-Close' | translate\"\n[size]=\"size\"\n[title]=\"title | translate\"\n(closed)=\"closed.emit()\">\n <div body>\n <div class=\"erro\">\n <h4>{{ errorMessage | translate }}</h4>\n <span *ngIf=\"subtitle\">{{ subtitle | translate }}</span>\n </div>\n </div>\n</lib-modal>","import { NgModule } from '@angular/core';\nimport { ConfirmModalComponent } from './confirm-modal/confirm-modal.component';\nimport { ErrorModalComponent } from './error-modal/error-modal.component';\n\n\n@NgModule({\n declarations: [],\n imports: [\n ConfirmModalComponent,\n ErrorModalComponent,\n ],\n exports: [\n ConfirmModalComponent,\n ErrorModalComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModalsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModalsModule { }","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-confirm',\n templateUrl: './button-confirm.component.html',\n imports: [\n ConfirmModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonConfirmComponent)}]\n})\nexport class ButtonConfirmComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ConfirmModalComponent) private confirmModal!: ConfirmModalComponent;\n\n @Input() public action!: Observable<any>;\n @Input() public color: string = 'text-primary-500';\n @Input() public icon!: string;\n @Input() public label!: string;\n @Input() public modalConfirmButtonColor!: string;\n @Input() public modalConfirmButtonLabel!: string;\n @Input() public modalMessage!: string;\n @Input() public modalMessageIcon: string = 'fa-solid fa-circle-question';\n @Input() public modalMessageIconColor!: string;\n @Input() public modalTitle!: string;\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = true;\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal.toggleModal();\n }\n\n protected onDelete(): void {\n if (this.confirmModal.isLoading || !this.confirmModal.isShown) {\n return;\n }\n \n this.confirmModal.beginLoading();\n\n this.action\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n this.confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n this.confirmModal.setErrorMessage(e);\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\n[color]=\"color\"\n[disabled]=\"disabled\"\n[icon]=\"icon\"\n[label]=\"label\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>\n\n<framework-confirm-modal #modal\n[message]=\"modalMessage\"\n[messageIcon]=\"modalMessageIcon\"\n[messageIconColor]=\"modalMessageIconColor\"\n[title]=\"modalTitle\">\n <div footer>\n <button\n class=\"btn {{ modalConfirmButtonColor }}\"\n type=\"button\"\n [class.loading]=\"modal.isLoading\"\n (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel | translate }}\n </button>\n </div>\n</framework-confirm-modal>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, input, Input, ViewChild } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, take } from 'rxjs';\nimport { ConfirmModalComponent } from '../../modals';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-delete',\n templateUrl: './button-delete.component.html',\n imports: [\n ConfirmModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonDeleteComponent)}]\n})\nexport class ButtonDeleteComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ConfirmModalComponent) private confirmModal!: ConfirmModalComponent;\n\n @Input() public action!: Observable<any>;\n @Input() public label: string = 'Button-Delete';\n @Input() public modalConfirmButtonLabel: string = 'Modal-Delete-Confirm';\n @Input() public modalMessage: string = 'Modal-Delete-Message';\n @Input() public modalTitle: string = 'Modal-Delete-Title';\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = true;\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.confirmModal.toggleModal();\n }\n\n protected onDelete(): void {\n if (this.confirmModal.isLoading || !this.confirmModal.isShown) {\n return;\n }\n \n this.confirmModal.beginLoading();\n\n this.action\n .pipe(take(1))\n .subscribe({\n next: () => {\n this.finishLoading('success');\n this.confirmModal.finishLoading(true);\n this.gridDataset.refresh();\n },\n error: (e: HttpErrorResponse) => {\n this.confirmModal.setErrorMessage(e);\n }\n });\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible\"\ncolor=\"text-red-500\"\nicon=\"fa-trash-alt\"\n[disabled]=\"disabled\"\n[label]=\"label\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>\n\n<framework-confirm-modal #modal\nmessageIcon=\"fa-solid fa-circle-exclamation\"\nmessageIconColor=\"text-red-500\"\n[message]=\"modalMessage\"\n[title]=\"modalTitle\">\n <div footer>\n <button\n class=\"btn red-500\"\n type=\"button\"\n [class.loading]=\"modal.isLoading\"\n (click)=\"onDelete()\">\n {{ modalConfirmButtonLabel | translate }}\n </button>\n </div>\n</framework-confirm-modal>","import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({ template: '' })\nexport abstract class ViewBase implements OnDestroy {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n\n private _loading: boolean = false;\n //#endregion\n\n //#region Properties\n public get loading(): boolean {\n return this._loading;\n }\n public set loading(value: boolean) {\n this._loading = value;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { ViewBase } from '../view-base';\n\nexport abstract class ModalBase extends ViewBase {\n abstract toggle(): void;\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from '../../../views/modals/modal-base';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-edit',\n templateUrl: './button-edit.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditComponent)}]\n})\nexport class ButtonEditComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public cancelColor: string = 'text-red-500';\n @Input() public cancelIcon: string = 'fa-ban';\n @Input() public cancelLabel: string = 'Button-Cancel-Edit';\n @Input() public editIcon: string = 'fa-edit';\n @Input() public editLabel: string = 'Button-Edit';\n @Input() public modal?: ModalBase;\n //#endregion\n\n //#region Variables\n protected isButtonCancelVisible: boolean = false;\n\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n //#endregion\n\n //#region Properties\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.formService.editCanceled\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isButtonCancelVisible = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onCancelClicked(): void {\n if (this.isButtonCancelVisible) {\n this.isButtonCancelVisible = false;\n this.formService.cancelEdit();\n }\n }\n\n protected onEditClicked(): void {\n if (!!this.modal) {\n this.modal.toggle();\n } else {\n this.isButtonCancelVisible = true;\n this.formService.beginEdit();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible && !isButtonCancelVisible && hasDataProviderEntityID\"\n[disabled]=\"disabled || !isAccessLoaded || isFormLoading\"\n[icon]=\"editIcon\"\n[iconSize]=\"iconSize\"\n[label]=\"editLabel\"\n[loading]=\"loading\"\n(action)=\"onEditClicked()\">\n</lib-ribbon-button>\n\n<lib-ribbon-button *ngIf=\"visible && isButtonCancelVisible && hasDataProviderEntityID\"\n[color]=\"cancelColor\"\n[disabled]=\"disabled || !isAccessLoaded || isFormLoading\"\n[icon]=\"cancelIcon\"\n[label]=\"cancelLabel\"\n[loading]=\"loading\"\n(action)=\"onCancelClicked()\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DataGridDataset, IListParameters, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\nexport type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';\n\nexport const MaxExportRows: number = 50000;\n\n@Component({\n selector: 'framework-button-export',\n templateUrl: './button-export.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonExportComponent)}]\n})\nexport class ButtonExportComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public fileBaseName: string = 'export';\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n private translateService: TranslateService = inject(TranslateService);\n //#endregion\n\n //#region Properties\n protected override get isButtonDisabled(): boolean {\n return super.isButtonDisabled || this.isExceedingExportLimit;\n }\n\n protected get tooltip(): string {\n if (this.isExceedingExportLimit) {\n return this.translateService.instant('Button-Export-LimitExceeded', { max: MaxExportRows });\n }\n return '';\n }\n\n private get isExceedingExportLimit(): boolean {\n const totalRows: number | undefined = this.dataGridDataset?.totalRows;\n return totalRows !== undefined && totalRows > MaxExportRows;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'xlsx', label: 'Button-Export-Excel', icon: 'fa-file-excel' },\n { id: 'pdf', label: 'Button-Export-PDF', icon: 'fa-file-pdf' },\n { id: 'csv', label: 'Button-Export-CSV', icon: 'fa-file-csv' },\n { id: 'xml', label: 'Button-Export-XML', icon: 'fa-file-code' },\n { id: 'mhtml', label: 'Button-Export-MHTML', icon: 'fa-file-archive' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(format?: string): void {\n if (!this.dataGridDataset) {\n return;\n }\n\n const resolvedFormat: ExportFormat = (format as ExportFormat) ?? 'xlsx';\n\n this.startLoading();\n\n const parameters: IListParameters = {\n endRow: 0,\n filters: this.dataGridDataset.filters,\n startRow: 0,\n };\n\n this.dataGridDataset.export(resolvedFormat, parameters)\n .pipe(take(1))\n .subscribe({\n next: (response: HttpResponse<Blob>) => {\n this.download(response);\n this.finishLoading('success');\n },\n error: (_: HttpErrorResponse) => {\n this.finishLoading('failure');\n }\n });\n }\n //#endregion\n\n //#region Private methods\n private download(response: HttpResponse<Blob>): void {\n if (!response.body) {\n return;\n }\n\n const contentDisposition: string = response.headers.get('Content-Disposition') ?? '';\n const match: RegExpExecArray | null = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(contentDisposition);\n const fileName: string = match ? decodeURIComponent(match[1]) : this.fileBaseName;\n\n const url: string = URL.createObjectURL(response.body);\n const anchor: HTMLAnchorElement = document.createElement('a');\n anchor.href = url;\n anchor.download = fileName;\n anchor.click();\n URL.revokeObjectURL(url);\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Export\"\nicon=\"fa-file-export\"\n[disabled]=\"isButtonDisabled\"\n[loading]=\"loading\"\n[iconSize]=\"iconSize\"\n[options]=\"options\"\n[tooltip]=\"tooltip\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input, OnInit, ViewChild, forwardRef } from '@angular/core';\nimport { FormGroupDirective } from '@angular/forms';\nimport { DataGridDataset, FormService, ModalComponent, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-filters',\n templateUrl: './button-filters.component.html',\n styleUrls: ['./button-filters.component.scss'],\n imports: [\n ModalComponent,\n NgIf,\n RibbonButtonComponent,\n TranslatePipe,\n ],\n providers: [\n FormService,\n { provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonFiltersComponent)},\n ]\n})\nexport class ButtonFiltersComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ModalComponent) modal!: ModalComponent;\n\n @Input() public modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full' | 'auto' = 'xl';\n @Input() public modalTitle!: string;\n @Input() public validateFormFunction?: Function;\n //#endregion\n\n //#region Variables\n protected gridDataset: DataGridDataset = inject(DataGridDataset);\n protected readonly formGroup: FormGroupDirective = inject(FormGroupDirective);\n\n private filters: { [key: string]: string; } = {};\n //#endregion\n\n //#region Properties\n protected get hasFiltersApplied(): boolean {\n return Object.keys(this.filters).length > 0;\n }\n\n protected get singleColumn(): boolean {\n return this.modalSize === 'sm' || this.modalSize === 'md' || this.modalSize === 'lg' || this.modalSize === 'xl';\n }\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the filter disabled.\n this.disabled = true;\n }\n\n public ngOnInit(): void {\n this.gridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.disabled = true;\n if (this.button.loading) {\n this.finishLoading('success');\n }\n });\n\n this.gridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.disabled = false;\n if (this.button.loading) {\n this.finishLoading('success');\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onFiltersButtonClicked(): void {\n this.modal.toggleModal();\n this.formGroup.form.reset();\n this.formGroup.form.patchValue(this.filters, { emitEvent: false });\n }\n\n protected onFiltersSubmitClicked(): void {\n if (this.validateFormFunction) {\n this.validateFormFunction();\n }\n\n if (this.formGroup.form.valid) {\n this.button.startLoading();\n this.modal.toggleModal();\n \n const formValue: any = this.formGroup.form.getRawValue();\n const formFilters: { [key: string ] : any } = Object.fromEntries(Object.entries(formValue).filter(([_, v]) => (!!v && v !== '') || v === 0));\n\n this.setFilters(formFilters);\n }\n }\n\n protected onResetButtonClicked(): void {\n this.button.startLoading();\n \n this.formGroup.form.reset();\n this.filters = {};\n\n this.gridDataset.setFilters();\n }\n //#endregion\n\n //#region Public methods\n public setFilters(filters: { [key: string ] : any }): void {\n this.filters = filters;\n\n if (this.hasFiltersApplied) {\n this.gridDataset.setFilters(filters);\n } else {\n this.gridDataset.setFilters();\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[color]=\"hasFiltersApplied ? 'text-amber-500' : 'text-primary-500'\"\n[disabled]=\"disabled\"\n[icon]=\"'fa-filter'\"\n[iconSize]=\"iconSize\"\n[label]=\"'Button-Filters'\"\n[loading]=\"loading\"\n(action)=\"onFiltersButtonClicked()\">\n</lib-ribbon-button>\n\n<lib-ribbon-button\n*ngIf=\"hasFiltersApplied\"\n[color]=\"'text-red-500'\"\n[disabled]=\"disabled\"\n[icon]=\"'fa-broom'\"\n[iconSize]=\"iconSize\"\n[label]=\"'Button-Filters-Clear'\"\n[loading]=\"loading\"\n(action)=\"onResetButtonClicked()\">\n</lib-ribbon-button>\n\n<lib-modal position=\"top\" [size]=\"modalSize\" [title]=\"modalTitle | translate\" [closeButtonText]=\"'Button-Modal-Cancel' | translate\">\n <ng-container body>\n <ng-content></ng-content>\n </ng-container>\n <div footer>\n <button type=\"submit\" class=\"btn blue-500\" (click)=\"onFiltersSubmitClicked()\">{{ 'Button-Filters-Modal-Confirm' | translate }}</button>\n </div>\n</lib-modal>","/**\n * Key used in Angular route `data` to identify the framework tab view type.\n *\n * Usage in route config:\n * ```ts\n * {\n * path: ':id',\n * component: MyDetailsViewComponent,\n * data: { [FRAMEWORK_VIEW_TYPE]: FrameworkViewType.Details, ... },\n * }\n * ```\n */\nexport const FRAMEWORK_VIEW_TYPE: string = 'frameworkViewType';\n\n/**\n * Values for the {@link FRAMEWORK_VIEW_TYPE} route data key.\n */\nexport enum FrameworkViewType {\n /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */\n Details = 'details',\n /** A list/grid view (no data provider, no sub-views). */\n List = 'list',\n}\n","export interface ITab {\n clones: string[];\n entityBaseUrl?: string;\n isTitleLoading: boolean;\n queryParams?: { [key: string]: string };\n title?: string;\n url: string;\n}\n\nexport class Tab implements ITab{\n private _title?: string | undefined;\n\n public clones: string[] = [];\n\n public entityBaseUrl?: string;\n\n public isTitleLoading: boolean = true;\n\n public queryParams?: { [key: string]: string };\n \n public get title(): string | undefined {\n return this._title;\n }\n public set title(value: string | undefined) {\n if (this._title !== value) {\n this._title = value;\n \n if (!!value) {\n this.isTitleLoading = false;\n }\n }\n }\n\n public url: string = '';\n\n constructor(init?: Partial<Tab>) {\n Object.assign(this, init);\n }\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { DataProviderService, IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-new',\n templateUrl: './button-new.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewComponent)}]\n})\nexport class ButtonNewComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public parameters?: { [key: string]: string };\n @Input() public path?: string;\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get hasDataProvider(): boolean {\n return !!this.dataProviderService;\n }\n\n protected get hasDataProviderEntityID(): boolean {\n return this.dataProviderService?.hasEntityID ?? false;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(optionId?: string): void {\n let option: IRibbonButtonOption | undefined = undefined;\n if (optionId) {\n option = this.options.find(o => o.id === optionId);\n }\n\n let path: string | undefined = this.path;\n if (option && option.path && option.path.length > 0) {\n path = option.path ?? optionId;\n }\n\n let queryParameters: { [key: string]: string } | undefined = this.parameters;\n if (option && option.parameters && Object.keys(option.parameters).length > 0) {\n queryParameters = { ...queryParameters, ...option.parameters };\n }\n\n let url: string = '';\n\n // Try to find the route with ':id' parameters.\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n if (!targetRoute) {\n // If not found, uses the current route.\n url = RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n } else {\n url = RouteHelper.getRouteURL(targetRoute!.parent!);\n }\n\n if (path && path.length > 0) {\n url += `/${path}`;\n }\n\n const entityUrl: string = `${url}/${this.endpoint}`;\n const tab: ITab = new Tab({\n entityBaseUrl: entityUrl,\n queryParams: queryParameters,\n url: entityUrl,\n });\n\n this.tabService.navigateCurrentTab(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible && (!hasDataProvider || hasDataProviderEntityID)\"\nicon=\"fa-plus\"\nlabel=\"Button-New\"\n[disabled]=\"disabled || !isAccessLoaded\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-open-record',\n templateUrl: './button-open-record.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordComponent)}]\n})\nexport class ButtonOpenRecordComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public elementPath?: string;\n @Input() public rootPath?: string;\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset = inject(DataGridDataset);\n private router: Router = inject(Router);\n private selectionCount: number = 0;\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isSelectedOneRecord(): boolean {\n return this.selectionCount === 1;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled || !this.isAccessLoaded || !this.isSelectedOneRecord || !this.visible) {\n return;\n }\n\n let path: string = this.rootPath ?? this.router.url;\n\n if (this.elementPath) {\n path += `/${this.elementPath}`;\n }\n\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n path += `/${selectedID}`;\n\n this.tabService.navigateCurrentTab(new Tab({ entityBaseUrl: path, url: path }));\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nicon=\"fa-eye\"\nlabel=\"Button-Open-Record\"\n[disabled]=\"disabled || !isAccessLoaded || !isSelectedOneRecord\"\n[iconSize]=\"iconSize\"\n[loading]=\"loading\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>","import { Component, forwardRef, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-refresh',\n templateUrl: './button-refresh.component.html',\n imports: [\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonRefreshComponent)}]\n})\nexport class ButtonRefreshComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private dataGridDataset: DataGridDataset | null = inject(DataGridDataset, { optional: true });\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n \n this.disabled = false;\n }\n\n public ngOnInit(): void {\n this.dataGridDataset?.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n this.loading = true;\n this.dataGridDataset?.refresh();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\nlabel=\"Button-Refresh\"\nicon=\"fa-sync-alt\"\n[disabled]=\"disabled\"\n[loading]=\"loading\"\n[iconSize]=\"iconSize\"\n(action)=\"onButtonClicked()\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { DataProviderService, FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Observable, take, throwError } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService } from '../../../services';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-save',\n templateUrl: './button-save.component.html',\n imports: [\n ErrorModalComponent,\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveComponent)}]\n})\nexport class ButtonSaveComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n\n @Input() public defaultOption: number = 0;\n //#endregion\n\n //#region Variables\n private dataProviderService: DataProviderService<any> = inject(DataProviderService);\n private formService: FormService = inject(FormService);\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get isFormEditMode(): boolean {\n return this.formService.isEditMode;\n }\n\n protected get isFormLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(option?: string): void {\n this.startLoading();\n\n this.formService.markAllAsTouched();\n if (!this.formService.isValid) {\n this.finishLoading('warning');\n return;\n }\n\n this.saveModel()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n this.formService.enableForm();\n this.formService.model = model;\n this.formService.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.navigateBackOrCloseActiveTab();\n break;\n case 'save-and-new': {\n this.dataProviderService.updateModel(model);\n\n const detailsRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n const savedEntityUrl: string = `${RouteHelper.getRouteURL(detailsRoute!.parent!)}/${model.id}`;\n const currentRouteUrl: string = RouteHelper.getRouteURL(detailsRoute!);\n\n if (currentRouteUrl !== savedEntityUrl) {\n // Router URL differs from saved entity (new entity, or regular save\n // that only used location.replaceState). Redirect to sync the router\n // to /{id} invisibly, then navigate to /new normally. The real second\n // navigation detaches and caches the /{id} component so back-navigation\n // reattaches it instantly without reloading from the server.\n this.tabService.redirectCurrentTab(savedEntityUrl);\n this.tabService.setRouteRedirect(currentRouteUrl, savedEntityUrl);\n this.router.navigateByUrl(savedEntityUrl).then(() => {\n this.navigateToNew();\n });\n } else {\n // Router is already at /{id}. Navigate to /new directly.\n // The /{id} component is cached by the reuse strategy.\n this.navigateToNew();\n }\n break;\n }\n default:\n this.dataProviderService.updateModel(model);\n\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n const url: string = `${RouteHelper.getRouteURL(targetRoute!.parent!)}/${model.id}`;\n\n if (!this.tabService.isUrlActive(url)) {\n const currentRoute: string = RouteHelper.getRouteURL(targetRoute!);\n this.tabService.redirectCurrentTab(url);\n\n // Sync the Angular router to /{id} invisibly. Without this, the router\n // stays at the old URL (e.g., /new) and subsequent navigations to that\n // URL become no-ops (the New button would stop working after Save).\n if (currentRoute !== url) {\n this.tabService.setRouteRedirect(currentRoute, url);\n this.router.navigateByUrl(url);\n }\n }\n break;\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n this.formService.enableForm();\n\n if (e.status === 400) {\n this.formService.setValidationErrorsFromHttpResponse(e);\n } else {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n this.errorModal.showModal(errorMessage);\n }\n },\n complete: () => {\n this.formService.loading = false;\n }\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n private navigateToNew(): void {\n const targetRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.root.snapshot, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n\n let url: string = '';\n if (targetRoute) {\n url = RouteHelper.getRouteURL(targetRoute.parent!);\n } else {\n url = RouteHelper.getRouteURL(this.router.routerState.root.snapshot, true);\n }\n\n const tab: ITab = new Tab({ entityBaseUrl: `${url}/new`, url: `${url}/new` });\n this.tabService.navigateCurrentTab(tab);\n }\n\n private saveModel(): Observable<any> {\n this.formService.disableForm();\n const model: any = this.formService.getModelFromForm();\n return this.dataProviderService.saveModel(model);\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Save\"\nicon=\"fa-save\"\n[defaultOption]=\"defaultOption\"\n[disabled]=\"disabled || !isAccessLoaded || !isFormEditMode || isFormLoading\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked($event)\">\n</lib-ribbon-button>\n\n<framework-error-modal></framework-error-modal>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { ActivatedRouteSnapshot, NavigationEnd, Route, Router, UrlSegment } from '@angular/router';\nimport { DataProviderService, IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { filter, takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button-views',\n templateUrl: './button-views.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsComponent)}]\n})\nexport class ButtonViewsComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public detailsViewRoute: ActivatedRouteSnapshot | null = null;\n //#endregion\n\n //#region Variables\n private baseUrlPath?: string;\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private isInternalNavigation: boolean = false;\n private router: Router = inject(Router);\n private selectedViewId?: string;\n private tabService: TabService = inject(TabService);\n private tabViewService: TabViewService = inject(TabViewService);\n //#endregion\n\n //#region Properties\n protected get hasOptions(): boolean {\n return this.options.some((option: IRibbonButtonOption) => (option.isVisible ?? true) && (option.allowedActions === undefined || option.allowedActions.length === 0 || option.isAccessAllowed === true || (option.isAccessAllowed === undefined && option.allowedActions?.length > 0)));\n }\n\n protected get isNewEntity(): boolean {\n return !(this.dataProviderService?.hasEntityID ?? false);\n }\n\n protected get selectedView(): IRibbonButtonOption | undefined {\n return this.options.find((option: IRibbonButtonOption) => option.id === this.selectedViewId);\n }\n\n private get defaultViewId(): string {\n return this.options[0].id ?? '';\n }\n\n private get selectedViewUrl(): string {\n let url: string = this.baseUrlPath ?? '';\n\n const selectedView: IRibbonButtonOption | undefined = this.selectedView;\n if (selectedView && selectedView.id) {\n url += `/${selectedView.id}`;\n }\n\n return url;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n\n public ngOnInit(): void {\n if (!!this.detailsViewRoute) {\n this.options = this.detailsViewRoute.routeConfig?.children\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\n ?.map((route: Route) => {\n const data: { [key: string | symbol]: any } = route.data ?? {};\n\n const option: IRibbonButtonOption = {\n id: route.path ?? '',\n isDisabled: false,\n isVisible: true,\n label: data['title'] ?? '',\n };\n\n const icon: string | undefined = data['icon'];\n if (icon) {\n option.icon = icon;\n }\n\n const allowedActions: string[] | undefined = data['allowedActions'];\n if (allowedActions && allowedActions.length > 0) {\n option.allowedActions = allowedActions;\n }\n\n return option;\n }) ?? [];\n\n const url: string = RouteHelper.getRouteURL(this.detailsViewRoute);\n this.baseUrlPath = url;\n\n const option: string = this.detailsViewRoute.children[0]?.url?.map((segment: UrlSegment) => segment.path)?.join('/') ?? '';\n if (option === this.defaultViewId) {\n // We just need to check if the current option is the default, otherwise the router.events will handle the option selection.\n this.changeSelectedView(this.defaultViewId);\n }\n }\n\n this.router.events\n .pipe(\n filter((event: any) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event: NavigationEnd) => {\n if (this.detailsViewRoute) {\n // Use the current router state to get the up-to-date URL, since the stored\n // detailsViewRoute snapshot is immutable and becomes stale after save redirects\n // (e.g., /new → /:id).\n const currentRoute: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(\n this.router.routerState.root.snapshot,\n FRAMEWORK_VIEW_TYPE,\n FrameworkViewType.Details,\n );\n\n if (currentRoute) {\n const url: string = RouteHelper.getRouteURL(currentRoute);\n this.baseUrlPath = url;\n\n const activeViewId: string = this.getActiveOption(event.url);\n\n if (!this.isInternalNavigation) {\n if (this.selectedViewId !== activeViewId) {\n this.changeSelectedView(activeViewId);\n }\n } else {\n this.isInternalNavigation = false;\n }\n }\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onViewClicked(selectedOption: string | undefined): void {\n this.changeSelectedView(selectedOption);\n this.isInternalNavigation = true;\n\n if (selectedOption === this.defaultViewId) {\n // Default view: remove sub-view entry, navigate back to detail view\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!);\n } else {\n const tab: ITab = new Tab({\n title: this.selectedView?.label,\n url: this.selectedViewUrl,\n });\n this.tabService.replaceCurrentTabSubView(this.baseUrlPath!, tab);\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private changeSelectedView(viewId: string | undefined): void {\n if (this.selectedView) {\n this.selectedView.isDisabled = false;\n }\n\n this.selectedViewId = viewId;\n this.tabViewService.setActiveView(viewId ?? '');\n\n if (this.selectedView) {\n this.selectedView.isDisabled = true;\n }\n }\n\n private getActiveOption(url: string): string {\n const option: string = url.replace(this.baseUrlPath ?? '', '').substring(1);\n\n if (this.options.some((o: IRibbonButtonOption) => o.id === option)) {\n return option;\n }\n\n return this.defaultViewId;\n }\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"hasOptions\"\nicon=\"fa-eye\"\nlabel=\"Button-Views\"\n[disabled]=\"!isAccessLoaded || isNewEntity\"\n[options]=\"options\"\n(action)=\"onViewClicked($event)\">\n</lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { BaseButton } from '../base-button';\n\n@Component({\n selector: 'framework-button',\n templateUrl: './button.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonComponent)}]\n})\nexport class ButtonComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public color: string = 'text-primary-500';\n @Input() public icon?: string;\n @Input() public label: string = '';\n\n @Output() public action: EventEmitter<void> = new EventEmitter();\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onButtonClicked(): void {\n if (this.disabled || !this.isAccessLoaded || !this.visible) {\n return;\n }\n\n this.action.emit();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon-button *ngIf=\"visible\"\n[color]=\"color\"\n[disabled]=\"disabled || !isAccessLoaded\"\n[icon]=\"icon\"\n[iconSize]=\"iconSize\"\n[label]=\"label\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClicked()\">\n</lib-ribbon-button>","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset, DataProviderService, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { skip, takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n@Component({ template: '' })\nexport abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n protected selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n protected get isLoading(): boolean {\n return this.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n\n this.resultDataset?.savedChanges\n ?.pipe(takeUntil(this.destroy$))\n ?.subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n this.dataProvider?.getModel$()\n .pipe(skip(1), takeUntil(this.destroy$))\n .subscribe(() => {\n this.dataGridDataset.refresh();\n });\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n //#endregion\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { DataGridDataset, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ViewBase } from './view-base';\n\n/**\n * @deprecated Use standalone {@link ChildList} instead. Migrate by extending ChildList\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class ChildListLegacy extends ViewBase implements OnInit {\n\n private _entityId?: number;\n\n protected selectionCount: number = 0;\n\n get entityId(): number | undefined {\n return this._entityId;\n }\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = value;\n }\n }\n }\n\n @Input() disabled: boolean = false;\n\n\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected resultDataset: MultiSelectResultDataset | null = inject(MultiSelectResultDataset, { optional: true });\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = false;\n });\n\n if (!this.dataGridDataset.loadedRows) {\n this.loading = true;\n }\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n \n\n selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n }\n}","import { AfterViewInit, Component, inject, TemplateRef, ViewChild } from '@angular/core';\nimport { TabViewService } from '../services';\nimport { ViewBase } from './view-base';\n\n@Component({ template: '' })\nexport abstract class TabViewBase extends ViewBase implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('ribbon') private ribbonTemplate?: TemplateRef<any>;\n //#endregion\n \n //#region Variables\n private tabViewService: TabViewService | null;\n //#endregion\n \n //#region Properties\n //#endregion\n \n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n this.tabViewService = inject(TabViewService, { optional: true });\n }\n\n public ngAfterViewInit(): void {\n this.tabViewService?.updateRibbonTemplate(this.ribbonTemplate);\n }\n //#endregion\n \n //#region Event handlers\n //#endregion\n \n //#region Public methods\n //#endregion\n \n //#region Private methods\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { take, takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n@Component({ template: '' })\nexport abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n //#endregion\n\n //#region Properties\n protected get hasEntityID(): boolean {\n return this.dataProvider?.hasEntityID ?? false;\n }\n\n protected get isLoading(): boolean {\n return this.formService.loading;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.formService.loading = true;\n this.dataProvider?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: TEntityModel | null) => {\n this.formService.loading = false;\n this.formService.model = model;\n this.formService.resetForm();\n\n if (!this.dataProvider?.hasEntityID) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n //#endregion\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, Input, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataProviderService, FormService } from '@zambon-dev/library';\nimport { Observable, take, tap, throwError } from 'rxjs';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link FormView} instead. Migrate by extending FormView\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: ''})\nexport abstract class LegacySubViewForm extends ViewBase implements OnInit {\n @Input() entityId?: number;\n @Input() set model(value: any | null) {\n if (this._model !== value) {\n this._model = value;\n \n if (this.dataForm) {\n this.dataForm.patchValue(this.model);\n }\n }\n }\n\n override get loading(): boolean {\n return false;\n return this.formService.loading;\n }\n\n override set loading(value: boolean) {\n this.formService.loading = value;\n }\n\n get isNew(): boolean {\n return !this.entityId;\n }\n get model(): any | null {\n return this._model;\n }\n\n dataForm!: FormGroup;\n viewMode: 'view' | 'edit' = 'view';\n\n private _model: any | null = null;\n\n protected dataProvider: DataProviderService<any> | null;\n\n\n constructor(\n protected formBuilder: FormBuilder,\n protected formService: FormService,\n ) {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n }\n\n ngOnInit(): void {\n this.dataForm = this.formSetup();\n\n this.updateModel(this.model);\n\n if (this.dataProvider) {\n this.formService.loading = true;\n\n this.dataProvider.getModel$()\n .pipe(take(1))\n .subscribe((_: any) => {\n this.formService.loading = false;\n })\n }\n }\n\n \n protected updateModel(model: any): void {\n this._model = model;\n\n if (this.isNew) {\n this.beginEdit();\n }\n else {\n this.cancelEdit();\n }\n }\n\n beginEdit(resetValues: boolean = true): void {\n setTimeout(() => {\n this.viewMode = 'edit';\n this.dataForm.enable();\n\n if (resetValues) {\n this.dataForm.patchValue(this.model);\n }\n });\n }\n\n cancelEdit(): void {\n this.viewMode = 'view';\n this.dataForm.patchValue(this.model);\n this.dataForm.disable();\n }\n\n protected validate(formModel: any): void {\n }\n\n save(): Observable<any> {\n \n this.validate(this.dataForm.getRawValue());\n \n if (this.dataForm.valid) {\n this.dataForm.disable();\n\n return this.saveModel()\n .pipe(\n tap(() => this.dataForm.enable())\n );\n }\n else {\n this.dataForm.markAllAsTouched();\n return throwError(() => new HttpErrorResponse({ error: { message: 'Form invalid', errors: null }, status: 400 }));\n }\n }\n\n protected abstract formSetup(): FormGroup;\n protected abstract saveModel(): Observable<any>;\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ITabView, RouterFormatter } from '@zambon-dev/library';\nimport { TabService } from '../../services';\nimport { ViewBase } from '../view-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} instead. Migrate by extending TabViewBase\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewBase extends ViewBase implements OnInit, ITabView {\n\n title: string = '';\n url: string;\n activeView?: string;\n\n \n constructor(\n protected route: ActivatedRoute,\n protected tabService: TabService\n ) {\n super();\n \n this.url = RouterFormatter.getURL(this.route.snapshot);\n }\n\n ngOnInit(): void {\n this.openTabView();\n }\n\n\n protected openTabView() {\n // this.tabService.openView(this);\n }\n\n protected updateTitle(title: string): void {\n this.title = title;\n this.tabService.updateTabTitle(this.url, title);\n }\n}","import { AfterViewInit, Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormService, IRibbonButtonOption } from '@zambon-dev/library';\nimport { Observable, takeUntil } from 'rxjs';\nimport { ButtonNewLegacyComponent } from '../../components';\nimport { Tab } from '../../models';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewBase} with {@link DefaultDetailsTabViewComponent} pattern instead.\n * Migrate by extending TabViewBase and composing detail/history views as child routes\n * with standalone component imports.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ButtonNewLegacyComponent) public buttonNew!: ButtonNewLegacyComponent;\n //#endregion\n \n //#region Variables\n public override title: string = '';\n\n protected defaultView: string = 'details';\n protected entityId?: number;\n protected views: IRibbonButtonOption[] = [\n { id: 'details', label: 'Button-Views-Details', icon: 'fa-dice-d6' },\n { id: 'history', label: 'Button-Views-History', icon: 'fa-history' }\n ];\n //#endregion\n\n //#region Properties\n public override get loading(): boolean {\n return super.loading;\n }\n \n public override set loading(value: boolean) {\n super.loading = value;\n this.formService.loading = value;\n }\n\n protected get currentView(): string {\n return this.activeView ?? this.defaultView;\n }\n\n protected get model(): any {\n return this.formService.model;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n route: ActivatedRoute,\n tabService: TabService,\n protected formService: FormService\n ) {\n super(route, tabService);\n }\n\n public ngAfterViewInit(): void {\n this.onViewVisible();\n }\n\n public override ngOnInit(): void {\n this.refreshParameters();\n\n super.ngOnInit();\n\n this.formService.modelRefreshed\n .pipe(takeUntil(this.destroy$))\n .subscribe((_: any) => {\n const id: number | null = this.getModelId();\n if (id && this.entityId !== id) {\n this.entityId = id;\n this.tabService.redirectCurrentTab(`${this.url.substring(0, this.url.indexOf('/new'))}/${id}`);\n }\n\n this.updateTitle(this.getModelDescription());\n });\n\n this.refresh();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n protected override openTabView(): void {\n super.openTabView();\n\n const activeView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === this.activeView);\n if (activeView) {\n activeView.isDisabled = true;\n }\n }\n\n protected refresh(): void {\n this.loading = true;\n this.title = '';\n this.formService.model = null;\n\n this.loadModel()\n .pipe(takeUntil(this.destroy$))\n .subscribe(model => {\n this.loading = false;\n this.formService.model = model;\n });\n }\n protected refreshParameters(): void {\n const currentID: string | null = this.route.snapshot.paramMap.get('id');\n this.entityId = currentID ? Number(currentID) : undefined;\n\n let viewID: string | null = this.route.snapshot.paramMap.get('view');\n if (!viewID || !this.views.some((view: IRibbonButtonOption) => view.id === viewID)) {\n this.switchView(this.defaultView);\n } else {\n this.activeView = viewID;\n }\n }\n protected switchView(viewId?: string): void {\n if (!viewId) {\n viewId = this.defaultView;\n }\n\n const activeView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === (this.activeView ?? this.defaultView));\n if (activeView) {\n activeView.isDisabled = false;\n }\n\n const newView: IRibbonButtonOption | undefined = this.views.find((view: IRibbonButtonOption) => view.id === viewId);\n if (newView) {\n newView.isDisabled = true;\n\n let urlViewPath: string = viewId === this.defaultView ? '' : `/${viewId}`;\n let url: string = this.url;\n if (this.activeView && url.endsWith(this.activeView)) {\n url = url.replace(`/${this.activeView}`, urlViewPath);\n } else {\n url += urlViewPath;\n }\n this.tabService.navigateCurrentTab(new Tab({ url }));\n // this.tabService.changeTabView(this, viewId !== this.defaultView ? viewId : undefined);\n \n this.activeView = newView.id;\n\n // if (!this.activeView) {\n // this.activeView = this.defaultView;\n // }\n }\n\n this.onViewVisible();\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n\n //#region Abstract methods\n protected abstract getModelDescription(): string;\n protected abstract getModelId(): number | null;\n protected abstract loadModel(): Observable<any | null>;\n protected abstract newModel(): any;\n protected abstract onViewVisible(): void;\n //#endregion\n}","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DataGridDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { TabService } from '../../services';\nimport { LegacyTabViewBase } from './legacy-tabview-base';\n\n/**\n * @deprecated Use standalone {@link TabViewList} instead. Migrate by extending TabViewList\n * and using standalone component imports with inject() for dependency injection.\n */\n@Component({ template: '' })\nexport abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private _selectedItem?: TListModel;\n private selectedRows: number = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectedRows > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected dataGridDataset: DataGridDataset,\n route: ActivatedRoute,\n tabService: TabService,\n ) {\n super(route, tabService);\n\n // This will force the screen to initialize with the buttons disabled.\n this.loading = true;\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n setTimeout(() => this.loading = false);\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectedRows = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectedRows === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0])\n }\n }\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { DataGridDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { TabViewBase } from './tabview-base';\n\n@Component({ template: '' })\nexport abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset;\n\n private _selectedItem?: TListModel;\n private selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n protected get hasRowsSelected(): boolean {\n return this.selectionCount > 0;\n }\n\n protected get selectedItem(): TListModel | undefined {\n return this._selectedItem;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n }\n\n public ngOnInit(): void {\n this.dataGridDataset.loadStarted\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.loading = true;\n });\n\n this.dataGridDataset.loadFinished\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n setTimeout(() => this.loading = false);\n });\n\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectedRowChanged();\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n protected selectedRowChanged(): void {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n\n this._selectedItem = undefined;\n if (this.selectionCount === 1) {\n this._selectedItem = <TListModel>this.dataGridDataset.getRowData(this.dataGridDataset.selectedRowKeys[0])\n }\n }\n //#endregion\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { DataProviderService, MultiSelectResultDataset } from '@zambon-dev/library';\nimport { TabViewList } from './tabview-list';\n\n@Component({ template: '' })\nexport abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected resultDataset: MultiSelectResultDataset | null;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.resultDataset = inject(MultiSelectResultDataset, { optional: true });\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n if (this.dataProvider?.hasEntityID) {\n this.dataGridDataset.parentEntityId = this.dataProvider.entityID;\n\n if (!this.dataGridDataset.loadedRows) {\n this.dataGridDataset.refresh();\n }\n \n if (!!this.resultDataset) {\n this.resultDataset.parentEntityId = this.dataProvider.entityID;\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataGridDataset, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {\n protected _entityId?: number;\n\n @ViewChild(MultiEditorComponent) multiEditor!: MultiEditorComponent;\n\n @Input() set entityId(value: number | undefined) {\n if (this._entityId !== value) {\n this._entityId = value;\n this.dataGridDataset.parentEntityId = value;\n this.multiEditorDataset.parentEntityId = value;\n }\n }\n\n @Output() savedChanges = new EventEmitter();\n\n form!: FormGroup;\n\n\n constructor(\n protected dataGridDataset: DataGridDataset,\n protected multiEditorDataset: MultiEditorDataset,\n protected formBuilder: FormBuilder\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.form = this.formSetup();\n\n this.multiEditorDataset.savedChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.savedChanges.emit();\n });\n }\n\n\n toggle(): void {\n this.multiEditor.toggleModal();\n }\n\n abstract formSetup(): FormGroup;\n}","import { Component, EventEmitter, inject, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DataGridDataset, DataProviderService, FormService, MultiEditorComponent, MultiEditorDataset } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(MultiEditorComponent) protected multiEditor!: MultiEditorComponent;\n\n @Input() public overrideParentID?: number;\n\n @Output() public savedChanges: EventEmitter<any> = new EventEmitter();\n //#endregion\n\n //#region Variables\n protected dataForm!: FormGroup;\n protected dataGridDataset: DataGridDataset;\n protected dataProvider: DataProviderService<TEntityModel> | null;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected multiEditorDataset: MultiEditorDataset;\n protected selectionCount: number = 0;\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.dataGridDataset = inject(DataGridDataset);\n this.dataProvider = inject(DataProviderService, { optional: true });\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n this.multiEditorDataset = inject(MultiEditorDataset);\n\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.multiEditorDataset.savedChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.savedChanges.emit();\n });\n\n this.updateParentID();\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(): void {\n if (!this.multiEditor.isShown) {\n this.updateParentID();\n }\n\n this.multiEditor.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n private updateParentID(): void {\n let parentID: number | undefined = this.dataProvider?.entityID;\n if (this.overrideParentID) {\n parentID = this.overrideParentID;\n }\n\n if (parentID) {\n this.dataGridDataset.parentEntityId = parentID;\n this.multiEditorDataset.parentEntityId = parentID;\n }\n }\n //#endregion\n}\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { MultiSelectComponent } from '@zambon-dev/library';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class MultiSelectModal extends ModalBase {\n @ViewChild(MultiSelectComponent) multiSelect!: MultiSelectComponent;\n @Output() public savedChanges: EventEmitter<void> = new EventEmitter();\n\n toggle(): void {\n this.multiSelect.toggleModal(); \n }\n}","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormService, IModal } from '@zambon-dev/library';\nimport { Observable, Subject, switchMap, takeUntil } from 'rxjs';\nimport { ModalBase } from './modal-base';\n\n@Component({ template: '' })\nexport abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('modal') protected modalComponent!: IModal;\n //#endregion\n\n //#region Variables\n protected beginEditOnEntityLoad: boolean = false;\n protected data$: Observable<TEntityModel | null>;\n protected dataForm!: FormGroup;\n protected formBuilder: FormBuilder;\n protected formService: FormService;\n protected selectionCount: number = 0;\n\n private entityIdSubject: Subject<number | undefined> = new Subject<number | undefined>();\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.formBuilder = inject(FormBuilder);\n this.formService = inject(FormService);\n\n this.data$ = this.entityIdSubject\n .pipe(switchMap((entityID: number | undefined) => this.loadData(entityID)));\n }\n\n public ngOnInit(): void {\n this.dataForm = this.formSetup();\n this.formService.initializeForm(this.dataForm);\n\n this.data$\n .pipe(takeUntil(this.destroy$))\n .subscribe((data: TEntityModel | null) => {\n this.formService.model = data;\n this.formService.loading = false;\n this.dataForm.patchValue(<any>data);\n\n if (this.beginEditOnEntityLoad) {\n this.formService.beginEdit();\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public toggle(entityID?: number): void {\n this.formService.model = null;\n this.formService.loading = true;\n this.dataForm.reset();\n\n if (!this.modalComponent.isShown) {\n this.entityIdSubject.next(entityID);\n } else {\n this.formService.resetForm();\n }\n this.modalComponent.toggleModal();\n }\n //#endregion\n\n //#region Private methods\n protected abstract formSetup(): FormGroup;\n\n protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;\n //#endregion\n}","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, Input } from '@angular/core';\nimport { RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { LegacySubViewForm, ModalBase } from '../../../../views';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-edit-legacy',\n templateUrl: './button-edit.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonEditLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonEditComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonEditLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public cancelColor: string = 'text-red-500';\n @Input() public cancelIcon: string = 'fa-ban';\n @Input() public cancelLabel: string = 'Button-Cancel-Edit';\n @Input() public editIcon: string = 'fa-edit';\n @Input() public editLabel: string = 'Button-Edit';\n @Input() public form?: LegacySubViewForm;\n @Input() public modal?: ModalBase;\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onCancelAction(): void {\n if (this.form) {\n this.form.cancelEdit();\n }\n }\n\n protected onEditAction(): void {\n if (this.form) {\n this.form.beginEdit();\n }\n else if (this.modal) {\n this.modal.toggle();\n }\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible && (!form || form.viewMode !== 'edit')\"\n[disabled]=\"disabled || (!!form && form.loading)\"\n[icon]=\"editIcon\"\n[iconSize]=\"iconSize\"\n[label]=\"editLabel\"\n[loading]=\"loading\"\n(action)=\"onEditAction()\"\n></lib-ribbon-button>\n\n<lib-ribbon-button *ngIf=\"visible && form && form.viewMode === 'edit' && !form.isNew\"\n[color]=\"cancelColor\"\n[disabled]=\"disabled || form.loading\"\n[icon]=\"cancelIcon\"\n[label]=\"cancelLabel\"\n[loading]=\"loading\"\n(action)=\"onCancelAction()\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input } from '@angular/core';\nimport { ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-new-legacy',\n templateUrl: './button-new.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonNewLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonNewComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonNewLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public path!: string;\n @Input() public tabView!: ITabView;\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n this.tabService.navigateTo(new Tab({ url: `${this.path}/${this.endpoint}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.endpoint}`);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[label]=\"'Button-New'\"\n[icon]=\"'fa-plus'\"\n[disabled]=\"disabled\"\n[loading]=\"loading\"\n(action)=\"clicked()\"\n*ngIf=\"visible\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { Component, forwardRef, inject, Input, OnInit } from '@angular/core';\nimport { DataGridDataset, ITabView, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { takeUntil } from 'rxjs';\nimport { Tab } from '../../../../models';\nimport { TabService } from '../../../../services';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-open-record-legacy',\n templateUrl: './button-open-record.component.html',\n imports: [\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonOpenRecordLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonOpenRecordComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n @Input() public endpoint: string = 'new';\n @Input() public path!: string;\n @Input() public tabView!: ITabView;\n //#endregion\n\n //#region Variables\n protected dataGridDataset: DataGridDataset = inject(DataGridDataset);\n protected selectionCount: number = 0;\n\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n public ngOnInit(): void {\n this.dataGridDataset.selectedRowsChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.selectionCount = this.dataGridDataset.selectedRowKeys.length;\n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n public clicked(): void {\n if (this.dataGridDataset.hasSelectedRows && this.selectionCount === 1) {\n const selectedKey: string = this.dataGridDataset.selectedRowKeys[0];\n const selectedID: any = this.dataGridDataset.getRowID(selectedKey);\n\n this.tabService.navigateTo(new Tab({ url: `${this.path}/${selectedID}` }));\n // this.tabService.navigateTab(this.tabView, `${this.path}/${this.dataGridDataset.selectedRows[0]}`);\n }\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button\n[label]=\"'Button-Open-Record'\"\n[icon]=\"'fa-eye'\"\n[disabled]=\"disabled || selectionCount !== 1\"\n[loading]=\"loading\"\n(action)=\"clicked()\"\n*ngIf=\"visible\"\n></lib-ribbon-button>","import { NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport { FormService, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { take } from 'rxjs';\nimport { BackendFormValidationHelper } from '../../../../helpers';\nimport { TabService } from '../../../../services';\nimport { LegacySubViewForm, LegacyTabViewDetails } from '../../../../views';\nimport { ErrorModalComponent } from '../../../modals/error-modal/error-modal.component';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-save-legacy',\n templateUrl: './button-save.component.html',\n imports: [\n ErrorModalComponent,\n NgIf,\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonSaveLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonSaveComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonSaveLegacyComponent extends BaseButton {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n\n @Input() public defaultOption: number = 0;\n @Input() public form?: LegacySubViewForm;\n @Input() public tabView!: LegacyTabViewDetails;\n //#endregion\n\n //#region Variables\n private formService: FormService = inject(FormService);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n this.options = [\n { id: 'save', label: 'Button-Save', icon: 'fa-save' },\n { id: 'save-and-close', label: 'Button-Save-And-Close', icon: 'fa-save' },\n { id: 'save-and-new', label: 'Button-Save-And-New', icon: 'fa-save' },\n ];\n }\n //#endregion\n\n //#region Event handlers\n protected onButtonClick(option?: string): void {\n if (!this.form) {\n return;\n }\n\n this.startLoading();\n this.tabView.loading = true;\n \n this.form.save()\n .pipe(take(1))\n .subscribe({\n next: (model: any) => {\n this.finishLoading('success');\n \n this.formService.model = model;\n this.form?.cancelEdit();\n\n switch (option) {\n case 'save-and-close':\n this.tabService.closeActiveTab();\n // this.tabService.closeTab(this.tabView);\n break;\n case 'save-and-new':\n if (this.tabView.buttonNew) {\n this.tabView.buttonNew.clicked();\n }\n break;\n }\n },\n error: (e: HttpErrorResponse) => {\n this.finishLoading('warning');\n this.form?.beginEdit(false);\n\n if (e.status === 400 && !!this.form) {\n BackendFormValidationHelper.validateAllFormFields(e, this.form.dataForm);\n } else {\n let errorMessage: string = 'Modal-Failed-DefaultMessage';\n if (typeof e.error === 'string') {\n errorMessage = e.error;\n }\n\n this.errorModal.showModal(errorMessage);\n }\n }\n });\n }\n //#endregion\n\n //#region Public methods\n public override finishLoading(status: 'failure' | 'warning' | 'success'): void {\n this.tabView.loading = false;\n super.finishLoading(status);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<lib-ribbon-button *ngIf=\"visible\"\nlabel=\"Button-Save\"\nicon=\"fa-save\"\n[defaultOption]=\"defaultOption\"\n[disabled]=\"disabled || (form?.viewMode !== 'edit') || (form?.loading ?? false)\"\n[loading]=\"loading\"\n[options]=\"options\"\n(action)=\"onButtonClick($event)\">\n</lib-ribbon-button>\n\n<framework-error-modal></framework-error-modal>","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { IRibbonButtonOption, RibbonButtonComponent, RibbonGroupChild } from '@zambon-dev/library';\nimport { BaseButton } from '../../base-button';\n\n@Component({\n selector: 'framework-button-views-legacy',\n templateUrl: './button-views.component.html',\n imports: [\n RibbonButtonComponent,\n ],\n providers: [{ provide: RibbonGroupChild, useExisting: forwardRef(() => ButtonViewsLegacyComponent)}]\n})\n/**\n * @deprecated Use standalone {@link ButtonViewsComponent} instead.\n * Migrate by replacing this legacy component with the standalone equivalent\n * and using inject() for dependency injection.\n */\nexport class ButtonViewsLegacyComponent extends BaseButton {\n @Input() views!: IRibbonButtonOption[];\n\n @Output() viewChanged = new EventEmitter<string | undefined>();\n\n\n clicked(option?: string): void {\n this.viewChanged.emit(option);\n }\n}","<lib-ribbon-button\n[label]=\"'Button-Views'\"\n[icon]=\"'fa-eye'\"\n[options]=\"views\"\n(action)=\"clicked($event)\"\n></lib-ribbon-button>","import { NgModule } from '@angular/core';\nimport { ButtonDeleteComponent } from './button-delete/button-delete.component';\nimport { ButtonEditComponent } from './button-edit/button-edit.component';\nimport { ButtonExportComponent } from './button-export/button-export.component';\nimport { ButtonFiltersComponent } from './button-filters/button-filters.component';\nimport { ButtonNewComponent } from './button-new/button-new.component';\nimport { ButtonOpenRecordComponent } from './button-open-record/button-open-record.component';\nimport { ButtonRefreshComponent } from './button-refresh/button-refresh.component';\nimport { ButtonSaveComponent } from './button-save/button-save.component';\nimport { ButtonViewsComponent } from './button-views/button-views.component';\nimport { ButtonEditLegacyComponent, ButtonNewLegacyComponent, ButtonOpenRecordLegacyComponent, ButtonSaveLegacyComponent, ButtonViewsLegacyComponent } from './legacy';\n\n\n@NgModule({\n declarations: [],\n imports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n \n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ],\n exports: [\n ButtonDeleteComponent,\n ButtonEditComponent,\n ButtonExportComponent,\n ButtonFiltersComponent,\n ButtonNewComponent,\n ButtonOpenRecordComponent,\n ButtonRefreshComponent,\n ButtonSaveComponent,\n ButtonViewsComponent,\n\n ButtonNewLegacyComponent,\n ButtonEditLegacyComponent,\n ButtonSaveLegacyComponent,\n ButtonViewsLegacyComponent,\n ButtonOpenRecordLegacyComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkButtonsModule.\n * Import individual button components directly in your component's `imports` array.\n */\nexport class FrameworkButtonsModule { }\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RibbonComponent } from '@zambon-dev/library';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TabViewService } from '../../../services';\n\n@Component({\n selector: 'framework-default-tab-view',\n templateUrl: './default-tab-view.component.html',\n styleUrls: ['./default-tab-view.component.scss'],\n imports: [\n NgTemplateOutlet,\n RibbonComponent,\n RouterModule,\n ],\n providers: [{ provide: TabViewService }]\n})\nexport class DefaultTabViewComponent implements AfterViewInit, OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild('emptyRibbon') private emptyRibbonTemplate!: TemplateRef<any>;\n //#endregion\n\n //#region Variables\n protected destroy$: Subject<boolean> = new Subject<boolean>();\n protected ribbonTemplate!: TemplateRef<any>;\n\n private ribbonViewTemplate: { [viewId: string]: TemplateRef<any> | undefined } = {};\n //#endregion\n \n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n protected changeDetectorRef: ChangeDetectorRef,\n protected tabViewService: TabViewService,\n ) {\n \n }\n\n public ngAfterViewInit(): void {\n if (!this.ribbonTemplate) {\n // If there are no template assigned to the ribbon, we use the empty template.\n this.updateRibbonTemplate();\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n\n public ngOnInit(): void {\n this.tabViewService.onUpdateRibbonTemplate\n .pipe(takeUntil(this.destroy$))\n .subscribe((template: TemplateRef<any> | undefined) => {\n this.ribbonViewTemplate[this.tabViewService.activeView] = template;\n this.updateRibbonTemplate(template);\n });\n\n this.tabViewService.onViewChanged\n .pipe(takeUntil(this.destroy$))\n .subscribe((viewId: string) => {\n this.updateRibbonTemplate(this.ribbonViewTemplate[viewId]); \n });\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n private updateRibbonTemplate(template: TemplateRef<any> | undefined = undefined): void {\n const isRealTemplate: boolean = !!template;\n\n if (!template) {\n template = this.emptyRibbonTemplate;\n }\n\n this.ribbonTemplate = template!;\n\n if (isRealTemplate) {\n // Real template from a child view — render immediately so buttons appear\n // without waiting for the next change detection cycle (user interaction).\n this.changeDetectorRef.detectChanges();\n } else {\n // Empty/fallback template — defer rendering to avoid briefly flashing\n // an empty ribbon during component creation (the child view will push\n // the real template moments later in the same initialization cycle).\n this.changeDetectorRef.markForCheck();\n }\n }\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate\"></ng-container>\n\n <ng-template #emptyRibbon>\n </ng-template>\n</lib-ribbon>\n\n<router-outlet>\n</router-outlet>","import { NgTemplateOutlet } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterModule } from '@angular/router';\nimport { DataProviderService, GroupContainerComponent, RibbonComponent, RibbonGroupComponent } from '@zambon-dev/library';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs';\nimport { RouteHelper } from '../../../helpers';\nimport { ITab } from '../../../models';\nimport { TabService, TabViewService } from '../../../services';\nimport { ButtonViewsComponent } from '../../buttons';\nimport { ErrorModalComponent } from '../../modals/error-modal/error-modal.component';\nimport { DefaultTabViewComponent } from '../default-tab-view/default-tab-view.component';\n\nfunction dataProviderFactory(route: ActivatedRoute): DataProviderService<any> {\n return <DataProviderService<any>>route.snapshot.data['dataProvider']();\n}\n\n@Component({\n selector: 'framework-default-details-tab-view',\n templateUrl: './default-details-tab-view.component.html',\n styleUrls: ['./default-details-tab-view.component.scss'],\n imports: [\n ButtonViewsComponent,\n ErrorModalComponent,\n GroupContainerComponent,\n NgTemplateOutlet,\n RibbonComponent,\n RibbonGroupComponent,\n RouterModule,\n TranslatePipe,\n ],\n providers: [\n { provide: TabViewService },\n { provide: DataProviderService, useFactory: dataProviderFactory, deps: [ActivatedRoute] },\n ]\n})\nexport class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements AfterViewInit, OnDestroy, OnInit {\n //#region ViewChilds, Inputs, Outputs\n @ViewChild(ErrorModalComponent) private errorModal!: ErrorModalComponent;\n //#endregion\n\n //#region Variables\n protected containerIcon?: string;\n protected containerTitle?: string;\n protected dataProviderClassName?: any;\n protected detailsViewRoute: ActivatedRouteSnapshot | null = null;\n\n private dataProviderService: DataProviderService<any> | null = inject(DataProviderService, { optional: true });\n private hasEntityID: boolean | null = null;\n private hasLoadError: boolean = false;\n private router: Router = inject(Router);\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get componentName(): string {\n return DefaultDetailsTabViewComponent.name;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n const changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n const tabViewService: TabViewService = inject(TabViewService);\n super(changeDetectorRef, tabViewService);\n\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.detailsViewRoute = RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent);\n this.hasEntityID = this.dataProviderService?.hasEntityID ?? null;\n\n this.dataProviderService?.getModel$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((model: any) => {\n if (this.hasEntityID !== this.dataProviderService!.hasEntityID || !this.detailsViewRoute) {\n // If the entity ID changes, we need update the detailsViewRoute to get the correct route URL later.\n this.hasEntityID = this.dataProviderService!.hasEntityID;\n this.detailsViewRoute = RouteHelper.getRouteWithComponent(this.router.routerState.root.snapshot, DefaultDetailsTabViewComponent);\n }\n\n if (!!this.detailsViewRoute) {\n let title: string = this.detailsViewRoute.data['defaultTitle'];\n if (this.dataProviderService!.hasEntityID) {\n title = this.dataProviderService!.getTitle(model);\n }\n\n this.containerIcon = '';\n this.containerTitle = title;\n\n const url: string = RouteHelper.getRouteURL(this.detailsViewRoute);\n this.tabService.updateTabTitle(url, title);\n }\n });\n\n this.dataProviderService?.getError$()\n .pipe(takeUntil(this.destroy$))\n .subscribe((error: HttpErrorResponse) => {\n this.hasLoadError = true;\n\n if (error.status === 404) {\n this.errorModal.title = 'Modal-NotFound-Title';\n this.errorModal.subtitle = '';\n this.errorModal.showModal('Modal-NotFound-Message');\n } else {\n this.errorModal.title = 'Modal-Failed-Title';\n this.errorModal.subtitle = 'Modal-Failed-Administrator';\n this.errorModal.showModal(error);\n }\n });\n }\n //#endregion\n\n //#region Event handlers\n protected onErrorModalClosed(): void {\n if (!this.hasLoadError) {\n return;\n }\n\n const history: ITab[] = this.tabService.activeTabHistory;\n const entityBaseUrl: string | undefined = history[history.length - 1]?.entityBaseUrl;\n\n // Find the entry before the invalid entity in the tab history.\n if (entityBaseUrl && history.length > 1) {\n const entityIndex: number = history.findIndex((entry: ITab) => entry.entityBaseUrl === entityBaseUrl);\n if (entityIndex > 0) {\n this.tabService.navigateCurrentTabBack(history[entityIndex - 1]);\n return;\n }\n }\n\n this.tabService.closeActiveTab();\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<lib-ribbon>\n <ng-container *ngTemplateOutlet=\"ribbonTemplate\"></ng-container>\n\n <ng-template #emptyRibbon>\n </ng-template>\n\n <div right>\n <lib-ribbon-group [label]=\"'RibbonGroup-Page' | translate\">\n <framework-button-views [detailsViewRoute]=\"detailsViewRoute\">\n </framework-button-views>\n </lib-ribbon-group>\n </div>\n</lib-ribbon>\n\n<lib-group-container\n[icon]=\"containerIcon\"\n[title]=\"containerTitle\">\n <router-outlet>\n </router-outlet>\n</lib-group-container>\n\n<framework-error-modal (closed)=\"onErrorModalClosed()\"></framework-error-modal>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ITab } from '../../../models';\nimport { TabService } from '../../../services';\n\n@Component({\n selector: 'framework-tab-breadcrumbs',\n templateUrl: './tab-breadcrumbs.component.html',\n styleUrls: ['./tab-breadcrumbs.component.scss'],\n imports: [\n NgFor,\n NgIf,\n TranslatePipe,\n ]\n})\nexport class TabBreadcrumbsComponent {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n private tabService: TabService = inject(TabService);\n //#endregion\n\n //#region Properties\n protected get tabHistory(): ITab[] {\n return this.tabService.activeTabHistory;\n }\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n //#endregion\n\n //#region Event handlers\n protected onTitleClick(tab: ITab): void {\n this.tabService.navigateCurrentTabBack(tab);\n }\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion\n}","<i class=\"fa-solid fa-angles-right\"></i>\n\n<a *ngFor=\"let history of tabHistory\" (click)=\"onTitleClick(history)\">\n <span *ngIf=\"!history.isTitleLoading\">{{ (history.title ?? '') | translate }}</span>\n\n <svg *ngIf=\"history.isTitleLoading\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n</a>","import { NgFor, NgIf } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RouteHelper } from '../../../helpers';\nimport { FRAMEWORK_VIEW_TYPE, FrameworkViewType, ITab, Tab } from '../../../models';\nimport { ITabHistory } from '../../../models/tab-history';\nimport { TabService } from '../../../services/tab.service';\nimport { TabBreadcrumbsComponent } from '../tab-breadcrumbs/tab-breadcrumbs.component';\n\n@Component({\n selector: 'framework-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n imports: [\n NgFor,\n NgIf,\n TabBreadcrumbsComponent,\n TranslatePipe,\n ]\n})\nexport class TabsComponent implements OnInit {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Host listeners\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n protected get activeHistory(): ITabHistory[] | null {\n return null; // this.tabService.activeHistory;\n }\n\n protected get activeTab(): string | null {\n return null; // this.tabService.activeTab;\n }\n\n protected get hasTabs(): boolean {\n return this.tabService.activeTabs.length > 0;\n }\n\n protected get openTabs(): ITab[] {\n return this.tabService.activeTabs ?? [];\n }\n\n protected get tabDisplayTitles(): (string | undefined)[] {\n return this.tabService.activeTabsDisplayTitles;\n }\n\n protected get tabLoadingStates(): boolean[] {\n return this.tabService.activeTabsLoadingStates;\n }\n\n protected trackByFn: (index: number, tab: ITab) => string = (_: number, tab: ITab): string => tab.url;\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor(\n private router: Router,\n private tabService: TabService,\n ) {\n\n }\n\n public ngOnInit(): void {\n const activatedDetailsTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.snapshot.root, FRAMEWORK_VIEW_TYPE, FrameworkViewType.Details);\n if (activatedDetailsTabView) {\n const shouldIgnoreFirstChildRoute: boolean = !!activatedDetailsTabView.firstChild && activatedDetailsTabView.firstChild.data && activatedDetailsTabView.firstChild.data['ignoreRoute'] === true;\n\n const url: string = RouteHelper.getRouteURL(activatedDetailsTabView);\n const clones: string[] = [];\n\n if (shouldIgnoreFirstChildRoute) {\n clones.push(RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!));\n\n } else if (!!activatedDetailsTabView.firstChild) {\n const childPath: string = activatedDetailsTabView.firstChild.url.map((s: any) => s.path).join('/');\n const defaultChildPath: string = activatedDetailsTabView.routeConfig?.children\n ?.filter((route: Route) => !!route.data && route.data['ignoreRoute'] !== true)\n ?.[0]?.path ?? '';\n\n if (childPath !== defaultChildPath) {\n const entityID: number = Number(activatedDetailsTabView.paramMap.get('id'));\n if (!entityID) {\n // New entity: inner views are not available, redirect to base URL.\n this.router.navigate([url], { replaceUrl: true });\n } else {\n // Non-default child route (e.g. direct navigation to /audit): add sub-view to history for breadcrumbs.\n const childTitle: string = activatedDetailsTabView.firstChild?.data?.['title'] ?? '';\n queueMicrotask(() => {\n const childUrl: string = RouteHelper.getRouteURL(activatedDetailsTabView.firstChild!);\n this.tabService.replaceCurrentTabSubView(url, new Tab({\n title: childTitle,\n url: childUrl,\n }));\n });\n }\n }\n }\n\n this.tabService.openTab(new Tab({\n clones: clones,\n entityBaseUrl: url,\n queryParams: activatedDetailsTabView.queryParams,\n url: url,\n }));\n\n } else {\n const activatedTabView: ActivatedRouteSnapshot | null = RouteHelper.getRouteByData(this.router.routerState.snapshot.root, FRAMEWORK_VIEW_TYPE, FrameworkViewType.List);\n if (activatedTabView) {\n const url: string = RouteHelper.getRouteURL(activatedTabView);\n this.tabService.openTab(new Tab({\n queryParams: activatedTabView.queryParams,\n url: url,\n }));\n } else {\n this.router.navigate(['/']);\n }\n }\n }\n //#endregion\n\n //#region Event handlers\n protected onActivateTab(tab: ITab): void {\n this.tabService.activateTab(tab);\n }\n\n protected onCloseTab(index: number): void {\n this.tabService.closeTab(index);\n }\n //#endregion\n\n //#region Public methods\n protected isTabActive(tab: ITab): boolean {\n return this.tabService.isTabActive(tab);\n }\n //#endregion\n\n //#region Private methods\n //#endregion\n}\n","<div class=\"tabs-container\" *ngIf=\"hasTabs\">\n <ul class=\"tabs-nav\">\n <li *ngFor=\"let tab of openTabs; let i = index; trackBy: trackByFn\"\n [class.active]=\"isTabActive(tab)\">\n <a class=\"tab-item\" (click)=\"onActivateTab(tab)\">\n <span *ngIf=\"!tabLoadingStates[i]\">{{ (tabDisplayTitles[i] ?? tab.title ?? '') | translate }}</span>\n\n <svg *ngIf=\"tabLoadingStates[i]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n </a>\n\n <a class=\"tab-close\" (click)=\"onCloseTab(i)\">\n <i class=\"fas fa-times\"></i>\n </a>\n </li>\n </ul>\n</div>\n\n<div class=\"tab-content\" *ngIf=\"hasTabs\">\n <framework-tab-breadcrumbs></framework-tab-breadcrumbs>\n \n <ng-content></ng-content>\n</div>","import { NgModule } from '@angular/core';\nimport { DefaultDetailsTabViewComponent } from './default-details-tab-view/default-details-tab-view.component';\nimport { DefaultTabViewComponent } from './default-tab-view/default-tab-view.component';\nimport { TabBreadcrumbsComponent } from './tab-breadcrumbs/tab-breadcrumbs.component';\nimport { TabsComponent } from './tabs/tabs.component';\n\n\n@NgModule({\n declarations: [],\n imports: [\n DefaultDetailsTabViewComponent,\n DefaultTabViewComponent,\n TabBreadcrumbsComponent,\n TabsComponent,\n ],\n exports: [\n DefaultDetailsTabViewComponent,\n DefaultTabViewComponent,\n TabsComponent,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkViewsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkViewsModule { }","import { NgModule } from '@angular/core';\nimport { FrameworkButtonsModule } from './buttons/buttons.module';\nimport { FrameworkModalsModule } from './modals/modals.module';\nimport { FrameworkViewsModule } from './views/views.module';\n\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [\n FrameworkButtonsModule,\n FrameworkModalsModule,\n FrameworkViewsModule,\n ]\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkComponentsModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkComponentsModule { }","import { InjectionToken } from '@angular/core';\n\nexport const APP_CONFIG: InjectionToken<AppConfig> = new InjectionToken<AppConfig>('Manually constructed AppConfig', {\n providedIn: 'root',\n factory: () => new AppConfig(''),\n});\n\nexport class AppConfig {\n public BASE_URL: string;\n\n constructor(baseUrl: string) {\n this.BASE_URL = baseUrl;\n }\n}","import { Injectable } from '@angular/core';\nimport { DataGridConfigs, DataGridConfigsProvider } from '@zambon-dev/library';\n\n@Injectable()\nexport class FrameworkGridConfigsProvider extends DataGridConfigsProvider {\n //#region ViewChilds, Inputs, Outputs\n //#endregion\n\n //#region Variables\n //#endregion\n\n //#region Properties\n //#endregion\n\n //#region Constructor and Angular life cycle methods\n constructor() {\n super();\n\n Object.assign(this.configs, {\n loadingDisplayText: 'Grid-Loading',\n messageOnEmpty: 'Grid-Message-Empty',\n messageOnFailed: 'Grid-Message-Failed',\n messageOnLazyLoad: 'Grid-Message-LazyLoad',\n } as DataGridConfigs);\n }\n //#endregion\n\n //#region Event handlers\n //#endregion\n\n //#region Public methods\n //#endregion\n\n //#region Private methods\n //#endregion \n}","import { NgModule } from '@angular/core';\nimport { FrameworkComponentsModule } from './components';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [\n FrameworkComponentsModule,\n ],\n})\n/**\n * @deprecated Use standalone component imports instead of FrameworkModule.\n * Import individual components directly in your component's `imports` array.\n */\nexport class FrameworkModule {}","import { HttpBackend } from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\nimport { provideTranslateService, TranslateLoader } from '@ngx-translate/core';\nimport { MultiTranslateHttpLoader, TranslationResource } from 'ngx-translate-multi-http-loader';\n\nexport interface AngularAssetPattern {\n glob: string;\n input: string;\n output: string;\n}\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = 'assets/i18n/zambon-dev/framework';\n\nexport const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern = {\n glob: '**/*.json',\n input: 'node_modules/@zambon-dev/framework/i18n',\n output: ZAMBON_FRAMEWORK_I18N_ASSET_PATH,\n};\n\nexport const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[] = [\n { prefix: `/${ZAMBON_FRAMEWORK_I18N_ASSET_PATH}/`, suffix: '.json' },\n];\n\nexport interface ZambonFrameworkTranslateConfig {\n defaultLanguage?: string;\n appResources?: (string | TranslationResource)[];\n}\n\nexport function createZambonFrameworkTranslateLoader(\n httpBackend: HttpBackend,\n appResources: (string | TranslationResource)[] = [],\n): MultiTranslateHttpLoader {\n return new MultiTranslateHttpLoader(httpBackend, [\n ...ZAMBON_FRAMEWORK_I18N_RESOURCES,\n ...appResources,\n ]);\n}\n\nexport function provideZambonFrameworkTranslateLoader(\n appResources: (string | TranslationResource)[] = [],\n): Provider {\n return {\n provide: TranslateLoader,\n useFactory: (httpBackend: HttpBackend) => createZambonFrameworkTranslateLoader(httpBackend, appResources),\n deps: [HttpBackend],\n };\n}\n\nexport function provideZambonFrameworkTranslateService(\n config: ZambonFrameworkTranslateConfig = {},\n): EnvironmentProviders {\n return provideTranslateService({\n defaultLanguage: config.defaultLanguage,\n loader: provideZambonFrameworkTranslateLoader(config.appResources),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i2.TabService","i3","i3.TabService","i1.TabViewService"],"mappings":"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"}