@techextensor/tab-core-utility 2.2.194 → 2.2.196
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +6 -1
- package/esm2022/lib/tab-core-utility/app/constants/api-constants.mjs +43 -25
- package/esm2022/lib/tab-core-utility/app/constants/common.mjs +14 -50
- package/esm2022/lib/tab-core-utility/app/constants/storage-constants.mjs +2 -2
- package/esm2022/lib/tab-core-utility/app/crud/tab-blueprint.service.mjs +41 -14
- package/esm2022/lib/tab-core-utility/app/crud/tab-crud.service.mjs +60 -84
- package/esm2022/lib/tab-core-utility/app/crud/tab-delete.service.mjs +84 -30
- package/esm2022/lib/tab-core-utility/app/crud/tab-formio.service.mjs +141 -12
- package/esm2022/lib/tab-core-utility/app/crud/tab-get.service.mjs +137 -42
- package/esm2022/lib/tab-core-utility/app/crud/tab-insert.service.mjs +89 -38
- package/esm2022/lib/tab-core-utility/app/crud/tab-update.service.mjs +156 -128
- package/esm2022/lib/tab-core-utility/app/enums/query.enum.mjs +7 -7
- package/esm2022/lib/tab-core-utility/app/helpers/auth-response.adapter.mjs +79 -0
- package/esm2022/lib/tab-core-utility/app/helpers/common/app.helpers.mjs +33 -24
- package/esm2022/lib/tab-core-utility/app/helpers/common/dsq.helpers.mjs +9 -11
- package/esm2022/lib/tab-core-utility/app/helpers/common/meta-data.helpers.mjs +13 -13
- package/esm2022/lib/tab-core-utility/app/helpers/common/req-res.helpers.mjs +7 -45
- package/esm2022/lib/tab-core-utility/app/helpers/common/where-clause.helpers.mjs +79 -76
- package/esm2022/lib/tab-core-utility/app/helpers/login-response.adapter.mjs +76 -0
- package/esm2022/lib/tab-core-utility/app/helpers/response.adapter.mjs +42 -0
- package/esm2022/lib/tab-core-utility/app/helpers/screen/grid.helpers.mjs +8 -4
- package/esm2022/lib/tab-core-utility/app/helpers/screen/media-upload.helpers.mjs +5 -9
- package/esm2022/lib/tab-core-utility/app/helpers/screen/screen.helpers.mjs +8 -33
- package/esm2022/lib/tab-core-utility/app/helpers/transition-response.adapter.mjs +83 -0
- package/esm2022/lib/tab-core-utility/app/interfaces/auth.interface.mjs +1 -1
- package/esm2022/lib/tab-core-utility/app/interfaces/common.interface.mjs +1 -1
- package/esm2022/lib/tab-core-utility/app/interfaces/signalr.interface.mjs +42 -0
- package/esm2022/lib/tab-core-utility/app/models/api-query.class.mjs +39 -1
- package/esm2022/lib/tab-core-utility/app/models/app-field.model.mjs +36 -7
- package/esm2022/lib/tab-core-utility/app/models/app-object.model.mjs +84 -47
- package/esm2022/lib/tab-core-utility/app/models/app-screen.model.mjs +24 -13
- package/esm2022/lib/tab-core-utility/app/models/data-source-query.model.mjs +57 -23
- package/esm2022/lib/tab-core-utility/app/models/filter.model.mjs +21 -10
- package/esm2022/lib/tab-core-utility/app/models/parameter.model.mjs +12 -6
- package/esm2022/lib/tab-core-utility/app/models/sort.model.mjs +11 -4
- package/esm2022/lib/tab-core-utility/app/utils/json.util.mjs +17 -16
- package/esm2022/lib/tab-core-utility/app/utils/req-res.util.mjs +1 -55
- package/esm2022/lib/tab-core-utility/app/utils/tab-app.util.mjs +1 -164
- package/esm2022/lib/tab-core-utility/auth/auth.service.mjs +36 -11
- package/esm2022/lib/tab-core-utility/core/http-client/api.service.mjs +78 -1
- package/esm2022/lib/tab-core-utility/core/service/signalr/operation-tracker.service.mjs +90 -0
- package/esm2022/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.mjs +268 -0
- package/esm2022/lib/tab-core-utility/core/service/signalr/signalr.service.mjs +207 -0
- package/index.d.ts +5 -0
- package/lib/tab-core-utility/app/constants/api-constants.d.ts +29 -21
- package/lib/tab-core-utility/app/constants/common.d.ts +9 -0
- package/lib/tab-core-utility/app/constants/storage-constants.d.ts +1 -1
- package/lib/tab-core-utility/app/crud/tab-blueprint.service.d.ts +14 -8
- package/lib/tab-core-utility/app/crud/tab-crud.service.d.ts +9 -7
- package/lib/tab-core-utility/app/crud/tab-delete.service.d.ts +20 -10
- package/lib/tab-core-utility/app/crud/tab-formio.service.d.ts +33 -6
- package/lib/tab-core-utility/app/crud/tab-get.service.d.ts +50 -8
- package/lib/tab-core-utility/app/crud/tab-insert.service.d.ts +16 -21
- package/lib/tab-core-utility/app/crud/tab-update.service.d.ts +34 -19
- package/lib/tab-core-utility/app/enums/query.enum.d.ts +3 -6
- package/lib/tab-core-utility/app/helpers/auth-response.adapter.d.ts +32 -0
- package/lib/tab-core-utility/app/helpers/common/app.helpers.d.ts +6 -8
- package/lib/tab-core-utility/app/helpers/common/dsq.helpers.d.ts +3 -0
- package/lib/tab-core-utility/app/helpers/common/meta-data.helpers.d.ts +3 -3
- package/lib/tab-core-utility/app/helpers/common/req-res.helpers.d.ts +7 -51
- package/lib/tab-core-utility/app/helpers/common/where-clause.helpers.d.ts +1 -0
- package/lib/tab-core-utility/app/helpers/login-response.adapter.d.ts +29 -0
- package/lib/tab-core-utility/app/helpers/response.adapter.d.ts +22 -0
- package/lib/tab-core-utility/app/helpers/screen/grid.helpers.d.ts +2 -1
- package/lib/tab-core-utility/app/helpers/screen/media-upload.helpers.d.ts +1 -1
- package/lib/tab-core-utility/app/helpers/screen/screen.helpers.d.ts +1 -0
- package/lib/tab-core-utility/app/helpers/transition-response.adapter.d.ts +30 -0
- package/lib/tab-core-utility/app/interfaces/auth.interface.d.ts +1 -1
- package/lib/tab-core-utility/app/interfaces/common.interface.d.ts +61 -9
- package/lib/tab-core-utility/app/interfaces/signalr.interface.d.ts +84 -0
- package/lib/tab-core-utility/app/models/api-query.class.d.ts +54 -9
- package/lib/tab-core-utility/app/models/app-field.model.d.ts +4 -2
- package/lib/tab-core-utility/app/models/app-object.model.d.ts +5 -3
- package/lib/tab-core-utility/app/models/app-screen.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/data-source-query.model.d.ts +7 -2
- package/lib/tab-core-utility/app/models/filter.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/parameter.model.d.ts +2 -2
- package/lib/tab-core-utility/app/models/sort.model.d.ts +1 -1
- package/lib/tab-core-utility/app/utils/json.util.d.ts +3 -2
- package/lib/tab-core-utility/app/utils/req-res.util.d.ts +1 -9
- package/lib/tab-core-utility/app/utils/tab-app.util.d.ts +0 -61
- package/lib/tab-core-utility/auth/auth.service.d.ts +6 -0
- package/lib/tab-core-utility/core/http-client/api.service.d.ts +46 -0
- package/lib/tab-core-utility/core/service/signalr/operation-tracker.service.d.ts +40 -0
- package/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.d.ts +73 -0
- package/lib/tab-core-utility/core/service/signalr/signalr.service.d.ts +122 -0
- package/package.json +3 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { HttpHeaders } from '@angular/common/http';
|
|
2
2
|
import { AppObject } from '../models/app-object.class';
|
|
3
|
-
import { AppFields } from '../models/data-source-queries.class';
|
|
4
3
|
/**
|
|
5
4
|
* Delete a key from the response object
|
|
6
5
|
*
|
|
@@ -37,7 +36,7 @@ export declare function getHeaders(headers?: any): any;
|
|
|
37
36
|
* @param appObject - The AppObject
|
|
38
37
|
* @returns AppFields[] | null - The array of primary key fields or null
|
|
39
38
|
*/
|
|
40
|
-
export declare function getPrimaryKeyFields(appObject: AppObject): AppFields[] | null;
|
|
39
|
+
export declare function getPrimaryKeyFields(appObject: AppObject): import("@techextensor/tab-core-utility").AppFields[] | null;
|
|
41
40
|
/**
|
|
42
41
|
* Get the edit record ID from the response object
|
|
43
42
|
*
|
|
@@ -46,13 +45,6 @@ export declare function getPrimaryKeyFields(appObject: AppObject): AppFields[] |
|
|
|
46
45
|
* @returns any - The edit record ID
|
|
47
46
|
*/
|
|
48
47
|
export declare function getEditRecordId(response: any, fieldName: any): any;
|
|
49
|
-
/**
|
|
50
|
-
* Generate the fields schema based on the AppFields
|
|
51
|
-
*
|
|
52
|
-
* @param fields - The AppFields object
|
|
53
|
-
* @returns any - The generated fields schema
|
|
54
|
-
*/
|
|
55
|
-
export declare function generateFieldsSchema(url: any, fields: AppFields): {};
|
|
56
48
|
/**
|
|
57
49
|
* Get the HttpHeaders for form data requests
|
|
58
50
|
*
|
|
@@ -1,36 +1,4 @@
|
|
|
1
1
|
import { AppObject } from '../models/app-object.class';
|
|
2
|
-
/** Get the DataSourceQuery ID from the selected AppObject's DataSourceQuery array
|
|
3
|
-
* @param dsqList - The list of DataSourceQueries
|
|
4
|
-
* @param table - The table name
|
|
5
|
-
* @param like - The like string
|
|
6
|
-
* @returns string - The ID of the DataSourceQuery
|
|
7
|
-
*/
|
|
8
|
-
export declare function getDsqIdfromSelectedAppObjectDSQArray(dsqList: any, table: string, like: string): any;
|
|
9
|
-
/** Get the AppObject based on the provided ID
|
|
10
|
-
* @param id - The ID of the AppObject
|
|
11
|
-
* @returns AppObject | null - The found AppObject or null
|
|
12
|
-
*/
|
|
13
|
-
export declare function getAppObject(id: string): any;
|
|
14
|
-
/**
|
|
15
|
-
* Get the AppObject from the DataSourceQuery ID
|
|
16
|
-
* @param dsqId - The DataSourceQuery ID
|
|
17
|
-
* @returns AppObject | null - The found AppObject or null
|
|
18
|
-
*/
|
|
19
|
-
export declare function getAppObjectFromDataSourceQueryID(dsqId: string): any;
|
|
20
|
-
/**
|
|
21
|
-
* Get the DataSourceQuery ID from the QueryName and table
|
|
22
|
-
* @param table - The table name
|
|
23
|
-
* @param dsq - The DataSourceQuery name
|
|
24
|
-
* @returns any - The found DataSourceQuery
|
|
25
|
-
*/
|
|
26
|
-
export declare function getDsqIDFromQueryName(table: string, dsq: string): any;
|
|
27
|
-
/**
|
|
28
|
-
* Get the Data from the DataSourceQuery ID
|
|
29
|
-
*
|
|
30
|
-
* @param dsqId - The DataSourceQuery ID
|
|
31
|
-
* @returns any - The found Data
|
|
32
|
-
*/
|
|
33
|
-
export declare function getDataFromDataSourceQueryID(dsqId: string): any;
|
|
34
2
|
/**
|
|
35
3
|
* Synchronize AppObject fields with the response
|
|
36
4
|
*
|
|
@@ -39,32 +7,3 @@ export declare function getDataFromDataSourceQueryID(dsqId: string): any;
|
|
|
39
7
|
* @returns any - The synchronized response object
|
|
40
8
|
*/
|
|
41
9
|
export declare function syncAppObjectFields(response: any, appObject: AppObject): any;
|
|
42
|
-
/**
|
|
43
|
-
* Get the AppObject based on the SystemDBTableName
|
|
44
|
-
*
|
|
45
|
-
* @param tableName - The SystemDBTableName
|
|
46
|
-
* @returns AppObject | null - The found AppObject or null
|
|
47
|
-
*/
|
|
48
|
-
export declare function getAppObjectFromSystemDBTableName(tableName: string): any;
|
|
49
|
-
/**
|
|
50
|
-
* Get the fields based on the appobjectid
|
|
51
|
-
*
|
|
52
|
-
* @param appObjectId - The appobjectid
|
|
53
|
-
* @returns AppObject | null - The found AppObject or null
|
|
54
|
-
*/
|
|
55
|
-
export declare function getAppfieldsFromAppObjectId(appObjectId: string): any;
|
|
56
|
-
export declare function getLookupAppfieldsFromAppObjectId(appObjectId: string): any;
|
|
57
|
-
export declare function getViewAppObjectDetailsFromDSQID(dsqID: string): any;
|
|
58
|
-
/**
|
|
59
|
-
* Retrieves all appObjects and their DSQs in a single list
|
|
60
|
-
* suitable for tree view representation.
|
|
61
|
-
* @author : Parth B Thakkar
|
|
62
|
-
* @Usage : HTTP Request
|
|
63
|
-
* @returns Array<{ id: string; name: string; hasChildren: boolean; parentID: string | null }>
|
|
64
|
-
*/
|
|
65
|
-
export declare function getAllAppObjectsForTreeViewJson(): {
|
|
66
|
-
id: string;
|
|
67
|
-
name: string;
|
|
68
|
-
hasChildren: boolean;
|
|
69
|
-
parentID: string | null;
|
|
70
|
-
}[];
|
|
@@ -21,11 +21,17 @@ export declare class AuthService {
|
|
|
21
21
|
registerTenant(credentials: RegisterTenant): Observable<CommonApiResponse>;
|
|
22
22
|
/**
|
|
23
23
|
* Register a new user
|
|
24
|
+
* Uses new identity service endpoint: POST auth/register
|
|
24
25
|
* @param credentials - The new user's credentials
|
|
25
26
|
* @param headers - The headers
|
|
26
27
|
* @returns Observable<CommonApiResponse> - An observable of CommonApiResponse
|
|
27
28
|
*/
|
|
28
29
|
register(credentials: NewUserRequest, headers?: any): Observable<CommonApiResponse>;
|
|
30
|
+
/**
|
|
31
|
+
* Transforms register request payload from PascalCase to camelCase for new identity service.
|
|
32
|
+
* { FirstName, LastName, Email, Password, ... } → { firstName, lastName, email, password, ... }
|
|
33
|
+
*/
|
|
34
|
+
private transformRegisterRequest;
|
|
29
35
|
/**
|
|
30
36
|
* Reset Password
|
|
31
37
|
* @param data - Data for resetting password
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpParams, HttpHeaders } from '@angular/common/http';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
+
import { APIServiceName, CommonApiResponse } from '../../app/interfaces/common.interface';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class ApiService {
|
|
5
6
|
private readonly http;
|
|
@@ -81,6 +82,51 @@ export declare class ApiService {
|
|
|
81
82
|
* @returns An Observable emitting the response data of type T.
|
|
82
83
|
*/
|
|
83
84
|
deleteByUrl<T>(url: string, options?: any): Observable<any>;
|
|
85
|
+
/**
|
|
86
|
+
* Makes an HTTP GET request to a specific microservice
|
|
87
|
+
* @param serviceName - Name of the microservice (e.g., 'crudService', 'metadataService')
|
|
88
|
+
* @param endPointName - Endpoint path relative to the service
|
|
89
|
+
* @param params - Query parameters for the request
|
|
90
|
+
* @param reqHeader - Custom headers for the request
|
|
91
|
+
* @returns An Observable emitting the response data (auto-normalized to CommonApiResponse format)
|
|
92
|
+
*/
|
|
93
|
+
getFromService(serviceName: APIServiceName, endPointName: string, params?: HttpParams, reqHeader?: HttpHeaders): Observable<CommonApiResponse>;
|
|
94
|
+
/**
|
|
95
|
+
* Makes an HTTP POST request to a specific microservice
|
|
96
|
+
* @param serviceName - Name of the microservice (e.g., 'crudService', 'formioService')
|
|
97
|
+
* @param endPointName - Endpoint path relative to the service
|
|
98
|
+
* @param data - Data to send with the request
|
|
99
|
+
* @param reqHeader - Custom headers for the request
|
|
100
|
+
* @returns An Observable emitting the response data (auto-normalized to CommonApiResponse format)
|
|
101
|
+
*/
|
|
102
|
+
postToService<T, D>(serviceName: APIServiceName, endPointName: string, data?: D, reqHeader?: HttpHeaders): Observable<CommonApiResponse>;
|
|
103
|
+
/**
|
|
104
|
+
* Makes an HTTP PUT request to a specific microservice
|
|
105
|
+
* @param serviceName - Name of the microservice
|
|
106
|
+
* @param endPointName - Endpoint path relative to the service
|
|
107
|
+
* @param data - Data to send with the request
|
|
108
|
+
* @param reqHeader - Custom headers for the request
|
|
109
|
+
* @returns An Observable emitting the response data (auto-normalized to CommonApiResponse format)
|
|
110
|
+
*/
|
|
111
|
+
putToService<T, D>(serviceName: APIServiceName, endPointName: string, data: D, reqHeader?: HttpHeaders): Observable<CommonApiResponse>;
|
|
112
|
+
/**
|
|
113
|
+
* Makes an HTTP DELETE request to a specific microservice
|
|
114
|
+
* @param serviceName - Name of the microservice
|
|
115
|
+
* @param endPointName - Endpoint path relative to the service
|
|
116
|
+
* @param data - Data to send with the request (optional, for DELETE with body)
|
|
117
|
+
* @param reqHeader - Custom headers for the request
|
|
118
|
+
* @returns An Observable emitting the response data (auto-normalized to CommonApiResponse format)
|
|
119
|
+
*/
|
|
120
|
+
deleteFromService<D>(serviceName: APIServiceName, endPointName: string, data?: D, reqHeader?: HttpHeaders): Observable<CommonApiResponse>;
|
|
121
|
+
/**
|
|
122
|
+
* Makes an HTTP POST request to a specific microservice and returns a Blob response
|
|
123
|
+
* @param serviceName - Name of the microservice (e.g., 'reportService')
|
|
124
|
+
* @param endPointName - Endpoint path relative to the service
|
|
125
|
+
* @param data - Data to send with the request
|
|
126
|
+
* @param reqHeader - Custom headers for the request
|
|
127
|
+
* @returns An Observable emitting the response as a Blob
|
|
128
|
+
*/
|
|
129
|
+
postBlobToService<D>(serviceName: APIServiceName, endPointName: string, data?: D, reqHeader?: HttpHeaders): Observable<Blob>;
|
|
84
130
|
static ɵfac: i0.ɵɵFactoryDeclaration<ApiService, never>;
|
|
85
131
|
static ɵprov: i0.ɵɵInjectableDeclaration<ApiService>;
|
|
86
132
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { CrudNotification, PendingOperation } from '../../../app/interfaces/signalr.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Operation Tracker Service
|
|
6
|
+
* Tracks async operations by correlationId and matches them with SignalR notifications
|
|
7
|
+
* Used by TabFormioService for handling async processRequest operations
|
|
8
|
+
*/
|
|
9
|
+
export declare class OperationTrackerService {
|
|
10
|
+
private pendingOperations;
|
|
11
|
+
private operationCompleted$;
|
|
12
|
+
/**
|
|
13
|
+
* Register an async operation for tracking
|
|
14
|
+
*/
|
|
15
|
+
registerOperation(operation: PendingOperation): void;
|
|
16
|
+
/**
|
|
17
|
+
* Wait for operation to complete via SignalR notification
|
|
18
|
+
* Returns Observable that emits when notification with matching correlationId is received
|
|
19
|
+
*/
|
|
20
|
+
waitForOperation(correlationId: string, timeoutMs?: number): Observable<CrudNotification>;
|
|
21
|
+
/**
|
|
22
|
+
* Handle incoming SignalR notification
|
|
23
|
+
* Called by SignalRService when notification is received
|
|
24
|
+
*/
|
|
25
|
+
handleNotification(notification: CrudNotification): void;
|
|
26
|
+
/**
|
|
27
|
+
* Check if operation is pending
|
|
28
|
+
*/
|
|
29
|
+
isPending(correlationId: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get pending operations count (for debugging)
|
|
32
|
+
*/
|
|
33
|
+
getPendingCount(): number;
|
|
34
|
+
/**
|
|
35
|
+
* Get all pending operations (for debugging)
|
|
36
|
+
*/
|
|
37
|
+
getAllPending(): PendingOperation[];
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OperationTrackerService, never>;
|
|
39
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<OperationTrackerService>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { ConnectionState, CrudNotification } from '../../../app/interfaces/signalr.interface';
|
|
3
|
+
import { SessionStorageService } from '../../../auth/session-storage.service';
|
|
4
|
+
import { LocalStorageService } from '../../../auth/local-storage.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* SignalR Infrastructure Service
|
|
8
|
+
* Handles low-level WebSocket connection, group management, and reconnection
|
|
9
|
+
* Internal use only - components should use SignalRService instead
|
|
10
|
+
*/
|
|
11
|
+
export declare class SignalRInfrastructure {
|
|
12
|
+
private hubConnection;
|
|
13
|
+
readonly sessionStorageService: SessionStorageService;
|
|
14
|
+
readonly localStorageService: LocalStorageService;
|
|
15
|
+
readonly connectionState: import("@angular/core").WritableSignal<ConnectionState>;
|
|
16
|
+
readonly notifications$: Subject<CrudNotification>;
|
|
17
|
+
private activeGroups;
|
|
18
|
+
/**
|
|
19
|
+
* Helper method to get value from storage
|
|
20
|
+
* @param type The type of storage, 'Session' or 'Local'
|
|
21
|
+
* @param key The key to retrieve the value for
|
|
22
|
+
* @returns The value from storage, or null if not available
|
|
23
|
+
*/
|
|
24
|
+
private getFromStorage;
|
|
25
|
+
get appId(): string | null;
|
|
26
|
+
get environmentId(): string | null;
|
|
27
|
+
get tenantId(): string | null;
|
|
28
|
+
get token(): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Connect to SignalR hub
|
|
31
|
+
*/
|
|
32
|
+
connect(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Register SignalR event handlers for CRUD notifications
|
|
35
|
+
*/
|
|
36
|
+
private registerEventHandlers;
|
|
37
|
+
/**
|
|
38
|
+
* Extract notification from SignalR callback args
|
|
39
|
+
* Handles both unwrapped (direct object) and wrapped ({ type, target, arguments }) formats
|
|
40
|
+
*/
|
|
41
|
+
private extractNotification;
|
|
42
|
+
/**
|
|
43
|
+
* Register connection lifecycle handlers
|
|
44
|
+
*/
|
|
45
|
+
private registerConnectionLifecycle;
|
|
46
|
+
/**
|
|
47
|
+
* Join SignalR group for an AppObject
|
|
48
|
+
*/
|
|
49
|
+
joinGroup(appObjectId: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Leave SignalR group
|
|
52
|
+
*/
|
|
53
|
+
leaveGroup(appObjectId: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Rejoin all active groups after reconnection
|
|
56
|
+
* This ensures components continue receiving notifications after network interruption
|
|
57
|
+
*/
|
|
58
|
+
private rejoinGroups;
|
|
59
|
+
/**
|
|
60
|
+
* Check if connected
|
|
61
|
+
*/
|
|
62
|
+
isConnected(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Disconnect from SignalR hub (cleanup)
|
|
65
|
+
*/
|
|
66
|
+
disconnect(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Get active groups (for debugging)
|
|
69
|
+
*/
|
|
70
|
+
getActiveGroups(): string[];
|
|
71
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SignalRInfrastructure, never>;
|
|
72
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SignalRInfrastructure>;
|
|
73
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { CrudNotification, NotificationCallback, PendingOperation } from '../../../app/interfaces/signalr.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* SignalR Service
|
|
6
|
+
* Public API for:
|
|
7
|
+
* 1. Components to register for real-time CRUD notifications
|
|
8
|
+
* 2. Services (TabFormioService) to track async operations
|
|
9
|
+
*
|
|
10
|
+
* Usage in components:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* ngOnInit() {
|
|
13
|
+
* this.signalRService.register(
|
|
14
|
+
* this.componentId,
|
|
15
|
+
* this.appObjectId,
|
|
16
|
+
* (notification) => this.handleNotification(notification)
|
|
17
|
+
* );
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* ngOnDestroy() {
|
|
21
|
+
* this.signalRService.unregister(this.componentId, this.appObjectId);
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Usage in services (TabFormioService):
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const correlationId = response.correlationId;
|
|
28
|
+
* this.signalRService.waitForOperation(correlationId).subscribe(notification => {
|
|
29
|
+
* // Handle completed operation
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare class SignalRService {
|
|
34
|
+
private infrastructure;
|
|
35
|
+
private operationTracker;
|
|
36
|
+
private componentRegistry;
|
|
37
|
+
/**
|
|
38
|
+
* Get connection state (for UI indicators)
|
|
39
|
+
*/
|
|
40
|
+
readonly connectionState: import("@angular/core").WritableSignal<import("../../../app/interfaces/signalr.interface").ConnectionState>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if currently connected
|
|
43
|
+
*/
|
|
44
|
+
readonly isConnected: import("@angular/core").Signal<boolean>;
|
|
45
|
+
constructor();
|
|
46
|
+
/**
|
|
47
|
+
* Establish a connection to the SignalR hub
|
|
48
|
+
*
|
|
49
|
+
* This method is idempotent - if the connection is already established, it will not be re-established.
|
|
50
|
+
* Hub URL is read from Common.signalRHubUrl (set during app initialization via Common.init())
|
|
51
|
+
*/
|
|
52
|
+
connect(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Register component for real-time notifications
|
|
55
|
+
*
|
|
56
|
+
* @param componentId - Unique component identifier (generated by component)
|
|
57
|
+
* @param appObjectId - AppObject ID to subscribe to
|
|
58
|
+
* @param callback - Function to call when notification received
|
|
59
|
+
*/
|
|
60
|
+
register(componentId: string, appObjectId: string, callback: NotificationCallback): void;
|
|
61
|
+
/**
|
|
62
|
+
* Unregister component (cleanup on component destroy)
|
|
63
|
+
*
|
|
64
|
+
* @param componentId - Component identifier to remove
|
|
65
|
+
* @param appObjectId - AppObject ID to unsubscribe from
|
|
66
|
+
*/
|
|
67
|
+
unregister(componentId: string, appObjectId: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Wait for specific async operation to complete
|
|
70
|
+
* Used by TabFormioService for async processRequest operations
|
|
71
|
+
*
|
|
72
|
+
* @param correlationId - Correlation ID from backend response
|
|
73
|
+
* @param timeout - Optional timeout in milliseconds
|
|
74
|
+
* @returns Observable that emits when operation completes
|
|
75
|
+
*/
|
|
76
|
+
waitForOperation(correlationId: string, timeout?: number): Observable<CrudNotification>;
|
|
77
|
+
/**
|
|
78
|
+
* Register async operation for tracking
|
|
79
|
+
* Optional - waitForOperation handles registration automatically
|
|
80
|
+
*
|
|
81
|
+
* @param operation - Pending operation details
|
|
82
|
+
*/
|
|
83
|
+
registerOperation(operation: PendingOperation): void;
|
|
84
|
+
/**
|
|
85
|
+
* Check if operation is pending
|
|
86
|
+
*/
|
|
87
|
+
isOperationPending(correlationId: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Notify all registered components for an AppObject
|
|
90
|
+
* Called when notification received from SignalR hub
|
|
91
|
+
*/
|
|
92
|
+
private notifyComponents;
|
|
93
|
+
/**
|
|
94
|
+
* Get active AppObject groups (for debugging)
|
|
95
|
+
*/
|
|
96
|
+
getActiveGroups(): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Get component count for an AppObject (for debugging)
|
|
99
|
+
*/
|
|
100
|
+
getComponentCount(appObjectId: string): number;
|
|
101
|
+
/**
|
|
102
|
+
* Get total registered components across all AppObjects (for debugging)
|
|
103
|
+
*/
|
|
104
|
+
getTotalComponentCount(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Get registry state (for debugging)
|
|
107
|
+
*/
|
|
108
|
+
getRegistryState(): {
|
|
109
|
+
appObjectId: string;
|
|
110
|
+
componentCount: number;
|
|
111
|
+
}[];
|
|
112
|
+
/**
|
|
113
|
+
* Get pending operations count (for debugging)
|
|
114
|
+
*/
|
|
115
|
+
getPendingOperationsCount(): number;
|
|
116
|
+
/**
|
|
117
|
+
* Get all pending operations (for debugging)
|
|
118
|
+
*/
|
|
119
|
+
getPendingOperations(): PendingOperation[];
|
|
120
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SignalRService, never>;
|
|
121
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SignalRService>;
|
|
122
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@techextensor/tab-core-utility",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.196",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.2.15",
|
|
6
6
|
"@angular/core": "^19.2.15",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"idb": "^8.0.2",
|
|
12
12
|
"liquidjs": "^10.20.3",
|
|
13
13
|
"cypress": "^13.17.0",
|
|
14
|
-
"crypto-js": "^4.2.0"
|
|
14
|
+
"crypto-js": "^4.2.0",
|
|
15
|
+
"@microsoft/signalr": "^10.0.0"
|
|
15
16
|
},
|
|
16
17
|
"dependencies": {
|
|
17
18
|
"tslib": "^2.8.1"
|