@verisoft/core 18.4.0 → 18.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/esm2022/index.mjs +4 -0
  2. package/esm2022/lib/models/all-item.datasource.mjs +2 -0
  3. package/esm2022/lib/models/base-http.models.mjs +83 -0
  4. package/esm2022/lib/models/constants.mjs +6 -0
  5. package/esm2022/lib/models/datasource.model.mjs +44 -0
  6. package/esm2022/lib/models/environment.model.mjs +2 -0
  7. package/esm2022/lib/models/error-provider.model.mjs +12 -0
  8. package/esm2022/lib/models/event.models.mjs +2 -0
  9. package/esm2022/lib/models/index.mjs +8 -0
  10. package/esm2022/lib/services/base-http.service.mjs +86 -0
  11. package/esm2022/lib/services/error-provider.service.mjs +34 -0
  12. package/esm2022/lib/services/index.mjs +4 -0
  13. package/esm2022/lib/services/local-storage.service.mjs +12 -0
  14. package/esm2022/lib/utils/array.utils.mjs +43 -0
  15. package/esm2022/lib/utils/clear.utils.mjs +35 -0
  16. package/esm2022/lib/utils/data.utils.mjs +32 -0
  17. package/esm2022/lib/utils/date.utils.mjs +26 -0
  18. package/esm2022/lib/utils/index.mjs +7 -0
  19. package/esm2022/lib/utils/keyOrFn.utils.mjs +16 -0
  20. package/esm2022/lib/utils/object.utils.mjs +35 -0
  21. package/esm2022/verisoft-core.mjs +5 -0
  22. package/fesm2022/verisoft-core.mjs +462 -0
  23. package/fesm2022/verisoft-core.mjs.map +1 -0
  24. package/{src/index.ts → index.d.ts} +3 -3
  25. package/{src/lib/models/all-item.datasource.ts → lib/models/all-item.datasource.d.ts} +4 -5
  26. package/lib/models/base-http.models.d.ts +41 -0
  27. package/lib/models/constants.d.ts +3 -0
  28. package/lib/models/datasource.model.d.ts +8 -0
  29. package/{src/lib/models/environment.model.ts → lib/models/environment.model.d.ts} +5 -5
  30. package/lib/models/error-provider.model.d.ts +11 -0
  31. package/{src/lib/models/event.models.ts → lib/models/event.models.d.ts} +5 -7
  32. package/{src/lib/models/index.ts → lib/models/index.d.ts} +7 -7
  33. package/lib/services/base-http.service.d.ts +21 -0
  34. package/lib/services/error-provider.service.d.ts +12 -0
  35. package/{src/lib/services/index.ts → lib/services/index.d.ts} +3 -3
  36. package/lib/services/local-storage.service.d.ts +5 -0
  37. package/lib/utils/array.utils.d.ts +5 -0
  38. package/lib/utils/clear.utils.d.ts +7 -0
  39. package/lib/utils/data.utils.d.ts +3 -0
  40. package/lib/utils/date.utils.d.ts +1 -0
  41. package/{src/lib/utils/index.ts → lib/utils/index.d.ts} +6 -6
  42. package/lib/utils/keyOrFn.utils.d.ts +1 -0
  43. package/lib/utils/object.utils.d.ts +2 -0
  44. package/package.json +29 -14
  45. package/.eslintrc.json +0 -43
  46. package/jest.config.ts +0 -22
  47. package/ng-package.json +0 -7
  48. package/project.json +0 -36
  49. package/src/lib/index.ts +0 -1
  50. package/src/lib/models/base-http.models.ts +0 -144
  51. package/src/lib/models/constants.ts +0 -8
  52. package/src/lib/models/datasource.model.ts +0 -77
  53. package/src/lib/models/error-provider.model.ts +0 -20
  54. package/src/lib/services/base-http.service.ts +0 -114
  55. package/src/lib/services/error-provider.service.ts +0 -29
  56. package/src/lib/services/local-storage.service.ts +0 -13
  57. package/src/lib/services/storage.service.ts +0 -13
  58. package/src/lib/utils/array.utils.spec.ts +0 -49
  59. package/src/lib/utils/array.utils.ts +0 -54
  60. package/src/lib/utils/clear.utils.ts +0 -53
  61. package/src/lib/utils/data.utils.ts +0 -34
  62. package/src/lib/utils/date.utils.ts +0 -30
  63. package/src/lib/utils/keyOrFn.utils.ts +0 -15
  64. package/src/lib/utils/object.utils.spec.ts +0 -69
  65. package/src/lib/utils/object.utils.ts +0 -47
  66. package/src/test-setup.ts +0 -8
  67. package/tsconfig.json +0 -29
  68. package/tsconfig.lib.json +0 -17
  69. package/tsconfig.lib.prod.json +0 -10
  70. package/tsconfig.spec.json +0 -16
@@ -0,0 +1,21 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { AllDataRequestParams, Page, RequestParams } from '../models/base-http.models';
4
+ import { LazyLoadEvent } from '../models/event.models';
5
+ export declare class BaseHttpService<T, TKey = number | string> {
6
+ readonly http: HttpClient;
7
+ readonly basePath: string;
8
+ readonly entityName: string;
9
+ constructor(http: HttpClient, basePath: string, entityName: string);
10
+ protected get apiPath(): string;
11
+ fetchList(requestParams: RequestParams<T>): Observable<Page<T>>;
12
+ getData$(entityName: keyof T, searchTerm?: string | undefined, lazyLoad?: LazyLoadEvent): Observable<T[]>;
13
+ get(id: TKey): Observable<T>;
14
+ post(entity: Partial<T>): Observable<T>;
15
+ put(id: TKey, entity: Partial<T>): Observable<T>;
16
+ delete(id: TKey): Observable<T>;
17
+ export(requestParams: AllDataRequestParams<T>): Observable<Blob>;
18
+ removeRange(entity: string[]): Observable<Object>;
19
+ createParams<T>(requestParams: RequestParams<T>): any;
20
+ private createSorter;
21
+ }
@@ -0,0 +1,12 @@
1
+ import { ValidationErrors } from '@angular/forms';
2
+ import { Observable } from 'rxjs';
3
+ import { ErrorProvider } from '../models/error-provider.model';
4
+ import * as i0 from "@angular/core";
5
+ export declare class LocalizableErrorProviderService implements ErrorProvider {
6
+ private readonly translateService;
7
+ readonly errors: Record<string, (value?: any) => string>;
8
+ mapError(errors: ValidationErrors): Observable<string>;
9
+ private getFirstValue;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizableErrorProviderService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalizableErrorProviderService>;
12
+ }
@@ -1,3 +1,3 @@
1
- export * from './base-http.service';
2
- export * from './local-storage.service';
3
- export * from './error-provider.service'
1
+ export * from './base-http.service';
2
+ export * from './local-storage.service';
3
+ export * from './error-provider.service';
@@ -0,0 +1,5 @@
1
+ export declare class LocalStorageService {
2
+ setItem(key: string, value: string): void;
3
+ getItem(key: string): string | null;
4
+ removeItem(key: string): void;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { Sort } from "../models";
2
+ type ArrayIntersectionType = (string | number)[];
3
+ export declare function isArrayIntersected(array1: ArrayIntersectionType, array2: ArrayIntersectionType): boolean;
4
+ export declare function multiSort<T>(values: T[], sorts: Sort[]): T[];
5
+ export {};
@@ -0,0 +1,7 @@
1
+ export declare class ClearUtils {
2
+ static recursiveObjectAttributesTransformation(obj: any): void;
3
+ static recursiveObjectAttributesDeletation(obj: any): void;
4
+ static transformEmptyStringToNullStringFn(obj: any, key: string): void;
5
+ static deleteEmptyStringToNullStringFn(obj: any, key: string): void;
6
+ static recursiveObjectAttributesTraversal(obj: any, transformationFn: (obj: any, key: string) => void): void;
7
+ }
@@ -0,0 +1,3 @@
1
+ export declare function transformData(data: any): any;
2
+ export declare function convertToDate(data: any): any;
3
+ export declare function convertToDateTime(data: any): any;
@@ -0,0 +1 @@
1
+ export declare function toCzechDateTimeString(value?: Date | string, time?: boolean): string;
@@ -1,6 +1,6 @@
1
- export * from './clear.utils';
2
- export * from './keyOrFn.utils';
3
- export * from './array.utils';
4
- export * from './data.utils';
5
- export * from './object.utils';
6
- export * from './date.utils';
1
+ export * from './clear.utils';
2
+ export * from './keyOrFn.utils';
3
+ export * from './array.utils';
4
+ export * from './data.utils';
5
+ export * from './object.utils';
6
+ export * from './date.utils';
@@ -0,0 +1 @@
1
+ export declare function keyOrFn(keyOrFn: ((row: any) => string | undefined) | string, row: any): any;
@@ -0,0 +1,2 @@
1
+ export declare function sortBy<TEntity, TProperty>(items: TEntity[], selector: (item: TEntity) => TProperty, ascending?: boolean): TEntity[];
2
+ export declare function getValueByPath<T, TValue>(obj: T, path: string | undefined): TValue | undefined;
package/package.json CHANGED
@@ -1,14 +1,29 @@
1
- {
2
- "name": "@verisoft/core",
3
- "version": "18.4.0",
4
- "peerDependencies": {
5
- "@angular/common": "^18.2.8",
6
- "@angular/core": "^18.2.8",
7
- "moment": "^2.30.1",
8
- "rxjs": "~7.8.0",
9
- "@angular/forms": "18.2.8",
10
- "@ngx-translate/core": "^15.0.0"
11
- },
12
- "sideEffects": false,
13
- "dependencies": {}
14
- }
1
+ {
2
+ "name": "@verisoft/core",
3
+ "version": "18.6.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.8",
6
+ "@angular/core": "^18.2.8",
7
+ "moment": "^2.30.1",
8
+ "rxjs": "~7.8.0",
9
+ "@angular/forms": "18.2.8",
10
+ "@ngx-translate/core": "^15.0.0"
11
+ },
12
+ "sideEffects": false,
13
+ "dependencies": {
14
+ "tslib": "^2.3.0"
15
+ },
16
+ "module": "fesm2022/verisoft-core.mjs",
17
+ "typings": "index.d.ts",
18
+ "exports": {
19
+ "./package.json": {
20
+ "default": "./package.json"
21
+ },
22
+ ".": {
23
+ "types": "./index.d.ts",
24
+ "esm2022": "./esm2022/verisoft-core.mjs",
25
+ "esm": "./esm2022/verisoft-core.mjs",
26
+ "default": "./fesm2022/verisoft-core.mjs"
27
+ }
28
+ }
29
+ }
package/.eslintrc.json DELETED
@@ -1,43 +0,0 @@
1
- {
2
- "extends": ["../../../.eslintrc.base.json"],
3
- "ignorePatterns": ["!**/*"],
4
- "overrides": [
5
- {
6
- "files": ["*.ts"],
7
- "extends": [
8
- "plugin:@nx/angular",
9
- "plugin:@angular-eslint/template/process-inline-templates"
10
- ],
11
- "rules": {
12
- "@angular-eslint/directive-selector": [
13
- "error",
14
- {
15
- "type": "attribute",
16
- "prefix": "v",
17
- "style": "camelCase"
18
- }
19
- ],
20
- "@angular-eslint/component-selector": [
21
- "error",
22
- {
23
- "type": "element",
24
- "prefix": "v",
25
- "style": "kebab-case"
26
- }
27
- ]
28
- }
29
- },
30
- {
31
- "files": ["*.html"],
32
- "extends": ["plugin:@nx/angular-template"],
33
- "rules": {}
34
- },
35
- {
36
- "files": ["*.json"],
37
- "parser": "jsonc-eslint-parser",
38
- "rules": {
39
- "@nx/dependency-checks": "error"
40
- }
41
- }
42
- ]
43
- }
package/jest.config.ts DELETED
@@ -1,22 +0,0 @@
1
- /* eslint-disable */
2
- export default {
3
- displayName: 'core',
4
- preset: '../../../jest.preset.js',
5
- setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
6
- coverageDirectory: '../../../coverage/src/libs/core',
7
- transform: {
8
- '^.+\\.(ts|mjs|js|html)$': [
9
- 'jest-preset-angular',
10
- {
11
- tsconfig: '<rootDir>/tsconfig.spec.json',
12
- stringifyContentPathRegex: '\\.(html|svg)$',
13
- },
14
- ],
15
- },
16
- transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
17
- snapshotSerializers: [
18
- 'jest-preset-angular/build/serializers/no-ng-attributes',
19
- 'jest-preset-angular/build/serializers/ng-snapshot',
20
- 'jest-preset-angular/build/serializers/html-comment',
21
- ],
22
- };
package/ng-package.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../../dist/src/libs/core",
4
- "lib": {
5
- "entryFile": "src/index.ts"
6
- }
7
- }
package/project.json DELETED
@@ -1,36 +0,0 @@
1
- {
2
- "name": "core",
3
- "$schema": "../../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "src/libs/core/src",
5
- "prefix": "lib",
6
- "projectType": "library",
7
- "tags": [],
8
- "targets": {
9
- "build": {
10
- "executor": "@nx/angular:package",
11
- "outputs": ["{workspaceRoot}/dist/{projectRoot}"],
12
- "options": {
13
- "project": "src/libs/core/ng-package.json"
14
- },
15
- "configurations": {
16
- "production": {
17
- "tsConfig": "src/libs/core/tsconfig.lib.prod.json"
18
- },
19
- "development": {
20
- "tsConfig": "src/libs/core/tsconfig.lib.json"
21
- }
22
- },
23
- "defaultConfiguration": "production"
24
- },
25
- "test": {
26
- "executor": "@nx/jest:jest",
27
- "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
28
- "options": {
29
- "jestConfig": "src/libs/core/jest.config.ts"
30
- }
31
- },
32
- "lint": {
33
- "executor": "@nx/eslint:lint"
34
- }
35
- }
36
- }
package/src/lib/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './models';
@@ -1,144 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { HttpParams, HttpResponse } from '@angular/common/http';
3
- import { InjectionToken } from '@angular/core';
4
-
5
- export const BASE_URL_PATH = new InjectionToken<string>('BASE_URL_PATH');
6
-
7
- export function requestParamsToHttpParams<T>(
8
- requestParams: Partial<RequestParams<T>>,
9
- httpParams: HttpParams = new HttpParams()
10
- ): HttpParams {
11
- if (requestParams.limit != undefined) {
12
- httpParams = httpParams.append('limit', requestParams.limit.toString());
13
- }
14
-
15
- if (requestParams.offset != undefined) {
16
- httpParams = httpParams.append('offset', requestParams.offset.toString());
17
- }
18
-
19
- if (requestParams.id != '' && requestParams.id != undefined) {
20
- httpParams = httpParams.append('id', requestParams.id as any);
21
- }
22
-
23
- httpParams = getFilter(requestParams, httpParams);
24
- httpParams = getSort(requestParams, httpParams);
25
-
26
- return httpParams;
27
- }
28
-
29
- function getFilter<T>(
30
- requestParams: Partial<RequestParams<any>>,
31
- httpParams: HttpParams
32
- ): HttpParams {
33
- if (!requestParams.filter) {
34
- return httpParams;
35
- }
36
- Object.keys(requestParams?.filter).forEach((key) => {
37
- const value = requestParams.filter?.[key as keyof Partial<T>];
38
- if (value != undefined && !(typeof value === 'string' && value.trim() === "")) {
39
- if (Array.isArray(value)) {
40
- value.forEach((valueItem: any) => {
41
- httpParams = httpParams.append(
42
- 'Filter.' + key, valueItem
43
- );
44
- });
45
- } else {
46
- httpParams = httpParams.append('Filter.' + key, value);
47
- }
48
- }
49
- });
50
- return httpParams;
51
- }
52
-
53
- function getSort(
54
- requestParams: Partial<RequestParams<any>>,
55
- httpParams: HttpParams
56
- ): HttpParams {
57
- if (!requestParams.sort) {
58
- return httpParams;
59
- }
60
-
61
- requestParams.sort?.forEach((sort) => {
62
- httpParams = httpParams
63
- .append('Sort.Field', sort.field)
64
- .append('Sort.Direction', sort.direction);
65
- });
66
- return httpParams;
67
- }
68
-
69
- export function saveFile(response: HttpResponse<Blob>) {
70
- const fileName = response.headers
71
- .get('Content-Disposition')
72
- ?.split(';')[1]
73
- .split('=')[1];
74
- const blob: Blob = response.body as Blob;
75
- const a = document.createElement('a');
76
- a.download = fileName ?? 'undefined';
77
- a.href = window.URL.createObjectURL(blob);
78
- a.click();
79
- }
80
-
81
- export enum SortDirection {
82
- asc = 'asc',
83
- desc = 'desc',
84
- }
85
-
86
- export declare type SortDirectionType = keyof typeof SortDirection;
87
-
88
- export declare interface Sort {
89
- field: string;
90
- direction: SortDirectionType;
91
- }
92
-
93
- export interface RequestParams<T> extends AllDataRequestParams<T> {
94
- offset: number;
95
- limit: number;
96
- id?: string;
97
- }
98
-
99
- export interface AllDataRequestParams<T> {
100
- filter?: Partial<T>;
101
- sort?: Sort[];
102
- }
103
-
104
- export interface Page<T> {
105
- data: T[];
106
- total: number;
107
- limit: number;
108
- offset: number;
109
- }
110
-
111
- export interface CustomExport<T> {
112
- sortDefinition?: Sort;
113
- filter?: Partial<T>;
114
- columnsToExport: ColumnExportSpecification[];
115
- }
116
-
117
- export interface ColumnExportSpecification {
118
- name: string;
119
- header: string;
120
- }
121
-
122
- export const DEFAULT_SEARCH_LIMIT = 50;
123
-
124
- export const DEFAULT_SEARCH_PARAMS: RequestParams<any> = {
125
- offset: 0,
126
- limit: DEFAULT_SEARCH_LIMIT,
127
- id: '',
128
- };
129
-
130
- export function normalizeRequest<T>(
131
- request: Partial<RequestParams<T>>,
132
- minLimit: number | undefined = undefined
133
- ): RequestParams<T> {
134
- return {
135
- offset: request?.offset ?? 0,
136
- limit: !request?.limit
137
- ? DEFAULT_SEARCH_LIMIT
138
- : minLimit && request.limit < minLimit
139
- ? minLimit
140
- : request.limit,
141
- filter: request?.filter,
142
- sort: request?.sort,
143
- };
144
- }
@@ -1,8 +0,0 @@
1
- import { LazyLoadEvent } from './event.models';
2
-
3
- export const DEFAULT_PAGE_SIZE = 50;
4
-
5
- export const DEFAULT_LAZYLOAD_OPTIONS: LazyLoadEvent = {
6
- offset: 0,
7
- limit: DEFAULT_PAGE_SIZE,
8
- };
@@ -1,77 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { isObservable, map, Observable, of } from 'rxjs';
3
- import { BaseHttpService } from '../services/base-http.service';
4
- import { AllItemDatasource } from './all-item.datasource';
5
- import { Page, RequestParams } from './base-http.models';
6
- import { DEFAULT_PAGE_SIZE } from './constants';
7
-
8
- export type DatasourceType<T> =
9
- | string
10
- | Observable<T[]>
11
- | Observable<Page<T>>
12
- | BaseHttpService<T>
13
- | T[]
14
- | Page<T>
15
- | AllItemDatasource<T>;
16
-
17
- export type DataSourceFunctionType<T> = (
18
- requestParams: RequestParams<T>
19
- ) => Observable<Page<T>>;
20
-
21
- export function convertDatasource<T>(
22
- datasource: DatasourceType<T>,
23
- basePath: string,
24
- httpClient: HttpClient
25
- ): DataSourceFunctionType<T> {
26
- if (!datasource) {
27
- throw new Error('Datasource is not defined');
28
- }
29
-
30
- if (typeof datasource === 'string') {
31
- const service = new BaseHttpService<T>(httpClient, basePath, datasource);
32
- return (requestParams: RequestParams<T>) =>
33
- service.fetchList(requestParams);
34
- }
35
-
36
- if (datasource instanceof BaseHttpService) {
37
- return (requestParams: RequestParams<T>) =>
38
- datasource.fetchList(requestParams);
39
- }
40
-
41
- if (isObservable(datasource)) {
42
- return () =>
43
- (datasource as Observable<Page<T> | T[]>).pipe(map(convertArrayToPage));
44
- }
45
-
46
- const allItemDatasource = <AllItemDatasource<T>>datasource;
47
- if (allItemDatasource.getData$) {
48
- return () =>
49
- allItemDatasource
50
- .getData$()
51
- .pipe(map((data) => convertArrayToPage(data)));
52
- }
53
-
54
- const page = <Page<T>>datasource;
55
- if (page.data) {
56
- return () => of(page);
57
- }
58
-
59
- if (Array.isArray(datasource)) {
60
- return () => of(convertArrayToPage(datasource));
61
- }
62
-
63
- throw new Error('Datasource is not supported');
64
- }
65
-
66
- function convertArrayToPage<T>(data: Page<T> | T[]): Page<T> {
67
- if (Array.isArray(data)) {
68
- return {
69
- data: data ?? [],
70
- total: data?.length ?? 0,
71
- limit: data?.length ?? DEFAULT_PAGE_SIZE,
72
- offset: 0,
73
- };
74
- }
75
-
76
- return data as Page<T>;
77
- }
@@ -1,20 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { ValidationErrors } from '@angular/forms';
3
- import { Observable } from 'rxjs';
4
-
5
- export interface ErrorProvider {
6
- mapError(errors: ValidationErrors): Observable<string>;
7
- errors: Record<string, (value?: any) => string>;
8
- }
9
-
10
- export const ERROR_PROVIDER_TOKEN
11
- = new InjectionToken<ErrorProvider>('ERROR_PROVIDER_TOKEN');
12
-
13
- export enum CustomValidationCodes {}
14
-
15
- export const ErrorMap: Record<string, (value?: any) => string> = {
16
- required: () => `VALIDATIONS.REQUIRED`,
17
- email: () => `VALIDATIONS.EMAIL`,
18
- minLength: () => 'VALIDATIONS.MIN_LENGTH',
19
- maxLength: () => 'VALIDATIONS.MAX_LENGTH',
20
- };
@@ -1,114 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { HttpClient } from '@angular/common/http';
3
- import { map, Observable } from 'rxjs';
4
- import {
5
- AllDataRequestParams,
6
- DEFAULT_SEARCH_PARAMS,
7
- Page,
8
- RequestParams,
9
- requestParamsToHttpParams,
10
- } from '../models/base-http.models';
11
- import { LazyLoadEvent } from '../models/event.models';
12
- import { ClearUtils } from '../utils/clear.utils';
13
-
14
- export class BaseHttpService<T, TKey = number | string> {
15
- constructor(
16
- readonly http: HttpClient,
17
- readonly basePath: string,
18
- readonly entityName: string
19
- ) {
20
- this.basePath = basePath;
21
- }
22
-
23
- protected get apiPath() {
24
- return this.basePath ? this.basePath + this.entityName : this.entityName;
25
- }
26
-
27
- fetchList(requestParams: RequestParams<T>): Observable<Page<T>> {
28
- const params = requestParamsToHttpParams<T>(requestParams);
29
- return this.http.get<Page<T>>(this.apiPath, { params }).pipe(
30
- map((response: Page<T>) => {
31
- response.limit = requestParams.limit;
32
- return response;
33
- })
34
- );
35
- }
36
-
37
- getData$(
38
- entityName: keyof T,
39
- searchTerm?: string | undefined,
40
- lazyLoad?: LazyLoadEvent
41
- ): Observable<T[]> {
42
- const filter: Partial<T> = { [entityName]: searchTerm } as Partial<T>;
43
- const params = lazyLoad
44
- ? requestParamsToHttpParams<T>({
45
- ...DEFAULT_SEARCH_PARAMS,
46
- offset: lazyLoad.offset,
47
- limit: lazyLoad.limit,
48
- filter,
49
- })
50
- : requestParamsToHttpParams<T>({
51
- ...DEFAULT_SEARCH_PARAMS,
52
- filter,
53
- });
54
-
55
- return this.http.get<T[]>(this.apiPath, { params });
56
- }
57
-
58
- get(id: TKey): Observable<T> {
59
- const url = `${this.apiPath}/${id}`;
60
- return this.http.get<T>(url);
61
- }
62
-
63
- post(entity: Partial<T>): Observable<T> {
64
- return this.http.post<T>(this.apiPath, entity);
65
- }
66
-
67
- put(id: TKey, entity: Partial<T>): Observable<T> {
68
- const url = `${this.apiPath}/${id}`;
69
- return this.http.put<T>(url, entity);
70
- }
71
-
72
- delete(id: TKey): Observable<T> {
73
- const url = `${this.apiPath}/${id}`;
74
- return this.http.delete<T>(url);
75
- }
76
-
77
- export(requestParams: AllDataRequestParams<T>): Observable<Blob> {
78
- const httpParams = requestParamsToHttpParams<T>(requestParams);
79
- const url = `${this.apiPath}/export`;
80
- return this.http.get(url, { responseType: 'blob', params: httpParams });
81
- }
82
-
83
- removeRange(entity: string[]) {
84
- return this.http.delete(this.apiPath, {
85
- body: entity,
86
- });
87
- }
88
-
89
- createParams<T>(requestParams: RequestParams<T>): any {
90
- const sorter = this.createSorter(requestParams);
91
- const filter = JSON.parse(JSON.stringify(requestParams.filter));
92
- const transformedFilter = filter;
93
- ClearUtils.recursiveObjectAttributesDeletation(transformedFilter);
94
- return {
95
- paging: {
96
- offset: requestParams.offset,
97
- limit: requestParams.limit,
98
- },
99
- ...(sorter && { sorting: sorter }),
100
- ...(transformedFilter && { filter: transformedFilter }),
101
- };
102
- }
103
-
104
- private createSorter<T>(requestParams: RequestParams<T>) {
105
- if (requestParams?.sort?.length === 1) {
106
- const sorter = requestParams.sort[0];
107
- return {
108
- sortField: sorter.field,
109
- sortOrder: sorter.direction,
110
- };
111
- }
112
- return null;
113
- }
114
- }
@@ -1,29 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { ValidationErrors } from '@angular/forms';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { Observable } from 'rxjs';
5
- import { ErrorProvider, ErrorMap } from '../models/error-provider.model';
6
-
7
- @Injectable({
8
- providedIn: 'root'
9
- })
10
- export class LocalizableErrorProviderService implements ErrorProvider {
11
- private readonly translateService = inject(TranslateService);
12
- readonly errors: Record<string, (value?: any) => string> = ErrorMap;
13
-
14
- mapError(errors: ValidationErrors): Observable<string> {
15
- const error = this.getFirstValue(errors);
16
- try {
17
- const value = this.errors[error.key](error.value);
18
- return this.translateService.get(value);
19
- } catch (_) {
20
- throw new Error(`Key "${error.key}" is not specified in the current error map!`);
21
- }
22
- }
23
-
24
- private getFirstValue(errors: ValidationErrors): { key: string; value: string } {
25
- const key = Object.keys(errors)[0];
26
- const value = errors[key];
27
- return { key, value };
28
- }
29
- }
@@ -1,13 +0,0 @@
1
- export class LocalStorageService {
2
- setItem(key: string, value: string) {
3
- localStorage.setItem(key, value);
4
- }
5
-
6
- getItem(key: string): string | null {
7
- return localStorage.getItem(key);
8
- }
9
-
10
- removeItem(key: string) {
11
- localStorage.removeItem(key);
12
- }
13
- }