@verisoft/core 18.6.0 → 18.7.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.
- package/.eslintrc.json +43 -0
- package/README.md +52 -3
- package/jest.config.ts +22 -0
- package/ng-package.json +7 -0
- package/package.json +14 -29
- package/project.json +36 -0
- package/{index.d.ts → src/index.ts} +3 -3
- package/src/lib/index.ts +1 -0
- package/{lib/models/all-item.datasource.d.ts → src/lib/models/all-item.datasource.ts} +5 -4
- package/src/lib/models/base-http.models.ts +144 -0
- package/src/lib/models/constants.ts +8 -0
- package/src/lib/models/datasource.model.ts +77 -0
- package/{lib/models/environment.model.d.ts → src/lib/models/environment.model.ts} +5 -5
- package/src/lib/models/error-provider.model.ts +20 -0
- package/{lib/models/event.models.d.ts → src/lib/models/event.models.ts} +7 -5
- package/{lib/models/index.d.ts → src/lib/models/index.ts} +7 -7
- package/src/lib/services/base-http.service.ts +114 -0
- package/src/lib/services/error-provider.service.ts +29 -0
- package/{lib/services/index.d.ts → src/lib/services/index.ts} +3 -3
- package/src/lib/services/local-storage.service.ts +13 -0
- package/src/lib/services/storage.service.ts +13 -0
- package/src/lib/utils/array.utils.spec.ts +49 -0
- package/src/lib/utils/array.utils.ts +54 -0
- package/src/lib/utils/clear.utils.ts +53 -0
- package/src/lib/utils/data.utils.ts +34 -0
- package/src/lib/utils/date.utils.ts +30 -0
- package/{lib/utils/index.d.ts → src/lib/utils/index.ts} +6 -6
- package/src/lib/utils/keyOrFn.utils.ts +15 -0
- package/src/lib/utils/object.utils.spec.ts +69 -0
- package/src/lib/utils/object.utils.ts +47 -0
- package/src/test-setup.ts +8 -0
- package/tsconfig.json +29 -0
- package/tsconfig.lib.json +20 -0
- package/tsconfig.lib.prod.json +9 -0
- package/tsconfig.spec.json +16 -0
- package/esm2022/index.mjs +0 -4
- package/esm2022/lib/models/all-item.datasource.mjs +0 -2
- package/esm2022/lib/models/base-http.models.mjs +0 -83
- package/esm2022/lib/models/constants.mjs +0 -6
- package/esm2022/lib/models/datasource.model.mjs +0 -44
- package/esm2022/lib/models/environment.model.mjs +0 -2
- package/esm2022/lib/models/error-provider.model.mjs +0 -12
- package/esm2022/lib/models/event.models.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -8
- package/esm2022/lib/services/base-http.service.mjs +0 -86
- package/esm2022/lib/services/error-provider.service.mjs +0 -34
- package/esm2022/lib/services/index.mjs +0 -4
- package/esm2022/lib/services/local-storage.service.mjs +0 -12
- package/esm2022/lib/utils/array.utils.mjs +0 -43
- package/esm2022/lib/utils/clear.utils.mjs +0 -35
- package/esm2022/lib/utils/data.utils.mjs +0 -32
- package/esm2022/lib/utils/date.utils.mjs +0 -26
- package/esm2022/lib/utils/index.mjs +0 -7
- package/esm2022/lib/utils/keyOrFn.utils.mjs +0 -16
- package/esm2022/lib/utils/object.utils.mjs +0 -35
- package/esm2022/verisoft-core.mjs +0 -5
- package/fesm2022/verisoft-core.mjs +0 -462
- package/fesm2022/verisoft-core.mjs.map +0 -1
- package/lib/models/base-http.models.d.ts +0 -41
- package/lib/models/constants.d.ts +0 -3
- package/lib/models/datasource.model.d.ts +0 -8
- package/lib/models/error-provider.model.d.ts +0 -11
- package/lib/services/base-http.service.d.ts +0 -21
- package/lib/services/error-provider.service.d.ts +0 -12
- package/lib/services/local-storage.service.d.ts +0 -5
- package/lib/utils/array.utils.d.ts +0 -5
- package/lib/utils/clear.utils.d.ts +0 -7
- package/lib/utils/data.utils.d.ts +0 -3
- package/lib/utils/date.utils.d.ts +0 -1
- package/lib/utils/keyOrFn.utils.d.ts +0 -1
- package/lib/utils/object.utils.d.ts +0 -2
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class StorageService {
|
|
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
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { applyFilter } from './array.utils';
|
|
2
|
+
describe('array.utils', () => {
|
|
3
|
+
describe('applyFilter', () => {
|
|
4
|
+
interface TestData {
|
|
5
|
+
id: number;
|
|
6
|
+
name: string;
|
|
7
|
+
tags: string[];
|
|
8
|
+
age: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const data: TestData[] = [
|
|
12
|
+
{ id: 1, name: 'Alice', tags: ['developer', 'angular'], age: 25 },
|
|
13
|
+
{ id: 2, name: 'Bob', tags: ['designer', 'figma'], age: 30 },
|
|
14
|
+
{ id: 3, name: 'Charlie', tags: ['developer'], age: 25 },
|
|
15
|
+
{ id: 4, name: 'Dave', tags: ['developer', 'react'], age: 35 },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const [alice, , charlie] = data;
|
|
19
|
+
|
|
20
|
+
test('Should filter data by contains string value when a single string filter is applied', () => {
|
|
21
|
+
const filter = { name: 'lice' };
|
|
22
|
+
const result = applyFilter(data, filter);
|
|
23
|
+
expect(result).toEqual([alice]);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('Should filter data when filter contains an array value', () => {
|
|
27
|
+
const filter = { tags: ['develop'] };
|
|
28
|
+
const result = applyFilter(data, filter);
|
|
29
|
+
expect(result).toHaveLength(3);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('Should filter data with multiple conditions when filter properties use AND logic', () => {
|
|
33
|
+
const filter = { age: 25, tags: ['developer'] };
|
|
34
|
+
const result = applyFilter(data, filter);
|
|
35
|
+
expect(result).toEqual([alice, charlie]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('Should return all data when the filter is empty', () => {
|
|
39
|
+
const result = applyFilter(data, {});
|
|
40
|
+
expect(result).toEqual(data);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('Should return no data when no items match the filter', () => {
|
|
44
|
+
const filter = { name: 'Zoe' };
|
|
45
|
+
const result = applyFilter(data, filter);
|
|
46
|
+
expect(result).toHaveLength(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Sort } from "../models";
|
|
2
|
+
import { getValueByPath } from "./object.utils";
|
|
3
|
+
|
|
4
|
+
type ArrayIntersectionType = (string | number)[]
|
|
5
|
+
|
|
6
|
+
export function isArrayIntersected(
|
|
7
|
+
array1: ArrayIntersectionType,
|
|
8
|
+
array2: ArrayIntersectionType,
|
|
9
|
+
) {
|
|
10
|
+
const filteredArray = array1.filter(value => array2.includes(value));
|
|
11
|
+
return filteredArray.length > 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function multiSort<T>(values: T[], sorts: Sort[]): T[] {
|
|
15
|
+
return [...values].sort((a, b) => {
|
|
16
|
+
for (const sort of sorts) {
|
|
17
|
+
const { field, direction } = sort;
|
|
18
|
+
const valueA = getValueByPath(a, field);
|
|
19
|
+
const valueB = getValueByPath(b, field);
|
|
20
|
+
|
|
21
|
+
if (valueA !== valueB) {
|
|
22
|
+
if (isComparable(valueA) && isComparable(valueB)) {
|
|
23
|
+
if (typeof valueA === 'string' && typeof valueB === 'string') {
|
|
24
|
+
const baseCompare = valueA.localeCompare(valueB, undefined, {
|
|
25
|
+
sensitivity: 'base',
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (baseCompare === 0) {
|
|
29
|
+
return valueA < valueB ? -1 : valueA > valueB ? 1 : 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return direction === 'asc' ? baseCompare : -baseCompare;
|
|
33
|
+
} else {
|
|
34
|
+
if (valueA < valueB) {
|
|
35
|
+
return direction === 'asc' ? -1 : 1;
|
|
36
|
+
}
|
|
37
|
+
if (valueA > valueB) {
|
|
38
|
+
return direction === 'asc' ? 1 : -1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return 0;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isComparable(value: unknown): value is string | number | Date {
|
|
50
|
+
return typeof value === 'string'
|
|
51
|
+
|| typeof value === 'number'
|
|
52
|
+
|| typeof value === 'boolean'
|
|
53
|
+
|| value instanceof Date;
|
|
54
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export class ClearUtils {
|
|
2
|
+
|
|
3
|
+
static recursiveObjectAttributesTransformation(obj: any): void {
|
|
4
|
+
ClearUtils.recursiveObjectAttributesTraversal(
|
|
5
|
+
obj,
|
|
6
|
+
ClearUtils.transformEmptyStringToNullStringFn
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
static recursiveObjectAttributesDeletation(obj: any): void {
|
|
10
|
+
ClearUtils.recursiveObjectAttributesTraversal(
|
|
11
|
+
obj,
|
|
12
|
+
ClearUtils.deleteEmptyStringToNullStringFn
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static transformEmptyStringToNullStringFn(obj: any, key: string) {
|
|
17
|
+
if (typeof obj[key] === 'string' && obj[key] === '') {
|
|
18
|
+
obj[key] = null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
static deleteEmptyStringToNullStringFn(obj: any, key: string) {
|
|
22
|
+
if (obj[key] === '' || obj[key] === null || obj[key] === undefined) {
|
|
23
|
+
delete obj[key]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
static recursiveObjectAttributesTraversal(
|
|
29
|
+
obj: any,
|
|
30
|
+
transformationFn: (obj: any, key: string) => void
|
|
31
|
+
) {
|
|
32
|
+
if (
|
|
33
|
+
obj === null ||
|
|
34
|
+
transformationFn === null ||
|
|
35
|
+
typeof transformationFn !== 'function'
|
|
36
|
+
) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Object.keys(obj).forEach((key) => {
|
|
41
|
+
transformationFn(obj, key);
|
|
42
|
+
|
|
43
|
+
if (typeof obj[key] === 'object') {
|
|
44
|
+
this.recursiveObjectAttributesTraversal(obj[key], transformationFn);
|
|
45
|
+
|
|
46
|
+
if (!Object.keys(obj[key]).length) {
|
|
47
|
+
delete obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import moment from 'moment';
|
|
2
|
+
|
|
3
|
+
export function transformData(data: any) {
|
|
4
|
+
if (data) {
|
|
5
|
+
if (moment.isMoment(data)) {
|
|
6
|
+
return moment(data)
|
|
7
|
+
.toDate()
|
|
8
|
+
.toISOString();
|
|
9
|
+
}
|
|
10
|
+
else if (data instanceof Date) {
|
|
11
|
+
return data.toISOString();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function convertToDate(data: any) {
|
|
18
|
+
if (data) {
|
|
19
|
+
if (!isNaN(Date.parse(data))) {
|
|
20
|
+
return new Date(data);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function convertToDateTime(data: any) {
|
|
27
|
+
if (data) {
|
|
28
|
+
if (!isNaN(Date.parse(data))) {
|
|
29
|
+
const date = new Date(data);
|
|
30
|
+
return moment(date).format('DD.MM.yyyy HH:mm');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const czechDateFormat = new Intl.DateTimeFormat("cs-CZ", {
|
|
2
|
+
day: "numeric",
|
|
3
|
+
month: "numeric",
|
|
4
|
+
year: "numeric"
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
const czechDateTimeFormat = new Intl.DateTimeFormat("cs-CZ", {
|
|
8
|
+
second: "numeric",
|
|
9
|
+
minute: "numeric",
|
|
10
|
+
hour: "numeric",
|
|
11
|
+
day: "numeric",
|
|
12
|
+
month: "numeric",
|
|
13
|
+
year: "numeric"
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export function toCzechDateTimeString(value?: Date | string, time = false): string {
|
|
17
|
+
if (!value) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (typeof value === "string") {
|
|
22
|
+
value = new Date(value);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (time) {
|
|
26
|
+
return czechDateTimeFormat.format(value);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return czechDateFormat.format(value);
|
|
30
|
+
}
|
|
@@ -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,15 @@
|
|
|
1
|
+
export function keyOrFn(keyOrFn: ((row: any) => string | undefined) | string, row: any) {
|
|
2
|
+
if (keyOrFn instanceof Function) {
|
|
3
|
+
return keyOrFn(row);
|
|
4
|
+
}
|
|
5
|
+
else if (typeof keyOrFn === 'string') {
|
|
6
|
+
const value = row[keyOrFn];
|
|
7
|
+
if (value) {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
else if (typeof keyOrFn === 'boolean') {
|
|
12
|
+
return keyOrFn;
|
|
13
|
+
}
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getValueByPath, sortBy } from './object.utils';
|
|
2
|
+
|
|
3
|
+
describe('object.utils', () => {
|
|
4
|
+
describe('sortBy', () => {
|
|
5
|
+
const items = [
|
|
6
|
+
{ name: undefined, age: 60 },
|
|
7
|
+
{ name: 'Martin', age: 40 },
|
|
8
|
+
{ name: 'Alena', age: 28 },
|
|
9
|
+
{ name: 'Karel', age: 15 },
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
test('Should sort items by name ascending.', () => {
|
|
13
|
+
const sortedItems = sortBy(items, (x) => x.name);
|
|
14
|
+
|
|
15
|
+
expect(items).not.toBe(sortedItems);
|
|
16
|
+
expect(sortedItems).toBeDefined();
|
|
17
|
+
expect(sortedItems?.[0].name).toBeUndefined();
|
|
18
|
+
expect(sortedItems?.[1].name).toBe('Alena');
|
|
19
|
+
expect(sortedItems?.[2].name).toBe('Karel');
|
|
20
|
+
expect(sortedItems?.[3].name).toBe('Martin');
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('Should sort items by name descending.', () => {
|
|
24
|
+
const sortedItems = sortBy(items, (x) => x.name, false);
|
|
25
|
+
|
|
26
|
+
expect(items).not.toBe(sortedItems);
|
|
27
|
+
expect(sortedItems).toBeDefined();
|
|
28
|
+
expect(sortedItems?.[0].name).toBe('Martin');
|
|
29
|
+
expect(sortedItems?.[1].name).toBe('Karel');
|
|
30
|
+
expect(sortedItems?.[2].name).toBe('Alena');
|
|
31
|
+
expect(sortedItems?.[3].name).toBeUndefined();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('getValueByPath', () => {
|
|
36
|
+
const complexObject = {
|
|
37
|
+
name: 'Martin',
|
|
38
|
+
age: 40,
|
|
39
|
+
address: {
|
|
40
|
+
city: 'Brno',
|
|
41
|
+
street: 'Kralova',
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
test('Should return property value when name of property is provided.', () => {
|
|
46
|
+
const value = getValueByPath(complexObject, 'name');
|
|
47
|
+
|
|
48
|
+
expect(value).toBe('Martin');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test('Should return undefined when name is nonexistent.', () => {
|
|
52
|
+
const value = getValueByPath(complexObject, 'nonexistentProperty');
|
|
53
|
+
|
|
54
|
+
expect(value).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('Should return property value when name of property is complex path.', () => {
|
|
58
|
+
const value = getValueByPath(complexObject, 'address.city');
|
|
59
|
+
|
|
60
|
+
expect(value).toBe('Brno');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('Should return undefined when some object on complex path missing.', () => {
|
|
64
|
+
const value = getValueByPath(complexObject, 'car.model');
|
|
65
|
+
|
|
66
|
+
expect(value).toBeUndefined();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function sortBy<TEntity, TProperty>(
|
|
2
|
+
items: TEntity[],
|
|
3
|
+
selector: (item: TEntity) => TProperty,
|
|
4
|
+
ascending = true
|
|
5
|
+
): TEntity[] {
|
|
6
|
+
return [...items].sort((item, other) => {
|
|
7
|
+
const value = selector(item);
|
|
8
|
+
const otherValue = selector(other);
|
|
9
|
+
const direction = ascending ? 1 : -1;
|
|
10
|
+
if (value == undefined && other == undefined) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (value == undefined) {
|
|
15
|
+
return -1 * direction;
|
|
16
|
+
}
|
|
17
|
+
if (otherValue == undefined) {
|
|
18
|
+
return 1 * direction;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (value < otherValue) {
|
|
22
|
+
return -1 * direction;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (value > otherValue) {
|
|
26
|
+
return 1 * direction;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return 0;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function getValueByPath<T, TValue>(
|
|
34
|
+
obj: T,
|
|
35
|
+
path: string | undefined,
|
|
36
|
+
): TValue | undefined {
|
|
37
|
+
if (path == undefined || path == ''){
|
|
38
|
+
return obj as unknown as TValue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return path.split('.').reduce((acc, key) => {
|
|
42
|
+
if (acc && typeof acc === 'object' && key in acc) {
|
|
43
|
+
return (acc as Record<string, TValue>)[key];
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}, obj as unknown) as TValue;
|
|
47
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
|
|
2
|
+
globalThis.ngJest = {
|
|
3
|
+
testEnvironmentOptions: {
|
|
4
|
+
errorOnUnknownElements: true,
|
|
5
|
+
errorOnUnknownProperties: true,
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
import 'jest-preset-angular/setup-jest';
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es2022",
|
|
4
|
+
"useDefineForClassFields": false,
|
|
5
|
+
"forceConsistentCasingInFileNames": true,
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noImplicitOverride": true,
|
|
8
|
+
"noPropertyAccessFromIndexSignature": true,
|
|
9
|
+
"noImplicitReturns": true,
|
|
10
|
+
"noFallthroughCasesInSwitch": true
|
|
11
|
+
},
|
|
12
|
+
"files": [],
|
|
13
|
+
"include": [],
|
|
14
|
+
"references": [
|
|
15
|
+
{
|
|
16
|
+
"path": "./tsconfig.lib.json"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "./tsconfig.spec.json"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"extends": "../../../tsconfig.base.json",
|
|
23
|
+
"angularCompilerOptions": {
|
|
24
|
+
"enableI18nLegacyMessageIdFormat": false,
|
|
25
|
+
"strictInjectionParameters": true,
|
|
26
|
+
"strictInputAccessModifiers": true,
|
|
27
|
+
"strictTemplates": true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../../dist/out-tsc",
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"declarationMap": true,
|
|
7
|
+
"inlineSources": true,
|
|
8
|
+
"types": []
|
|
9
|
+
},
|
|
10
|
+
"angularCompilerOptions": {
|
|
11
|
+
"compilationMode": "partial"
|
|
12
|
+
},
|
|
13
|
+
"exclude": [
|
|
14
|
+
"src/**/*.spec.ts",
|
|
15
|
+
"src/test-setup.ts",
|
|
16
|
+
"jest.config.ts",
|
|
17
|
+
"src/**/*.test.ts"
|
|
18
|
+
],
|
|
19
|
+
"include": ["src/**/*.ts"]
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../../dist/out-tsc",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"target": "es2016",
|
|
7
|
+
"types": ["jest", "node"]
|
|
8
|
+
},
|
|
9
|
+
"files": ["src/test-setup.ts"],
|
|
10
|
+
"include": [
|
|
11
|
+
"jest.config.ts",
|
|
12
|
+
"src/**/*.test.ts",
|
|
13
|
+
"src/**/*.spec.ts",
|
|
14
|
+
"src/**/*.d.ts"
|
|
15
|
+
]
|
|
16
|
+
}
|
package/esm2022/index.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export * from './lib/models';
|
|
2
|
-
export * from './lib/services';
|
|
3
|
-
export * from './lib/utils';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLWl0ZW0uZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL2NvcmUvc3JjL2xpYi9tb2RlbHMvYWxsLWl0ZW0uZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBbGxJdGVtRGF0YXNvdXJjZTxUPiB7XHJcbiAgZ2V0RGF0YSQ6ICgpID0+IE9ic2VydmFibGU8VFtdPlxyXG59XHJcbiJdfQ==
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { HttpParams } from '@angular/common/http';
|
|
3
|
-
import { InjectionToken } from '@angular/core';
|
|
4
|
-
export const BASE_URL_PATH = new InjectionToken('BASE_URL_PATH');
|
|
5
|
-
export function requestParamsToHttpParams(requestParams, httpParams = new HttpParams()) {
|
|
6
|
-
if (requestParams.limit != undefined) {
|
|
7
|
-
httpParams = httpParams.append('limit', requestParams.limit.toString());
|
|
8
|
-
}
|
|
9
|
-
if (requestParams.offset != undefined) {
|
|
10
|
-
httpParams = httpParams.append('offset', requestParams.offset.toString());
|
|
11
|
-
}
|
|
12
|
-
if (requestParams.id != '' && requestParams.id != undefined) {
|
|
13
|
-
httpParams = httpParams.append('id', requestParams.id);
|
|
14
|
-
}
|
|
15
|
-
httpParams = getFilter(requestParams, httpParams);
|
|
16
|
-
httpParams = getSort(requestParams, httpParams);
|
|
17
|
-
return httpParams;
|
|
18
|
-
}
|
|
19
|
-
function getFilter(requestParams, httpParams) {
|
|
20
|
-
if (!requestParams.filter) {
|
|
21
|
-
return httpParams;
|
|
22
|
-
}
|
|
23
|
-
Object.keys(requestParams?.filter).forEach((key) => {
|
|
24
|
-
const value = requestParams.filter?.[key];
|
|
25
|
-
if (value != undefined && !(typeof value === 'string' && value.trim() === "")) {
|
|
26
|
-
if (Array.isArray(value)) {
|
|
27
|
-
value.forEach((valueItem) => {
|
|
28
|
-
httpParams = httpParams.append('Filter.' + key, valueItem);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
httpParams = httpParams.append('Filter.' + key, value);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
return httpParams;
|
|
37
|
-
}
|
|
38
|
-
function getSort(requestParams, httpParams) {
|
|
39
|
-
if (!requestParams.sort) {
|
|
40
|
-
return httpParams;
|
|
41
|
-
}
|
|
42
|
-
requestParams.sort?.forEach((sort) => {
|
|
43
|
-
httpParams = httpParams
|
|
44
|
-
.append('Sort.Field', sort.field)
|
|
45
|
-
.append('Sort.Direction', sort.direction);
|
|
46
|
-
});
|
|
47
|
-
return httpParams;
|
|
48
|
-
}
|
|
49
|
-
export function saveFile(response) {
|
|
50
|
-
const fileName = response.headers
|
|
51
|
-
.get('Content-Disposition')
|
|
52
|
-
?.split(';')[1]
|
|
53
|
-
.split('=')[1];
|
|
54
|
-
const blob = response.body;
|
|
55
|
-
const a = document.createElement('a');
|
|
56
|
-
a.download = fileName ?? 'undefined';
|
|
57
|
-
a.href = window.URL.createObjectURL(blob);
|
|
58
|
-
a.click();
|
|
59
|
-
}
|
|
60
|
-
export var SortDirection;
|
|
61
|
-
(function (SortDirection) {
|
|
62
|
-
SortDirection["asc"] = "asc";
|
|
63
|
-
SortDirection["desc"] = "desc";
|
|
64
|
-
})(SortDirection || (SortDirection = {}));
|
|
65
|
-
export const DEFAULT_SEARCH_LIMIT = 50;
|
|
66
|
-
export const DEFAULT_SEARCH_PARAMS = {
|
|
67
|
-
offset: 0,
|
|
68
|
-
limit: DEFAULT_SEARCH_LIMIT,
|
|
69
|
-
id: '',
|
|
70
|
-
};
|
|
71
|
-
export function normalizeRequest(request, minLimit = undefined) {
|
|
72
|
-
return {
|
|
73
|
-
offset: request?.offset ?? 0,
|
|
74
|
-
limit: !request?.limit
|
|
75
|
-
? DEFAULT_SEARCH_LIMIT
|
|
76
|
-
: minLimit && request.limit < minLimit
|
|
77
|
-
? minLimit
|
|
78
|
-
: request.limit,
|
|
79
|
-
filter: request?.filter,
|
|
80
|
-
sort: request?.sort,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL2NvcmUvc3JjL2xpYi9tb2RlbHMvYmFzZS1odHRwLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBUyxlQUFlLENBQUMsQ0FBQztBQUV6RSxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLGFBQXdDLEVBQ3hDLGFBQXlCLElBQUksVUFBVSxFQUFFO0lBRXpDLElBQUksYUFBYSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNyQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7UUFDdEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxhQUFhLENBQUMsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzVELFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsR0FBRyxPQUFPLENB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LEVBQUUsRUFBRTtDQUNQLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQWtDLEVBQ2xDLFdBQStCLFNBQVM7SUFFeEMsT0FBTztRQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7UUFDNUIsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDcEIsQ0FBQyxDQUFDLG9CQUFvQjtZQUN0QixDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUTtnQkFDdEMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ1YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1FBQ2pCLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtRQUN2QixJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUk7S0FDcEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbmltcG9ydCB7IEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBjb25zdCBCQVNFX1VSTF9QQVRIID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0JBU0VfVVJMX1BBVEgnKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0UGFyYW1zVG9IdHRwUGFyYW1zPFQ+KFxyXG4gIHJlcXVlc3RQYXJhbXM6IFBhcnRpYWw8UmVxdWVzdFBhcmFtczxUPj4sXHJcbiAgaHR0cFBhcmFtczogSHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcclxuKTogSHR0cFBhcmFtcyB7XHJcbiAgaWYgKHJlcXVlc3RQYXJhbXMubGltaXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ2xpbWl0JywgcmVxdWVzdFBhcmFtcy5saW1pdC50b1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIGlmIChyZXF1ZXN0UGFyYW1zLm9mZnNldCAhPSB1bmRlZmluZWQpIHtcclxuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgcmVxdWVzdFBhcmFtcy5vZmZzZXQudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBpZiAocmVxdWVzdFBhcmFtcy5pZCAhPSAnJyAmJiByZXF1ZXN0UGFyYW1zLmlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKCdpZCcsIHJlcXVlc3RQYXJhbXMuaWQgYXMgYW55KTtcclxuICB9XHJcblxyXG4gIGh0dHBQYXJhbXMgPSBnZXRGaWx0ZXIocmVxdWVzdFBhcmFtcywgaHR0cFBhcmFtcyk7XHJcbiAgaHR0cFBhcmFtcyA9IGdldFNvcnQocmVxdWVzdFBhcmFtcywgaHR0cFBhcmFtcyk7XHJcblxyXG4gIHJldHVybiBodHRwUGFyYW1zO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRGaWx0ZXI8VD4oXHJcbiAgcmVxdWVzdFBhcmFtczogUGFydGlhbDxSZXF1ZXN0UGFyYW1zPGFueT4+LFxyXG4gIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXNcclxuKTogSHR0cFBhcmFtcyB7XHJcbiAgaWYgKCFyZXF1ZXN0UGFyYW1zLmZpbHRlcikge1xyXG4gICAgcmV0dXJuIGh0dHBQYXJhbXM7XHJcbiAgfVxyXG4gIE9iamVjdC5rZXlzKHJlcXVlc3RQYXJhbXM/LmZpbHRlcikuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHJlcXVlc3RQYXJhbXMuZmlsdGVyPy5ba2V5IGFzIGtleW9mIFBhcnRpYWw8VD5dO1xyXG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiAhKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSBcIlwiKSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICB2YWx1ZS5mb3JFYWNoKCh2YWx1ZUl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKFxyXG4gICAgICAgICAgICAnRmlsdGVyLicgKyBrZXksIHZhbHVlSXRlbVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoJ0ZpbHRlci4nICsga2V5LCB2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gaHR0cFBhcmFtcztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U29ydChcclxuICByZXF1ZXN0UGFyYW1zOiBQYXJ0aWFsPFJlcXVlc3RQYXJhbXM8YW55Pj4sXHJcbiAgaHR0cFBhcmFtczogSHR0cFBhcmFtc1xyXG4pOiBIdHRwUGFyYW1zIHtcclxuICBpZiAoIXJlcXVlc3RQYXJhbXMuc29ydCkge1xyXG4gICAgcmV0dXJuIGh0dHBQYXJhbXM7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UGFyYW1zLnNvcnQ/LmZvckVhY2goKHNvcnQpID0+IHtcclxuICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zXHJcbiAgICAgIC5hcHBlbmQoJ1NvcnQuRmllbGQnLCBzb3J0LmZpZWxkKVxyXG4gICAgICAuYXBwZW5kKCdTb3J0LkRpcmVjdGlvbicsIHNvcnQuZGlyZWN0aW9uKTtcclxuICB9KTtcclxuICByZXR1cm4gaHR0cFBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QmxvYj4pIHtcclxuICBjb25zdCBmaWxlTmFtZSA9IHJlc3BvbnNlLmhlYWRlcnNcclxuICAgIC5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKVxyXG4gICAgPy5zcGxpdCgnOycpWzFdXHJcbiAgICAuc3BsaXQoJz0nKVsxXTtcclxuICBjb25zdCBibG9iOiBCbG9iID0gcmVzcG9uc2UuYm9keSBhcyBCbG9iO1xyXG4gIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgYS5kb3dubG9hZCA9IGZpbGVOYW1lID8/ICd1bmRlZmluZWQnO1xyXG4gIGEuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gIGEuY2xpY2soKTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU29ydERpcmVjdGlvbiB7XHJcbiAgYXNjID0gJ2FzYycsXHJcbiAgZGVzYyA9ICdkZXNjJyxcclxufVxyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTb3J0RGlyZWN0aW9uVHlwZSA9IGtleW9mIHR5cGVvZiBTb3J0RGlyZWN0aW9uO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNvcnQge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0UGFyYW1zPFQ+IGV4dGVuZHMgQWxsRGF0YVJlcXVlc3RQYXJhbXM8VD4ge1xyXG4gIG9mZnNldDogbnVtYmVyO1xyXG4gIGxpbWl0OiBudW1iZXI7XHJcbiAgaWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWxsRGF0YVJlcXVlc3RQYXJhbXM8VD4ge1xyXG4gIGZpbHRlcj86IFBhcnRpYWw8VD47XHJcbiAgc29ydD86IFNvcnRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYWdlPFQ+IHtcclxuICBkYXRhOiBUW107XHJcbiAgdG90YWw6IG51bWJlcjtcclxuICBsaW1pdDogbnVtYmVyO1xyXG4gIG9mZnNldDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUV4cG9ydDxUPiB7XHJcbiAgc29ydERlZmluaXRpb24/OiBTb3J0O1xyXG4gIGZpbHRlcj86IFBhcnRpYWw8VD47XHJcbiAgY29sdW1uc1RvRXhwb3J0OiBDb2x1bW5FeHBvcnRTcGVjaWZpY2F0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRXhwb3J0U3BlY2lmaWNhdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRUFSQ0hfTElNSVQgPSA1MDtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFQVJDSF9QQVJBTVM6IFJlcXVlc3RQYXJhbXM8YW55PiA9IHtcclxuICBvZmZzZXQ6IDAsXHJcbiAgbGltaXQ6IERFRkFVTFRfU0VBUkNIX0xJTUlULFxyXG4gIGlkOiAnJyxcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXF1ZXN0PFQ+KFxyXG4gIHJlcXVlc3Q6IFBhcnRpYWw8UmVxdWVzdFBhcmFtczxUPj4sXHJcbiAgbWluTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4pOiBSZXF1ZXN0UGFyYW1zPFQ+IHtcclxuICByZXR1cm4ge1xyXG4gICAgb2Zmc2V0OiByZXF1ZXN0Py5vZmZzZXQgPz8gMCxcclxuICAgIGxpbWl0OiAhcmVxdWVzdD8ubGltaXRcclxuICAgICAgPyBERUZBVUxUX1NFQVJDSF9MSU1JVFxyXG4gICAgICA6IG1pbkxpbWl0ICYmIHJlcXVlc3QubGltaXQgPCBtaW5MaW1pdFxyXG4gICAgICA/IG1pbkxpbWl0XHJcbiAgICAgIDogcmVxdWVzdC5saW1pdCxcclxuICAgIGZpbHRlcjogcmVxdWVzdD8uZmlsdGVyLFxyXG4gICAgc29ydDogcmVxdWVzdD8uc29ydCxcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_PAGE_SIZE = 50;
|
|
2
|
-
export const DEFAULT_LAZYLOAD_OPTIONS = {
|
|
3
|
-
offset: 0,
|
|
4
|
-
limit: DEFAULT_PAGE_SIZE,
|
|
5
|
-
};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvY29yZS9zcmMvbGliL21vZGVscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFrQjtJQUNyRCxNQUFNLEVBQUUsQ0FBQztJQUNULEtBQUssRUFBRSxpQkFBaUI7Q0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICcuL2V2ZW50Lm1vZGVscyc7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSA1MDtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWllMT0FEX09QVElPTlM6IExhenlMb2FkRXZlbnQgPSB7XHJcbiAgb2Zmc2V0OiAwLFxyXG4gIGxpbWl0OiBERUZBVUxUX1BBR0VfU0laRSxcclxufTtcclxuIl19
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { isObservable, map, of } from 'rxjs';
|
|
2
|
-
import { BaseHttpService } from '../services/base-http.service';
|
|
3
|
-
import { DEFAULT_PAGE_SIZE } from './constants';
|
|
4
|
-
export function convertDatasource(datasource, basePath, httpClient) {
|
|
5
|
-
if (!datasource) {
|
|
6
|
-
throw new Error('Datasource is not defined');
|
|
7
|
-
}
|
|
8
|
-
if (typeof datasource === 'string') {
|
|
9
|
-
const service = new BaseHttpService(httpClient, basePath, datasource);
|
|
10
|
-
return (requestParams) => service.fetchList(requestParams);
|
|
11
|
-
}
|
|
12
|
-
if (datasource instanceof BaseHttpService) {
|
|
13
|
-
return (requestParams) => datasource.fetchList(requestParams);
|
|
14
|
-
}
|
|
15
|
-
if (isObservable(datasource)) {
|
|
16
|
-
return () => datasource.pipe(map(convertArrayToPage));
|
|
17
|
-
}
|
|
18
|
-
const allItemDatasource = datasource;
|
|
19
|
-
if (allItemDatasource.getData$) {
|
|
20
|
-
return () => allItemDatasource
|
|
21
|
-
.getData$()
|
|
22
|
-
.pipe(map((data) => convertArrayToPage(data)));
|
|
23
|
-
}
|
|
24
|
-
const page = datasource;
|
|
25
|
-
if (page.data) {
|
|
26
|
-
return () => of(page);
|
|
27
|
-
}
|
|
28
|
-
if (Array.isArray(datasource)) {
|
|
29
|
-
return () => of(convertArrayToPage(datasource));
|
|
30
|
-
}
|
|
31
|
-
throw new Error('Datasource is not supported');
|
|
32
|
-
}
|
|
33
|
-
function convertArrayToPage(data) {
|
|
34
|
-
if (Array.isArray(data)) {
|
|
35
|
-
return {
|
|
36
|
-
data: data ?? [],
|
|
37
|
-
total: data?.length ?? 0,
|
|
38
|
-
limit: data?.length ?? DEFAULT_PAGE_SIZE,
|
|
39
|
-
offset: 0,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return data;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL2NvcmUvc3JjL2xpYi9tb2RlbHMvZGF0YXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWVoRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFVBQTZCLEVBQzdCLFFBQWdCLEVBQ2hCLFVBQXNCO0lBRXRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsYUFBK0IsRUFBRSxFQUFFLENBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksVUFBVSxZQUFZLGVBQWUsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxhQUErQixFQUFFLEVBQUUsQ0FDekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsRUFBRSxDQUNULFVBQXdDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQXlCLFVBQVUsQ0FBQztJQUMzRCxJQUFJLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxFQUFFLENBQ1YsaUJBQWlCO2FBQ2QsUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLElBQUksR0FBWSxVQUFVLENBQUM7SUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxPQUFPLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFJLElBQW1CO0lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDaEIsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxpQkFBaUI7WUFDeEMsTUFBTSxFQUFFLENBQUM7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sSUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmFzZS1odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGxJdGVtRGF0YXNvdXJjZSB9IGZyb20gJy4vYWxsLWl0ZW0uZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IFBhZ2UsIFJlcXVlc3RQYXJhbXMgfSBmcm9tICcuL2Jhc2UtaHR0cC5tb2RlbHMnO1xyXG5pbXBvcnQgeyBERUZBVUxUX1BBR0VfU0laRSB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCB0eXBlIERhdGFzb3VyY2VUeXBlPFQ+ID1cclxuICB8IHN0cmluZ1xyXG4gIHwgT2JzZXJ2YWJsZTxUW10+XHJcbiAgfCBPYnNlcnZhYmxlPFBhZ2U8VD4+XHJcbiAgfCBCYXNlSHR0cFNlcnZpY2U8VD5cclxuICB8IFRbXVxyXG4gIHwgUGFnZTxUPlxyXG4gIHwgQWxsSXRlbURhdGFzb3VyY2U8VD47XHJcblxyXG5leHBvcnQgdHlwZSBEYXRhU291cmNlRnVuY3Rpb25UeXBlPFQ+ID0gKFxyXG4gIHJlcXVlc3RQYXJhbXM6IFJlcXVlc3RQYXJhbXM8VD5cclxuKSA9PiBPYnNlcnZhYmxlPFBhZ2U8VD4+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRhc291cmNlPFQ+KFxyXG4gIGRhdGFzb3VyY2U6IERhdGFzb3VyY2VUeXBlPFQ+LFxyXG4gIGJhc2VQYXRoOiBzdHJpbmcsXHJcbiAgaHR0cENsaWVudDogSHR0cENsaWVudFxyXG4pOiBEYXRhU291cmNlRnVuY3Rpb25UeXBlPFQ+IHtcclxuICBpZiAoIWRhdGFzb3VyY2UpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignRGF0YXNvdXJjZSBpcyBub3QgZGVmaW5lZCcpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBkYXRhc291cmNlID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBCYXNlSHR0cFNlcnZpY2U8VD4oaHR0cENsaWVudCwgYmFzZVBhdGgsIGRhdGFzb3VyY2UpO1xyXG4gICAgcmV0dXJuIChyZXF1ZXN0UGFyYW1zOiBSZXF1ZXN0UGFyYW1zPFQ+KSA9PlxyXG4gICAgICBzZXJ2aWNlLmZldGNoTGlzdChyZXF1ZXN0UGFyYW1zKTtcclxuICB9XHJcblxyXG4gIGlmIChkYXRhc291cmNlIGluc3RhbmNlb2YgQmFzZUh0dHBTZXJ2aWNlKSB7XHJcbiAgICByZXR1cm4gKHJlcXVlc3RQYXJhbXM6IFJlcXVlc3RQYXJhbXM8VD4pID0+XHJcbiAgICAgIGRhdGFzb3VyY2UuZmV0Y2hMaXN0KHJlcXVlc3RQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhc291cmNlKSkge1xyXG4gICAgcmV0dXJuICgpID0+XHJcbiAgICAgIChkYXRhc291cmNlIGFzIE9ic2VydmFibGU8UGFnZTxUPiB8IFRbXT4pLnBpcGUobWFwKGNvbnZlcnRBcnJheVRvUGFnZSkpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYWxsSXRlbURhdGFzb3VyY2UgPSA8QWxsSXRlbURhdGFzb3VyY2U8VD4+ZGF0YXNvdXJjZTtcclxuICBpZiAoYWxsSXRlbURhdGFzb3VyY2UuZ2V0RGF0YSQpIHtcclxuICAgIHJldHVybiAoKSA9PlxyXG4gICAgICBhbGxJdGVtRGF0YXNvdXJjZVxyXG4gICAgICAgIC5nZXREYXRhJCgpXHJcbiAgICAgICAgLnBpcGUobWFwKChkYXRhKSA9PiBjb252ZXJ0QXJyYXlUb1BhZ2UoZGF0YSkpKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBhZ2UgPSA8UGFnZTxUPj5kYXRhc291cmNlO1xyXG4gIGlmIChwYWdlLmRhdGEpIHtcclxuICAgIHJldHVybiAoKSA9PiBvZihwYWdlKTtcclxuICB9XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGFzb3VyY2UpKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gb2YoY29udmVydEFycmF5VG9QYWdlKGRhdGFzb3VyY2UpKTtcclxuICB9XHJcblxyXG4gIHRocm93IG5ldyBFcnJvcignRGF0YXNvdXJjZSBpcyBub3Qgc3VwcG9ydGVkJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRBcnJheVRvUGFnZTxUPihkYXRhOiBQYWdlPFQ+IHwgVFtdKTogUGFnZTxUPiB7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRhdGE6IGRhdGEgPz8gW10sXHJcbiAgICAgIHRvdGFsOiBkYXRhPy5sZW5ndGggPz8gMCxcclxuICAgICAgbGltaXQ6IGRhdGE/Lmxlbmd0aCA/PyBERUZBVUxUX1BBR0VfU0laRSxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBkYXRhIGFzIFBhZ2U8VD47XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9jb3JlL3NyYy9saWIvbW9kZWxzL2Vudmlyb25tZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50Q29uZmlnIHtcclxuICAgIHByb2R1Y3Rpb246IGJvb2xlYW47XHJcbiAgICBhcGlVcmw6IHN0cmluZztcclxuICAgIGFwcFZlcnNpb246IHN0cmluZztcclxufVxyXG4iXX0=
|