ngx-histaff-alpha 2.0.0 → 2.0.2
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/lib/app/http-interceptors/auth-interceptor.mjs +10 -6
- package/esm2022/lib/app/http-interceptors/base-url-interceptor.mjs +14 -5
- package/esm2022/lib/app/http-interceptors/token-interceptor.mjs +22 -20
- package/esm2022/lib/app/interfaces/IStatisticAuthData.mjs +2 -0
- package/esm2022/lib/app/interfaces/IStatisticSysUser.mjs +2 -0
- package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs +141 -28
- package/esm2022/lib/app/services/app-config.service.mjs +1 -1
- package/esm2022/lib/app/services/app-initialization.service.mjs +3 -2
- package/esm2022/lib/app/services/common-http-request.service.mjs +19 -1
- package/esm2022/lib/app/services/statistic-auth.service.mjs +49 -0
- package/esm2022/lib/app/services/statistic.service.mjs +24 -0
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/ngx-histaff-alpha.mjs +264 -55
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/http-interceptors/auth-interceptor.d.ts +4 -2
- package/lib/app/http-interceptors/base-url-interceptor.d.ts +1 -0
- package/lib/app/http-interceptors/token-interceptor.d.ts +4 -2
- package/lib/app/interfaces/IStatisticAuthData.d.ts +9 -0
- package/lib/app/interfaces/IStatisticSysUser.d.ts +15 -0
- package/lib/app/libraries/core-table/core-table.component.d.ts +1 -1
- package/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.d.ts +5 -2
- package/lib/app/services/app-config.service.d.ts +1 -1
- package/lib/app/services/common-http-request.service.d.ts +2 -0
- package/lib/app/services/statistic-auth.service.d.ts +21 -0
- package/lib/app/services/statistic.service.d.ts +11 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
|
@@ -131,6 +131,11 @@ const skipInterceptorsHeaders = new HttpHeaders({
|
|
|
131
131
|
'Access-Control-Allow-Credentials': 'true',
|
|
132
132
|
'X-Skip-Interceptor': 'true'
|
|
133
133
|
});
|
|
134
|
+
const baseUrlForStatisticsInterceptorHeader = new HttpHeaders({
|
|
135
|
+
'Content-Type': 'application/json',
|
|
136
|
+
'Access-Control-Allow-Credentials': 'true',
|
|
137
|
+
'X-Statistic-Interceptor': 'true'
|
|
138
|
+
});
|
|
134
139
|
class CommonHttpRequestService {
|
|
135
140
|
// private handleError: HandleError;
|
|
136
141
|
constructor(http) {
|
|
@@ -198,6 +203,19 @@ class CommonHttpRequestService {
|
|
|
198
203
|
responseType: 'blob' // add 'responseType' to headers
|
|
199
204
|
}).pipe(map(response => response), last());
|
|
200
205
|
}
|
|
206
|
+
/* Bellow are methods for statistics */
|
|
207
|
+
makeStatisticPostRequest(name, relativeApiEndPoint, payload) {
|
|
208
|
+
return this.http.post(relativeApiEndPoint, payload, {
|
|
209
|
+
headers: baseUrlForStatisticsInterceptorHeader, observe: 'response', reportProgress: true, withCredentials: true,
|
|
210
|
+
})
|
|
211
|
+
.pipe(last());
|
|
212
|
+
}
|
|
213
|
+
makeStatisticGetRequest(name, relativeApiEndPoint, cacheRequest = false) {
|
|
214
|
+
return this.http.get(relativeApiEndPoint, {
|
|
215
|
+
headers: baseUrlForStatisticsInterceptorHeader, observe: 'response', reportProgress: true, withCredentials: true,
|
|
216
|
+
})
|
|
217
|
+
.pipe(map(response => response), last());
|
|
218
|
+
}
|
|
201
219
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CommonHttpRequestService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
202
220
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CommonHttpRequestService, providedIn: 'root' }); }
|
|
203
221
|
}
|
|
@@ -2475,9 +2493,10 @@ class AppInitializationService {
|
|
|
2475
2493
|
}
|
|
2476
2494
|
*/
|
|
2477
2495
|
try {
|
|
2478
|
-
fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, BASE_URL, GOLIVE_URL, DEBUG_ENABLED, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, AVATAR_FOLDER, }) => {
|
|
2496
|
+
fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, AVATAR_FOLDER, }) => {
|
|
2479
2497
|
this.appConfigService.APP_TYPE = APP_TYPE;
|
|
2480
2498
|
this.appConfigService.BASE_URL = BASE_URL;
|
|
2499
|
+
this.appConfigService.BASE_URL_FOR_STATISTIC = BASE_URL_FOR_STATISTIC;
|
|
2481
2500
|
this.appConfigService.GOLIVE_URL = GOLIVE_URL;
|
|
2482
2501
|
this.appConfigService.DEBUG_ENABLED = DEBUG_ENABLED;
|
|
2483
2502
|
this.appConfigService.LOGO_LOGIN = LOGO_LOGIN;
|
|
@@ -2685,6 +2704,7 @@ const InitializationCanMatchFn = (route, segments) => {
|
|
|
2685
2704
|
};
|
|
2686
2705
|
|
|
2687
2706
|
const InterceptorSkipHeader = 'X-Skip-Interceptor';
|
|
2707
|
+
const InterceptorStatisticHeader = 'X-Statistic-Interceptor';
|
|
2688
2708
|
class BaseUrlInterceptor {
|
|
2689
2709
|
constructor(appConfigService) {
|
|
2690
2710
|
this.appConfigService = appConfigService;
|
|
@@ -2697,10 +2717,18 @@ class BaseUrlInterceptor {
|
|
|
2697
2717
|
if (!this.appConfigService.BASE_URL) {
|
|
2698
2718
|
console.error("THE APP LAYPOUT had started rendering before appConfigService.BASE_URL reachs a truely value. Please check AppInitializationService initializing$.next method carefully!!!");
|
|
2699
2719
|
}
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2720
|
+
if (req.headers.has(InterceptorStatisticHeader)) {
|
|
2721
|
+
const addBaseUrlReq = req.clone({
|
|
2722
|
+
url: this.appConfigService.BASE_URL_FOR_STATISTIC + req.url
|
|
2723
|
+
});
|
|
2724
|
+
return next.handle(addBaseUrlReq);
|
|
2725
|
+
}
|
|
2726
|
+
else {
|
|
2727
|
+
const addBaseUrlReq = req.clone({
|
|
2728
|
+
url: this.appConfigService.BASE_URL + req.url
|
|
2729
|
+
});
|
|
2730
|
+
return next.handle(addBaseUrlReq);
|
|
2731
|
+
}
|
|
2704
2732
|
}
|
|
2705
2733
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: BaseUrlInterceptor, deps: [{ token: AppConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2706
2734
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: BaseUrlInterceptor, providedIn: 'root' }); }
|
|
@@ -2762,13 +2790,81 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
2762
2790
|
type: Injectable
|
|
2763
2791
|
}], ctorParameters: () => [{ type: MessageService }] });
|
|
2764
2792
|
|
|
2793
|
+
class StatisticService {
|
|
2794
|
+
constructor(commonHttpRequestService) {
|
|
2795
|
+
this.commonHttpRequestService = commonHttpRequestService;
|
|
2796
|
+
}
|
|
2797
|
+
get(url, cacheRequest = false) {
|
|
2798
|
+
return this.commonHttpRequestService.makeStatisticGetRequest('get', url, cacheRequest);
|
|
2799
|
+
}
|
|
2800
|
+
post(url, payload) {
|
|
2801
|
+
console.log("appService post", url);
|
|
2802
|
+
return this.commonHttpRequestService.makeStatisticPostRequest('post', url, payload);
|
|
2803
|
+
}
|
|
2804
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticService, deps: [{ token: CommonHttpRequestService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2805
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticService, providedIn: 'root' }); }
|
|
2806
|
+
}
|
|
2807
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticService, decorators: [{
|
|
2808
|
+
type: Injectable,
|
|
2809
|
+
args: [{
|
|
2810
|
+
providedIn: 'root'
|
|
2811
|
+
}]
|
|
2812
|
+
}], ctorParameters: () => [{ type: CommonHttpRequestService }] });
|
|
2813
|
+
|
|
2814
|
+
class StatisticAuthService {
|
|
2815
|
+
constructor(statisticService) {
|
|
2816
|
+
this.statisticService = statisticService;
|
|
2817
|
+
this.data$ = new BehaviorSubject(null);
|
|
2818
|
+
this.authenticated$ = new BehaviorSubject(false);
|
|
2819
|
+
this.refreshTokenSubject = new BehaviorSubject(null);
|
|
2820
|
+
this.refreshingToken$ = new BehaviorSubject(false);
|
|
2821
|
+
}
|
|
2822
|
+
getAuthorizationToken() {
|
|
2823
|
+
return this.data$.value?.accessToken || "";
|
|
2824
|
+
}
|
|
2825
|
+
userLogin(payload) {
|
|
2826
|
+
const url = "/api/Authentication/ClientLogin";
|
|
2827
|
+
return this.statisticService.post(url, payload);
|
|
2828
|
+
}
|
|
2829
|
+
userLogout() {
|
|
2830
|
+
const url = "/api/Authentication/ClientLogout";
|
|
2831
|
+
return this.statisticService.post(url, {});
|
|
2832
|
+
}
|
|
2833
|
+
tryRestoreSession() {
|
|
2834
|
+
const fullUrl = "/api/Authentication/RefreshToken";
|
|
2835
|
+
return this.statisticService.post(fullUrl, { appType: "WEBAPP" });
|
|
2836
|
+
}
|
|
2837
|
+
resolveAuthenticateResponse(x) {
|
|
2838
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
2839
|
+
const body = x.body;
|
|
2840
|
+
if (body.statusCode === 200) {
|
|
2841
|
+
const innerBody = body.innerBody;
|
|
2842
|
+
this.data$.next(innerBody);
|
|
2843
|
+
}
|
|
2844
|
+
}
|
|
2845
|
+
}
|
|
2846
|
+
postLogout() {
|
|
2847
|
+
// Do nothing. just for the interface implementation
|
|
2848
|
+
}
|
|
2849
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticAuthService, deps: [{ token: StatisticService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2850
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticAuthService, providedIn: 'root' }); }
|
|
2851
|
+
}
|
|
2852
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: StatisticAuthService, decorators: [{
|
|
2853
|
+
type: Injectable,
|
|
2854
|
+
args: [{
|
|
2855
|
+
providedIn: 'root'
|
|
2856
|
+
}]
|
|
2857
|
+
}], ctorParameters: () => [{ type: StatisticService }] });
|
|
2858
|
+
|
|
2765
2859
|
class AuthInterceptor {
|
|
2766
|
-
constructor(
|
|
2767
|
-
this.
|
|
2860
|
+
constructor(authService, statisticAuthService) {
|
|
2861
|
+
this.authService = authService;
|
|
2862
|
+
this.statisticAuthService = statisticAuthService;
|
|
2768
2863
|
}
|
|
2769
2864
|
intercept(req, next) {
|
|
2865
|
+
const isStatistic = req.headers.has(InterceptorStatisticHeader);
|
|
2770
2866
|
// Get the auth token from the service.
|
|
2771
|
-
const authToken = this.
|
|
2867
|
+
const authToken = isStatistic ? this.statisticAuthService.getAuthorizationToken() : this.authService.getAuthorizationToken();
|
|
2772
2868
|
if (authToken === undefined) {
|
|
2773
2869
|
return next.handle(req);
|
|
2774
2870
|
}
|
|
@@ -2780,7 +2876,7 @@ class AuthInterceptor {
|
|
|
2780
2876
|
// send cloned request with header to the next handler.
|
|
2781
2877
|
return next.handle(authReq);
|
|
2782
2878
|
}
|
|
2783
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2879
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: AuthService }, { token: StatisticAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2784
2880
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, providedIn: 'root' }); }
|
|
2785
2881
|
}
|
|
2786
2882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
@@ -2788,16 +2884,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
2788
2884
|
args: [{
|
|
2789
2885
|
providedIn: 'root'
|
|
2790
2886
|
}]
|
|
2791
|
-
}], ctorParameters: () => [{ type: AuthService }] });
|
|
2887
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: StatisticAuthService }] });
|
|
2792
2888
|
|
|
2793
|
-
/*
|
|
2794
|
-
Tannv: This code is based on the original blog post of Alexandru Bereghici
|
|
2795
|
-
https://itnext.io/angular-tutorial-implement-refresh-token-with-httpinterceptor-bfa27b966f57
|
|
2796
|
-
*/
|
|
2797
2889
|
class TokenInterceptor {
|
|
2798
2890
|
addAuthenticationToken(request) {
|
|
2799
|
-
|
|
2800
|
-
const
|
|
2891
|
+
const isStatistic = request.headers.has(InterceptorStatisticHeader);
|
|
2892
|
+
const authService = isStatistic ? this.statisticAuthService : this.auth;
|
|
2893
|
+
const accessToken = authService.getAuthorizationToken();
|
|
2801
2894
|
// If access token is null this means that user is not logged in
|
|
2802
2895
|
// And we return the original request
|
|
2803
2896
|
if (!accessToken) {
|
|
@@ -2808,8 +2901,9 @@ class TokenInterceptor {
|
|
|
2808
2901
|
headers: request.headers.set('Authorization', 'Bearer ' + accessToken)
|
|
2809
2902
|
});
|
|
2810
2903
|
}
|
|
2811
|
-
constructor(
|
|
2812
|
-
this.
|
|
2904
|
+
constructor(auth, statisticAuthService, appInitializationService, router) {
|
|
2905
|
+
this.auth = auth;
|
|
2906
|
+
this.statisticAuthService = statisticAuthService;
|
|
2813
2907
|
this.appInitializationService = appInitializationService;
|
|
2814
2908
|
this.router = router;
|
|
2815
2909
|
this.refreshTokenInProgress = false;
|
|
@@ -2818,6 +2912,8 @@ class TokenInterceptor {
|
|
|
2818
2912
|
this.refreshTokenSubject = new BehaviorSubject(null);
|
|
2819
2913
|
}
|
|
2820
2914
|
intercept(req, next) {
|
|
2915
|
+
const isStatistic = req.headers.has(InterceptorStatisticHeader);
|
|
2916
|
+
const authService = isStatistic ? this.statisticAuthService : this.auth;
|
|
2821
2917
|
if (req.url === undefined) {
|
|
2822
2918
|
return next.handle(req);
|
|
2823
2919
|
}
|
|
@@ -2858,9 +2954,9 @@ class TokenInterceptor {
|
|
|
2858
2954
|
if (req.url.toUpperCase().includes('REFRESH_TOKEN') ||
|
|
2859
2955
|
req.url.toUpperCase().includes('REFRESHTOKEN')) {
|
|
2860
2956
|
this.appInitializationService.initializing$.next(false);
|
|
2861
|
-
|
|
2957
|
+
authService.userLogout().subscribe(x => {
|
|
2862
2958
|
if (x.ok && x.status === 200) {
|
|
2863
|
-
|
|
2959
|
+
authService.postLogout();
|
|
2864
2960
|
}
|
|
2865
2961
|
});
|
|
2866
2962
|
}
|
|
@@ -2892,7 +2988,7 @@ class TokenInterceptor {
|
|
|
2892
2988
|
this.refreshTokenSubject.next(null);
|
|
2893
2989
|
// Call auth.refreshAccessToken
|
|
2894
2990
|
// (this is an Observable that will be returned)
|
|
2895
|
-
const refreshTokenReq =
|
|
2991
|
+
const refreshTokenReq = authService.tryRestoreSession();
|
|
2896
2992
|
return refreshTokenReq.pipe(
|
|
2897
2993
|
/*
|
|
2898
2994
|
The main difference between switchMap and other flattening operators is the cancelling effect. On each emission the previous inner observable (the result of the function you supplied) is cancelled and the new observable is subscribed. You can remember this by the phrase switch to a new observable.
|
|
@@ -2900,8 +2996,8 @@ class TokenInterceptor {
|
|
|
2900
2996
|
switchMap((response) => {
|
|
2901
2997
|
let token = '';
|
|
2902
2998
|
if (response.ok && response.status === 200) {
|
|
2903
|
-
|
|
2904
|
-
|
|
2999
|
+
authService.data$.next(response.body);
|
|
3000
|
+
authService.authenticated$.next(true);
|
|
2905
3001
|
token = response.body.jwtToken;
|
|
2906
3002
|
}
|
|
2907
3003
|
// When the call to refreshToken completes
|
|
@@ -2915,9 +3011,9 @@ class TokenInterceptor {
|
|
|
2915
3011
|
this.refreshTokenInProgress = false;
|
|
2916
3012
|
console.log("refreshTokenReq catchError", err);
|
|
2917
3013
|
debugger;
|
|
2918
|
-
|
|
3014
|
+
authService.userLogout().subscribe(x => {
|
|
2919
3015
|
if (x.ok && x.status === 200) {
|
|
2920
|
-
|
|
3016
|
+
authService.postLogout();
|
|
2921
3017
|
}
|
|
2922
3018
|
});
|
|
2923
3019
|
return throwError(() => new Error(err));
|
|
@@ -2927,12 +3023,12 @@ class TokenInterceptor {
|
|
|
2927
3023
|
// Log when response observable either completes or errors
|
|
2928
3024
|
finalize(() => { }));
|
|
2929
3025
|
}
|
|
2930
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, deps: [{ token: AuthService }, { token: AppInitializationService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3026
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, deps: [{ token: AuthService }, { token: StatisticAuthService }, { token: AppInitializationService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2931
3027
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor }); }
|
|
2932
3028
|
}
|
|
2933
3029
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
2934
3030
|
type: Injectable
|
|
2935
|
-
}], ctorParameters: () => [{ type: AuthService }, { type: AppInitializationService }, { type: i1$1.Router }] });
|
|
3031
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: StatisticAuthService }, { type: AppInitializationService }, { type: i1$1.Router }] });
|
|
2936
3032
|
|
|
2937
3033
|
class ResponseService {
|
|
2938
3034
|
constructor(alertService, mls) {
|
|
@@ -22110,6 +22206,8 @@ class CoreStatisticWidgetComponent {
|
|
|
22110
22206
|
this.comparisonTextRectHeight = (this.height / 4 - this.divisorLineMargin.bottom) / 2;
|
|
22111
22207
|
this.x = d3.scaleLinear().range([0, this.graphWidth]);
|
|
22112
22208
|
this.y = d3.scaleLinear().range([this.graphHeight, 0]);
|
|
22209
|
+
this.previousValue = 0;
|
|
22210
|
+
this.previousComparisonValue = 0;
|
|
22113
22211
|
//To remove only the numbers while keeping the ticks on the axes,
|
|
22114
22212
|
//you can select the text elements of the ticks and hide them using CSS.
|
|
22115
22213
|
//Here's how you can modify the code to achieve that:
|
|
@@ -22139,44 +22237,98 @@ class CoreStatisticWidgetComponent {
|
|
|
22139
22237
|
}
|
|
22140
22238
|
updateMetricName() {
|
|
22141
22239
|
var nameElement = d3.select("#metric_" + this.metric.id + "_name");
|
|
22142
|
-
nameElement.text(this.metric.name);
|
|
22240
|
+
nameElement.transition().text(this.metric.name);
|
|
22143
22241
|
}
|
|
22144
22242
|
updateMetricValue() {
|
|
22145
|
-
var valueElement = d3.select("metric_" + this.metric.id + "_value");
|
|
22243
|
+
var valueElement = d3.select("#metric_" + this.metric.id + "_value");
|
|
22244
|
+
const start = this.previousValue;
|
|
22245
|
+
const end = this.value;
|
|
22146
22246
|
switch (this.metric.dataType) {
|
|
22147
22247
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
22148
|
-
valueElement
|
|
22248
|
+
valueElement
|
|
22249
|
+
.transition()
|
|
22250
|
+
.tween("text", () => {
|
|
22251
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22252
|
+
return t => {
|
|
22253
|
+
valueElement.text(Math.round(interpolator(t)));
|
|
22254
|
+
};
|
|
22255
|
+
})
|
|
22256
|
+
.duration(500);
|
|
22149
22257
|
break;
|
|
22150
22258
|
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
22151
|
-
valueElement
|
|
22259
|
+
valueElement
|
|
22260
|
+
.transition()
|
|
22261
|
+
.tween("text", () => {
|
|
22262
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22263
|
+
return t => {
|
|
22264
|
+
valueElement.text(Math.round(interpolator(t) * 100) / 100);
|
|
22265
|
+
};
|
|
22266
|
+
})
|
|
22267
|
+
.duration(500);
|
|
22152
22268
|
break;
|
|
22153
22269
|
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
22154
|
-
valueElement
|
|
22270
|
+
valueElement
|
|
22271
|
+
.transition()
|
|
22272
|
+
.tween("text", () => {
|
|
22273
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22274
|
+
return t => {
|
|
22275
|
+
valueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
|
|
22276
|
+
};
|
|
22277
|
+
})
|
|
22278
|
+
.duration(500);
|
|
22155
22279
|
break;
|
|
22156
22280
|
default:
|
|
22157
|
-
valueElement.text(this.value.toString());
|
|
22281
|
+
valueElement.transition().text(this.value.toString());
|
|
22158
22282
|
break;
|
|
22159
22283
|
}
|
|
22284
|
+
this.previousValue = this.value;
|
|
22160
22285
|
}
|
|
22161
22286
|
updateMetricComparisonValue() {
|
|
22162
|
-
|
|
22287
|
+
const start = this.previousComparisonValue;
|
|
22288
|
+
const end = this.comparisonValue;
|
|
22289
|
+
var comparisonValueElement = d3.select("#metric_" + this.metric.id + "_comparisonValue");
|
|
22290
|
+
comparisonValueElement.attr("fill", this.comparisonValue >= 0 ? this.comparisonTextFillColor : d3.color("red"));
|
|
22163
22291
|
switch (this.metric.dataType) {
|
|
22164
22292
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
22165
|
-
comparisonValueElement
|
|
22293
|
+
comparisonValueElement
|
|
22294
|
+
.transition()
|
|
22295
|
+
.tween("text", () => {
|
|
22296
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22297
|
+
return t => {
|
|
22298
|
+
comparisonValueElement.text(Math.round(interpolator(t)));
|
|
22299
|
+
};
|
|
22300
|
+
})
|
|
22301
|
+
.duration(500);
|
|
22166
22302
|
break;
|
|
22167
22303
|
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
22168
|
-
comparisonValueElement
|
|
22304
|
+
comparisonValueElement
|
|
22305
|
+
.transition()
|
|
22306
|
+
.tween("text", () => {
|
|
22307
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22308
|
+
return t => {
|
|
22309
|
+
comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
|
|
22310
|
+
};
|
|
22311
|
+
})
|
|
22312
|
+
.duration(500);
|
|
22169
22313
|
break;
|
|
22170
22314
|
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
22171
|
-
comparisonValueElement
|
|
22315
|
+
comparisonValueElement
|
|
22316
|
+
.transition()
|
|
22317
|
+
.tween("text", () => {
|
|
22318
|
+
const interpolator = d3.interpolateNumber(start, end);
|
|
22319
|
+
return t => {
|
|
22320
|
+
comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
|
|
22321
|
+
};
|
|
22322
|
+
})
|
|
22323
|
+
.duration(500);
|
|
22172
22324
|
break;
|
|
22173
22325
|
default:
|
|
22174
|
-
comparisonValueElement.text(this.comparisonValue.toString());
|
|
22326
|
+
comparisonValueElement.transition().text(this.comparisonValue.toString());
|
|
22175
22327
|
break;
|
|
22176
22328
|
}
|
|
22177
22329
|
}
|
|
22178
22330
|
updateMetricComparisonText() {
|
|
22179
|
-
var comparisonTextElement = d3.select("metric_" + this.metric.id + "_comparisonText");
|
|
22331
|
+
var comparisonTextElement = d3.select("#metric_" + this.metric.id + "_comparisonText");
|
|
22180
22332
|
switch (this.metric.comparisonCode) {
|
|
22181
22333
|
case EnumHrComparisonCode.WITH_PREVIOUS_MONTH:
|
|
22182
22334
|
comparisonTextElement.text("vs. previous month");
|
|
@@ -22213,14 +22365,15 @@ class CoreStatisticWidgetComponent {
|
|
|
22213
22365
|
.x(d => xScale(d.x))
|
|
22214
22366
|
.y(d => yScale(d.y))
|
|
22215
22367
|
.defined((d, i) => i >= 0 && i < this.dataset.length);
|
|
22216
|
-
this.
|
|
22368
|
+
d3.select("#metric_" + this.metric.id + "_scatter-plot").select("path")
|
|
22217
22369
|
.datum(this.dataset)
|
|
22218
22370
|
.transition()
|
|
22219
22371
|
.duration(500)
|
|
22220
22372
|
.attr("d", this.connectingLine);
|
|
22221
22373
|
// Update circles
|
|
22222
|
-
const circles = this.
|
|
22374
|
+
const circles = d3.select("#metric_" + this.metric.id + "_scatter-plot").selectAll("circle")
|
|
22223
22375
|
.data(this.dataset);
|
|
22376
|
+
circles.exit().remove();
|
|
22224
22377
|
circles.enter()
|
|
22225
22378
|
.append("circle")
|
|
22226
22379
|
.merge(circles)
|
|
@@ -22245,7 +22398,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22245
22398
|
})
|
|
22246
22399
|
.attr("stroke-width", 3); // Set stroke width
|
|
22247
22400
|
}
|
|
22248
|
-
drawGraph() {
|
|
22401
|
+
async drawGraph() {
|
|
22249
22402
|
this.svg = d3.select(this.container.nativeElement)
|
|
22250
22403
|
.append("svg")
|
|
22251
22404
|
.attr("width", this.outerWidth)
|
|
@@ -22310,25 +22463,52 @@ class CoreStatisticWidgetComponent {
|
|
|
22310
22463
|
.attr("y", this.valueRectHeight / 2)
|
|
22311
22464
|
.attr("class", "graph-value")
|
|
22312
22465
|
.attr("fill", this.valueFillColor)
|
|
22313
|
-
.attr("font-size", this.valueRectHeight + "px")
|
|
22466
|
+
.attr("font-size", (this.valueFontSize || this.valueRectHeight) + "px")
|
|
22314
22467
|
.attr("text-anchor", "middle")
|
|
22315
22468
|
.attr("alignment-baseline", "middle");
|
|
22469
|
+
const startValue = 0;
|
|
22470
|
+
const endValue = this.value;
|
|
22316
22471
|
switch (this.metric.dataType) {
|
|
22317
22472
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
22318
|
-
this.valueText
|
|
22473
|
+
this.valueText
|
|
22474
|
+
.transition()
|
|
22475
|
+
.tween("text", () => {
|
|
22476
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22477
|
+
return t => {
|
|
22478
|
+
this.valueText.text(Math.round(interpolator(t)));
|
|
22479
|
+
};
|
|
22480
|
+
})
|
|
22481
|
+
.duration(500);
|
|
22319
22482
|
break;
|
|
22320
22483
|
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
22321
|
-
this.valueText
|
|
22484
|
+
this.valueText
|
|
22485
|
+
.transition()
|
|
22486
|
+
.tween("text", () => {
|
|
22487
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22488
|
+
return t => {
|
|
22489
|
+
this.valueText.text(Math.round(interpolator(t) * 100) / 100);
|
|
22490
|
+
};
|
|
22491
|
+
})
|
|
22492
|
+
.duration(500);
|
|
22322
22493
|
break;
|
|
22323
22494
|
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
22324
|
-
this.valueText
|
|
22495
|
+
this.valueText
|
|
22496
|
+
.transition()
|
|
22497
|
+
.tween("text", () => {
|
|
22498
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22499
|
+
return t => {
|
|
22500
|
+
this.valueText.text(Math.round(interpolator(t) * 10000) / 100 + "%");
|
|
22501
|
+
};
|
|
22502
|
+
})
|
|
22503
|
+
.duration(500);
|
|
22325
22504
|
break;
|
|
22326
22505
|
default:
|
|
22327
22506
|
this.valueText.text(this.value.toString());
|
|
22328
22507
|
break;
|
|
22329
22508
|
}
|
|
22509
|
+
this.previousValue = this.value;
|
|
22330
22510
|
this.grayGroup = this.greenGroup.append("g")
|
|
22331
|
-
.attr("id", "
|
|
22511
|
+
.attr("id", "metric_" + this.metric.id + "_scatter-plot")
|
|
22332
22512
|
.attr("transform", "translate(" + this.divisorLineMargin.left + ", " + this.height / 2 + ")");
|
|
22333
22513
|
this.grayGroup.append("rect")
|
|
22334
22514
|
.attr("class", "graph-container")
|
|
@@ -22359,24 +22539,51 @@ class CoreStatisticWidgetComponent {
|
|
|
22359
22539
|
.attr("x", this.comparisonValueRectWidth / 2)
|
|
22360
22540
|
.attr("y", this.comparisonValueRectHeight / 2)
|
|
22361
22541
|
.attr("class", "graph-value")
|
|
22362
|
-
.attr("fill", this.comparisonValueFillColor)
|
|
22542
|
+
.attr("fill", this.comparisonValue >= 0 ? this.comparisonValueFillColor : d3.color("red"))
|
|
22363
22543
|
.attr("font-size", this.comparisonValueRectHeight + "px")
|
|
22364
22544
|
.attr("text-anchor", "middle")
|
|
22365
22545
|
.attr("alignment-baseline", "middle");
|
|
22546
|
+
const startComparisonValue = 0;
|
|
22547
|
+
const endComparisonValue = this.comparisonValue;
|
|
22366
22548
|
switch (this.metric.dataType) {
|
|
22367
22549
|
case EnumICoreStatisticWidgetDataType.INTEGER:
|
|
22368
|
-
|
|
22550
|
+
comparisonValueText
|
|
22551
|
+
.transition()
|
|
22552
|
+
.tween("text", () => {
|
|
22553
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22554
|
+
return t => {
|
|
22555
|
+
comparisonValueText.text(Math.round(interpolator(t)));
|
|
22556
|
+
};
|
|
22557
|
+
})
|
|
22558
|
+
.duration(500);
|
|
22369
22559
|
break;
|
|
22370
22560
|
case EnumICoreStatisticWidgetDataType.DECIMAL:
|
|
22371
|
-
|
|
22561
|
+
comparisonValueText
|
|
22562
|
+
.transition()
|
|
22563
|
+
.tween("text", () => {
|
|
22564
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22565
|
+
return t => {
|
|
22566
|
+
comparisonValueText.text(Math.round(interpolator(t) * 100) / 100);
|
|
22567
|
+
};
|
|
22568
|
+
})
|
|
22569
|
+
.duration(500);
|
|
22372
22570
|
break;
|
|
22373
22571
|
case EnumICoreStatisticWidgetDataType.PERCENTAGE:
|
|
22374
|
-
|
|
22572
|
+
comparisonValueText
|
|
22573
|
+
.transition()
|
|
22574
|
+
.tween("text", () => {
|
|
22575
|
+
const interpolator = d3.interpolateNumber(startValue, endValue);
|
|
22576
|
+
return t => {
|
|
22577
|
+
comparisonValueText.text(Math.round(interpolator(t) * 10000) / 100 + "%");
|
|
22578
|
+
};
|
|
22579
|
+
})
|
|
22580
|
+
.duration(500);
|
|
22375
22581
|
break;
|
|
22376
22582
|
default:
|
|
22377
|
-
|
|
22583
|
+
comparisonValueText.text(this.comparisonValue.toString());
|
|
22378
22584
|
break;
|
|
22379
22585
|
}
|
|
22586
|
+
this.previousComparisonValue = this.comparisonValue;
|
|
22380
22587
|
const comparisonTextGroupTranslateY = this.height * 3 / 4 + this.divisorLineMargin.bottom + this.comparisonTextRectHeight;
|
|
22381
22588
|
this.comparisonTextGroup = this.greenGroup.append("g")
|
|
22382
22589
|
.attr("class", "comparison-text-group")
|
|
@@ -22439,7 +22646,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22439
22646
|
return "#FF8C00"; // Set lowest point to #FF8C00
|
|
22440
22647
|
if (d === maxPoint)
|
|
22441
22648
|
return "#315897"; // Set highest point to #315897
|
|
22442
|
-
return "
|
|
22649
|
+
return "none"; // Set the other points transparent
|
|
22443
22650
|
})
|
|
22444
22651
|
.attr("stroke", function (d) {
|
|
22445
22652
|
if (d === minPoint)
|
|
@@ -22456,7 +22663,7 @@ class CoreStatisticWidgetComponent {
|
|
|
22456
22663
|
});
|
|
22457
22664
|
}
|
|
22458
22665
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22459
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: "metric", dataset: "dataset", value: "value", comparisonValue: "comparisonValue", margin: "margin", padding: "padding", outerWidth: "outerWidth", outerHeight: "outerHeight", divisorLineMargin: "divisorLineMargin", titleFillColor: "titleFillColor", divisorLineStrokeColor: "divisorLineStrokeColor", divisorLineStrokeWidth: "divisorLineStrokeWidth", valueFillColor: "valueFillColor", comparisonValueFillColor: "comparisonValueFillColor", comparisonTextFillColor: "comparisonTextFillColor", showAxes: "showAxes" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>", styles: [""] }); }
|
|
22666
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreStatisticWidgetComponent, isStandalone: true, selector: "core-statistic-widget", inputs: { metric: "metric", dataset: "dataset", value: "value", comparisonValue: "comparisonValue", valueFontSize: "valueFontSize", margin: "margin", padding: "padding", outerWidth: "outerWidth", outerHeight: "outerHeight", divisorLineMargin: "divisorLineMargin", titleFillColor: "titleFillColor", divisorLineStrokeColor: "divisorLineStrokeColor", divisorLineStrokeWidth: "divisorLineStrokeWidth", valueFillColor: "valueFillColor", comparisonValueFillColor: "comparisonValueFillColor", comparisonTextFillColor: "comparisonTextFillColor", showAxes: "showAxes" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-statistic-widget-container\">\r\n \r\n</div>", styles: [""] }); }
|
|
22460
22667
|
}
|
|
22461
22668
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreStatisticWidgetComponent, decorators: [{
|
|
22462
22669
|
type: Component,
|
|
@@ -22473,6 +22680,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
22473
22680
|
}], comparisonValue: [{
|
|
22474
22681
|
type: Input,
|
|
22475
22682
|
args: [{ required: true }]
|
|
22683
|
+
}], valueFontSize: [{
|
|
22684
|
+
type: Input
|
|
22476
22685
|
}], margin: [{
|
|
22477
22686
|
type: Input
|
|
22478
22687
|
}], padding: [{
|
|
@@ -23326,5 +23535,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
23326
23535
|
* Generated bundle index. Do not edit.
|
|
23327
23536
|
*/
|
|
23328
23537
|
|
|
23329
|
-
export { AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeSeekerComponent, CoreFileUploaderComponent, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTableComponent, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreTablePipeType, EnumCoreViewItemType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumHrComparisonCode, EnumICoreStatisticWidgetDataType, EnumIconClass, EnumOparator, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAvatarToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NgxHistaffAlphaComponent, NgxHistaffAlphaService, NormalizeHumanNamePipe, OnlineUsersComponent, OrganizationService, PageTitleComponent, PaginationComponent, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, StaffProfileComponent, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, alertOptions, attachmentOptions, blob_to_base64_script, defaultPaging, httpInterceptorProviders, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, themeBlue };
|
|
23538
|
+
export { AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeSeekerComponent, CoreFileUploaderComponent, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTableComponent, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreTablePipeType, EnumCoreViewItemType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumHrComparisonCode, EnumICoreStatisticWidgetDataType, EnumIconClass, EnumOparator, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAvatarToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NgxHistaffAlphaComponent, NgxHistaffAlphaService, NormalizeHumanNamePipe, OnlineUsersComponent, OrganizationService, PageTitleComponent, PaginationComponent, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, StaffProfileComponent, StatisticAuthService, StatisticService, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, alertOptions, attachmentOptions, blob_to_base64_script, defaultPaging, httpInterceptorProviders, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, themeBlue };
|
|
23330
23539
|
//# sourceMappingURL=ngx-histaff-alpha.mjs.map
|