@techextensor/tab-sdk 0.0.41 → 0.0.43

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.
Files changed (35) hide show
  1. package/README.md +24 -24
  2. package/fesm2022/techextensor-tab-sdk.mjs +770 -48
  3. package/fesm2022/techextensor-tab-sdk.mjs.map +1 -1
  4. package/lib/interface/state.interface.d.ts +151 -0
  5. package/lib/model/component-state.model.d.ts +63 -0
  6. package/lib/model/query-state.model.d.ts +37 -0
  7. package/lib/model/screen-state.model.d.ts +56 -0
  8. package/lib/model/script-state.model.d.ts +21 -0
  9. package/lib/state/state.service.d.ts +101 -0
  10. package/lib/tab-sdk.service.d.ts +4 -0
  11. package/lib/ui/ui.service.d.ts +5 -5
  12. package/lib/workflow/workflow.service.d.ts +8 -0
  13. package/package.json +2 -4
  14. package/public-api.d.ts +1 -0
  15. package/esm2022/lib/app/analytics.service.mjs +0 -51
  16. package/esm2022/lib/app/app.service.mjs +0 -175
  17. package/esm2022/lib/app/file.service.mjs +0 -84
  18. package/esm2022/lib/app/release.service.mjs +0 -38
  19. package/esm2022/lib/app/report.service.mjs +0 -48
  20. package/esm2022/lib/app/translator.service.mjs +0 -77
  21. package/esm2022/lib/auth/auth.service.mjs +0 -95
  22. package/esm2022/lib/crud/crud.service.mjs +0 -191
  23. package/esm2022/lib/enum/store.enum.mjs +0 -6
  24. package/esm2022/lib/enum/ui.enum.mjs +0 -13
  25. package/esm2022/lib/http/http.service.mjs +0 -58
  26. package/esm2022/lib/interface/http.interface.mjs +0 -2
  27. package/esm2022/lib/interface/ui.interface.mjs +0 -2
  28. package/esm2022/lib/store/store.service.mjs +0 -829
  29. package/esm2022/lib/tab-sdk.service.mjs +0 -84
  30. package/esm2022/lib/ui/form.service.mjs +0 -79
  31. package/esm2022/lib/ui/ui.service.mjs +0 -344
  32. package/esm2022/lib/util/util.service.mjs +0 -54
  33. package/esm2022/lib/workflow/transition.service.mjs +0 -40
  34. package/esm2022/public-api.mjs +0 -9
  35. package/esm2022/techextensor-tab-sdk.mjs +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"techextensor-tab-sdk.mjs","sources":["../../../projects/tab-sdk/src/lib/enum/ui.enum.ts","../../../projects/tab-sdk/src/lib/ui/ui.service.ts","../../../projects/tab-sdk/src/lib/auth/auth.service.ts","../../../projects/tab-sdk/src/lib/ui/form.service.ts","../../../projects/tab-sdk/src/lib/workflow/transition.service.ts","../../../projects/tab-sdk/src/lib/app/app.service.ts","../../../projects/tab-sdk/src/lib/app/file.service.ts","../../../projects/tab-sdk/src/lib/app/report.service.ts","../../../projects/tab-sdk/src/lib/app/release.service.ts","../../../projects/tab-sdk/src/lib/app/analytics.service.ts","../../../projects/tab-sdk/src/lib/app/translator.service.ts","../../../projects/tab-sdk/src/lib/crud/crud.service.ts","../../../projects/tab-sdk/src/lib/http/http.service.ts","../../../projects/tab-sdk/src/lib/enum/store.enum.ts","../../../projects/tab-sdk/src/lib/store/store.service.ts","../../../projects/tab-sdk/src/lib/util/util.service.ts","../../../projects/tab-sdk/src/lib/tab-sdk.service.ts","../../../projects/tab-sdk/src/public-api.ts","../../../projects/tab-sdk/src/techextensor-tab-sdk.ts"],"sourcesContent":["export enum ScreenDisplayMode {\n Sidebar = 'sidebar',\n Popup = 'popup',\n SameTab = 'sameTab',\n NewTab = 'newTab',\n}\n\nexport enum NavigationType {\n NavigateToUrl = 'navigateToUrl',\n NavigateToSubdomain = 'navigateToSubdomain'\n}","import { inject, Injectable } from '@angular/core';\nimport {\n ScreenOpenOptions,\n NavigationOptions,\n BaseScreenOptions,\n NavigateToSubdomainOptions\n} from '../interface/ui.interface';\nimport { NavigationType, ScreenDisplayMode } from '../enum/ui.enum';\nimport { TabSdk } from '../tab-sdk.service';\nimport { BaseNotificationOptions, ConfirmationOptions, ConfirmationService, NotificationOptions, NotificationService, NotificationType } from '@techextensor/tab-core-utility';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UiService {\n private readonly _notificationService: NotificationService = inject(NotificationService);\n private readonly _confirmationService: ConfirmationService = inject(ConfirmationService);\n\n /**\n * Open a screen with the given options. The mode determines how the screen is\n * displayed.\n *\n * @param options The options for opening the screen.\n */\n openScreen(options: ScreenOpenOptions): void {\n const { mode, ...otherOptions } = options;\n\n switch (mode) {\n case ScreenDisplayMode.Sidebar:\n this.showSidebar(otherOptions);\n break;\n\n case ScreenDisplayMode.Popup:\n this.showDialog(otherOptions);\n break;\n\n case ScreenDisplayMode.SameTab:\n this.navigateTo(otherOptions);\n break;\n\n case ScreenDisplayMode.NewTab:\n this.openInNewTab(otherOptions);\n break;\n }\n }\n\n /**\n * Opens a screen in a sidebar.\n *\n * @param options The options for opening the sidebar.\n */\n showSidebar(options: BaseScreenOptions): void {\n const otherConfiguration = {\n ...(options.title && { title: options.title }),\n ...(options.width && { width: options.width }),\n ...(options.height && { height: options.height }),\n ...(options.customClass && { customClass: options.customClass }),\n ...(options.refresher && { refresher: options.refresher }),\n ...(options.closer && { closer: options.closer })\n };\n\n TabSdk.util?.openScreen(\n ScreenDisplayMode.Sidebar,\n options.screenId,\n options.reqtokens || undefined,\n options.submission || undefined,\n Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined\n );\n }\n\n /**\n * Opens a screen in a popup dialog.\n *\n * @param options The options for opening the dialog.\n */\n showDialog(options: BaseScreenOptions): void {\n const otherConfiguration = {\n ...(options.title && { title: options.title }),\n ...(options.width && { width: options.width }),\n ...(options.height && { height: options.height }),\n ...(options.customClass && { customClass: options.customClass }),\n ...(options.refresher && { refresher: options.refresher }),\n ...(options.closer && { closer: options.closer })\n };\n\n TabSdk.util?.openScreen(\n ScreenDisplayMode.Popup,\n options.screenId,\n options.reqtokens || undefined,\n options.submission || undefined,\n Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined\n );\n }\n\n /**\n * Navigates to a screen within the same tab.\n *\n * @param options - The options for navigation, including screenId and optional reqtokens.\n */\n navigateTo(options: NavigationOptions): void {\n TabSdk.util?.openScreen(\n ScreenDisplayMode.SameTab,\n options.screenId,\n options.reqtokens || undefined\n );\n }\n\n /**\n * Navigates to a screen in a new tab.\n *\n * @param options The options for navigation, including screenId and optional reqtokens.\n */\n openInNewTab(options: NavigationOptions): void {\n TabSdk.util?.openScreen(\n ScreenDisplayMode.NewTab,\n options.screenId,\n options.reqtokens || undefined\n );\n }\n\n /**\n * Navigates to the specified URL.\n *\n * @param url - The URL to navigate to.\n */\n navigateToUrl(params: { url: string, extras?: any, replaceUrl?: boolean }): void {\n TabSdk.util?.navigateTo({\n ...params,\n type: NavigationType.NavigateToUrl\n })\n }\n\n /**\n * Navigates to a specified subdomain using the provided options.\n *\n * @param options - The options for navigation, including subDomain, appCode, and url.\n */\n navigateToSubdomain(options: NavigateToSubdomainOptions): void {\n TabSdk.util?.navigateTo({\n ...options,\n type: NavigationType.NavigateToSubdomain\n })\n }\n\n /**\n * Retrieves the active screen ID from the current URL.\n *\n * @returns The screen ID if present in the URL, otherwise undefined.\n */\n getActiveUrlScreenId(): string | undefined {\n // Split the URL pathname into parts using the '/' character as a delimiter\n const urlParts = window?.location?.pathname?.split('/');\n // Extract the screen ID part and remove any query parameters\n const screenId = urlParts?.length > 1 ? urlParts?.[urlParts?.length - 1]?.split('?')[0] : undefined;\n // Return the screen ID or undefined if not found\n return screenId;\n }\n\n /**\n * Retrieves the active redirect URL by combining the active screen ID and any query parameters.\n *\n * @returns The constructed redirect URL or undefined if no screen ID is present.\n */\n getActiveRedirectUrl(): string | undefined {\n // Get the active screen ID from the current URL\n const screenId = this.getActiveUrlScreenId();\n let redirectURL;\n\n // Check if the current URL contains a screen ID\n if (screenId) {\n // Initialize the redirect URL with the screen ID\n redirectURL = screenId;\n\n // Parse the current URL's query parameters\n const queryParams = new URLSearchParams(window.location.search);\n\n // If there are query parameters, append them to the redirect URL\n if (queryParams.toString()) {\n redirectURL += `&${queryParams.toString()}`;\n }\n }\n\n // Return the constructed redirect URL or undefined\n return redirectURL;\n }\n\n /**\n * Show a notification to the user.\n *\n * @param options The options for the notification.\n */\n notify(options: NotificationOptions) {\n return this._notificationService.notify({\n type: options.type,\n message: TabSdk.translator.translate(options.message),\n ...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),\n ...(options?.configuration ? { configuration: options.configuration } : {}),\n });\n }\n\n /**\n * Displays a success notification to the user.\n *\n * @param options - The options for the notification, including message, title, and configuration.\n */\n showSuccess(options: BaseNotificationOptions) {\n return this.notify({\n ...options,\n type: NotificationType.Success,\n title: options?.title ?? 'Success'\n });\n }\n\n /**\n * Displays a warning notification to the user.\n *\n * @param options - The options for the notification, including message, title, and configuration.\n */\n showWarning(options: BaseNotificationOptions) {\n return this.notify({\n ...options,\n type: NotificationType.Warning,\n title: options?.title ?? 'Warning'\n });\n }\n\n /**\n * Displays an info notification to the user.\n *\n * @param options - The options for the notification, including message, title, and configuration.\n */\n showInfo(options: BaseNotificationOptions) {\n return this.notify({\n ...options,\n type: NotificationType.Info,\n title: options?.title ?? 'Info'\n });\n }\n\n /**\n * Displays an error notification to the user.\n *\n * @param options - The options for the notification, including message, title, and configuration.\n */\n showError(options: BaseNotificationOptions) {\n return this.notify({\n ...options,\n type: NotificationType.Error,\n title: options?.title ?? 'Error'\n });\n }\n\n /**\n * Clears a notification by ID.\n *\n * @param notificationId - The ID of the notification to clear.\n * @returns The cleared notification, or null if the notification doesn't exist.\n */\n clearNotification(notificationId: number) {\n return this._notificationService.clearNotification(notificationId);\n }\n\n /**\n * Displays a confirmation dialog to the user and returns a promise that resolves\n * to a boolean indicating whether the user confirmed the action.\n *\n * @param options - The options for the confirmation dialog, including title, message,\n * confirmText, cancelText, and visibility of buttons.\n * @returns A promise that resolves to true if the user confirms, false otherwise.\n */\n confirm(options?: ConfirmationOptions): Promise<boolean> {\n return new Promise((resolve) => {\n this._confirmationService.confirm(options)\n ?.subscribe((isConfirmed: boolean) => {\n resolve(isConfirmed);\n });\n });\n }\n\n /**\n * Displays a confirmation dialog to the user with a title and message that indicates\n * the user is about to delete an item. The confirmation dialog has a \"Delete\" and \"Cancel\"\n * button.\n *\n * @param options - The options for the confirmation dialog, including the item name and\n * optional message.\n * @returns A promise that resolves to true if the user confirms, false otherwise.\n */\n confirmDelete(options?: ConfirmationOptions): Promise<boolean> {\n return this.confirm({\n title: options?.title ?? `Are you sure you want to delete this record`,\n message: options?.message ?? `You are about to delete the selected record. Are you sure you want to proceed?`,\n primaryOption: 'Delete',\n });\n }\n\n /**\n * Displays a confirmation dialog to the user with a title and message that indicates\n * the user is about to discard changes to an item. The confirmation dialog has a \"Discard\"\n * and \"Cancel\" button.\n *\n * @param options - The options for the confirmation dialog, including the item name and\n * optional message.\n * @returns A promise that resolves to true if the user confirms, false otherwise.\n */\n confirmDiscard(options?: ConfirmationOptions): Promise<boolean> {\n return this.confirm({\n title: `Are you sure you want to discard your changes`,\n message: options?.message ?? `You are about to discard your changes. Are you sure you want to proceed?`,\n primaryOption: 'Discard',\n });\n }\n\n /**\n * Closes the confirmation dialog.\n *\n * This method can be used to manually close the confirmation dialog.\n */\n closeConfirmationDialog() {\n // Close the confirmation dialog\n this._confirmationService.closeDialog();\n }\n\n /**\n * Retrieves the confirmation emitter from the confirmation service.\n * \n * @returns The confirmation emitter used for emitting confirmation events.\n */\n getConformationEmitter() {\n return this._confirmationService.getConformationEmitter();\n }\n\n /**\n * Retrieves the dialog emitter from the confirmation service.\n *\n * The dialog emitter is an RxJS Subject that emits whenever a confirmation dialog is\n * opened or closed. The value emitted is a boolean indicating whether a dialog is\n * currently open.\n *\n * @returns The dialog emitter used for emitting confirmation dialog events.\n */\n getDialogEmitter() {\n return this._confirmationService.getDialogEmitter();\n }\n\n /**\n * Retrieves the remove emitter from the confirmation service.\n * \n * The remove emitter is an RxJS Subject that emits whenever a removal confirmation\n * dialog is opened or closed. The value emitted is a boolean indicating whether a\n * removal dialog is currently open.\n * \n * @returns The remove emitter used for emitting removal confirmation dialog events.\n */\n getRemoveEmitter() {\n return this._confirmationService.getRemoveEmitter();\n }\n\n /**\n * Copies the provided text to the clipboard and displays a success notification.\n *\n * @param text - The text to be copied to the clipboard.\n */\n copyToClipboard(text: string) {\n // Create a temporary input element to hold the text\n const tempInput = document.createElement(\"input\");\n\n // Set the input's value to the text to be copied\n tempInput.value = text;\n\n // Append the temporary input to the document body\n document.body.appendChild(tempInput);\n\n // Select the text in the input element\n tempInput.select();\n\n // Execute the copy command\n document.execCommand(\"copy\");\n\n // Remove the temporary input from the document body\n document.body.removeChild(tempInput);\n\n // Show a success notification\n this.showSuccess({\n message: \"\",\n title: \"Copied to clipboard!\",\n configuration: {\n timeOut: 1000,\n positionClass: 'toast-top-center',\n easing: 'ease-in',\n easeTime: 300,\n extendedTimeOut: 2000,\n }\n });\n }\n\n /**\n * Copies the current URL to the clipboard and displays a success notification.\n */\n copyCurrentUrlToClipboard() {\n // Use the copyToClipboard method to copy the current window URL\n this.copyToClipboard(window.location.href);\n }\n}","import { inject, Injectable } from '@angular/core';\nimport {\n LoginUserRequest,\n AuthService,\n CommonApiResponse,\n RegisterTenant,\n ResetPasswordUserRequest,\n RefreshTokenRequest,\n UserDetailsRequest,\n ChangePasswordUserRequest\n} from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthUtilService {\n private readonly _authService: AuthService = inject(AuthService);\n\n /**\n * Authenticates a user based on the provided login credentials.\n * \n * @param credentials The login credentials.\n * @returns The response from the server.\n */\n async login(credentials: LoginUserRequest): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.signIn(credentials)\n );\n return response;\n }\n\n /**\n * Registers a new tenant based on the provided details.\n * \n * @param tenantDetails The tenant details.\n * @returns The response from the server.\n */\n async registerTenant(tenantDetails: RegisterTenant): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.registerTenant(tenantDetails)\n );\n return response;\n }\n\n /**\n * Registers a new user based on the provided user details.\n * \n * @param userDetails The user details.\n * @param headers Optional headers to pass to the server.\n * @returns The response from the server.\n */\n async registerUser(userDetails: any, headers?: Record<string, string>): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.register(userDetails, headers)\n );\n return response;\n }\n\n /**\n * Resets a user's password based on the provided reset password credentials.\n * \n * @param credentials The reset password credentials.\n * @returns The response from the server.\n */\n async resetPassword(credentials: ResetPasswordUserRequest): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.resetPassword(credentials)\n );\n return response;\n }\n\n /**\n * Changes a user's password based on the provided credentials.\n * \n * @param credentials The credentials containing the user's current and new password.\n * @returns The response from the server.\n */\n async changePassword(credentials: ChangePasswordUserRequest): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.changePassword(credentials)\n );\n return response;\n }\n\n /**\n * Refreshes a user's token based on the provided refresh token details.\n * \n * @param tokenDetails The refresh token details.\n * @returns The response from the server.\n */\n async refreshToken(tokenDetails: RefreshTokenRequest): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.refreshToken(tokenDetails)\n );\n return response;\n }\n\n /**\n * Gets the user details for the provided user details request.\n * \n * @param userDetailsRequest The user details request.\n * @param headers Optional headers to pass to the server.\n * @returns The response from the server.\n */\n async getUserDetails(userDetailsRequest: UserDetailsRequest, headers?: Record<string, string>): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._authService.getUserDetails(userDetailsRequest, headers)\n );\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { BuildFormComponentType, CommonApiResponse, GetScreenConfig, ProcessRequestPayload, TabFormioService, TemplateHelper, TemplateParsePayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormService {\n private readonly _tabFormioService: TabFormioService = inject(TabFormioService);\n private readonly _templateHelper: TemplateHelper = inject(TemplateHelper);\n\n /**\n * Retrieves a screen by its ID.\n *\n * @param screenId The ID of the screen to retrieve.\n * @param config Optional configuration object for the request.\n * @returns A promise of the response from the server.\n */\n async getScreen(screenId: string, config?: GetScreenConfig): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n this._tabFormioService.getScreen(screenId, config)\n );\n return response;\n }\n\n /**\n * Retrieves the data for a screen by its ID.\n *\n * @param screenId The ID of the screen to retrieve the data for.\n * @param requestPayload The request payload to send to the server.\n * @returns A promise of the response from the server.\n */\n async getScreenData(screenId: string, requestPayload: any): Promise<CommonApiResponse> {\n // Send the request to the server and get the response.\n const response = await firstValueFrom(\n this._tabFormioService.getScreenData(screenId, requestPayload)\n );\n\n // Return the response from the server.\n return response;\n }\n\n /**\n * Processes a request using the provided request payload.\n *\n * @param requestPayload The payload to be processed.\n * @returns A promise of the response from the server.\n */\n async processRequest(requestPayload: ProcessRequestPayload): Promise<CommonApiResponse> {\n // Send the request payload to the server and await the response.\n const response = await firstValueFrom(\n this._tabFormioService.processRequest(requestPayload)\n );\n\n // Return the server's response.\n return response;\n }\n\n /**\n * Builds Form.io components for the specified app object ID and type.\n *\n * @param appObjectId The ID of the app object to build the components for.\n * @param type The type of components to build.\n * @returns A promise of the response from the server.\n */\n async buildFormIOComponents(appObjectId: string, type: BuildFormComponentType): Promise<CommonApiResponse> {\n // Send the request to the server to build the components.\n const response = await firstValueFrom(\n this._tabFormioService.buildFormIOComponents(appObjectId, type)\n );\n\n // Return the response from the server.\n return response;\n }\n\n /**\n * Parses a template using the provided request payload.\n *\n * @param requestPayload The payload containing the template to be parsed.\n * @param onFailedParseOnServer If the parsing should be done on the server.\n * @returns A promise of the response from the server.\n */\n async parseTemplate(requestPayload: TemplateParsePayload, onFailedParseOnServer = false): Promise<CommonApiResponse> {\n // Send the request to the server to parse the template.\n const response = await firstValueFrom(\n this._templateHelper.templateParseUniversal(requestPayload, onFailedParseOnServer)\n );\n\n // Return the response from the server.\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { CommonApiResponse, NextStatusPayload, TabBlueprintService, UpdateStatusPayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\nimport { TabSdk } from '../tab-sdk.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TransitionService {\n private readonly _tabBlueprintService: TabBlueprintService = inject(TabBlueprintService);\n\n /**\n * Retrieves the next status based on the provided payload.\n *\n * @param payload - The payload containing information to determine the next status.\n * @returns A promise that resolves to the common API response.\n */\n async getNextStatus(payload: NextStatusPayload): Promise<CommonApiResponse> {\n // Await the response from the getNextStatus method of the tabBlueprintService\n const response = await firstValueFrom(\n this._tabBlueprintService.getNextStatus(payload)\n );\n // Return the obtained response\n return response;\n }\n\n /**\n * Updates the status of an entity based on the provided payload.\n *\n * @param payload - The payload containing information to update the status.\n * @returns A promise that resolves to the common API response.\n */\n async updateStatus(payload: UpdateStatusPayload): Promise<any> {\n const response = await firstValueFrom(\n TabSdk.util?.updateStatus(payload)\n );\n // Return the obtained response\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { AppHelper, CloneDsqPayload, CommonApiResponse, GetDataJsonByTypePayload, RefreshGlobalSearchDataPayload, RefreshRecordInfoDataPayload, RegisterAppObjectsPayload, SyncAppFieldsPayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n private _appHelper: AppHelper = inject(AppHelper);\n\n /**\n * Rebuilds the current app.\n * \n * @returns A promise that resolves to a common API response.\n */\n async rebuild(payload: any = {}, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.rebuildApp(payload, headers)\n );\n // Return the response from the server.\n return response;\n }\n\n /**\n * Retrieves the schema for the current app.\n * \n * @returns A promise that resolves to a common API response containing the schema.\n */\n async getSchema(): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getSchema()\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Retrieves the current app's permission.\n * \n * @returns A promise that resolves to a common API response containing the permission information.\n */\n async getPermission(): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getPermission()\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Registers app objects based on the provided payload.\n * \n * @param payload The register app objects payload.\n * @returns A promise that resolves to a common API response.\n */\n async registerAppObject(payload: RegisterAppObjectsPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.registerAppObjects(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Clones a data source query (DSQ) based on the provided payload.\n * \n * @param payload The clone DSQ payload.\n * @returns A promise that resolves to a common API response.\n */\n async cloneDsq(payload: CloneDsqPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.cloneDsq(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Retrieves data in JSON format based on the provided payload.\n * \n * @param payload The get data JSON by type payload.\n * @returns A promise that resolves to a common API response containing the data in JSON format.\n */\n async getDataJsonByType(payload: GetDataJsonByTypePayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getDataJsonByType(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Synchronizes the current app's fields based on the provided payload.\n * \n * @param payload The sync app fields payload.\n * @returns A promise that resolves to a common API response.\n */\n async syncAppFields(payload: SyncAppFieldsPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.syncAppFields(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Sets the tab components based on the provided connection ID.\n * \n * @param connectionId The ID of the connection to set the components for.\n * @returns A promise that resolves to a common API response.\n */\n async setTabComponents(connectionId: string): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.setTabComponents(connectionId)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Performs validation for the connection with the provided ID.\n * \n * @param connectionId The ID of the connection to validate.\n * @returns A promise that resolves to a common API response containing the validation result.\n */\n async performValidation(connectionId: string): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.performValidation(connectionId)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Tests the connection with the provided connection ID.\n * \n * @param connectionId The ID of the connection to test.\n * @returns A promise that resolves to a common API response containing the test result.\n */\n async testConnection(connectionId: string): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.testConnection(connectionId)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Refreshes the global search data based on the provided payload.\n * \n * @param payload The refresh global search data payload.\n * @returns A promise that resolves to a common API response containing the refreshed global search data.\n */\n async refreshGlobalSearchData(payload: RefreshGlobalSearchDataPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.refreshGlobalSearchData(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Refreshes the record information data based on the provided payload.\n * \n * @param payload The refresh record info data payload.\n * @returns A promise that resolves to a common API response containing the refreshed record info data.\n */\n async refreshRecordInfoData(payload: RefreshRecordInfoDataPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to await the completion of the observable\n const response = await firstValueFrom(\n this._appHelper.refreshRecordInfoData(payload)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Retrieves all documents from the database.\n * \n * @param headers Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing all documents.\n */\n async getAllDocumnets(headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getAllDocumnets(headers)\n );\n\n // Return the response from the server\n return response;\n }\n\n async getDocumentById(id: string, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getDocumentById(id, headers)\n );\n\n // Return the response from the server\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { ApiService, CommonApiResponse, MediaUploadHelper, UploadMediaFilesPayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\nimport { TabSdk } from '../tab-sdk.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileService {\n private _mediaUploadHelper: MediaUploadHelper = inject(MediaUploadHelper);\n private apiService: ApiService = inject(ApiService);\n\n /**\n * Uploads media files using the provided payload and optional headers.\n *\n * @param payload The payload containing the media files to upload.\n * @param headers Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response.\n */\n async uploadMediaFiles(payload: UploadMediaFilesPayload, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._mediaUploadHelper.uploadMediaFiles(payload, headers)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Removes a media file from the server using the provided media ID.\n *\n * @param mediaId The ID of the media file to remove.\n * @returns A promise that resolves to a common API response.\n */\n async removeMediaFile(mediaId: string): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._mediaUploadHelper.removeMediaFile(mediaId)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Processes an FTP URL and returns a processed URL.\n *\n * @param params - The parameters containing data, an optional defaultHeader, and an optional imgElement.\n * @returns A promise that resolves to the processed URL or null if an error occurs.\n */\n async processFtpUrl(params: { data: string, defaultHeader?: boolean, imgElement?: HTMLImageElement }): Promise<any> {\n // Return null if the data is invalid\n if (!params?.data || params?.data === 'null' || params?.data === 'undefined') return null;\n\n try {\n let url = params.data;\n\n // Extract the value from a JSON string if it contains 'value'\n if (url?.includes('value')) {\n url = JSON.parse(url).value;\n }\n\n // Check if the URL is an image from the FileManager service\n if (url.includes('FileManager/GetImage')) {\n const options: any = { responseType: 'blob' };\n\n // Add default headers if specified\n if (params.defaultHeader) {\n options.headers = TabSdk.util?.getDefaultAppHeaders();\n }\n\n // Fetch the image as a blob\n const blob = await firstValueFrom(this.apiService.getByUrl(url, options));\n\n // Create an object URL from the blob\n url = URL.createObjectURL(blob);\n }\n\n // Set the image element's source to the processed URL\n if (params.imgElement) {\n params.imgElement.src = url;\n params.imgElement.onload = null;\n }\n\n return url;\n\n } catch (e) {\n // Log any errors that occur during processing\n console.error(\"Error processing FTP\", e);\n return null;\n }\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { AppHelper, CommonApiResponse, ReportPayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ReportService {\n private _appHelper: AppHelper = inject(AppHelper);\n\n /**\n * Exports a report based on the provided payload.\n * \n * @param payload The payload containing the parameters for the report.\n * @returns A promise that resolves to a common API response containing the report.\n */\n async export(payload: ReportPayload): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n this._appHelper.exportReport(payload)\n );\n return response;\n }\n\n /**\n * Downloads a report based on the provided payload.\n * \n * @param payload The payload containing the parameters for the report.\n * @returns A promise that resolves to a common API response containing the report.\n */\n async download(payload: ReportPayload): Promise<Blob> {\n const response = await firstValueFrom(\n this._appHelper.downloadReport(payload)\n );\n return response;\n }\n\n /**\n * Sends a report based on the provided payload.\n * \n * @param payload The payload containing the parameters for the report.\n * @returns A promise that resolves to a common API response containing the report.\n */\n async send(payload: ReportPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.sendReport(payload)\n );\n // Return the response from the server\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { CommonApiResponse, TabReleaseService } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ReleaseService {\n private _tabReleaseService: TabReleaseService = inject(TabReleaseService);\n\n /**\n * Retrieves the data differences between the current app version and the latest\n * released version of the app.\n * \n * @returns A promise that resolves to a common API response containing the data\n * differences in JSON format.\n */\n async getTabDataDiff(): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n this._tabReleaseService.getDataJsonDiff()\n );\n return response;\n }\n\n /**\n * Retrieves the metadata differences between the current app version and the latest\n * released version of the app.\n * \n * @returns A promise that resolves to a common API response containing the metadata\n * differences in JSON format.\n */\n async getMetaDataDiff(): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n this._tabReleaseService.getMetaDataJsonDiff()\n );\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { AppHelper, CommonApiResponse, PerformanceAnalyticsPayload, ScreenPerformancePayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnalyticsService {\n private _appHelper: AppHelper = inject(AppHelper);\n\n /**\n * Retrieves the summary of performance analytics based on the provided payload.\n * \n * @param payload The performance analytics payload.\n * @returns A promise that resolves to a common API response containing the performance analytics summary.\n */\n async getSummaryOfPerformance(payload: PerformanceAnalyticsPayload): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n this._appHelper.getSummaryOfPerformanceAnalytics(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Retrieves the detail of performance analytics based on the provided payload.\n * \n * @param payload The performance analytics payload.\n * @returns A promise that resolves to a common API response containing the performance analytics detail.\n */\n async getDetailOfPerformance(payload: PerformanceAnalyticsPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.getDetailOfPerformanceAnalytics(payload)\n );\n // Return the response from the server\n return response;\n }\n\n /**\n * Inserts the screen performance statistics based on the provided payload.\n * \n * @param payload The screen performance payload containing the statistics to be inserted.\n * @returns A promise that resolves to a common API response containing the result of the insertion.\n */\n async insertScreenPerformance(payload: ScreenPerformancePayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._appHelper.insertScreenPerformanceStatistics(payload)\n );\n // Return the response from the server\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { firstValueFrom, Observable } from 'rxjs';\nimport { translatePayload, TranslationService } from '@techextensor/tab-core-utility';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TranslatorService {\n private readonly _translationService: TranslationService = inject(TranslationService);\n\n /**\n * Gets the current active language\n * \n * @returns The current language code\n */\n getCurrentLanguage(): string {\n return this._translationService.getCurrentLanguage();\n }\n\n /**\n * Gets an observable of the current language changes\n * \n * @returns An observable of the current language code\n */\n getLanguageChanges(): Observable<string> {\n return this._translationService.currentLanguage$;\n }\n\n /**\n * Changes the application language\n * \n * @param payload The translate payload containing language and languageCode\n * @returns A promise that resolves when the language has been changed\n */\n async changeLanguage(payload: translatePayload): Promise<any> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._translationService.changeLanguage(payload)\n );\n // Return the response\n return response;\n }\n\n /**\n * Translates a key to the current language\n * \n * @param key The translation key\n * @param params Optional parameters for interpolation\n * @returns The translated string\n */\n translate(key: string, params?: any): string {\n if(!key?.length) return key;\n return this._translationService.translate(key, params);\n }\n\n /**\n * Gets a translation as an observable for async operations\n * \n * @param key The translation key\n * @param params Optional parameters for interpolation\n * @returns An observable of the translated string\n */\n async getTranslation(key: string, params?: any): Promise<string> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const translation = await firstValueFrom(\n this._translationService.getTranslation(key, params)\n );\n // Return the translated string\n return translation;\n }\n\n /**\n * Registers an external library integration for translations\n * \n * @param handler Function to handle the integration with language and translations\n */\n registerIntegration(handler: (lang: string, translations: any) => void): void {\n this._translationService.registerIntegration(handler);\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { APISelectQuery, CommonApiResponse, DeletePayload, GetPayload, InsertPayload, UpdatePayload, ImprotDataPayload, RcordHistoryPayload, SearchDataPayload, TabCrudService, TabGetService, executeStoredProcedurePayload } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrudService {\n private readonly _tabCrudService: TabCrudService = inject(TabCrudService);\n private readonly _tabGetService: TabGetService = inject(TabGetService);\n\n /**\n * Retrieves a record from the database using the provided payload.\n *\n * @param payload - The payload containing information to retrieve the record.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the retrieved record.\n */\n async executeDsq(payload: GetPayload, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._tabCrudService.get(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Inserts a record into the database using the provided payload.\n *\n * @param payload - The payload containing information to insert the record.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the inserted record.\n */\n async insert(payload: InsertPayload, headers?: any): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n // Call the insert method of the TabCrudService and pass the payload and headers\n this._tabCrudService.insert(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n /**\n * Inserts multiple records into the database using the provided payload.\n *\n * @param payload - The payload containing information to insert multiple records.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the inserted records.\n */\n async bulkInsert(payload: InsertPayload, headers?: any): Promise<CommonApiResponse> {\n const response = await firstValueFrom(\n // Call the bulkInsert method of the TabCrudService and pass the payload and headers\n this._tabCrudService.bulkInsert(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n /**\n * Updates a record in the database using the provided payload.\n *\n * @param payload - The payload containing information to update the record.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the updated record.\n */\n async update(payload: UpdatePayload, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n this._tabCrudService.update(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Deletes a record from the database using the provided payload.\n *\n * @param payload - The payload containing information to delete the record.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the deleted record.\n */\n async delete(payload: DeletePayload, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the delete method of the TabCrudService and pass the payload and headers\n this._tabCrudService.delete(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n\n // /**\n // * Executes a stored procedure using the provided payload.\n // *\n // * @param sp - The name of the stored procedure to execute.\n // * @param headers - Optional headers to pass to the server.\n // * @returns A promise that resolves to a common API response containing the result of executing the stored procedure.\n // */\n // async executeSp(sp: string, headers?: any): Promise<CommonApiResponse> {\n // // Use the firstValueFrom RxJs operator to wait for the observable to complete\n // const response = await firstValueFrom(\n // // Call the executeSp method of the TabCrudService and pass the name of the stored procedure and headers\n // this._tabCrudService.executeSp(sp, headers)\n // );\n\n // // Return the response from the server\n // return response;\n // }\n\n /**\n * Executes a stored procedure using the provided payload.\n *\n * @param payload - The payload containing information to execute the stored procedure.\n * @param headers - Optional headers to pass to the server.\n * @returns A promise that resolves to a common API response containing the result of executing the stored procedure.\n */\n async executeStoredProcedure(payload: executeStoredProcedurePayload, headers?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the executeStoredProcedure method of the TabCrudService and pass the payload and headers\n this._tabCrudService.executeStoredProcedure(payload, headers)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Executes a select query using the provided select query ID.\n *\n * @param selectQueryId - The ID of the select query to execute.\n * @param parameters - Optional parameters to pass to the select query.\n * @returns A promise that resolves to a common API response containing the result of executing the select query.\n */\n async executeSelectQuery(selectQueryId: string, parameters?: any, additionalConfig?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the executeSelectQueryById method of the TabGetService and pass the ID of the select query and parameters\n this._tabGetService.executeSelectQueryById(selectQueryId, parameters, additionalConfig)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Executes a select query using the provided select query data.\n *\n * @param data - The select query data.\n * @param parameters - Optional parameters to pass to the select query.\n * @returns A promise that resolves to a common API response containing the result of executing the select query.\n */\n async executeSelectExecutor(data: APISelectQuery, parameters?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the selectExecutor method of the TabGetService and pass the select query data and parameters\n this._tabGetService.selectExecutor(data, parameters)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Gets the search data using the provided search query and limit.\n *\n * @param searchQuery - The search query to search for.\n * @param limit - The number of records to limit the results to.\n * @param parameters - Optional parameters to pass to the search query.\n * @returns A promise that resolves to a common API response containing the search data.\n */\n async getSearchData(payload: SearchDataPayload, parameters?: any): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the getSearchData method of the TabGetService and pass the search query and limit\n this._tabGetService.getSearchData(payload, parameters)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Retrieves the history of records for a specified app object.\n *\n * @param appObjectId - The ID of the app object to retrieve the record history for.\n * @param recordIds - An array of record IDs to retrieve the history for.\n * @returns A promise that resolves to a common API response containing the record history.\n */\n async getRecordHistory(payload: RcordHistoryPayload): Promise<CommonApiResponse> {\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\n const response = await firstValueFrom(\n // Call the getHistory method of the TabGetService and pass the app object ID and record IDs\n this._tabGetService.getHistory(payload)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Imports data into the database.\n *\n * @param data - The data to import.\n * @returns A promise that resolves to a common API response containing the result of importing the data.\n */\n async import(payload: ImprotDataPayload): Promise<any> {\n const response = await firstValueFrom(\n // Call the pmjayImport method of the TabGetService and pass the data to import\n this._tabGetService.pmjayImport(payload)\n );\n\n // Return the response from the server\n return response;\n }\n}","import { inject, Injectable } from '@angular/core';\nimport { HttpExecuteRequestPayload, TabGetService } from '@techextensor/tab-core-utility';\nimport { firstValueFrom } from 'rxjs';\nimport { TabSdk } from '../tab-sdk.service';\nimport { RequestStatus } from '../interface/http.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService {\n private readonly _tabGetService: TabGetService = inject(TabGetService);\n\n /**\n * Executes an HTTP request using the provided payload.\n * \n * @param payload - The payload containing information to execute the HTTP request.\n * @returns A promise that resolves to the response from the server.\n */\n async executeRequest(payload: HttpExecuteRequestPayload): Promise<any> {\n // Await the response from the executeHttpRequest method of the TabGetService\n const response = await firstValueFrom(\n this._tabGetService.executeHttpRequest(payload)\n );\n\n // Return the response from the server\n return response;\n }\n\n /**\n * Generates an HTTP request for the given data source query name.\n * \n * @param dataSourceQueryName - The name of the data source query for which to generate the HTTP request.\n * @returns A promise that resolves to the generated HTTP request.\n */\n async generateRequest(dataSourceQueryName: string): Promise<any> {\n // Await the response from the generateHttpRequest method of the TabGetService\n const response = await firstValueFrom(\n this._tabGetService.generateHttpRequest(dataSourceQueryName)\n );\n\n // Return the generated HTTP request\n return response;\n }\n\n /**\n * Sets the request status for the given URL.\n * \n * @param status - The request status to set.\n */\n setRequestStatus(status: RequestStatus): void {\n TabSdk.util?.setLatestStatus(status);\n }\n\n /**\n * Gets the request status for the given URL.\n * \n * @param url - The URL for which to get the request status.\n * @returns The request status for the given URL.\n */\n getRequestStatus(url: string): RequestStatus | undefined {\n return TabSdk.util?.getLatestStatus(url);\n }\n}","export enum StorageType {\n Local = 'local',\n Session = 'session'\n}","import { inject, Injectable } from '@angular/core';\nimport { LocalStorageService, SessionStorageService, StorageConstants } from '@techextensor/tab-core-utility';\nimport { StorageType } from '../enum/store.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreService {\n private readonly _localStorageService: LocalStorageService = inject(LocalStorageService);\n private readonly _sessionStorageService: SessionStorageService = inject(SessionStorageService);\n\n /**\n * Retrieves the tenant ID from the local storage.\n */\n get tenantId(): string | null {\n return this.getOrgInfo()?.Id || null;\n }\n\n /**\n * Sets the tenant ID in the organization info.\n * \n * @param value - The tenant ID to set.\n */\n set tenantId(value: string | null) {\n // Retrieve the existing organization info or initialize a new object\n const orgInfo = this.getOrgInfo() || {};\n\n // Update the tenant ID value\n orgInfo.Id = value;\n\n // Save the updated organization info back to storage\n this.setOrgInfo(orgInfo);\n }\n\n /**\n * Retrieves the tenant name from the organization info.\n */\n get tenantName(): string | null {\n // Retrieve the organization info from storage\n const orgInfo = this.getOrgInfo();\n\n // Return the tenant name if it exists, otherwise return null\n return orgInfo?.OrganizationName || null;\n }\n\n /**\n * Sets the tenant name in the organization info.\n * \n * @param value - The tenant name to set.\n */\n set tenantName(value: string | null) {\n // Retrieve the existing organization info or initialize a new object\n const orgInfo = this.getOrgInfo() || {};\n\n // Update the organization name value\n orgInfo.OrganizationName = value;\n\n // Save the updated organization info back to storage\n this.setOrgInfo(orgInfo);\n }\n\n /**\n * Retrieves the subdomain from the organization info.\n * \n * @returns The subdomain if it exists, otherwise `null`.\n */\n get subdomain(): string | null {\n // Retrieve the organization info from storage\n const orgInfo = this.getOrgInfo();\n\n // Return the subdomain if it exists, otherwise return null\n return orgInfo?.Subdomain || null;\n }\n\n /**\n * Sets the subdomain in the organization info.\n * \n * @param value - The subdomain to set.\n */\n set subdomain(value: string | null) {\n // Retrieve the existing organization info or initialize a new object\n const orgInfo = this.getOrgInfo() || {};\n\n // Update the subdomain value\n orgInfo.Subdomain = value;\n\n // Save the updated organization info back to storage\n this.setOrgInfo(orgInfo);\n }\n\n /**\n * Retrieves the locale settings from the organization info.\n * \n * @returns The locale settings if they exist, otherwise `null`.\n */\n get orgLocaleSettings(): any {\n // Retrieve the locale settings from the organization info\n let localSettings = this.getOrgInfo()?.LocaleSettings;\n\n // If the locale settings are a string, parse them as JSON\n if (typeof localSettings === 'string') {\n localSettings = JSON.parse(localSettings);\n }\n\n // Return the locale settings\n return localSettings;\n }\n\n /**\n * Sets the locale settings in the organization info.\n * \n * @param value - The locale settings to set.\n */\n set orgLocaleSettings(value: any) {\n // Retrieve the existing organization info or initialize a new object\n const orgInfo = this.getOrgInfo() || {};\n\n // Update the locale settings value\n orgInfo.LocaleSettings = value;\n\n // Save the updated organization info back to storage\n this.setOrgInfo(orgInfo);\n }\n\n /**\n * Retrieves the app ID from the app info.\n * \n * @returns The app ID if it exists, otherwise `null`.\n */\n get appId(): string | null {\n return this.getAppInfo()?.Id || null;\n }\n\n /**\n * Sets the app ID in the app info.\n * \n * @param value - The app ID to set.\n */\n set appId(value: string | null) {\n // Retrieve the existing app info or initialize a new object\n const appInfo = this.getAppInfo() || {};\n\n // Update the app ID value\n appInfo.Id = value;\n\n // Save the updated app info back to storage\n this.setAppInfo(appInfo);\n }\n\n /**\n * Retrieves the app name from the app info.\n * \n * @returns The app name if it exists, otherwise `null`.\n */\n get appName(): string | null {\n // Retrieve and return the app name from the app info, or return null if it doesn't exist\n return this.getAppInfo()?.AppName || null;\n }\n\n /**\n * Sets the app name in the app info.\n * \n * @param value - The app name to set.\n */\n set appName(value: string | null) {\n // Retrieve the existing app info or initialize a new object\n const appInfo = this.getAppInfo() || {};\n\n // Update the app name value\n appInfo.AppName = value;\n\n // Save the updated app info back to storage\n this.setAppInfo(appInfo);\n }\n\n /**\n * Retrieves the environment ID from the environment info.\n * \n * @returns The environment ID if it exists, otherwise `null`.\n */\n get environmentId(): string | null {\n // Retrieve and return the environment ID from the environment info, or return null if it doesn't exist\n return this.getEnvironmentInfo()?.Id || null;\n }\n\n /**\n * Sets the environment ID in the environment info.\n * \n * @param value - The environment ID to set.\n */\n set environmentId(value: string | null) {\n // Retrieve the existing environment info or initialize a new object\n const environmentInfo = this.getEnvironmentInfo() || {};\n\n // Update the environment ID value\n environmentInfo.Id = value;\n\n // Save the updated environment info back to storage\n this.setEnvironmentInfo(environmentInfo);\n }\n\n /**\n * Retrieves the environment name from the environment info.\n * \n * @returns The environment name if it exists, otherwise `null`.\n */\n get environmentName(): string | null {\n // Retrieve and return the environment name from the environment info, or return null if it doesn't exist\n return this.getEnvironmentInfo()?.Name || null;\n }\n\n /**\n * Sets the environment name in the environment info.\n * \n * @param value - The environment name to set.\n */\n set environmentName(value: string | null) {\n // Retrieve the existing environment info or initialize a new object\n const environmentInfo = this.getEnvironmentInfo() || {};\n\n // Update the environment name value\n environmentInfo.Name = value;\n\n // Save the updated environment info back to storage\n this.setEnvironmentInfo(environmentInfo);\n }\n\n /**\n * Retrieves the token from the token info.\n * \n * @returns The token if it exists, otherwise `null`.\n */\n get token(): string | null {\n // Retrieve and return the token from the token info, or return null if it doesn't exist\n return this.getTokenInfo()?.token || null;\n }\n\n /**\n * Sets the token in the token info.\n * \n * @param value - The token to set.\n */\n set token(value: string | null) {\n // Retrieve the existing token info or initialize a new object\n const tokenInfo = this.getTokenInfo() || {};\n\n // Update the token value\n tokenInfo.token = value;\n\n // Save the updated token info back to storage\n this.setTokenInfo(tokenInfo);\n }\n\n /**\n * Retrieves the refresh token from the token info.\n * \n * @returns The refresh token if it exists, otherwise `null`.\n */\n get refreshToken(): string | null {\n // Retrieve and return the refresh token from the token info, or return null if it doesn't exist\n return this.getTokenInfo()?.refreshToken || null;\n }\n\n /**\n * Sets the refresh token in the token info.\n * \n * @param value - The refresh token to set.\n */\n set refreshToken(value: string | null) {\n // Retrieve the existing token info or initialize a new object\n const tokenInfo = this.getTokenInfo() || {};\n\n // Update the refresh token value\n tokenInfo.refreshToken = value;\n\n // Save the updated token info back to storage\n this.setTokenInfo(tokenInfo);\n }\n\n /**\n * Retrieves the refresh token expiry time from the token info.\n * \n * @returns The refresh token expiry time if it exists, otherwise `null`.\n */\n get refreshTokenExpiry(): string | null {\n // Retrieve and return the refresh token expiry time from the token info,\n // or return null if it doesn't exist\n return this.getTokenInfo()?.refreshTokenExpiry || null;\n }\n\n /**\n * Sets the refresh token expiry time in the token info.\n * \n * @param value - The refresh token expiry time to set.\n */\n set refreshTokenExpiry(value: string | null) {\n // Retrieve the existing token info or initialize a new object\n const tokenInfo = this.getTokenInfo() || {};\n\n // Update the refresh token expiry time\n tokenInfo.refreshTokenExpiry = value;\n\n // Save the updated token info back to storage\n this.setTokenInfo(tokenInfo);\n }\n\n /**\n * Retrieves the static token from the token info.\n * \n * @returns The static token if it exists, otherwise `null`.\n */\n get staticToken(): string | null {\n // Retrieve and return the static token from the token info,\n // or return null if it doesn't exist\n return this.getTokenInfo()?.staticToken || null;\n }\n\n /**\n * Sets the static token in the token info.\n * \n * @param value - The static token to set.\n */\n set staticToken(value: string | null) {\n // Retrieve the existing token info or initialize a new object\n const tokenInfo = this.getTokenInfo() || {};\n\n // Update the static token value\n tokenInfo.staticToken = value;\n\n // Save the updated token info back to storage\n this.setTokenInfo(tokenInfo);\n }\n\n /**\n * Retrieves the user ID from the user info.\n * \n * @returns The user ID if it exists, otherwise `null`.\n */\n get userId(): string | null {\n // Retrieve and return the user ID from the user info, or return null if it doesn't exist\n return this.getUserInfo()?.user?.Id || null;\n }\n\n /**\n * Retrieves the user's roles from the user information.\n * \n * @returns An array of user roles if they exist, otherwise `null`.\n */\n get userRoles(): any[] | null {\n // Retrieve and return the user roles from the user info, or return null if they don't exist\n return this.getUserInfo()?.user?.Roles || null;\n }\n\n /**\n * Retrieves the user's teams from the user information.\n * \n * @returns An array of user teams if they exist, otherwise `null`.\n */\n get userTeams(): any[] | null {\n // Retrieve and return the user teams from the user info, or return null if they don't exist\n return this.getUserInfo()?.user?.Teams || null;\n }\n\n /**\n * Removes the tenant ID from the organization information.\n */\n removeTenantId(): void {\n this.removeFromOrgInfo('Id');\n }\n\n /**\n * Removes the tenant name from the organization information.\n */\n removeTenantName(): void {\n // Remove the tenant name from the organization information\n this.removeFromOrgInfo('OrganizationName');\n }\n\n /**\n * Removes the subdomain from the organization information.\n * \n * This removes the subdomain property from the organization information\n * stored in local storage.\n */\n removeSubdomain(): void {\n // Remove the subdomain from the organization information\n this.removeFromOrgInfo('Subdomain');\n }\n\n /**\n * Removes the app ID from the app information.\n * \n * This removes the app ID property from the app information stored in local storage.\n */\n removeAppId(): void {\n this.removeFromAppInfo('Id');\n }\n\n /**\n * Removes the app name from the app information.\n * \n * This removes the app name property from the app information stored in local storage.\n */\n removeAppName(): void {\n this.removeFromAppInfo('AppName');\n }\n\n /**\n * Removes the environment ID from the environment information.\n * \n * This removes the ID property from the environment information\n * stored in local storage.\n */\n removeEnvironmentId(): void {\n // Remove the environment ID from the environment information\n this.removeFromEnvironmentInfo('Id');\n }\n\n /**\n * Removes the environment name from the environment information.\n * \n * This removes the Name property from the environment information\n * stored in local storage.\n */\n removeEnvironmentName(): void {\n // Remove the environment name from the environment information\n this.removeFromEnvironmentInfo('Name');\n }\n\n /**\n * Removes the token from the token info.\n * \n * This removes the token property from the token information stored in session\n * storage.\n */\n removeToken(): void {\n // Remove the token from the token info\n this.removeFromTokenInfo('token');\n }\n\n /**\n * Removes the refresh token from the token information.\n * \n * This removes the refresh token property from the token information stored in session\n * storage.\n */\n removeRefreshToken(): void {\n this.removeFromTokenInfo('refreshToken');\n }\n\n /**\n * Removes the refresh token expiry time from the token information.\n * \n * This removes the refresh token expiry time property from the token information stored in session\n * storage.\n */\n removeRefreshTokenExpiry(): void {\n // Remove the refresh token expiry from the token info\n this.removeFromTokenInfo('refreshTokenExpiry');\n }\n\n /**\n * Removes the static token from the token information.\n * \n * This removes the static token property from the token information stored in session\n * storage.\n */\n removeStaticToken(): void {\n // Remove the static token from the token info\n this.removeFromTokenInfo('staticToken');\n }\n\n /**\n * Removes the specified key from the organization information.\n * \n * This removes the specified key from the organization information stored in local storage.\n * \n * @param key The key to remove from the organization information.\n */\n private removeFromOrgInfo(key: string): void {\n const orgInfo = this.getOrgInfo();\n if (orgInfo) {\n // Remove the key from the organization information\n delete orgInfo[key];\n // Save the updated organization information back to local storage\n this.setOrgInfo(orgInfo);\n }\n }\n\n /**\n * Removes the specified key from the app information.\n * \n * This removes the specified key from the app information stored in session\n * storage.\n * \n * @param key The key to remove from the app information.\n */\n private removeFromAppInfo(key: string): void {\n const appInfo = this.getAppInfo();\n if (appInfo) {\n // Remove the key from the app information\n delete appInfo[key];\n // Save the updated app information back to session storage\n this.setAppInfo(appInfo);\n }\n }\n\n /**\n * Removes the specified key from the environment information.\n * \n * This removes the specified key from the environment information stored in session\n * storage.\n * \n * @param key The key to remove from the environment information.\n */\n private removeFromEnvironmentInfo(key: string): void {\n const environmentInfo = this.getEnvironmentInfo();\n if (environmentInfo) {\n // Remove the key from the environment information\n delete environmentInfo[key];\n // Save the updated environment information back to session storage\n this.setEnvironmentInfo(environmentInfo);\n }\n }\n\n /**\n * Removes the specified key from the token information.\n * \n * This removes the specified key from the token information stored in session\n * storage.\n * \n * @param key The key to remove from the token information.\n */\n private removeFromTokenInfo(key: string): void {\n const tokenInfo = this.getTokenInfo();\n if (tokenInfo) {\n // Remove the key from the token information\n delete tokenInfo[key];\n // Save the updated token information back to session storage\n this.setTokenInfo(tokenInfo);\n }\n }\n\n /**\n * Retrieves the organization information from local storage.\n * \n * @returns The organization information object or null if it doesn't exist.\n */\n getOrgInfo(): any {\n return this.getFromStorage(StorageType.Local, StorageConstants.orgInfo);\n }\n\n /**\n * Saves the organization information to local storage.\n * \n * @param orgInfo - The organization information to store.\n */\n setOrgInfo(orgInfo: any): void {\n // temp once remove from dropdown, we can remove this\n // if (orgInfo.Id) {\n // this.setSession(StorageConstants.TenantId, orgInfo.Id);\n // } else {\n // this.removeSession(StorageConstants.TenantId);\n // }\n\n // Save the organization info to local storage\n this.setToStorage(StorageType.Local, StorageConstants.orgInfo, orgInfo);\n }\n\n /**\n * Retrieves the app information from session storage.\n * \n * @returns The app information object or null if it doesn't exist.\n */\n getAppInfo(): any {\n return this.getFromStorage(StorageType.Session, StorageConstants.appInfo);\n }\n\n /**\n * Saves the app information to session storage.\n * \n * @param appInfo - The app information to store.\n */\n setAppInfo(appInfo: any): void {\n // temp once remove from dropdown, we can remove this\n // if (appInfo?.Id) {\n // this.setSession(StorageConstants.AppId, appInfo.Id);\n // } else {\n // this.removeSession(StorageConstants.AppId);\n // }\n\n // if (appInfo?.AppName) {\n // this.setSession(StorageConstants.applicationCode, appInfo.AppName);\n // } else {\n // this.removeSession(StorageConstants.applicationCode);\n // }\n\n // Save the app info to session storage\n this.setToStorage(StorageType.Session, StorageConstants.appInfo, appInfo);\n }\n\n /**\n * Retrieves the environment information from session storage.\n * \n * @returns The environment information object or null if it doesn't exist.\n */\n getEnvironmentInfo(): any {\n return this.getFromStorage(StorageType.Session, StorageConstants.environmentInfo);\n }\n\n /**\n * Saves the environment information to session storage.\n * \n * @param envInfo - The environment information to store.\n */\n setEnvironmentInfo(envInfo: any): void {\n // Save the environment info to session storage\n this.setToStorage(StorageType.Session, StorageConstants.environmentInfo, envInfo);\n }\n\n /**\n * Retrieves the token information from session storage.\n * \n * @returns The token information object or null if it doesn't exist.\n */\n getTokenInfo(): any {\n return this.getFromStorage(StorageType.Local, StorageConstants.tokenInfo);\n }\n\n /**\n * Saves the token information to session storage.\n * \n * @param tokenInfo - The token information to store.\n */\n setTokenInfo(tokenInfo: any): void {\n // temp once remove from dropdown, we can remove this\n // if (tokenInfo?.token) {\n // this.setSession(StorageConstants.token, tokenInfo?.token);\n // } else {\n // this.removeSession(StorageConstants.token);\n // }\n\n // Save the token info to session storage\n this.setToStorage(StorageType.Local, StorageConstants.tokenInfo, tokenInfo);\n }\n\n /**\n * Retrieves the user information from local storage.\n * \n * @returns The user information object or null if it doesn't exist.\n */\n getUserInfo(): any {\n return this.getFromStorage(StorageType.Local, StorageConstants.userInfo);\n }\n\n /**\n * Sets the user information in local storage.\n * \n * @param userInfo The user information to store.\n */\n setUserInfo(userInfo: any): void {\n // Save the user info to local storage\n this.setToStorage(StorageType.Local, StorageConstants.userInfo, userInfo);\n }\n\n /**\n * Sets a key-value pair in local storage.\n * \n * @param key The key to store the value under.\n * @param data The value to store.\n */\n setLocal(key: string, data: any): void {\n this.setToStorage(StorageType.Local, key, data);\n }\n\n /**\n * Retrieves a value from local storage by key.\n * \n * @param key The key associated with the value to retrieve.\n * @returns The value stored in local storage, or null if it doesn't exist.\n */\n getLocal(key: string): any {\n return this.getFromStorage(StorageType.Local, key);\n }\n\n /**\n * Removes a key-value pair from local storage.\n * \n * @param key The key associated with the value to remove.\n */\n removeLocal(key: string): void {\n // Remove the key from local storage\n this.removeFromStorage(StorageType.Local, key);\n }\n\n /**\n * Clears all local storage data.\n */\n clearLocal(): void {\n this.clearStorage(StorageType.Local);\n }\n\n /**\n * Sets a key-value pair in session storage.\n * \n * @param key The key to store the value under.\n * @param data The value to store.\n */\n setSession(key: string, data: any): void {\n // Save data to session storage under the specified key\n this.setToStorage(StorageType.Session, key, data);\n }\n\n /**\n * Retrieves a value from session storage by key.\n * \n * @param key The key associated with the value to retrieve.\n * @returns The value stored in session storage, or null if it doesn't exist.\n */\n getSession(key: string): any {\n // Retrieve the value from session storage\n return this.getFromStorage(StorageType.Session, key);\n }\n\n /**\n * Removes a key-value pair from session storage.\n * \n * @param key The key associated with the value to remove.\n */\n removeSession(key: string): void {\n // Remove the key from session storage\n this.removeFromStorage(StorageType.Session, key);\n }\n\n /**\n * Clears all session storage data.\n */\n clearSession(): void {\n // Remove all key-value pairs from session storage\n this.clearStorage(StorageType.Session);\n }\n\n /**\n * Clears all authentication-related data from local and session storage.\n * \n * This method is typically used after a user logs out.\n */\n clearAuth(): void {\n // Remove user info from local storage\n this.removeFromStorage(StorageType.Local, StorageConstants.userInfo);\n // Remove token info from session storage\n this.removeFromStorage(StorageType.Local, StorageConstants.tokenInfo);\n }\n\n /**\n * Generic getter method for retrieving data from either local or session storage.\n * \n * @param storage The type of storage to retrieve from.\n * @param key The key associated with the data to retrieve.\n * @returns The retrieved data, deserialized from JSON if it was stored as a string.\n */\n private getFromStorage(storage: StorageType, key: string): any {\n // Retrieve the data from the specified storage\n const data = storage === StorageType.Local\n ? this._localStorageService.getLocalStorage(key)\n : this._sessionStorageService.getSessionStorage(key);\n\n try {\n // Attempt to parse the data as JSON\n return typeof data === 'string' ? JSON.parse(data) : data;\n } catch (e) {\n // If the data cannot be parsed, return it as is\n return data;\n }\n }\n\n /**\n * Sets a key-value pair in the specified storage type.\n * \n * @param storage The type of storage to use (local or session).\n * @param key The key under which the data should be stored.\n * @param data The data to store.\n */\n private setToStorage(storage: StorageType, key: string, data: any): void {\n // Check if the storage type is local\n if (storage === StorageType.Local) {\n // Set the data in local storage\n this._localStorageService.setLocalStorage(key, data);\n } else {\n // Otherwise, set the data in session storage\n this._sessionStorageService.setSessionStorage(key, data);\n }\n }\n\n /**\n * Removes a key-value pair from the specified storage type.\n * \n * This method removes the given key from either local or session storage \n * based on the specified storage type.\n * \n * @param storage The type of storage to remove from (local or session).\n * @param key The key associated with the value to remove.\n */\n private removeFromStorage(storage: StorageType, key: string): void {\n if (storage === StorageType.Local) {\n // Remove the key from local storage\n this._localStorageService.removeLocalStorage(key);\n } else {\n // Remove the key from session storage\n this._sessionStorageService.removeSessionStorage(key);\n }\n }\n\n /**\n * Clears all key-value pairs from the specified storage type.\n * \n * This method clears all key-value pairs from either local or session storage\n * based on the specified storage type.\n * \n * @param storage The type of storage to clear (local or session).\n */\n private clearStorage(storage: StorageType): void {\n if (storage === StorageType.Local) {\n // Clear local storage\n this._localStorageService.clearLocalStorage();\n } else {\n // Clear session storage\n this._sessionStorageService.clearSessionStorage();\n }\n }\n\n /**\n * Adds a screen context with the given key and data.\n * \n * The screen context is a collection of key-value pairs that are stored in session storage.\n * The key is used to identify the screen context and the data is the value associated with the key.\n * \n * @param key The key for the screen context.\n * @param data The data to store in the screen context.\n */\n public addScreenContext(key: string, data: any): void {\n try {\n if (!key || data == null) return;\n\n const screenContext = this.getSession(StorageConstants.screenContext) || {};\n\n if (!screenContext[key]) {\n // Initialize the key with an empty array if it doesn't exist\n screenContext[key] = [];\n } else if (screenContext[key].length >= 5) {\n // Remove the oldest data if the array exceeds 5 elements\n screenContext[key].shift();\n }\n\n // Add the data to the existing array\n screenContext[key].push(data);\n // Update the screen context with the new data\n this.setSession(StorageConstants.screenContext, screenContext);\n } catch (error) {\n console.error('Error adding screen context:', error);\n }\n }\n\n /**\n * Retrieves the latest screen context data associated with the given key.\n * \n * The screen context is a collection of key-value pairs that are stored in session storage.\n * The key is used to identify the screen context and the data is the value associated with the key.\n * \n * @param key The key for the screen context.\n * @returns The latest screen context data associated with the key, or null if the key is not found.\n */\n public getScreenContext(key: string): any | null {\n try {\n if (!key) return null;\n\n const screenContext = this.getSession(StorageConstants.screenContext);\n if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {\n return null;\n }\n\n // Return the latest screen context data (LIFO)\n return screenContext[key][screenContext[key].length - 1];\n } catch (error) {\n console.error('Error getting screen context:', error);\n return null;\n }\n }\n\n /**\n * Removes the latest screen context data associated with the given key from session storage.\n * \n * The screen context is a collection of key-value pairs that are stored in session storage.\n * The key is used to identify the screen context and the data is the value associated with the key.\n * \n * @param key The key for the screen context.\n * @returns The removed screen context data, or null if the key is not found or the data is not present.\n */\n public cleanScreenContext(key: string): any | null {\n try { \n if (!key) return null;\n\n const screenContext = this.getSession(StorageConstants.screenContext);\n \n if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {\n return null;\n }\n\n const removedData = screenContext[key].pop(); // Remove latest (LIFO)\n \n // Auto-cleanup: Remove key if array becomes empty\n if (screenContext[key].length === 0) {\n delete screenContext[key];\n }\n\n this.setSession(StorageConstants.screenContext, screenContext);\n return removedData;\n } catch (error) {\n console.error('Error cleaning screen context:', error);\n return null;\n }\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UtilService {\n // Will store the services from context\n private _isProxy = true;\n private _context: any = null;\n private _initialized = false;\n\n /**\n * Initializes the UtilService with context that contains service references\n * \n * @param context The context object containing service references\n * @returns A proxy that intercepts and delegates method calls to the appropriate service\n */\n init(context: any): any {\n if (this._initialized) {\n return this;\n }\n\n this._context = context;\n this._initialized = true;\n\n // Return a proxy that will intercept method calls\n return new Proxy(this, {\n get: (target: any, prop: string | symbol) => {\n // First check if the property exists directly on UtilService\n if (prop in target) {\n return (target as any)[prop];\n }\n\n // Convert symbol to string if needed\n const propName = prop.toString();\n\n // Check context services first\n if (this._context && Object.keys(this._context).length > 0) {\n // Loop through each service in the context\n for (const serviceName of Object.keys(this._context)) {\n const service = this._context[serviceName];\n if (service && typeof service === 'object' && propName in service && typeof service[propName] === 'function') {\n // Return the bound function from the service\n return service[propName].bind(service);\n }\n }\n }\n\n // If property not found anywhere, return undefined\n return undefined;\n }\n });\n }\n}","import { Injectable, Injector } from '@angular/core';\nimport { MetadataHelper } from '@techextensor/tab-core-utility';\nimport { UiService } from './ui/ui.service';\nimport { AuthUtilService } from './auth/auth.service';\nimport { FormService } from './ui/form.service';\nimport { TransitionService } from './workflow/transition.service';\nimport { AppService } from './app/app.service';\nimport { FileService } from './app/file.service';\nimport { ReportService } from './app/report.service';\nimport { ReleaseService } from './app/release.service';\nimport { AnalyticsService } from './app/analytics.service';\nimport { TranslatorService } from './app/translator.service';\nimport { CrudService } from './crud/crud.service';\nimport { HttpService } from './http/http.service';\nimport { StoreService } from './store/store.service';\nimport { UtilService } from './util/util.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TabSdk {\n public static app: AppService;\n public static auth: AuthUtilService;\n public static ui: UiService;\n public static form: FormService;\n public static transition: TransitionService;\n public static metadataUtils: MetadataHelper;\n public static file: FileService;\n public static report: ReportService;\n public static release: ReleaseService;\n public static analytics: AnalyticsService;\n public static translator: TranslatorService;\n public static crud: CrudService;\n public static http: HttpService;\n public static store: StoreService;\n public static util: any;\n\n\n /**\n * Initialize the SDK with necessary services\n */\n public static init(injector: Injector, context: any): void {\n // Expose to window for global access if needed\n (window as any).TabSdk = TabSdk;\n\n // Initialize services\n this.app = injector.get(AppService);\n this.auth = injector.get(AuthUtilService);\n this.ui = injector.get(UiService);\n this.form = injector.get(FormService);\n this.transition = injector.get(TransitionService);\n this.metadataUtils = injector.get(MetadataHelper);\n this.file = injector.get(FileService);\n this.report = injector.get(ReportService);\n this.release = injector.get(ReleaseService);\n this.analytics = injector.get(AnalyticsService);\n this.translator = injector.get(TranslatorService);\n this.crud = injector.get(CrudService);\n this.http = injector.get(HttpService);\n this.store = injector.get(StoreService);\n\n // Initialize util service with context\n const utilService = injector.get(UtilService);\n this.util = utilService.init(context);\n\n // Freeze the global object to prevent modifications\n Object.freeze(this);\n \n Object.freeze(this.app);\n Object.freeze(this.auth);\n Object.freeze(this.ui);\n Object.freeze(this.form);\n Object.freeze(this.transition);\n Object.freeze(this.file);\n Object.freeze(this.report);\n Object.freeze(this.release);\n Object.freeze(this.analytics);\n Object.freeze(this.translator);\n Object.freeze(this.crud);\n Object.freeze(this.http);\n Object.freeze(this.store);\n Object.freeze(this.util);\n }\n}","// SDK\nexport * from './lib/tab-sdk.service';\n\n// Enums\nexport * from './lib/enum/ui.enum';\nexport * from './lib/enum/store.enum';\n\n// Interfaces\nexport * from './lib/interface/ui.interface';\nexport * from './lib/interface/http.interface';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"techextensor-tab-sdk.mjs","sources":["../../../projects/tab-sdk/src/lib/enum/ui.enum.ts","../../../projects/tab-sdk/src/lib/ui/ui.service.ts","../../../projects/tab-sdk/src/lib/auth/auth.service.ts","../../../projects/tab-sdk/src/lib/ui/form.service.ts","../../../projects/tab-sdk/src/lib/workflow/transition.service.ts","../../../projects/tab-sdk/src/lib/app/app.service.ts","../../../projects/tab-sdk/src/lib/app/file.service.ts","../../../projects/tab-sdk/src/lib/app/report.service.ts","../../../projects/tab-sdk/src/lib/app/release.service.ts","../../../projects/tab-sdk/src/lib/app/analytics.service.ts","../../../projects/tab-sdk/src/lib/app/translator.service.ts","../../../projects/tab-sdk/src/lib/crud/crud.service.ts","../../../projects/tab-sdk/src/lib/http/http.service.ts","../../../projects/tab-sdk/src/lib/enum/store.enum.ts","../../../projects/tab-sdk/src/lib/store/store.service.ts","../../../projects/tab-sdk/src/lib/util/util.service.ts","../../../projects/tab-sdk/src/lib/model/component-state.model.ts","../../../projects/tab-sdk/src/lib/model/query-state.model.ts","../../../projects/tab-sdk/src/lib/model/script-state.model.ts","../../../projects/tab-sdk/src/lib/model/screen-state.model.ts","../../../projects/tab-sdk/src/lib/state/state.service.ts","../../../projects/tab-sdk/src/lib/workflow/workflow.service.ts","../../../projects/tab-sdk/src/lib/tab-sdk.service.ts","../../../projects/tab-sdk/src/lib/interface/state.interface.ts","../../../projects/tab-sdk/src/public-api.ts","../../../projects/tab-sdk/src/techextensor-tab-sdk.ts"],"sourcesContent":["export enum ScreenDisplayMode {\r\n Sidebar = 'sidebar',\r\n Popup = 'popup',\r\n SameTab = 'sameTab',\r\n NewTab = 'newTab',\r\n}\r\n\r\nexport enum NavigationType {\r\n NavigateToUrl = 'navigateToUrl',\r\n NavigateToSubdomain = 'navigateToSubdomain'\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n ScreenOpenOptions,\r\n NavigationOptions,\r\n BaseScreenOptions,\r\n NavigateToSubdomainOptions\r\n} from '../interface/ui.interface';\r\nimport { NavigationType, ScreenDisplayMode } from '../enum/ui.enum';\r\nimport { TabSdk } from '../tab-sdk.service';\r\nimport { BaseNotificationOptions, ConfirmationOptions, ConfirmationService, NotificationOptions, NotificationService, NotificationType } from '@techextensor/tab-core-utility';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UiService {\r\n private readonly _notificationService: NotificationService = inject(NotificationService);\r\n private readonly _confirmationService: ConfirmationService = inject(ConfirmationService);\r\n\r\n /**\r\n * Open a screen with the given options. The mode determines how the screen is\r\n * displayed.\r\n *\r\n * @param options The options for opening the screen.\r\n */\r\n openScreen(options: ScreenOpenOptions): void {\r\n const { mode, ...otherOptions } = options;\r\n\r\n switch (mode) {\r\n case ScreenDisplayMode.Sidebar:\r\n this.showSidebar(otherOptions);\r\n break;\r\n\r\n case ScreenDisplayMode.Popup:\r\n this.showDialog(otherOptions);\r\n break;\r\n\r\n case ScreenDisplayMode.SameTab:\r\n this.navigateTo(otherOptions);\r\n break;\r\n\r\n case ScreenDisplayMode.NewTab:\r\n this.openInNewTab(otherOptions);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Opens a screen in a sidebar.\r\n *\r\n * @param options The options for opening the sidebar.\r\n */\r\n showSidebar(options: BaseScreenOptions): void {\r\n const otherConfiguration = {\r\n ...(options.title && { title: options.title }),\r\n ...(options.width && { width: options.width }),\r\n ...(options.height && { height: options.height }),\r\n ...(options.customClass && { customClass: options.customClass }),\r\n ...(options.refresher && { refresher: options.refresher }),\r\n ...(options.closer && { closer: options.closer })\r\n };\r\n\r\n TabSdk.util?.openScreen(\r\n ScreenDisplayMode.Sidebar,\r\n options.screenId,\r\n options.reqtokens || undefined,\r\n options.submission || undefined,\r\n Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined\r\n );\r\n }\r\n\r\n /**\r\n * Opens a screen in a popup dialog.\r\n *\r\n * @param options The options for opening the dialog.\r\n */\r\n showDialog(options: BaseScreenOptions): void {\r\n const otherConfiguration = {\r\n ...(options.title && { title: options.title }),\r\n ...(options.width && { width: options.width }),\r\n ...(options.height && { height: options.height }),\r\n ...(options.customClass && { customClass: options.customClass }),\r\n ...(options.refresher && { refresher: options.refresher }),\r\n ...(options.closer && { closer: options.closer })\r\n };\r\n\r\n TabSdk.util?.openScreen(\r\n ScreenDisplayMode.Popup,\r\n options.screenId,\r\n options.reqtokens || undefined,\r\n options.submission || undefined,\r\n Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined\r\n );\r\n }\r\n\r\n /**\r\n * Navigates to a screen within the same tab.\r\n *\r\n * @param options - The options for navigation, including screenId and optional reqtokens.\r\n */\r\n navigateTo(options: NavigationOptions): void {\r\n TabSdk.util?.openScreen(\r\n ScreenDisplayMode.SameTab,\r\n options.screenId,\r\n options.reqtokens || undefined\r\n );\r\n }\r\n\r\n /**\r\n * Navigates to a screen in a new tab.\r\n *\r\n * @param options The options for navigation, including screenId and optional reqtokens.\r\n */\r\n openInNewTab(options: NavigationOptions): void {\r\n TabSdk.util?.openScreen(\r\n ScreenDisplayMode.NewTab,\r\n options.screenId,\r\n options.reqtokens || undefined\r\n );\r\n }\r\n\r\n /**\r\n * Navigates to the specified URL.\r\n *\r\n * @param url - The URL to navigate to.\r\n */\r\n navigateToUrl(params: { url: string, extras?: any, replaceUrl?: boolean }): void {\r\n TabSdk.util?.navigateTo({\r\n ...params,\r\n type: NavigationType.NavigateToUrl\r\n })\r\n }\r\n\r\n /**\r\n * Navigates to a specified subdomain using the provided options.\r\n *\r\n * @param options - The options for navigation, including subDomain, appCode, and url.\r\n */\r\n navigateToSubdomain(options: NavigateToSubdomainOptions): void {\r\n TabSdk.util?.navigateTo({\r\n ...options,\r\n type: NavigationType.NavigateToSubdomain\r\n })\r\n }\r\n\r\n /**\r\n * Retrieves the active screen ID from the current URL.\r\n *\r\n * @returns The screen ID if present in the URL, otherwise undefined.\r\n */\r\n getActiveUrlScreenId(): string | undefined {\r\n // Split the URL pathname into parts using the '/' character as a delimiter\r\n const urlParts = window?.location?.pathname?.split('/');\r\n // Extract the screen ID part and remove any query parameters\r\n const screenId = urlParts?.length > 1 ? urlParts?.[urlParts?.length - 1]?.split('?')[0] : undefined;\r\n // Return the screen ID or undefined if not found\r\n return screenId;\r\n }\r\n\r\n /**\r\n * Retrieves the active redirect URL by combining the active screen ID and any query parameters.\r\n *\r\n * @returns The constructed redirect URL or undefined if no screen ID is present.\r\n */\r\n getActiveRedirectUrl(): string | undefined {\r\n // Get the active screen ID from the current URL\r\n const screenId = this.getActiveUrlScreenId();\r\n let redirectURL;\r\n\r\n // Check if the current URL contains a screen ID\r\n if (screenId) {\r\n // Initialize the redirect URL with the screen ID\r\n redirectURL = screenId;\r\n\r\n // Parse the current URL's query parameters\r\n const queryParams = new URLSearchParams(window.location.search);\r\n\r\n // If there are query parameters, append them to the redirect URL\r\n if (queryParams.toString()) {\r\n redirectURL += `&${queryParams.toString()}`;\r\n }\r\n }\r\n\r\n // Return the constructed redirect URL or undefined\r\n return redirectURL;\r\n }\r\n\r\n /**\r\n * Show a notification to the user.\r\n *\r\n * @param options The options for the notification.\r\n */\r\n notify(options: NotificationOptions) {\r\n return this._notificationService.notify({\r\n type: options.type,\r\n message: TabSdk.translator.translate(options.message),\r\n ...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),\r\n ...(options?.configuration ? { configuration: options.configuration } : {}),\r\n });\r\n }\r\n\r\n /**\r\n * Displays a success notification to the user.\r\n *\r\n * @param options - The options for the notification, including message, title, and configuration.\r\n */\r\n showSuccess(options: BaseNotificationOptions) {\r\n return this.notify({\r\n ...options,\r\n type: NotificationType.Success,\r\n title: options?.title ?? 'Success'\r\n });\r\n }\r\n\r\n /**\r\n * Displays a warning notification to the user.\r\n *\r\n * @param options - The options for the notification, including message, title, and configuration.\r\n */\r\n showWarning(options: BaseNotificationOptions) {\r\n return this.notify({\r\n ...options,\r\n type: NotificationType.Warning,\r\n title: options?.title ?? 'Warning'\r\n });\r\n }\r\n\r\n /**\r\n * Displays an info notification to the user.\r\n *\r\n * @param options - The options for the notification, including message, title, and configuration.\r\n */\r\n showInfo(options: BaseNotificationOptions) {\r\n return this.notify({\r\n ...options,\r\n type: NotificationType.Info,\r\n title: options?.title ?? 'Info'\r\n });\r\n }\r\n\r\n /**\r\n * Displays an error notification to the user.\r\n *\r\n * @param options - The options for the notification, including message, title, and configuration.\r\n */\r\n showError(options: BaseNotificationOptions) {\r\n return this.notify({\r\n ...options,\r\n type: NotificationType.Error,\r\n title: options?.title ?? 'Error'\r\n });\r\n }\r\n\r\n /**\r\n * Clears a notification by ID.\r\n *\r\n * @param notificationId - The ID of the notification to clear.\r\n * @returns The cleared notification, or null if the notification doesn't exist.\r\n */\r\n clearNotification(notificationId: number) {\r\n return this._notificationService.clearNotification(notificationId);\r\n }\r\n\r\n /**\r\n * Displays a confirmation dialog to the user and returns a promise that resolves\r\n * to a boolean indicating whether the user confirmed the action.\r\n *\r\n * @param options - The options for the confirmation dialog, including title, message,\r\n * confirmText, cancelText, and visibility of buttons.\r\n * @returns A promise that resolves to true if the user confirms, false otherwise.\r\n */\r\n confirm(options?: ConfirmationOptions): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n this._confirmationService.confirm(options)\r\n ?.subscribe((isConfirmed: boolean) => {\r\n resolve(isConfirmed);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Displays a confirmation dialog to the user with a title and message that indicates\r\n * the user is about to delete an item. The confirmation dialog has a \"Delete\" and \"Cancel\"\r\n * button.\r\n *\r\n * @param options - The options for the confirmation dialog, including the item name and\r\n * optional message.\r\n * @returns A promise that resolves to true if the user confirms, false otherwise.\r\n */\r\n confirmDelete(options?: ConfirmationOptions): Promise<boolean> {\r\n return this.confirm({\r\n title: options?.title ?? `Are you sure you want to delete this record`,\r\n message: options?.message ?? `You are about to delete the selected record. Are you sure you want to proceed?`,\r\n primaryOption: 'Delete',\r\n });\r\n }\r\n\r\n /**\r\n * Displays a confirmation dialog to the user with a title and message that indicates\r\n * the user is about to discard changes to an item. The confirmation dialog has a \"Discard\"\r\n * and \"Cancel\" button.\r\n *\r\n * @param options - The options for the confirmation dialog, including the item name and\r\n * optional message.\r\n * @returns A promise that resolves to true if the user confirms, false otherwise.\r\n */\r\n confirmDiscard(options?: ConfirmationOptions): Promise<boolean> {\r\n return this.confirm({\r\n title: `Are you sure you want to discard your changes`,\r\n message: options?.message ?? `You are about to discard your changes. Are you sure you want to proceed?`,\r\n primaryOption: 'Discard',\r\n });\r\n }\r\n\r\n /**\r\n * Closes the confirmation dialog.\r\n *\r\n * This method can be used to manually close the confirmation dialog.\r\n */\r\n closeConfirmationDialog() {\r\n // Close the confirmation dialog\r\n this._confirmationService.closeDialog();\r\n }\r\n\r\n /**\r\n * Retrieves the confirmation emitter from the confirmation service.\r\n * \r\n * @returns The confirmation emitter used for emitting confirmation events.\r\n */\r\n getConformationEmitter() {\r\n return this._confirmationService.getConformationEmitter();\r\n }\r\n\r\n /**\r\n * Retrieves the dialog emitter from the confirmation service.\r\n *\r\n * The dialog emitter is an RxJS Subject that emits whenever a confirmation dialog is\r\n * opened or closed. The value emitted is a boolean indicating whether a dialog is\r\n * currently open.\r\n *\r\n * @returns The dialog emitter used for emitting confirmation dialog events.\r\n */\r\n getDialogEmitter() {\r\n return this._confirmationService.getDialogEmitter();\r\n }\r\n\r\n /**\r\n * Retrieves the remove emitter from the confirmation service.\r\n * \r\n * The remove emitter is an RxJS Subject that emits whenever a removal confirmation\r\n * dialog is opened or closed. The value emitted is a boolean indicating whether a\r\n * removal dialog is currently open.\r\n * \r\n * @returns The remove emitter used for emitting removal confirmation dialog events.\r\n */\r\n getRemoveEmitter() {\r\n return this._confirmationService.getRemoveEmitter();\r\n }\r\n\r\n /**\r\n * Copies the provided text to the clipboard and displays a success notification.\r\n *\r\n * @param text - The text to be copied to the clipboard.\r\n */\r\n copyToClipboard(text: string) {\r\n // Create a temporary input element to hold the text\r\n const tempInput = document.createElement(\"input\");\r\n\r\n // Set the input's value to the text to be copied\r\n tempInput.value = text;\r\n\r\n // Append the temporary input to the document body\r\n document.body.appendChild(tempInput);\r\n\r\n // Select the text in the input element\r\n tempInput.select();\r\n\r\n // Execute the copy command\r\n document.execCommand(\"copy\");\r\n\r\n // Remove the temporary input from the document body\r\n document.body.removeChild(tempInput);\r\n\r\n // Show a success notification\r\n this.showSuccess({\r\n message: \"\",\r\n title: \"Copied to clipboard!\",\r\n configuration: {\r\n timeOut: 1000,\r\n positionClass: 'toast-top-center',\r\n easing: 'ease-in',\r\n easeTime: 300,\r\n extendedTimeOut: 2000,\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Copies the current URL to the clipboard and displays a success notification.\r\n */\r\n copyCurrentUrlToClipboard() {\r\n // Use the copyToClipboard method to copy the current window URL\r\n this.copyToClipboard(window.location.href);\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n LoginUserRequest,\r\n AuthService,\r\n CommonApiResponse,\r\n RegisterTenant,\r\n ResetPasswordUserRequest,\r\n RefreshTokenRequest,\r\n UserDetailsRequest,\r\n ChangePasswordUserRequest\r\n} from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthUtilService {\r\n private readonly _authService: AuthService = inject(AuthService);\r\n\r\n /**\r\n * Authenticates a user based on the provided login credentials.\r\n * \r\n * @param credentials The login credentials.\r\n * @returns The response from the server.\r\n */\r\n async login(credentials: LoginUserRequest): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.signIn(credentials)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Registers a new tenant based on the provided details.\r\n * \r\n * @param tenantDetails The tenant details.\r\n * @returns The response from the server.\r\n */\r\n async registerTenant(tenantDetails: RegisterTenant): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.registerTenant(tenantDetails)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Registers a new user based on the provided user details.\r\n * \r\n * @param userDetails The user details.\r\n * @param headers Optional headers to pass to the server.\r\n * @returns The response from the server.\r\n */\r\n async registerUser(userDetails: any, headers?: Record<string, string>): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.register(userDetails, headers)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Resets a user's password based on the provided reset password credentials.\r\n * \r\n * @param credentials The reset password credentials.\r\n * @returns The response from the server.\r\n */\r\n async resetPassword(credentials: ResetPasswordUserRequest): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.resetPassword(credentials)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Changes a user's password based on the provided credentials.\r\n * \r\n * @param credentials The credentials containing the user's current and new password.\r\n * @returns The response from the server.\r\n */\r\n async changePassword(credentials: ChangePasswordUserRequest): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.changePassword(credentials)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Refreshes a user's token based on the provided refresh token details.\r\n * \r\n * @param tokenDetails The refresh token details.\r\n * @returns The response from the server.\r\n */\r\n async refreshToken(tokenDetails: RefreshTokenRequest): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.refreshToken(tokenDetails)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Gets the user details for the provided user details request.\r\n * \r\n * @param userDetailsRequest The user details request.\r\n * @param headers Optional headers to pass to the server.\r\n * @returns The response from the server.\r\n */\r\n async getUserDetails(userDetailsRequest: UserDetailsRequest, headers?: Record<string, string>): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._authService.getUserDetails(userDetailsRequest, headers)\r\n );\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { BuildFormComponentType, CommonApiResponse, GetScreenConfig, ProcessRequestPayload, TabFormioService, TemplateHelper, TemplateParsePayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormService {\r\n private readonly _tabFormioService: TabFormioService = inject(TabFormioService);\r\n private readonly _templateHelper: TemplateHelper = inject(TemplateHelper);\r\n\r\n /**\r\n * Retrieves a screen by its ID.\r\n *\r\n * @param screenId The ID of the screen to retrieve.\r\n * @param config Optional configuration object for the request.\r\n * @returns A promise of the response from the server.\r\n */\r\n async getScreen(screenId: string, config?: GetScreenConfig): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n this._tabFormioService.getScreen(screenId, config)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the data for a screen by its ID.\r\n *\r\n * @param screenId The ID of the screen to retrieve the data for.\r\n * @param requestPayload The request payload to send to the server.\r\n * @returns A promise of the response from the server.\r\n */\r\n async getScreenData(screenId: string, requestPayload: any): Promise<CommonApiResponse> {\r\n // Send the request to the server and get the response.\r\n const response = await firstValueFrom(\r\n this._tabFormioService.getScreenData(screenId, requestPayload)\r\n );\r\n\r\n // Return the response from the server.\r\n return response;\r\n }\r\n\r\n /**\r\n * Processes a request using the provided request payload.\r\n *\r\n * @param requestPayload The payload to be processed.\r\n * @returns A promise of the response from the server.\r\n */\r\n async processRequest(requestPayload: ProcessRequestPayload): Promise<CommonApiResponse> {\r\n // Send the request payload to the server and await the response.\r\n const response = await firstValueFrom(\r\n this._tabFormioService.processRequest(requestPayload)\r\n );\r\n\r\n // Return the server's response.\r\n return response;\r\n }\r\n\r\n /**\r\n * Builds Form.io components for the specified app object ID and type.\r\n *\r\n * @param appObjectId The ID of the app object to build the components for.\r\n * @param type The type of components to build.\r\n * @returns A promise of the response from the server.\r\n */\r\n async buildFormIOComponents(appObjectId: string, type: BuildFormComponentType): Promise<CommonApiResponse> {\r\n // Send the request to the server to build the components.\r\n const response = await firstValueFrom(\r\n this._tabFormioService.buildFormIOComponents(appObjectId, type)\r\n );\r\n\r\n // Return the response from the server.\r\n return response;\r\n }\r\n\r\n /**\r\n * Parses a template using the provided request payload.\r\n *\r\n * @param requestPayload The payload containing the template to be parsed.\r\n * @param onFailedParseOnServer If the parsing should be done on the server.\r\n * @returns A promise of the response from the server.\r\n */\r\n async parseTemplate(requestPayload: TemplateParsePayload, onFailedParseOnServer = false): Promise<CommonApiResponse> {\r\n // Send the request to the server to parse the template.\r\n const response = await firstValueFrom(\r\n this._templateHelper.templateParseUniversal(requestPayload, onFailedParseOnServer)\r\n );\r\n\r\n // Return the response from the server.\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { CommonApiResponse, NextStatusPayload, TabBlueprintService, UpdateStatusPayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { TabSdk } from '../tab-sdk.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TransitionService {\r\n private readonly _tabBlueprintService: TabBlueprintService = inject(TabBlueprintService);\r\n\r\n /**\r\n * Retrieves the next status based on the provided payload.\r\n *\r\n * @param payload - The payload containing information to determine the next status.\r\n * @returns A promise that resolves to the common API response.\r\n */\r\n async getNextStatus(payload: NextStatusPayload): Promise<CommonApiResponse> {\r\n // Await the response from the getNextStatus method of the tabBlueprintService\r\n const response = await firstValueFrom(\r\n this._tabBlueprintService.getNextStatus(payload)\r\n );\r\n // Return the obtained response\r\n return response;\r\n }\r\n\r\n /**\r\n * Updates the status of an entity based on the provided payload.\r\n *\r\n * @param payload - The payload containing information to update the status.\r\n * @returns A promise that resolves to the common API response.\r\n */\r\n async updateStatus(payload: UpdateStatusPayload): Promise<any> {\r\n const response = await firstValueFrom(\r\n TabSdk.util?.updateStatus(payload)\r\n );\r\n // Return the obtained response\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { AppHelper, CloneDsqPayload, CommonApiResponse, GetDataJsonByTypePayload, RefreshGlobalSearchDataPayload, RefreshRecordInfoDataPayload, RegisterAppObjectsPayload, SyncAppFieldsPayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppService {\r\n private _appHelper: AppHelper = inject(AppHelper);\r\n\r\n /**\r\n * Rebuilds the current app.\r\n * \r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async rebuild(payload: any = {}, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.rebuildApp(payload, headers)\r\n );\r\n // Return the response from the server.\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the schema for the current app.\r\n * \r\n * @returns A promise that resolves to a common API response containing the schema.\r\n */\r\n async getSchema(): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getSchema()\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the current app's permission.\r\n * \r\n * @returns A promise that resolves to a common API response containing the permission information.\r\n */\r\n async getPermission(): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getPermission()\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Registers app objects based on the provided payload.\r\n * \r\n * @param payload The register app objects payload.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async registerAppObject(payload: RegisterAppObjectsPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.registerAppObjects(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Clones a data source query (DSQ) based on the provided payload.\r\n * \r\n * @param payload The clone DSQ payload.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async cloneDsq(payload: CloneDsqPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.cloneDsq(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves data in JSON format based on the provided payload.\r\n * \r\n * @param payload The get data JSON by type payload.\r\n * @returns A promise that resolves to a common API response containing the data in JSON format.\r\n */\r\n async getDataJsonByType(payload: GetDataJsonByTypePayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getDataJsonByType(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Synchronizes the current app's fields based on the provided payload.\r\n * \r\n * @param payload The sync app fields payload.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async syncAppFields(payload: SyncAppFieldsPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.syncAppFields(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Sets the tab components based on the provided connection ID.\r\n * \r\n * @param connectionId The ID of the connection to set the components for.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async setTabComponents(connectionId: string): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.setTabComponents(connectionId)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Performs validation for the connection with the provided ID.\r\n * \r\n * @param connectionId The ID of the connection to validate.\r\n * @returns A promise that resolves to a common API response containing the validation result.\r\n */\r\n async performValidation(connectionId: string): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.performValidation(connectionId)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Tests the connection with the provided connection ID.\r\n * \r\n * @param connectionId The ID of the connection to test.\r\n * @returns A promise that resolves to a common API response containing the test result.\r\n */\r\n async testConnection(connectionId: string): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.testConnection(connectionId)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Refreshes the global search data based on the provided payload.\r\n * \r\n * @param payload The refresh global search data payload.\r\n * @returns A promise that resolves to a common API response containing the refreshed global search data.\r\n */\r\n async refreshGlobalSearchData(payload: RefreshGlobalSearchDataPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.refreshGlobalSearchData(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Refreshes the record information data based on the provided payload.\r\n * \r\n * @param payload The refresh record info data payload.\r\n * @returns A promise that resolves to a common API response containing the refreshed record info data.\r\n */\r\n async refreshRecordInfoData(payload: RefreshRecordInfoDataPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to await the completion of the observable\r\n const response = await firstValueFrom(\r\n this._appHelper.refreshRecordInfoData(payload)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves all documents from the database.\r\n * \r\n * @param headers Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing all documents.\r\n */\r\n async getAllDocumnets(headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getAllDocumnets(headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n async getDocumentById(id: string, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getDocumentById(id, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { ApiService, CommonApiResponse, MediaUploadHelper, UploadMediaFilesPayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { TabSdk } from '../tab-sdk.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FileService {\r\n private _mediaUploadHelper: MediaUploadHelper = inject(MediaUploadHelper);\r\n private apiService: ApiService = inject(ApiService);\r\n\r\n /**\r\n * Uploads media files using the provided payload and optional headers.\r\n *\r\n * @param payload The payload containing the media files to upload.\r\n * @param headers Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async uploadMediaFiles(payload: UploadMediaFilesPayload, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._mediaUploadHelper.uploadMediaFiles(payload, headers)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Removes a media file from the server using the provided media ID.\r\n *\r\n * @param mediaId The ID of the media file to remove.\r\n * @returns A promise that resolves to a common API response.\r\n */\r\n async removeMediaFile(mediaId: string): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._mediaUploadHelper.removeMediaFile(mediaId)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Processes an FTP URL and returns a processed URL.\r\n *\r\n * @param params - The parameters containing data, an optional defaultHeader, and an optional imgElement.\r\n * @returns A promise that resolves to the processed URL or null if an error occurs.\r\n */\r\n async processFtpUrl(params: { data: string, defaultHeader?: boolean, imgElement?: HTMLImageElement }): Promise<any> {\r\n // Return null if the data is invalid\r\n if (!params?.data || params?.data === 'null' || params?.data === 'undefined') return null;\r\n\r\n try {\r\n let url = params.data;\r\n\r\n // Extract the value from a JSON string if it contains 'value'\r\n if (url?.includes('value')) {\r\n url = JSON.parse(url).value;\r\n }\r\n\r\n // Check if the URL is an image from the FileManager service\r\n if (url.includes('FileManager/GetImage')) {\r\n const options: any = { responseType: 'blob' };\r\n\r\n // Add default headers if specified\r\n if (params.defaultHeader) {\r\n options.headers = TabSdk.util?.getDefaultAppHeaders();\r\n }\r\n\r\n // Fetch the image as a blob\r\n const blob = await firstValueFrom(this.apiService.getByUrl(url, options));\r\n\r\n // Create an object URL from the blob\r\n url = URL.createObjectURL(blob);\r\n }\r\n\r\n // Set the image element's source to the processed URL\r\n if (params.imgElement) {\r\n params.imgElement.src = url;\r\n params.imgElement.onload = null;\r\n }\r\n\r\n return url;\r\n\r\n } catch (e) {\r\n // Log any errors that occur during processing\r\n console.error(\"Error processing FTP\", e);\r\n return null;\r\n }\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { AppHelper, CommonApiResponse, ReportPayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReportService {\r\n private _appHelper: AppHelper = inject(AppHelper);\r\n\r\n /**\r\n * Exports a report based on the provided payload.\r\n * \r\n * @param payload The payload containing the parameters for the report.\r\n * @returns A promise that resolves to a common API response containing the report.\r\n */\r\n async export(payload: ReportPayload): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n this._appHelper.exportReport(payload)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Downloads a report based on the provided payload.\r\n * \r\n * @param payload The payload containing the parameters for the report.\r\n * @returns A promise that resolves to a common API response containing the report.\r\n */\r\n async download(payload: ReportPayload): Promise<Blob> {\r\n const response = await firstValueFrom(\r\n this._appHelper.downloadReport(payload)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Sends a report based on the provided payload.\r\n * \r\n * @param payload The payload containing the parameters for the report.\r\n * @returns A promise that resolves to a common API response containing the report.\r\n */\r\n async send(payload: ReportPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.sendReport(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { CommonApiResponse, TabReleaseService } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReleaseService {\r\n private _tabReleaseService: TabReleaseService = inject(TabReleaseService);\r\n\r\n /**\r\n * Retrieves the data differences between the current app version and the latest\r\n * released version of the app.\r\n * \r\n * @returns A promise that resolves to a common API response containing the data\r\n * differences in JSON format.\r\n */\r\n async getTabDataDiff(): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n this._tabReleaseService.getDataJsonDiff()\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the metadata differences between the current app version and the latest\r\n * released version of the app.\r\n * \r\n * @returns A promise that resolves to a common API response containing the metadata\r\n * differences in JSON format.\r\n */\r\n async getMetaDataDiff(): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n this._tabReleaseService.getMetaDataJsonDiff()\r\n );\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { AppHelper, CommonApiResponse, PerformanceAnalyticsPayload, ScreenPerformancePayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AnalyticsService {\r\n private _appHelper: AppHelper = inject(AppHelper);\r\n\r\n /**\r\n * Retrieves the summary of performance analytics based on the provided payload.\r\n * \r\n * @param payload The performance analytics payload.\r\n * @returns A promise that resolves to a common API response containing the performance analytics summary.\r\n */\r\n async getSummaryOfPerformance(payload: PerformanceAnalyticsPayload): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n this._appHelper.getSummaryOfPerformanceAnalytics(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the detail of performance analytics based on the provided payload.\r\n * \r\n * @param payload The performance analytics payload.\r\n * @returns A promise that resolves to a common API response containing the performance analytics detail.\r\n */\r\n async getDetailOfPerformance(payload: PerformanceAnalyticsPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.getDetailOfPerformanceAnalytics(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Inserts the screen performance statistics based on the provided payload.\r\n * \r\n * @param payload The screen performance payload containing the statistics to be inserted.\r\n * @returns A promise that resolves to a common API response containing the result of the insertion.\r\n */\r\n async insertScreenPerformance(payload: ScreenPerformancePayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._appHelper.insertScreenPerformanceStatistics(payload)\r\n );\r\n // Return the response from the server\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { firstValueFrom, Observable } from 'rxjs';\r\nimport { translatePayload, TranslationService } from '@techextensor/tab-core-utility';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TranslatorService {\r\n private readonly _translationService: TranslationService = inject(TranslationService);\r\n\r\n /**\r\n * Gets the current active language\r\n * \r\n * @returns The current language code\r\n */\r\n getCurrentLanguage(): string {\r\n return this._translationService.getCurrentLanguage();\r\n }\r\n\r\n /**\r\n * Gets an observable of the current language changes\r\n * \r\n * @returns An observable of the current language code\r\n */\r\n getLanguageChanges(): Observable<string> {\r\n return this._translationService.currentLanguage$;\r\n }\r\n\r\n /**\r\n * Changes the application language\r\n * \r\n * @param payload The translate payload containing language and languageCode\r\n * @returns A promise that resolves when the language has been changed\r\n */\r\n async changeLanguage(payload: translatePayload): Promise<any> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._translationService.changeLanguage(payload)\r\n );\r\n // Return the response\r\n return response;\r\n }\r\n\r\n /**\r\n * Translates a key to the current language\r\n * \r\n * @param key The translation key\r\n * @param params Optional parameters for interpolation\r\n * @returns The translated string\r\n */\r\n translate(key: string, params?: any): string {\r\n if(!key?.length) return key;\r\n return this._translationService.translate(key, params);\r\n }\r\n\r\n /**\r\n * Gets a translation as an observable for async operations\r\n * \r\n * @param key The translation key\r\n * @param params Optional parameters for interpolation\r\n * @returns An observable of the translated string\r\n */\r\n async getTranslation(key: string, params?: any): Promise<string> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const translation = await firstValueFrom(\r\n this._translationService.getTranslation(key, params)\r\n );\r\n // Return the translated string\r\n return translation;\r\n }\r\n\r\n /**\r\n * Registers an external library integration for translations\r\n * \r\n * @param handler Function to handle the integration with language and translations\r\n */\r\n registerIntegration(handler: (lang: string, translations: any) => void): void {\r\n this._translationService.registerIntegration(handler);\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { APISelectQuery, CommonApiResponse, DeletePayload, GetPayload, InsertPayload, UpdatePayload, ImprotDataPayload, RcordHistoryPayload, SearchDataPayload, TabCrudService, TabGetService, executeStoredProcedurePayload } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CrudService {\r\n private readonly _tabCrudService: TabCrudService = inject(TabCrudService);\r\n private readonly _tabGetService: TabGetService = inject(TabGetService);\r\n\r\n /**\r\n * Retrieves a record from the database using the provided payload.\r\n *\r\n * @param payload - The payload containing information to retrieve the record.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the retrieved record.\r\n */\r\n async executeDsq(payload: GetPayload, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._tabCrudService.get(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Inserts a record into the database using the provided payload.\r\n *\r\n * @param payload - The payload containing information to insert the record.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the inserted record.\r\n */\r\n async insert(payload: InsertPayload, headers?: any): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n // Call the insert method of the TabCrudService and pass the payload and headers\r\n this._tabCrudService.insert(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n /**\r\n * Inserts multiple records into the database using the provided payload.\r\n *\r\n * @param payload - The payload containing information to insert multiple records.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the inserted records.\r\n */\r\n async bulkInsert(payload: InsertPayload, headers?: any): Promise<CommonApiResponse> {\r\n const response = await firstValueFrom(\r\n // Call the bulkInsert method of the TabCrudService and pass the payload and headers\r\n this._tabCrudService.bulkInsert(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n /**\r\n * Updates a record in the database using the provided payload.\r\n *\r\n * @param payload - The payload containing information to update the record.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the updated record.\r\n */\r\n async update(payload: UpdatePayload, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n this._tabCrudService.update(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Deletes a record from the database using the provided payload.\r\n *\r\n * @param payload - The payload containing information to delete the record.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the deleted record.\r\n */\r\n async delete(payload: DeletePayload, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the delete method of the TabCrudService and pass the payload and headers\r\n this._tabCrudService.delete(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n // /**\r\n // * Executes a stored procedure using the provided payload.\r\n // *\r\n // * @param sp - The name of the stored procedure to execute.\r\n // * @param headers - Optional headers to pass to the server.\r\n // * @returns A promise that resolves to a common API response containing the result of executing the stored procedure.\r\n // */\r\n // async executeSp(sp: string, headers?: any): Promise<CommonApiResponse> {\r\n // // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n // const response = await firstValueFrom(\r\n // // Call the executeSp method of the TabCrudService and pass the name of the stored procedure and headers\r\n // this._tabCrudService.executeSp(sp, headers)\r\n // );\r\n\r\n // // Return the response from the server\r\n // return response;\r\n // }\r\n\r\n /**\r\n * Executes a stored procedure using the provided payload.\r\n *\r\n * @param payload - The payload containing information to execute the stored procedure.\r\n * @param headers - Optional headers to pass to the server.\r\n * @returns A promise that resolves to a common API response containing the result of executing the stored procedure.\r\n */\r\n async executeStoredProcedure(payload: executeStoredProcedurePayload, headers?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the executeStoredProcedure method of the TabCrudService and pass the payload and headers\r\n this._tabCrudService.executeStoredProcedure(payload, headers)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Executes a select query using the provided select query ID.\r\n *\r\n * @param selectQueryId - The ID of the select query to execute.\r\n * @param parameters - Optional parameters to pass to the select query.\r\n * @returns A promise that resolves to a common API response containing the result of executing the select query.\r\n */\r\n async executeSelectQuery(selectQueryId: string, parameters?: any, additionalConfig?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the executeSelectQueryById method of the TabGetService and pass the ID of the select query and parameters\r\n this._tabGetService.executeSelectQueryById(selectQueryId, parameters, additionalConfig)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Executes a select query using the provided select query data.\r\n *\r\n * @param data - The select query data.\r\n * @param parameters - Optional parameters to pass to the select query.\r\n * @returns A promise that resolves to a common API response containing the result of executing the select query.\r\n */\r\n async executeSelectExecutor(data: APISelectQuery, parameters?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the selectExecutor method of the TabGetService and pass the select query data and parameters\r\n this._tabGetService.selectExecutor(data, parameters)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Gets the search data using the provided search query and limit.\r\n *\r\n * @param searchQuery - The search query to search for.\r\n * @param limit - The number of records to limit the results to.\r\n * @param parameters - Optional parameters to pass to the search query.\r\n * @returns A promise that resolves to a common API response containing the search data.\r\n */\r\n async getSearchData(payload: SearchDataPayload, parameters?: any): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the getSearchData method of the TabGetService and pass the search query and limit\r\n this._tabGetService.getSearchData(payload, parameters)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves the history of records for a specified app object.\r\n *\r\n * @param appObjectId - The ID of the app object to retrieve the record history for.\r\n * @param recordIds - An array of record IDs to retrieve the history for.\r\n * @returns A promise that resolves to a common API response containing the record history.\r\n */\r\n async getRecordHistory(payload: RcordHistoryPayload): Promise<CommonApiResponse> {\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n const response = await firstValueFrom(\r\n // Call the getHistory method of the TabGetService and pass the app object ID and record IDs\r\n this._tabGetService.getHistory(payload)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Imports data into the database.\r\n *\r\n * @param data - The data to import.\r\n * @returns A promise that resolves to a common API response containing the result of importing the data.\r\n */\r\n async import(payload: ImprotDataPayload): Promise<any> {\r\n const response = await firstValueFrom(\r\n // Call the pmjayImport method of the TabGetService and pass the data to import\r\n this._tabGetService.pmjayImport(payload)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { HttpExecuteRequestPayload, TabGetService } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { TabSdk } from '../tab-sdk.service';\r\nimport { RequestStatus } from '../interface/http.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private readonly _tabGetService: TabGetService = inject(TabGetService);\r\n\r\n /**\r\n * Executes an HTTP request using the provided payload.\r\n * \r\n * @param payload - The payload containing information to execute the HTTP request.\r\n * @returns A promise that resolves to the response from the server.\r\n */\r\n async executeRequest(payload: HttpExecuteRequestPayload): Promise<any> {\r\n // Await the response from the executeHttpRequest method of the TabGetService\r\n const response = await firstValueFrom(\r\n this._tabGetService.executeHttpRequest(payload)\r\n );\r\n\r\n // Return the response from the server\r\n return response;\r\n }\r\n\r\n /**\r\n * Generates an HTTP request for the given data source query name.\r\n * \r\n * @param dataSourceQueryName - The name of the data source query for which to generate the HTTP request.\r\n * @returns A promise that resolves to the generated HTTP request.\r\n */\r\n async generateRequest(dataSourceQueryName: string): Promise<any> {\r\n // Await the response from the generateHttpRequest method of the TabGetService\r\n const response = await firstValueFrom(\r\n this._tabGetService.generateHttpRequest(dataSourceQueryName)\r\n );\r\n\r\n // Return the generated HTTP request\r\n return response;\r\n }\r\n\r\n /**\r\n * Sets the request status for the given URL.\r\n * \r\n * @param status - The request status to set.\r\n */\r\n setRequestStatus(status: RequestStatus): void {\r\n TabSdk.util?.setLatestStatus(status);\r\n }\r\n\r\n /**\r\n * Gets the request status for the given URL.\r\n * \r\n * @param url - The URL for which to get the request status.\r\n * @returns The request status for the given URL.\r\n */\r\n getRequestStatus(url: string): RequestStatus | undefined {\r\n return TabSdk.util?.getLatestStatus(url);\r\n }\r\n}","export enum StorageType {\r\n Local = 'local',\r\n Session = 'session'\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { LocalStorageService, SessionStorageService, StorageConstants } from '@techextensor/tab-core-utility';\r\nimport { StorageType } from '../enum/store.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StoreService {\r\n private readonly _localStorageService: LocalStorageService = inject(LocalStorageService);\r\n private readonly _sessionStorageService: SessionStorageService = inject(SessionStorageService);\r\n\r\n /**\r\n * Retrieves the tenant ID from the local storage.\r\n */\r\n get tenantId(): string | null {\r\n return this.getOrgInfo()?.Id || null;\r\n }\r\n\r\n /**\r\n * Sets the tenant ID in the organization info.\r\n * \r\n * @param value - The tenant ID to set.\r\n */\r\n set tenantId(value: string | null) {\r\n // Retrieve the existing organization info or initialize a new object\r\n const orgInfo = this.getOrgInfo() || {};\r\n\r\n // Update the tenant ID value\r\n orgInfo.Id = value;\r\n\r\n // Save the updated organization info back to storage\r\n this.setOrgInfo(orgInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the tenant name from the organization info.\r\n */\r\n get tenantName(): string | null {\r\n // Retrieve the organization info from storage\r\n const orgInfo = this.getOrgInfo();\r\n\r\n // Return the tenant name if it exists, otherwise return null\r\n return orgInfo?.OrganizationName || null;\r\n }\r\n\r\n /**\r\n * Sets the tenant name in the organization info.\r\n * \r\n * @param value - The tenant name to set.\r\n */\r\n set tenantName(value: string | null) {\r\n // Retrieve the existing organization info or initialize a new object\r\n const orgInfo = this.getOrgInfo() || {};\r\n\r\n // Update the organization name value\r\n orgInfo.OrganizationName = value;\r\n\r\n // Save the updated organization info back to storage\r\n this.setOrgInfo(orgInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the subdomain from the organization info.\r\n * \r\n * @returns The subdomain if it exists, otherwise `null`.\r\n */\r\n get subdomain(): string | null {\r\n // Retrieve the organization info from storage\r\n const orgInfo = this.getOrgInfo();\r\n\r\n // Return the subdomain if it exists, otherwise return null\r\n return orgInfo?.Subdomain || null;\r\n }\r\n\r\n /**\r\n * Sets the subdomain in the organization info.\r\n * \r\n * @param value - The subdomain to set.\r\n */\r\n set subdomain(value: string | null) {\r\n // Retrieve the existing organization info or initialize a new object\r\n const orgInfo = this.getOrgInfo() || {};\r\n\r\n // Update the subdomain value\r\n orgInfo.Subdomain = value;\r\n\r\n // Save the updated organization info back to storage\r\n this.setOrgInfo(orgInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the locale settings from the organization info.\r\n * \r\n * @returns The locale settings if they exist, otherwise `null`.\r\n */\r\n get orgLocaleSettings(): any {\r\n // Retrieve the locale settings from the organization info\r\n let localSettings = this.getOrgInfo()?.LocaleSettings;\r\n\r\n // If the locale settings are a string, parse them as JSON\r\n if (typeof localSettings === 'string') {\r\n localSettings = JSON.parse(localSettings);\r\n }\r\n\r\n // Return the locale settings\r\n return localSettings;\r\n }\r\n\r\n /**\r\n * Sets the locale settings in the organization info.\r\n * \r\n * @param value - The locale settings to set.\r\n */\r\n set orgLocaleSettings(value: any) {\r\n // Retrieve the existing organization info or initialize a new object\r\n const orgInfo = this.getOrgInfo() || {};\r\n\r\n // Update the locale settings value\r\n orgInfo.LocaleSettings = value;\r\n\r\n // Save the updated organization info back to storage\r\n this.setOrgInfo(orgInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the app ID from the app info.\r\n * \r\n * @returns The app ID if it exists, otherwise `null`.\r\n */\r\n get appId(): string | null {\r\n return this.getAppInfo()?.Id || null;\r\n }\r\n\r\n /**\r\n * Sets the app ID in the app info.\r\n * \r\n * @param value - The app ID to set.\r\n */\r\n set appId(value: string | null) {\r\n // Retrieve the existing app info or initialize a new object\r\n const appInfo = this.getAppInfo() || {};\r\n\r\n // Update the app ID value\r\n appInfo.Id = value;\r\n\r\n // Save the updated app info back to storage\r\n this.setAppInfo(appInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the app name from the app info.\r\n * \r\n * @returns The app name if it exists, otherwise `null`.\r\n */\r\n get appName(): string | null {\r\n // Retrieve and return the app name from the app info, or return null if it doesn't exist\r\n return this.getAppInfo()?.AppName || null;\r\n }\r\n\r\n /**\r\n * Sets the app name in the app info.\r\n * \r\n * @param value - The app name to set.\r\n */\r\n set appName(value: string | null) {\r\n // Retrieve the existing app info or initialize a new object\r\n const appInfo = this.getAppInfo() || {};\r\n\r\n // Update the app name value\r\n appInfo.AppName = value;\r\n\r\n // Save the updated app info back to storage\r\n this.setAppInfo(appInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the environment ID from the environment info.\r\n * \r\n * @returns The environment ID if it exists, otherwise `null`.\r\n */\r\n get environmentId(): string | null {\r\n // Retrieve and return the environment ID from the environment info, or return null if it doesn't exist\r\n return this.getEnvironmentInfo()?.Id || null;\r\n }\r\n\r\n /**\r\n * Sets the environment ID in the environment info.\r\n * \r\n * @param value - The environment ID to set.\r\n */\r\n set environmentId(value: string | null) {\r\n // Retrieve the existing environment info or initialize a new object\r\n const environmentInfo = this.getEnvironmentInfo() || {};\r\n\r\n // Update the environment ID value\r\n environmentInfo.Id = value;\r\n\r\n // Save the updated environment info back to storage\r\n this.setEnvironmentInfo(environmentInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the environment name from the environment info.\r\n * \r\n * @returns The environment name if it exists, otherwise `null`.\r\n */\r\n get environmentName(): string | null {\r\n // Retrieve and return the environment name from the environment info, or return null if it doesn't exist\r\n return this.getEnvironmentInfo()?.Name || null;\r\n }\r\n\r\n /**\r\n * Sets the environment name in the environment info.\r\n * \r\n * @param value - The environment name to set.\r\n */\r\n set environmentName(value: string | null) {\r\n // Retrieve the existing environment info or initialize a new object\r\n const environmentInfo = this.getEnvironmentInfo() || {};\r\n\r\n // Update the environment name value\r\n environmentInfo.Name = value;\r\n\r\n // Save the updated environment info back to storage\r\n this.setEnvironmentInfo(environmentInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the token from the token info.\r\n * \r\n * @returns The token if it exists, otherwise `null`.\r\n */\r\n get token(): string | null {\r\n // Retrieve and return the token from the token info, or return null if it doesn't exist\r\n return this.getTokenInfo()?.token || null;\r\n }\r\n\r\n /**\r\n * Sets the token in the token info.\r\n * \r\n * @param value - The token to set.\r\n */\r\n set token(value: string | null) {\r\n // Retrieve the existing token info or initialize a new object\r\n const tokenInfo = this.getTokenInfo() || {};\r\n\r\n // Update the token value\r\n tokenInfo.token = value;\r\n\r\n // Save the updated token info back to storage\r\n this.setTokenInfo(tokenInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the refresh token from the token info.\r\n * \r\n * @returns The refresh token if it exists, otherwise `null`.\r\n */\r\n get refreshToken(): string | null {\r\n // Retrieve and return the refresh token from the token info, or return null if it doesn't exist\r\n return this.getTokenInfo()?.refreshToken || null;\r\n }\r\n\r\n /**\r\n * Sets the refresh token in the token info.\r\n * \r\n * @param value - The refresh token to set.\r\n */\r\n set refreshToken(value: string | null) {\r\n // Retrieve the existing token info or initialize a new object\r\n const tokenInfo = this.getTokenInfo() || {};\r\n\r\n // Update the refresh token value\r\n tokenInfo.refreshToken = value;\r\n\r\n // Save the updated token info back to storage\r\n this.setTokenInfo(tokenInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the refresh token expiry time from the token info.\r\n * \r\n * @returns The refresh token expiry time if it exists, otherwise `null`.\r\n */\r\n get refreshTokenExpiry(): string | null {\r\n // Retrieve and return the refresh token expiry time from the token info,\r\n // or return null if it doesn't exist\r\n return this.getTokenInfo()?.refreshTokenExpiry || null;\r\n }\r\n\r\n /**\r\n * Sets the refresh token expiry time in the token info.\r\n * \r\n * @param value - The refresh token expiry time to set.\r\n */\r\n set refreshTokenExpiry(value: string | null) {\r\n // Retrieve the existing token info or initialize a new object\r\n const tokenInfo = this.getTokenInfo() || {};\r\n\r\n // Update the refresh token expiry time\r\n tokenInfo.refreshTokenExpiry = value;\r\n\r\n // Save the updated token info back to storage\r\n this.setTokenInfo(tokenInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the static token from the token info.\r\n * \r\n * @returns The static token if it exists, otherwise `null`.\r\n */\r\n get staticToken(): string | null {\r\n // Retrieve and return the static token from the token info,\r\n // or return null if it doesn't exist\r\n return this.getTokenInfo()?.staticToken || null;\r\n }\r\n\r\n /**\r\n * Sets the static token in the token info.\r\n * \r\n * @param value - The static token to set.\r\n */\r\n set staticToken(value: string | null) {\r\n // Retrieve the existing token info or initialize a new object\r\n const tokenInfo = this.getTokenInfo() || {};\r\n\r\n // Update the static token value\r\n tokenInfo.staticToken = value;\r\n\r\n // Save the updated token info back to storage\r\n this.setTokenInfo(tokenInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the user ID from the user info.\r\n * \r\n * @returns The user ID if it exists, otherwise `null`.\r\n */\r\n get userId(): string | null {\r\n // Retrieve and return the user ID from the user info, or return null if it doesn't exist\r\n return this.getUserInfo()?.user?.Id || null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's roles from the user information.\r\n * \r\n * @returns An array of user roles if they exist, otherwise `null`.\r\n */\r\n get userRoles(): any[] | null {\r\n // Retrieve and return the user roles from the user info, or return null if they don't exist\r\n return this.getUserInfo()?.user?.Roles || null;\r\n }\r\n\r\n /**\r\n * Retrieves the user's teams from the user information.\r\n * \r\n * @returns An array of user teams if they exist, otherwise `null`.\r\n */\r\n get userTeams(): any[] | null {\r\n // Retrieve and return the user teams from the user info, or return null if they don't exist\r\n return this.getUserInfo()?.user?.Teams || null;\r\n }\r\n\r\n /**\r\n * Removes the tenant ID from the organization information.\r\n */\r\n removeTenantId(): void {\r\n this.removeFromOrgInfo('Id');\r\n }\r\n\r\n /**\r\n * Removes the tenant name from the organization information.\r\n */\r\n removeTenantName(): void {\r\n // Remove the tenant name from the organization information\r\n this.removeFromOrgInfo('OrganizationName');\r\n }\r\n\r\n /**\r\n * Removes the subdomain from the organization information.\r\n * \r\n * This removes the subdomain property from the organization information\r\n * stored in local storage.\r\n */\r\n removeSubdomain(): void {\r\n // Remove the subdomain from the organization information\r\n this.removeFromOrgInfo('Subdomain');\r\n }\r\n\r\n /**\r\n * Removes the app ID from the app information.\r\n * \r\n * This removes the app ID property from the app information stored in local storage.\r\n */\r\n removeAppId(): void {\r\n this.removeFromAppInfo('Id');\r\n }\r\n\r\n /**\r\n * Removes the app name from the app information.\r\n * \r\n * This removes the app name property from the app information stored in local storage.\r\n */\r\n removeAppName(): void {\r\n this.removeFromAppInfo('AppName');\r\n }\r\n\r\n /**\r\n * Removes the environment ID from the environment information.\r\n * \r\n * This removes the ID property from the environment information\r\n * stored in local storage.\r\n */\r\n removeEnvironmentId(): void {\r\n // Remove the environment ID from the environment information\r\n this.removeFromEnvironmentInfo('Id');\r\n }\r\n\r\n /**\r\n * Removes the environment name from the environment information.\r\n * \r\n * This removes the Name property from the environment information\r\n * stored in local storage.\r\n */\r\n removeEnvironmentName(): void {\r\n // Remove the environment name from the environment information\r\n this.removeFromEnvironmentInfo('Name');\r\n }\r\n\r\n /**\r\n * Removes the token from the token info.\r\n * \r\n * This removes the token property from the token information stored in session\r\n * storage.\r\n */\r\n removeToken(): void {\r\n // Remove the token from the token info\r\n this.removeFromTokenInfo('token');\r\n }\r\n\r\n /**\r\n * Removes the refresh token from the token information.\r\n * \r\n * This removes the refresh token property from the token information stored in session\r\n * storage.\r\n */\r\n removeRefreshToken(): void {\r\n this.removeFromTokenInfo('refreshToken');\r\n }\r\n\r\n /**\r\n * Removes the refresh token expiry time from the token information.\r\n * \r\n * This removes the refresh token expiry time property from the token information stored in session\r\n * storage.\r\n */\r\n removeRefreshTokenExpiry(): void {\r\n // Remove the refresh token expiry from the token info\r\n this.removeFromTokenInfo('refreshTokenExpiry');\r\n }\r\n\r\n /**\r\n * Removes the static token from the token information.\r\n * \r\n * This removes the static token property from the token information stored in session\r\n * storage.\r\n */\r\n removeStaticToken(): void {\r\n // Remove the static token from the token info\r\n this.removeFromTokenInfo('staticToken');\r\n }\r\n\r\n /**\r\n * Removes the specified key from the organization information.\r\n * \r\n * This removes the specified key from the organization information stored in local storage.\r\n * \r\n * @param key The key to remove from the organization information.\r\n */\r\n private removeFromOrgInfo(key: string): void {\r\n const orgInfo = this.getOrgInfo();\r\n if (orgInfo) {\r\n // Remove the key from the organization information\r\n delete orgInfo[key];\r\n // Save the updated organization information back to local storage\r\n this.setOrgInfo(orgInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the specified key from the app information.\r\n * \r\n * This removes the specified key from the app information stored in session\r\n * storage.\r\n * \r\n * @param key The key to remove from the app information.\r\n */\r\n private removeFromAppInfo(key: string): void {\r\n const appInfo = this.getAppInfo();\r\n if (appInfo) {\r\n // Remove the key from the app information\r\n delete appInfo[key];\r\n // Save the updated app information back to session storage\r\n this.setAppInfo(appInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the specified key from the environment information.\r\n * \r\n * This removes the specified key from the environment information stored in session\r\n * storage.\r\n * \r\n * @param key The key to remove from the environment information.\r\n */\r\n private removeFromEnvironmentInfo(key: string): void {\r\n const environmentInfo = this.getEnvironmentInfo();\r\n if (environmentInfo) {\r\n // Remove the key from the environment information\r\n delete environmentInfo[key];\r\n // Save the updated environment information back to session storage\r\n this.setEnvironmentInfo(environmentInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the specified key from the token information.\r\n * \r\n * This removes the specified key from the token information stored in session\r\n * storage.\r\n * \r\n * @param key The key to remove from the token information.\r\n */\r\n private removeFromTokenInfo(key: string): void {\r\n const tokenInfo = this.getTokenInfo();\r\n if (tokenInfo) {\r\n // Remove the key from the token information\r\n delete tokenInfo[key];\r\n // Save the updated token information back to session storage\r\n this.setTokenInfo(tokenInfo);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the organization information from local storage.\r\n * \r\n * @returns The organization information object or null if it doesn't exist.\r\n */\r\n getOrgInfo(): any {\r\n return this.getFromStorage(StorageType.Local, StorageConstants.orgInfo);\r\n }\r\n\r\n /**\r\n * Saves the organization information to local storage.\r\n * \r\n * @param orgInfo - The organization information to store.\r\n */\r\n setOrgInfo(orgInfo: any): void {\r\n // temp once remove from dropdown, we can remove this\r\n // if (orgInfo.Id) {\r\n // this.setSession(StorageConstants.TenantId, orgInfo.Id);\r\n // } else {\r\n // this.removeSession(StorageConstants.TenantId);\r\n // }\r\n\r\n // Save the organization info to local storage\r\n this.setToStorage(StorageType.Local, StorageConstants.orgInfo, orgInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the app information from session storage.\r\n * \r\n * @returns The app information object or null if it doesn't exist.\r\n */\r\n getAppInfo(): any {\r\n return this.getFromStorage(StorageType.Session, StorageConstants.appInfo);\r\n }\r\n\r\n /**\r\n * Saves the app information to session storage.\r\n * \r\n * @param appInfo - The app information to store.\r\n */\r\n setAppInfo(appInfo: any): void {\r\n // temp once remove from dropdown, we can remove this\r\n // if (appInfo?.Id) {\r\n // this.setSession(StorageConstants.AppId, appInfo.Id);\r\n // } else {\r\n // this.removeSession(StorageConstants.AppId);\r\n // }\r\n\r\n // if (appInfo?.AppName) {\r\n // this.setSession(StorageConstants.applicationCode, appInfo.AppName);\r\n // } else {\r\n // this.removeSession(StorageConstants.applicationCode);\r\n // }\r\n\r\n // Save the app info to session storage\r\n this.setToStorage(StorageType.Session, StorageConstants.appInfo, appInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the environment information from session storage.\r\n * \r\n * @returns The environment information object or null if it doesn't exist.\r\n */\r\n getEnvironmentInfo(): any {\r\n return this.getFromStorage(StorageType.Session, StorageConstants.environmentInfo);\r\n }\r\n\r\n /**\r\n * Saves the environment information to session storage.\r\n * \r\n * @param envInfo - The environment information to store.\r\n */\r\n setEnvironmentInfo(envInfo: any): void {\r\n // Save the environment info to session storage\r\n this.setToStorage(StorageType.Session, StorageConstants.environmentInfo, envInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the token information from session storage.\r\n * \r\n * @returns The token information object or null if it doesn't exist.\r\n */\r\n getTokenInfo(): any {\r\n return this.getFromStorage(StorageType.Local, StorageConstants.tokenInfo);\r\n }\r\n\r\n /**\r\n * Saves the token information to session storage.\r\n * \r\n * @param tokenInfo - The token information to store.\r\n */\r\n setTokenInfo(tokenInfo: any): void {\r\n // temp once remove from dropdown, we can remove this\r\n // if (tokenInfo?.token) {\r\n // this.setSession(StorageConstants.token, tokenInfo?.token);\r\n // } else {\r\n // this.removeSession(StorageConstants.token);\r\n // }\r\n\r\n // Save the token info to session storage\r\n this.setToStorage(StorageType.Local, StorageConstants.tokenInfo, tokenInfo);\r\n }\r\n\r\n /**\r\n * Retrieves the user information from local storage.\r\n * \r\n * @returns The user information object or null if it doesn't exist.\r\n */\r\n getUserInfo(): any {\r\n return this.getFromStorage(StorageType.Local, StorageConstants.userInfo);\r\n }\r\n\r\n /**\r\n * Sets the user information in local storage.\r\n * \r\n * @param userInfo The user information to store.\r\n */\r\n setUserInfo(userInfo: any): void {\r\n // Save the user info to local storage\r\n this.setToStorage(StorageType.Local, StorageConstants.userInfo, userInfo);\r\n }\r\n\r\n /**\r\n * Sets a key-value pair in local storage.\r\n * \r\n * @param key The key to store the value under.\r\n * @param data The value to store.\r\n */\r\n setLocal(key: string, data: any): void {\r\n this.setToStorage(StorageType.Local, key, data);\r\n }\r\n\r\n /**\r\n * Retrieves a value from local storage by key.\r\n * \r\n * @param key The key associated with the value to retrieve.\r\n * @returns The value stored in local storage, or null if it doesn't exist.\r\n */\r\n getLocal(key: string): any {\r\n return this.getFromStorage(StorageType.Local, key);\r\n }\r\n\r\n /**\r\n * Removes a key-value pair from local storage.\r\n * \r\n * @param key The key associated with the value to remove.\r\n */\r\n removeLocal(key: string): void {\r\n // Remove the key from local storage\r\n this.removeFromStorage(StorageType.Local, key);\r\n }\r\n\r\n /**\r\n * Clears all local storage data.\r\n */\r\n clearLocal(): void {\r\n this.clearStorage(StorageType.Local);\r\n }\r\n\r\n /**\r\n * Sets a key-value pair in session storage.\r\n * \r\n * @param key The key to store the value under.\r\n * @param data The value to store.\r\n */\r\n setSession(key: string, data: any): void {\r\n // Save data to session storage under the specified key\r\n this.setToStorage(StorageType.Session, key, data);\r\n }\r\n\r\n /**\r\n * Retrieves a value from session storage by key.\r\n * \r\n * @param key The key associated with the value to retrieve.\r\n * @returns The value stored in session storage, or null if it doesn't exist.\r\n */\r\n getSession(key: string): any {\r\n // Retrieve the value from session storage\r\n return this.getFromStorage(StorageType.Session, key);\r\n }\r\n\r\n /**\r\n * Removes a key-value pair from session storage.\r\n * \r\n * @param key The key associated with the value to remove.\r\n */\r\n removeSession(key: string): void {\r\n // Remove the key from session storage\r\n this.removeFromStorage(StorageType.Session, key);\r\n }\r\n\r\n /**\r\n * Clears all session storage data.\r\n */\r\n clearSession(): void {\r\n // Remove all key-value pairs from session storage\r\n this.clearStorage(StorageType.Session);\r\n }\r\n\r\n /**\r\n * Clears all authentication-related data from local and session storage.\r\n * \r\n * This method is typically used after a user logs out.\r\n */\r\n clearAuth(): void {\r\n // Remove user info from local storage\r\n this.removeFromStorage(StorageType.Local, StorageConstants.userInfo);\r\n // Remove token info from session storage\r\n this.removeFromStorage(StorageType.Local, StorageConstants.tokenInfo);\r\n }\r\n\r\n /**\r\n * Generic getter method for retrieving data from either local or session storage.\r\n * \r\n * @param storage The type of storage to retrieve from.\r\n * @param key The key associated with the data to retrieve.\r\n * @returns The retrieved data, deserialized from JSON if it was stored as a string.\r\n */\r\n private getFromStorage(storage: StorageType, key: string): any {\r\n // Retrieve the data from the specified storage\r\n const data = storage === StorageType.Local\r\n ? this._localStorageService.getLocalStorage(key)\r\n : this._sessionStorageService.getSessionStorage(key);\r\n\r\n try {\r\n // Attempt to parse the data as JSON\r\n return typeof data === 'string' ? JSON.parse(data) : data;\r\n } catch (e) {\r\n // If the data cannot be parsed, return it as is\r\n return data;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a key-value pair in the specified storage type.\r\n * \r\n * @param storage The type of storage to use (local or session).\r\n * @param key The key under which the data should be stored.\r\n * @param data The data to store.\r\n */\r\n private setToStorage(storage: StorageType, key: string, data: any): void {\r\n // Check if the storage type is local\r\n if (storage === StorageType.Local) {\r\n // Set the data in local storage\r\n this._localStorageService.setLocalStorage(key, data);\r\n } else {\r\n // Otherwise, set the data in session storage\r\n this._sessionStorageService.setSessionStorage(key, data);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a key-value pair from the specified storage type.\r\n * \r\n * This method removes the given key from either local or session storage \r\n * based on the specified storage type.\r\n * \r\n * @param storage The type of storage to remove from (local or session).\r\n * @param key The key associated with the value to remove.\r\n */\r\n private removeFromStorage(storage: StorageType, key: string): void {\r\n if (storage === StorageType.Local) {\r\n // Remove the key from local storage\r\n this._localStorageService.removeLocalStorage(key);\r\n } else {\r\n // Remove the key from session storage\r\n this._sessionStorageService.removeSessionStorage(key);\r\n }\r\n }\r\n\r\n /**\r\n * Clears all key-value pairs from the specified storage type.\r\n * \r\n * This method clears all key-value pairs from either local or session storage\r\n * based on the specified storage type.\r\n * \r\n * @param storage The type of storage to clear (local or session).\r\n */\r\n private clearStorage(storage: StorageType): void {\r\n if (storage === StorageType.Local) {\r\n // Clear local storage\r\n this._localStorageService.clearLocalStorage();\r\n } else {\r\n // Clear session storage\r\n this._sessionStorageService.clearSessionStorage();\r\n }\r\n }\r\n\r\n /**\r\n * Adds a screen context with the given key and data.\r\n * \r\n * The screen context is a collection of key-value pairs that are stored in session storage.\r\n * The key is used to identify the screen context and the data is the value associated with the key.\r\n * \r\n * @param key The key for the screen context.\r\n * @param data The data to store in the screen context.\r\n */\r\n public addScreenContext(key: string, data: any): void {\r\n try {\r\n if (!key || data == null) return;\r\n\r\n const screenContext = this.getSession(StorageConstants.screenContext) || {};\r\n\r\n if (!screenContext[key]) {\r\n // Initialize the key with an empty array if it doesn't exist\r\n screenContext[key] = [];\r\n } else if (screenContext[key].length >= 5) {\r\n // Remove the oldest data if the array exceeds 5 elements\r\n screenContext[key].shift();\r\n }\r\n\r\n // Add the data to the existing array\r\n screenContext[key].push(data);\r\n // Update the screen context with the new data\r\n this.setSession(StorageConstants.screenContext, screenContext);\r\n } catch (error) {\r\n console.error('Error adding screen context:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the latest screen context data associated with the given key.\r\n * \r\n * The screen context is a collection of key-value pairs that are stored in session storage.\r\n * The key is used to identify the screen context and the data is the value associated with the key.\r\n * \r\n * @param key The key for the screen context.\r\n * @returns The latest screen context data associated with the key, or null if the key is not found.\r\n */\r\n public getScreenContext(key: string): any | null {\r\n try {\r\n if (!key) return null;\r\n\r\n const screenContext = this.getSession(StorageConstants.screenContext);\r\n if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {\r\n return null;\r\n }\r\n\r\n // Return the latest screen context data (LIFO)\r\n return screenContext[key][screenContext[key].length - 1];\r\n } catch (error) {\r\n console.error('Error getting screen context:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Removes the latest screen context data associated with the given key from session storage.\r\n * \r\n * The screen context is a collection of key-value pairs that are stored in session storage.\r\n * The key is used to identify the screen context and the data is the value associated with the key.\r\n * \r\n * @param key The key for the screen context.\r\n * @returns The removed screen context data, or null if the key is not found or the data is not present.\r\n */\r\n public cleanScreenContext(key: string): any | null {\r\n try { \r\n if (!key) return null;\r\n\r\n const screenContext = this.getSession(StorageConstants.screenContext);\r\n \r\n if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {\r\n return null;\r\n }\r\n\r\n const removedData = screenContext[key].pop(); // Remove latest (LIFO)\r\n \r\n // Auto-cleanup: Remove key if array becomes empty\r\n if (screenContext[key].length === 0) {\r\n delete screenContext[key];\r\n }\r\n\r\n this.setSession(StorageConstants.screenContext, screenContext);\r\n return removedData;\r\n } catch (error) {\r\n console.error('Error cleaning screen context:', error);\r\n return null;\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilService {\r\n // Will store the services from context\r\n private _isProxy = true;\r\n private _context: any = null;\r\n private _initialized = false;\r\n\r\n /**\r\n * Initializes the UtilService with context that contains service references\r\n * \r\n * @param context The context object containing service references\r\n * @returns A proxy that intercepts and delegates method calls to the appropriate service\r\n */\r\n init(context: any): any {\r\n if (this._initialized) {\r\n return this;\r\n }\r\n\r\n this._context = context;\r\n this._initialized = true;\r\n\r\n // Return a proxy that will intercept method calls\r\n return new Proxy(this, {\r\n get: (target: any, prop: string | symbol) => {\r\n // First check if the property exists directly on UtilService\r\n if (prop in target) {\r\n return (target as any)[prop];\r\n }\r\n\r\n // Convert symbol to string if needed\r\n const propName = prop.toString();\r\n\r\n // Check context services first\r\n if (this._context && Object.keys(this._context).length > 0) {\r\n // Loop through each service in the context\r\n for (const serviceName of Object.keys(this._context)) {\r\n const service = this._context[serviceName];\r\n if (service && typeof service === 'object' && propName in service && typeof service[propName] === 'function') {\r\n // Return the bound function from the service\r\n return service[propName].bind(service);\r\n }\r\n }\r\n }\r\n\r\n // If property not found anywhere, return undefined\r\n return undefined;\r\n }\r\n });\r\n }\r\n}","import { IComponentStateModel, IDesigningComponentStateModel, IScreenStateModel, IDesigningScreenStateModel } from '../interface/state.interface';\r\n\r\n/**\r\n * ComponentStateModel\r\n * Provides access to component state data including value, properties, and instance\r\n * Handles both single and multi-instance components\r\n * Supports both runtime and designing modes via _isDesigning flag\r\n */\r\nexport class ComponentStateModel implements IComponentStateModel, IDesigningComponentStateModel {\r\n constructor(\r\n private _screenId: string,\r\n private _key: string,\r\n private _data: any,\r\n private _stateSdk: any,\r\n private _isDesigning: boolean = false\r\n ) {}\r\n\r\n get key(): string {\r\n return this._data.key;\r\n }\r\n\r\n get type(): string {\r\n return this._data.type;\r\n }\r\n\r\n get properties(): any {\r\n return this._data.properties;\r\n }\r\n\r\n get value(): any {\r\n // Designing components don't have value\r\n if (this._isDesigning) return undefined;\r\n return this._data.value;\r\n }\r\n\r\n get instance(): any {\r\n // Designing components don't have instance\r\n if (this._isDesigning) return undefined;\r\n return this._data.instance;\r\n }\r\n\r\n get screen(): string {\r\n return this._screenId;\r\n }\r\n\r\n /**\r\n * Check if this is a designing component\r\n */\r\n get isDesigning(): boolean {\r\n return this._isDesigning;\r\n }\r\n\r\n get instanceCount(): number {\r\n if (this._isDesigning) return 0;\r\n if (Array.isArray(this._data.value)) {\r\n return this._data.value.length;\r\n }\r\n return 1;\r\n }\r\n\r\n get isSingleInstance(): boolean {\r\n if (this._isDesigning) return true;\r\n return !Array.isArray(this._data.value);\r\n }\r\n\r\n /**\r\n * Get a specific instance by index\r\n * @param index - Instance index (0-based)\r\n * @returns Object with value and instance, or null if index out of bounds or designing mode\r\n */\r\n getInstance(index: number): { value: any; instance: any } | null {\r\n if (this._isDesigning) return null;\r\n\r\n if (this.isSingleInstance) {\r\n return index === 0 ? { value: this.value, instance: this.instance } : null;\r\n }\r\n\r\n const values = this._data.value as any[];\r\n const instances = this._data.instance as any[];\r\n\r\n if (index < 0 || index >= values.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n value: values[index],\r\n instance: instances[index]\r\n };\r\n }\r\n\r\n /**\r\n * Get all values as array (always returns array, even for single instance)\r\n * Returns empty array for designing components\r\n */\r\n getValues(): any[] {\r\n if (this._isDesigning) return [];\r\n if (this.isSingleInstance) {\r\n return [this.value];\r\n }\r\n return this._data.value;\r\n }\r\n\r\n /**\r\n * Get all instances as array (always returns array, even for single instance)\r\n * Returns empty array for designing components\r\n */\r\n getInstances(): any[] {\r\n if (this._isDesigning) return [];\r\n if (this.isSingleInstance) {\r\n return [this.instance];\r\n }\r\n return this._data.instance;\r\n }\r\n\r\n /**\r\n * Set component value\r\n * @param value - New value to set\r\n * @param instanceIndex - Optional instance index (for multi-instance)\r\n * Note: Does nothing for designing components\r\n */\r\n setValue(value: any, instanceIndex?: number): void {\r\n if (this._isDesigning) return;\r\n\r\n if (this.isSingleInstance) {\r\n this.instance?.setValue?.(value);\r\n } else if (instanceIndex !== undefined) {\r\n const instances = this.getInstances();\r\n instances[instanceIndex]?.setValue?.(value);\r\n } else {\r\n // Set all instances\r\n this.getInstances().forEach(inst => inst?.setValue?.(value));\r\n }\r\n }\r\n\r\n /**\r\n * Safely get a nested property from component properties\r\n * @param path - Dot-notation path (e.g., 'validate.required')\r\n * @returns Property value or undefined\r\n */\r\n getProperty(path: string): any {\r\n if (!path || !this.properties) return undefined;\r\n\r\n return path.split('.').reduce((obj, key) => obj?.[key], this.properties);\r\n }\r\n\r\n /**\r\n * Get the parent screen model\r\n */\r\n getScreen(): IScreenStateModel | IDesigningScreenStateModel | null {\r\n if (this._isDesigning) {\r\n return this._stateSdk.getDesigningScreen(this._screenId);\r\n }\r\n return this._stateSdk.getScreen(this._screenId);\r\n }\r\n}\r\n","import { IQueryStateModel, IScreenStateModel } from '../interface/state.interface';\r\nimport { TabSdk } from '../tab-sdk.service';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n/**\r\n * QueryStateModel\r\n * Provides access to query state data with all properties from state\r\n */\r\nexport class QueryStateModel implements IQueryStateModel {\r\n constructor(\r\n private _screenId: string,\r\n private _name: string,\r\n private _data: any,\r\n private _stateSdk: any\r\n ) {}\r\n\r\n get ID(): string {\r\n return this._data.ID || this._data.Id || '';\r\n }\r\n\r\n get ObjectID(): string | null {\r\n return this._data.ObjectID ?? null;\r\n }\r\n\r\n get ObjectID_Tosave(): string {\r\n return this._data.ObjectID_Tosave || '';\r\n }\r\n\r\n get QueryName(): string {\r\n return this._data.QueryName || this._name;\r\n }\r\n\r\n get DisplayName(): string {\r\n return this._data.DisplayName || this._name;\r\n }\r\n\r\n get FilterLogic(): string | null {\r\n return this._data.FilterLogic ?? null;\r\n }\r\n\r\n get Fields(): any[] {\r\n return this._data.Fields || [];\r\n }\r\n\r\n get Filters(): any {\r\n return this._data.Filters || { Filters: [], FilterLogic: null };\r\n }\r\n\r\n get Sort(): any[] {\r\n return this._data.Sort || [];\r\n }\r\n\r\n get Parameters(): any[] {\r\n return this._data.Parameters || [];\r\n }\r\n\r\n get RequestId(): string {\r\n return this._data.RequestId || '';\r\n }\r\n\r\n get screen(): string {\r\n return this._screenId;\r\n }\r\n\r\n\r\n /**\r\n * Execute the query and get data\r\n * @param reqtokens - Request tokens to include in the payload\r\n * @param params - Additional parameters to include in the payload\r\n * @param useDefaultHeaders - Whether to use default headers\r\n * @param customHeaders - Custom headers to merge with default/final headers\r\n * @returns Promise that resolves to the query result\r\n */\r\n async execute(reqtokens?: any, params?: any, useDefaultHeaders?: boolean, customHeaders?: any): Promise<any> {\r\n const response = await firstValueFrom(\r\n TabSdk.util.getDSQData(this.ID, reqtokens, params, useDefaultHeaders, customHeaders)\r\n );\r\n return response;\r\n }\r\n\r\n /**\r\n * Get the parent screen model\r\n */\r\n getScreen(): IScreenStateModel | null {\r\n return this._stateSdk.getScreen(this._screenId);\r\n }\r\n}","import { IScriptStateModel, IScreenStateModel } from '../interface/state.interface';\r\n\r\n/**\r\n * ScriptStateModel\r\n * Provides access to script state data with all properties from state\r\n */\r\nexport class ScriptStateModel implements IScriptStateModel {\r\n constructor(\r\n private _screenId: string,\r\n private _name: string,\r\n private _data: any,\r\n private _stateSdk: any\r\n ) {}\r\n\r\n get ID(): string {\r\n return this._data.ID || this._data.Id || '';\r\n }\r\n\r\n get Name(): string {\r\n return this._data.Name || this._name;\r\n }\r\n\r\n get Type(): number {\r\n return this._data.Type;\r\n }\r\n\r\n get Content(): string {\r\n return this._data.Content || '';\r\n }\r\n\r\n get screen(): string {\r\n return this._screenId;\r\n }\r\n\r\n\r\n /**\r\n * Get the parent screen model\r\n */\r\n getScreen(): IScreenStateModel | null {\r\n return this._stateSdk.getScreen(this._screenId);\r\n }\r\n}","import { IScreenStateModel, IDesigningScreenStateModel, IComponentStateModel, IQueryStateModel, IScriptStateModel, RendererData } from '../interface/state.interface';\r\nimport { ComponentStateModel } from './component-state.model';\r\nimport { QueryStateModel } from './query-state.model';\r\nimport { ScriptStateModel } from './script-state.model';\r\n\r\n/**\r\n * ScreenStateModel\r\n * Provides access to screen state data including components, queries, and scripts\r\n * Supports both runtime screens and designing screens via _isDesigning flag\r\n */\r\nexport class ScreenStateModel implements IScreenStateModel, IDesigningScreenStateModel {\r\n constructor(\r\n private _screenData: any,\r\n private _stateService: any,\r\n private _stateSdk: any,\r\n private _isDesigning: boolean = false\r\n ) {}\r\n\r\n get screenId(): string {\r\n return this._screenData.screenId;\r\n }\r\n\r\n get parentScreenId(): string | undefined {\r\n return this._screenData.parentScreenId;\r\n }\r\n\r\n get screenMetadata(): any {\r\n return this._screenData.screenMetadata;\r\n }\r\n\r\n get form(): any {\r\n return this._screenData.form;\r\n }\r\n\r\n get renderer(): RendererData {\r\n return this._screenData.renderer;\r\n }\r\n\r\n /**\r\n * Check if this is a designing screen\r\n */\r\n get isDesigning(): boolean {\r\n return this._isDesigning;\r\n }\r\n\r\n /**\r\n * Get screen state data based on mode (runtime vs designing)\r\n */\r\n private getScreenState(): any {\r\n const state = this._stateService.getState()();\r\n if (this._isDesigning) {\r\n return state?.designingScreens?.[this.screenId];\r\n }\r\n return state[this.screenId];\r\n }\r\n\r\n /**\r\n * Get all components in this screen\r\n * @param filterFn - Optional filter function\r\n */\r\n components(filterFn?: (comp: IComponentStateModel) => boolean): IComponentStateModel[] {\r\n const screenState = this.getScreenState();\r\n if (!screenState?.components) return [];\r\n\r\n const models = Object.entries(screenState.components).map(([key, data]: [string, any]) => {\r\n return new ComponentStateModel(this.screenId, key, data, this._stateSdk, this._isDesigning);\r\n });\r\n\r\n return filterFn ? models.filter(filterFn) : models;\r\n }\r\n\r\n /**\r\n * Get a specific component by key\r\n * @param key - Component key\r\n */\r\n component(key: string): IComponentStateModel | null {\r\n if (!key) return null;\r\n\r\n const screenState = this.getScreenState();\r\n const compData = screenState?.components?.[key];\r\n if (!compData) return null;\r\n\r\n return new ComponentStateModel(this.screenId, key, compData, this._stateSdk, this._isDesigning);\r\n }\r\n\r\n /**\r\n * Get all queries in this screen\r\n * @param filterFn - Optional filter function\r\n */\r\n queries(filterFn?: (query: IQueryStateModel) => boolean): IQueryStateModel[] {\r\n const screenState = this.getScreenState();\r\n if (!screenState?.queries) return [];\r\n\r\n const models = Object.entries(screenState.queries).map(([name, data]: [string, any]) => {\r\n return new QueryStateModel(this.screenId, name, data, this._stateSdk);\r\n });\r\n\r\n return filterFn ? models.filter(filterFn) : models;\r\n }\r\n\r\n /**\r\n * Get a specific query by name or ID\r\n * @param nameOrId - Query name or ID\r\n */\r\n query(nameOrId: string): IQueryStateModel | null {\r\n if (!nameOrId) return null;\r\n\r\n const screenState = this.getScreenState();\r\n\r\n // Try direct match first\r\n let queryData = screenState?.queries?.[nameOrId];\r\n\r\n // If not found, search by ID or QueryName\r\n if (!queryData && screenState?.queries) {\r\n const entry = Object.entries(screenState.queries).find(([_, data]: [string, any]) =>\r\n data?.ID?.toLowerCase() === nameOrId?.toLowerCase() ||\r\n data?.Id?.toLowerCase() === nameOrId?.toLowerCase() ||\r\n data?.QueryName === nameOrId\r\n );\r\n if (entry) {\r\n queryData = entry[1];\r\n }\r\n }\r\n\r\n if (!queryData) return null;\r\n\r\n return new QueryStateModel(this.screenId, nameOrId, queryData, this._stateSdk);\r\n }\r\n\r\n /**\r\n * Get all scripts in this screen\r\n * @param filterFn - Optional filter function\r\n */\r\n scripts(filterFn?: (script: IScriptStateModel) => boolean): IScriptStateModel[] {\r\n const state = this._stateService.getState()();\r\n const screenState = state[this.screenId];\r\n if (!screenState?.scripts) return [];\r\n\r\n const models = Object.entries(screenState.scripts).map(([name, data]: [string, any]) => {\r\n return new ScriptStateModel(this.screenId, name, data, this._stateSdk);\r\n });\r\n\r\n return filterFn ? models.filter(filterFn) : models;\r\n }\r\n\r\n /**\r\n * Get a specific script by name\r\n * @param name - Script name\r\n */\r\n script(name: string): IScriptStateModel | null {\r\n if (!name) return null;\r\n\r\n const state = this._stateService.getState()();\r\n const screenState = state[this.screenId];\r\n\r\n // Try direct match first\r\n let scriptData = screenState?.scripts?.[name];\r\n\r\n // If not found, search by Name\r\n if (!scriptData && screenState?.scripts) {\r\n const entry = Object.entries(screenState.scripts).find(([_, data]: [string, any]) =>\r\n data?.Name === name\r\n );\r\n if (entry) {\r\n scriptData = entry[1];\r\n }\r\n }\r\n\r\n if (!scriptData) return null;\r\n\r\n return new ScriptStateModel(this.screenId, name, scriptData, this._stateSdk);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n GlobalState,\r\n IStateSdkService,\r\n IScreenStateModel,\r\n IComponentStateModel,\r\n IQueryStateModel,\r\n IScriptStateModel,\r\n IDesigningScreenStateModel,\r\n StateSearchResult\r\n} from '../interface/state.interface';\r\nimport { ScreenStateModel } from '../model/screen-state.model';\r\n\r\n/**\r\n * StateSdkService\r\n * Provides access to application state through TabSdk.state\r\n * Follows the same patterns as MetadataHelper\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StateSdkService implements IStateSdkService {\r\n private _stateService: any = null;\r\n\r\n /**\r\n * Initialize with StateService from main app\r\n * @param stateService - StateService instance from main application\r\n */\r\n init(stateService: any): void {\r\n this._stateService = stateService;\r\n }\r\n\r\n // ============================================\r\n // GLOBAL STATE\r\n // ============================================\r\n\r\n /**\r\n * Get global state (User, App, Tenant, Environment)\r\n */\r\n get global(): GlobalState {\r\n const state = this._stateService?.getState()();\r\n return state?.global?.globals || {\r\n User: {},\r\n App: {},\r\n Tenant: {},\r\n Environment: {}\r\n };\r\n }\r\n\r\n // ============================================\r\n // SCREENS\r\n // ============================================\r\n\r\n /**\r\n * Get a screen by its ID or name\r\n * @param nameOrId - Screen ID (GUID) or screen name\r\n * @returns ScreenStateModel or null if not found\r\n */\r\n getScreen(nameOrId: string): IScreenStateModel | null {\r\n if (!nameOrId || !this._stateService) return null;\r\n\r\n const state = this._stateService.getState()();\r\n const globalState = state?.global;\r\n\r\n // Search by screenId or screen name\r\n const screenData = Object.values(globalState?.screens || {}).find((s: any) =>\r\n s.screenId === nameOrId ||\r\n s.screenId?.toLowerCase() === nameOrId?.toLowerCase() ||\r\n s.screenMetadata?.Name === nameOrId ||\r\n s.screenMetadata?.DisplayName === nameOrId\r\n ) as any;\r\n\r\n if (!screenData) return null;\r\n\r\n return new ScreenStateModel(screenData, this._stateService, this);\r\n }\r\n\r\n /**\r\n * Get all screens, optionally filtered\r\n * @param filterFn - Optional filter function\r\n * @returns Array of ScreenStateModel\r\n */\r\n getScreens(filterFn?: (screen: IScreenStateModel) => boolean): IScreenStateModel[] {\r\n if (!this._stateService) return [];\r\n\r\n const state = this._stateService.getState()();\r\n const globalState = state?.global;\r\n\r\n const models = Object.values(globalState?.screens || {}).map((screenData: any) => {\r\n return new ScreenStateModel(screenData, this._stateService, this);\r\n });\r\n\r\n return filterFn ? models.filter(filterFn) : models;\r\n }\r\n\r\n /**\r\n * Check if a screen exists in state\r\n * @param nameOrId - Screen ID or name\r\n */\r\n hasScreen(nameOrId: string): boolean {\r\n return this.getScreen(nameOrId) !== null;\r\n }\r\n\r\n // ============================================\r\n // DESIGNING SCREENS\r\n // ============================================\r\n\r\n /**\r\n * Get a designing screen by its ID or name\r\n * @param nameOrId - Screen ID (GUID) or screen name\r\n * @returns ScreenStateModel (in designing mode) or null if not found\r\n */\r\n getDesigningScreen(nameOrId: string): IDesigningScreenStateModel | null {\r\n if (!nameOrId || !this._stateService) return null;\r\n\r\n const state = this._stateService.getState()();\r\n const designingScreens = state?.global?.designingScreens || {};\r\n\r\n // Search by screenId or screen name\r\n const screenData = Object.values(designingScreens).find((s: any) =>\r\n s.screenId === nameOrId ||\r\n s.screenId?.toLowerCase() === nameOrId?.toLowerCase() ||\r\n s.screenMetadata?.Name === nameOrId ||\r\n s.screenMetadata?.DisplayName === nameOrId\r\n ) as any;\r\n\r\n if (!screenData) return null;\r\n\r\n // Use ScreenStateModel with isDesigning = true\r\n return new ScreenStateModel(screenData, this._stateService, this, true);\r\n }\r\n\r\n /**\r\n * Get all designing screens, optionally filtered\r\n * @param filterFn - Optional filter function\r\n * @returns Array of ScreenStateModel (in designing mode)\r\n */\r\n getDesigningScreens(filterFn?: (screen: IDesigningScreenStateModel) => boolean): IDesigningScreenStateModel[] {\r\n if (!this._stateService) return [];\r\n\r\n const state = this._stateService.getState()();\r\n const designingScreens = state?.global?.designingScreens || {};\r\n\r\n // Use ScreenStateModel with isDesigning = true\r\n const models = Object.values(designingScreens).map((screenData: any) => {\r\n return new ScreenStateModel(screenData, this._stateService, this, true);\r\n });\r\n\r\n return filterFn ? models.filter(filterFn) : models;\r\n }\r\n\r\n /**\r\n * Check if a designing screen exists in state\r\n * @param nameOrId - Screen ID or name\r\n */\r\n hasDesigningScreen(nameOrId: string): boolean {\r\n return this.getDesigningScreen(nameOrId) !== null;\r\n }\r\n\r\n // ============================================\r\n // COMPONENTS (across all screens)\r\n // ============================================\r\n\r\n /**\r\n * Get a component by key, optionally from a specific screen\r\n * @param key - Component key\r\n * @param screenNameOrId - Optional screen to search in (for collisions)\r\n * @returns ComponentStateModel or null if not found\r\n */\r\n getComponent(key: string, screenNameOrId?: string): IComponentStateModel | null {\r\n if (!key || !this._stateService) return null;\r\n\r\n // If screen specified, search only in that screen\r\n if (screenNameOrId) {\r\n const screen = this.getScreen(screenNameOrId);\r\n return screen?.component(key) || null;\r\n }\r\n\r\n // Search across all screens, return first match\r\n const screens = this.getScreens();\r\n for (const screen of screens) {\r\n const comp = screen.component(key);\r\n if (comp) return comp;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get all components across all screens, optionally filtered\r\n * @param filterFn - Optional filter function\r\n * @returns Array of ComponentStateModel\r\n */\r\n getComponents(filterFn?: (comp: IComponentStateModel) => boolean): IComponentStateModel[] {\r\n if (!this._stateService) return [];\r\n\r\n const allComponents: IComponentStateModel[] = [];\r\n const screens = this.getScreens();\r\n\r\n for (const screen of screens) {\r\n allComponents.push(...screen.components());\r\n }\r\n\r\n return filterFn ? allComponents.filter(filterFn) : allComponents;\r\n }\r\n\r\n /**\r\n * Check if a component exists\r\n * @param key - Component key\r\n * @param screenNameOrId - Optional screen to check in\r\n */\r\n hasComponent(key: string, screenNameOrId?: string): boolean {\r\n return this.getComponent(key, screenNameOrId) !== null;\r\n }\r\n\r\n // ============================================\r\n // QUERIES (across all screens)\r\n // ============================================\r\n\r\n /**\r\n * Get a query by ID or name, optionally from a specific screen\r\n * @param nameOrId - Query ID, QueryName, or DisplayName\r\n * @param screenNameOrId - Optional screen to search in\r\n */\r\n getQuery(nameOrId: string, screenNameOrId?: string): IQueryStateModel | null {\r\n if (!nameOrId || !this._stateService) return null;\r\n\r\n if (screenNameOrId) {\r\n const screen = this.getScreen(screenNameOrId);\r\n return screen?.query(nameOrId) || null;\r\n }\r\n\r\n const screens = this.getScreens();\r\n for (const screen of screens) {\r\n const query = screen.query(nameOrId);\r\n if (query) return query;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get all queries across all screens, optionally filtered\r\n * @param filterFn - Optional filter function\r\n */\r\n getQueries(filterFn?: (query: IQueryStateModel) => boolean): IQueryStateModel[] {\r\n if (!this._stateService) return [];\r\n\r\n const allQueries: IQueryStateModel[] = [];\r\n const screens = this.getScreens();\r\n\r\n for (const screen of screens) {\r\n allQueries.push(...screen.queries());\r\n }\r\n\r\n return filterFn ? allQueries.filter(filterFn) : allQueries;\r\n }\r\n\r\n // ============================================\r\n // SCRIPTS (across all screens)\r\n // ============================================\r\n\r\n /**\r\n * Get a script by name, optionally from a specific screen\r\n * @param name - Script name\r\n * @param screenNameOrId - Optional screen to search in\r\n */\r\n getScript(name: string, screenNameOrId?: string): IScriptStateModel | null {\r\n if (!name || !this._stateService) return null;\r\n\r\n if (screenNameOrId) {\r\n const screen = this.getScreen(screenNameOrId);\r\n return screen?.script(name) || null;\r\n }\r\n\r\n const screens = this.getScreens();\r\n for (const screen of screens) {\r\n const script = screen.script(name);\r\n if (script) return script;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get all scripts across all screens, optionally filtered\r\n * @param filterFn - Optional filter function\r\n */\r\n getScripts(filterFn?: (script: IScriptStateModel) => boolean): IScriptStateModel[] {\r\n if (!this._stateService) return [];\r\n\r\n const allScripts: IScriptStateModel[] = [];\r\n const screens = this.getScreens();\r\n\r\n for (const screen of screens) {\r\n allScripts.push(...screen.scripts());\r\n }\r\n\r\n return filterFn ? allScripts.filter(filterFn) : allScripts;\r\n }\r\n\r\n // ============================================\r\n // SEARCH\r\n // ============================================\r\n\r\n /**\r\n * Search across all state entities\r\n * @param term - Search term\r\n */\r\n search(term: string): StateSearchResult {\r\n if (!term || !this._stateService) {\r\n return { screens: [], components: [], queries: [], scripts: [] };\r\n }\r\n\r\n const searchTerm = term.toLowerCase();\r\n\r\n return {\r\n screens: this.getScreens(s =>\r\n s.screenId?.toLowerCase().includes(searchTerm) ||\r\n s.screenMetadata?.Name?.toLowerCase().includes(searchTerm) ||\r\n s.screenMetadata?.DisplayName?.toLowerCase().includes(searchTerm)\r\n ),\r\n components: this.getComponents(c =>\r\n c.key?.toLowerCase().includes(searchTerm) ||\r\n c.type?.toLowerCase().includes(searchTerm) ||\r\n c.properties?.label?.toLowerCase()?.includes(searchTerm)\r\n ),\r\n queries: this.getQueries(q =>\r\n q.QueryName?.toLowerCase().includes(searchTerm) ||\r\n q.DisplayName?.toLowerCase().includes(searchTerm)\r\n ),\r\n scripts: this.getScripts(s =>\r\n s.Name?.toLowerCase().includes(searchTerm)\r\n )\r\n };\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { executeTABWorkflowPayload, TabWorkflowService } from '@techextensor/tab-core-utility';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkflowService {\r\n private readonly tabWorkflowService: TabWorkflowService = inject(TabWorkflowService);\r\n\r\n async executeTABWorkflow(payload: executeTABWorkflowPayload): Promise<any> {\r\n /**\r\n * Executes a TAB workflow using the provided payload.\r\n *\r\n * @param payload The execute TAB workflow payload.\r\n * @returns A promise that resolves to the response from the server.\r\n */\r\n const response = await firstValueFrom(\r\n // Use the firstValueFrom RxJs operator to wait for the observable to complete\r\n // Call the executeTABWorkflow method of the TabWorkflowService and pass the payload\r\n this.tabWorkflowService.executeTABWorkflow(payload)\r\n );\r\n return response;\r\n // Return the response from the server\r\n }\r\n}","import { Injectable, Injector } from '@angular/core';\r\nimport { MetadataHelper } from '@techextensor/tab-core-utility';\r\nimport { UiService } from './ui/ui.service';\r\nimport { AuthUtilService } from './auth/auth.service';\r\nimport { FormService } from './ui/form.service';\r\nimport { TransitionService } from './workflow/transition.service';\r\nimport { AppService } from './app/app.service';\r\nimport { FileService } from './app/file.service';\r\nimport { ReportService } from './app/report.service';\r\nimport { ReleaseService } from './app/release.service';\r\nimport { AnalyticsService } from './app/analytics.service';\r\nimport { TranslatorService } from './app/translator.service';\r\nimport { CrudService } from './crud/crud.service';\r\nimport { HttpService } from './http/http.service';\r\nimport { StoreService } from './store/store.service';\r\nimport { UtilService } from './util/util.service';\r\nimport { StateSdkService } from './state/state.service';\r\nimport { WorkflowService } from './workflow/workflow.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TabSdk {\r\n public static app: AppService;\r\n public static auth: AuthUtilService;\r\n public static ui: UiService;\r\n public static form: FormService;\r\n public static transition: TransitionService;\r\n public static metadataUtils: MetadataHelper;\r\n public static file: FileService;\r\n public static report: ReportService;\r\n public static release: ReleaseService;\r\n public static analytics: AnalyticsService;\r\n public static translator: TranslatorService;\r\n public static crud: CrudService;\r\n public static http: HttpService;\r\n public static store: StoreService;\r\n public static workflow: WorkflowService;\r\n public static util: any;\r\n public static state: StateSdkService;\r\n\r\n\r\n /**\r\n * Initialize the SDK with necessary services\r\n */\r\n public static init(injector: Injector, context: any): void {\r\n // Expose to window for global access if needed\r\n (window as any).TabSdk = TabSdk;\r\n\r\n // Initialize services\r\n this.app = injector.get(AppService);\r\n this.auth = injector.get(AuthUtilService);\r\n this.ui = injector.get(UiService);\r\n this.form = injector.get(FormService);\r\n this.transition = injector.get(TransitionService);\r\n this.metadataUtils = injector.get(MetadataHelper);\r\n this.file = injector.get(FileService);\r\n this.report = injector.get(ReportService);\r\n this.release = injector.get(ReleaseService);\r\n this.analytics = injector.get(AnalyticsService);\r\n this.translator = injector.get(TranslatorService);\r\n this.crud = injector.get(CrudService);\r\n this.http = injector.get(HttpService);\r\n this.store = injector.get(StoreService);\r\n this.workflow = injector.get(WorkflowService);\r\n\r\n // Extract StateService from context before passing to util\r\n const { StateService: stateService, ...utilContext } = context || {};\r\n\r\n // Initialize util service with context (excluding StateService)\r\n const utilService = injector.get(UtilService);\r\n this.util = utilService.init(utilContext);\r\n\r\n // Initialize state service with StateService from context\r\n this.state = injector.get(StateSdkService);\r\n this.state.init(stateService);\r\n\r\n // Freeze the global object to prevent modifications\r\n Object.freeze(this);\r\n \r\n Object.freeze(this.app);\r\n Object.freeze(this.auth);\r\n Object.freeze(this.ui);\r\n Object.freeze(this.form);\r\n Object.freeze(this.transition);\r\n Object.freeze(this.file);\r\n Object.freeze(this.report);\r\n Object.freeze(this.release);\r\n Object.freeze(this.analytics);\r\n Object.freeze(this.translator);\r\n Object.freeze(this.crud);\r\n Object.freeze(this.http);\r\n Object.freeze(this.workflow);\r\n Object.freeze(this.store);\r\n Object.freeze(this.util);\r\n Object.freeze(this.state);\r\n }\r\n}","/**\r\n * State SDK Interfaces\r\n * Provides type definitions for accessing application state through TabSdk.state\r\n */\r\n\r\n// ============================================\r\n// GLOBAL STATE INTERFACES\r\n// ============================================\r\n\r\nexport interface GlobalState {\r\n readonly User: UserState;\r\n readonly App: AppState;\r\n readonly Tenant: TenantState;\r\n readonly Environment: EnvironmentState;\r\n}\r\n\r\nexport interface UserState {\r\n readonly Id: string;\r\n readonly UserName: string;\r\n readonly PersonData: any;\r\n readonly Roles: Record<string, any>;\r\n readonly Teams: any[] | null;\r\n readonly Attributes: Record<string, any>;\r\n readonly MailingAddress: any | null;\r\n readonly Locale: any | null;\r\n readonly DefaultTenantId: string;\r\n readonly DefaultAppId: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface AppState {\r\n readonly Id: string;\r\n readonly AppName: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface TenantState {\r\n readonly Id: string;\r\n readonly OrganizationName: string;\r\n readonly TenantCode: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface EnvironmentState {\r\n readonly Id: string;\r\n readonly Name: string;\r\n [key: string]: any;\r\n}\r\n\r\n// ============================================\r\n// RENDERER DATA\r\n// ============================================\r\n\r\nexport interface RendererData {\r\n readonly data: any;\r\n readonly screenRenderingMode: string;\r\n readonly rendererName: string;\r\n readonly reqtokens: any;\r\n readonly instance: any;\r\n}\r\n\r\n// ============================================\r\n// SEARCH RESULT\r\n// ============================================\r\n\r\nexport interface StateSearchResult {\r\n screens: IScreenStateModel[];\r\n components: IComponentStateModel[];\r\n queries: IQueryStateModel[];\r\n scripts: IScriptStateModel[];\r\n}\r\n\r\n// ============================================\r\n// MODEL INTERFACES\r\n// ============================================\r\n\r\nexport interface IScreenStateModel {\r\n readonly screenId: string;\r\n readonly parentScreenId: string | undefined;\r\n readonly screenMetadata: any;\r\n readonly form: any;\r\n readonly renderer: RendererData;\r\n\r\n components(filterFn?: (comp: IComponentStateModel) => boolean): IComponentStateModel[];\r\n component(key: string): IComponentStateModel | null;\r\n queries(filterFn?: (query: IQueryStateModel) => boolean): IQueryStateModel[];\r\n query(nameOrId: string): IQueryStateModel | null;\r\n scripts(filterFn?: (script: IScriptStateModel) => boolean): IScriptStateModel[];\r\n script(name: string): IScriptStateModel | null;\r\n}\r\n\r\nexport interface IComponentStateModel {\r\n readonly key: string;\r\n readonly type: string;\r\n readonly properties: any;\r\n readonly value: any;\r\n readonly instance: any;\r\n readonly screen: string;\r\n readonly instanceCount: number;\r\n readonly isSingleInstance: boolean;\r\n\r\n getInstance(index: number): { value: any; instance: any } | null;\r\n getValues(): any[];\r\n getInstances(): any[];\r\n setValue(value: any, instanceIndex?: number): void;\r\n getProperty(path: string): any;\r\n getScreen(): IScreenStateModel | IDesigningScreenStateModel | null;\r\n}\r\n\r\nexport interface IQueryStateModel {\r\n readonly ID: string;\r\n readonly ObjectID: string | null;\r\n readonly ObjectID_Tosave: string;\r\n readonly QueryName: string;\r\n readonly DisplayName: string;\r\n readonly FilterLogic: string | null;\r\n readonly Fields: any[];\r\n readonly Filters: any;\r\n readonly Sort: any[];\r\n readonly Parameters: any[];\r\n readonly RequestId: string;\r\n readonly screen: string;\r\n\r\n execute(reqtokens?: any, params?: any, useDefaultHeaders?: boolean, customHeaders?: any): Promise<any>;\r\n getScreen(): IScreenStateModel | null;\r\n}\r\n\r\nexport interface IScriptStateModel {\r\n readonly ID: string;\r\n readonly Name: string;\r\n readonly Type: number;\r\n readonly Content: string;\r\n readonly screen: string;\r\n\r\n getScreen(): IScreenStateModel | null;\r\n}\r\n\r\n// ============================================\r\n// DESIGNING SCREEN MODEL INTERFACES\r\n// ============================================\r\n\r\n/**\r\n * Designing Screen Model Interface\r\n * Represents a screen being edited in Screen Designer (not rendered)\r\n * Similar to IScreenStateModel but without renderer and scripts\r\n */\r\nexport interface IDesigningScreenStateModel {\r\n readonly screenId: string;\r\n readonly screenMetadata: any;\r\n readonly form: any;\r\n\r\n components(filterFn?: (comp: IDesigningComponentStateModel) => boolean): IDesigningComponentStateModel[];\r\n component(key: string): IDesigningComponentStateModel | null;\r\n queries(filterFn?: (query: IQueryStateModel) => boolean): IQueryStateModel[];\r\n query(nameOrId: string): IQueryStateModel | null;\r\n}\r\n\r\n/**\r\n * Designing Component Model Interface\r\n * Represents a component in a designing screen (no value or instance)\r\n */\r\nexport interface IDesigningComponentStateModel {\r\n readonly key: string;\r\n readonly type: string;\r\n readonly properties: any;\r\n readonly screen: string;\r\n\r\n getProperty(path: string): any;\r\n getScreen(): IDesigningScreenStateModel | null;\r\n}\r\n\r\n// ============================================\r\n// STATE SERVICE INTERFACE\r\n// ============================================\r\n\r\nexport interface IStateSdkService {\r\n readonly global: GlobalState;\r\n\r\n // Runtime Screens\r\n getScreen(nameOrId: string): IScreenStateModel | null;\r\n getScreens(filterFn?: (screen: IScreenStateModel) => boolean): IScreenStateModel[];\r\n hasScreen(nameOrId: string): boolean;\r\n\r\n // Designing Screens\r\n getDesigningScreen(nameOrId: string): IDesigningScreenStateModel | null;\r\n getDesigningScreens(filterFn?: (screen: IDesigningScreenStateModel) => boolean): IDesigningScreenStateModel[];\r\n hasDesigningScreen(nameOrId: string): boolean;\r\n\r\n // Components (runtime screens only)\r\n getComponent(key: string, screenNameOrId?: string): IComponentStateModel | null;\r\n getComponents(filterFn?: (comp: IComponentStateModel) => boolean): IComponentStateModel[];\r\n hasComponent(key: string, screenNameOrId?: string): boolean;\r\n\r\n // Queries\r\n getQuery(nameOrId: string, screenNameOrId?: string): IQueryStateModel | null;\r\n getQueries(filterFn?: (query: IQueryStateModel) => boolean): IQueryStateModel[];\r\n\r\n // Scripts (runtime screens only)\r\n getScript(name: string, screenNameOrId?: string): IScriptStateModel | null;\r\n getScripts(filterFn?: (script: IScriptStateModel) => boolean): IScriptStateModel[];\r\n\r\n search(term: string): StateSearchResult;\r\n}\r\n","// SDK\r\nexport * from './lib/tab-sdk.service';\r\n\r\n// Enums\r\nexport * from './lib/enum/ui.enum';\r\nexport * from './lib/enum/store.enum';\r\n\r\n// Interfaces\r\nexport * from './lib/interface/ui.interface';\r\nexport * from './lib/interface/http.interface';\r\nexport * from './lib/interface/state.interface';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}