@itrocks/core-transformers 0.0.9 → 0.0.11
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/cjs/collection-type.d.ts +0 -1
- package/cjs/collection-type.js +13 -39
- package/cjs/core-transformers.d.ts +2 -2
- package/cjs/core-transformers.js +4 -5
- package/cjs/primitive.js +37 -4
- package/cjs/store.js +14 -16
- package/esm/collection-type.d.ts +0 -1
- package/esm/collection-type.js +14 -39
- package/esm/core-transformers.d.ts +2 -2
- package/esm/core-transformers.js +1 -1
- package/esm/primitive.js +37 -4
- package/esm/store.js +14 -16
- package/package.json +1 -1
package/cjs/collection-type.d.ts
CHANGED
|
@@ -10,5 +10,4 @@ export type Dependencies = {
|
|
|
10
10
|
tr: (text: string) => string;
|
|
11
11
|
};
|
|
12
12
|
export declare function initCollectionHtmlTransformers(dependencies?: Partial<Dependencies>): void;
|
|
13
|
-
export declare function initCollectionSqlTransformers(): void;
|
|
14
13
|
export declare function initCollectionTransformers(dependencies?: Partial<Dependencies>): void;
|
package/cjs/collection-type.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.initCollectionHtmlTransformers = initCollectionHtmlTransformers;
|
|
4
|
-
exports.initCollectionSqlTransformers = initCollectionSqlTransformers;
|
|
5
4
|
exports.initCollectionTransformers = initCollectionTransformers;
|
|
6
5
|
const composition_1 = require("@itrocks/composition");
|
|
7
6
|
const storage_1 = require("@itrocks/storage");
|
|
8
7
|
const class_type_1 = require("@itrocks/class-type");
|
|
9
8
|
const class_type_2 = require("@itrocks/class-type");
|
|
10
9
|
const property_type_1 = require("@itrocks/property-type");
|
|
10
|
+
const rename_1 = require("@itrocks/rename");
|
|
11
11
|
const reflect_1 = require("@itrocks/reflect");
|
|
12
12
|
const reflect_2 = require("@itrocks/reflect");
|
|
13
13
|
const transformer_1 = require("@itrocks/transformer");
|
|
@@ -22,7 +22,7 @@ const depends = {
|
|
|
22
22
|
routeOf: type => '/' + (0, class_type_1.baseType)(type).name,
|
|
23
23
|
tr: text => text
|
|
24
24
|
};
|
|
25
|
-
const
|
|
25
|
+
const areMayEntity = (entries) => (typeof entries[0])[0] === 'o';
|
|
26
26
|
function collectionEdit(values, object, property) {
|
|
27
27
|
const fieldId = depends.fieldIdOf(property);
|
|
28
28
|
const fieldName = depends.fieldNameOf(property);
|
|
@@ -41,20 +41,21 @@ function collectionEdit(values, object, property) {
|
|
|
41
41
|
return label + `<ul data-multiple-contained-auto-width data-fetch="${fetch}" data-type="objects">`
|
|
42
42
|
+ inputs.join('')
|
|
43
43
|
+ '<li>'
|
|
44
|
-
+ `<input name="${fieldName}
|
|
45
|
-
+ `<input id="${fieldId}-id
|
|
44
|
+
+ `<input name="${fieldName}" placeholder="+">`
|
|
45
|
+
+ `<input id="${fieldId}-id" name="${fieldName}_id" type="hidden">`
|
|
46
46
|
+ '</li>'
|
|
47
47
|
+ '</ul>';
|
|
48
48
|
}
|
|
49
|
-
function collectionInput(values, object, property) {
|
|
50
|
-
const entries = Object.
|
|
51
|
-
if (
|
|
52
|
-
Object.
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
delete object[property];
|
|
56
|
-
Object.assign(object, { [property + 'Ids']: Object.keys(values).map(id => +id) });
|
|
49
|
+
function collectionInput(values, object, property, data) {
|
|
50
|
+
const entries = Object.values(values);
|
|
51
|
+
if (areMayEntity(entries)) {
|
|
52
|
+
return Object.values(values);
|
|
57
53
|
}
|
|
54
|
+
delete object[property];
|
|
55
|
+
const data_property_id = data[(0, rename_1.toField)(property) + '_id'];
|
|
56
|
+
Object.assign(object, {
|
|
57
|
+
[property + 'Ids']: Object.keys(values).map(key => +data_property_id[key]).filter(value => value)
|
|
58
|
+
});
|
|
58
59
|
return depends.ignoreTransformedValue;
|
|
59
60
|
}
|
|
60
61
|
function collectionOutput(values, object, property, askFor) {
|
|
@@ -79,40 +80,13 @@ function collectionOutput(values, object, property, askFor) {
|
|
|
79
80
|
}
|
|
80
81
|
return values.map(object => depends.representativeValueOf(object)).join(', ');
|
|
81
82
|
}
|
|
82
|
-
async function collectionSave(values, object, property) {
|
|
83
|
-
const dao = (0, storage_1.dataSource)();
|
|
84
|
-
const newIdsPromise = object[property + 'Ids']
|
|
85
|
-
?? values?.map(async (value) => (dao.isObjectConnected(value) ? value : await dao.save(value)).id).sort()
|
|
86
|
-
?? [];
|
|
87
|
-
const previousIdsPromise = dao.isObjectConnected(object)
|
|
88
|
-
? await dao.readCollectionIds(object, property)
|
|
89
|
-
: [];
|
|
90
|
-
return async (object) => {
|
|
91
|
-
const previousIds = await Promise.all(previousIdsPromise);
|
|
92
|
-
const newIds = await Promise.all(newIdsPromise);
|
|
93
|
-
for (const id of previousIds) {
|
|
94
|
-
if (newIds.includes(id))
|
|
95
|
-
continue;
|
|
96
|
-
dao.deleteRelatedId(object, property, id);
|
|
97
|
-
}
|
|
98
|
-
for (const id of newIds) {
|
|
99
|
-
if (previousIds.includes(id))
|
|
100
|
-
continue;
|
|
101
|
-
dao.insertRelatedId(object, property, id);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
83
|
function initCollectionHtmlTransformers(dependencies = {}) {
|
|
106
84
|
Object.assign(depends, dependencies);
|
|
107
85
|
(0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_1.EDIT, collectionEdit);
|
|
108
86
|
(0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_2.INPUT, collectionInput);
|
|
109
87
|
(0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_2.OUTPUT, collectionOutput);
|
|
110
88
|
}
|
|
111
|
-
function initCollectionSqlTransformers() {
|
|
112
|
-
(0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_2.SQL, transformer_2.SAVE, collectionSave);
|
|
113
|
-
}
|
|
114
89
|
function initCollectionTransformers(dependencies = {}) {
|
|
115
90
|
initCollectionHtmlTransformers(dependencies);
|
|
116
|
-
initCollectionSqlTransformers();
|
|
117
91
|
}
|
|
118
92
|
//# sourceMappingURL=collection-type.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Dependencies as CollectionTypeDependencies } from './collection-type';
|
|
2
2
|
import { Dependencies as PrimitiveDependencies } from './primitive';
|
|
3
3
|
import { Dependencies as StoreDependencies } from './store';
|
|
4
|
+
type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
|
|
5
|
+
export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type';
|
|
4
6
|
export { HtmlContainer, initContainerTransformers } from './container';
|
|
5
|
-
export { initCollectionHtmlTransformers, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type';
|
|
6
7
|
export { initBigintHtmlTransformers, initBooleanHtmlTransformers, initBooleanSqlTransformers, initDateHtmlTransformers, initDefaultHtmlEditTransformers, initNumberHtmlTransformers, initPrimitiveTransformers, setCorePrimitiveDependencies, setPrimitiveDependencies } from './primitive';
|
|
7
8
|
export { initStoreHtmlTransformers, initStoreSqlTransformers, initStoreTransformers, setStoreDependencies, setStoreSqlDependencies, setStoreHtmlDependencies } from './store';
|
|
8
|
-
type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
|
|
9
9
|
export declare function initCoreTransformers(dependencies: Partial<Dependencies>): void;
|
package/cjs/core-transformers.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setStoreHtmlDependencies = exports.setStoreSqlDependencies = exports.setStoreDependencies = exports.initStoreTransformers = exports.initStoreSqlTransformers = exports.initStoreHtmlTransformers = exports.setPrimitiveDependencies = exports.setCorePrimitiveDependencies = exports.initPrimitiveTransformers = exports.initNumberHtmlTransformers = exports.initDefaultHtmlEditTransformers = exports.initDateHtmlTransformers = exports.initBooleanSqlTransformers = exports.initBooleanHtmlTransformers = exports.initBigintHtmlTransformers = exports.
|
|
3
|
+
exports.setStoreHtmlDependencies = exports.setStoreSqlDependencies = exports.setStoreDependencies = exports.initStoreTransformers = exports.initStoreSqlTransformers = exports.initStoreHtmlTransformers = exports.setPrimitiveDependencies = exports.setCorePrimitiveDependencies = exports.initPrimitiveTransformers = exports.initNumberHtmlTransformers = exports.initDefaultHtmlEditTransformers = exports.initDateHtmlTransformers = exports.initBooleanSqlTransformers = exports.initBooleanHtmlTransformers = exports.initBigintHtmlTransformers = exports.initContainerTransformers = exports.HtmlContainer = exports.initCollectionTransformers = exports.initCollectionHtmlTransformers = void 0;
|
|
4
4
|
exports.initCoreTransformers = initCoreTransformers;
|
|
5
5
|
const collection_type_1 = require("./collection-type");
|
|
6
6
|
const container_1 = require("./container");
|
|
7
7
|
const primitive_1 = require("./primitive");
|
|
8
8
|
const store_1 = require("./store");
|
|
9
|
-
var container_2 = require("./container");
|
|
10
|
-
Object.defineProperty(exports, "HtmlContainer", { enumerable: true, get: function () { return container_2.HtmlContainer; } });
|
|
11
|
-
Object.defineProperty(exports, "initContainerTransformers", { enumerable: true, get: function () { return container_2.initContainerTransformers; } });
|
|
12
9
|
var collection_type_2 = require("./collection-type");
|
|
13
10
|
Object.defineProperty(exports, "initCollectionHtmlTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionHtmlTransformers; } });
|
|
14
|
-
Object.defineProperty(exports, "initCollectionSqlTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionSqlTransformers; } });
|
|
15
11
|
Object.defineProperty(exports, "initCollectionTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionTransformers; } });
|
|
12
|
+
var container_2 = require("./container");
|
|
13
|
+
Object.defineProperty(exports, "HtmlContainer", { enumerable: true, get: function () { return container_2.HtmlContainer; } });
|
|
14
|
+
Object.defineProperty(exports, "initContainerTransformers", { enumerable: true, get: function () { return container_2.initContainerTransformers; } });
|
|
16
15
|
var primitive_2 = require("./primitive");
|
|
17
16
|
Object.defineProperty(exports, "initBigintHtmlTransformers", { enumerable: true, get: function () { return primitive_2.initBigintHtmlTransformers; } });
|
|
18
17
|
Object.defineProperty(exports, "initBooleanHtmlTransformers", { enumerable: true, get: function () { return primitive_2.initBooleanHtmlTransformers; } });
|
package/cjs/primitive.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.initDefaultHtmlEditTransformers = initDefaultHtmlEditTransformers;
|
|
|
9
9
|
exports.initPrimitiveTransformers = initPrimitiveTransformers;
|
|
10
10
|
exports.setCorePrimitiveDependencies = setCorePrimitiveDependencies;
|
|
11
11
|
exports.setPrimitiveDependencies = setPrimitiveDependencies;
|
|
12
|
+
const precision_1 = require("@itrocks/precision");
|
|
12
13
|
const transformer_1 = require("@itrocks/transformer");
|
|
13
14
|
const transformer_2 = require("@itrocks/transformer");
|
|
14
15
|
const transformer_3 = require("@itrocks/transformer");
|
|
@@ -73,20 +74,52 @@ function initDateHtmlTransformers() {
|
|
|
73
74
|
}
|
|
74
75
|
// Number
|
|
75
76
|
function numberEdit(value, type, property) {
|
|
77
|
+
const output = numberOutput(value, type, property);
|
|
76
78
|
const fieldId = depends.fieldIdOf(property);
|
|
77
79
|
const fieldName = depends.fieldNameOf(property);
|
|
78
80
|
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
|
|
79
81
|
const name = `id="${fieldId}" name="${fieldName}"`;
|
|
80
|
-
const inputValue = (
|
|
82
|
+
const inputValue = (output !== undefined) ? ` value="${output}"` : '';
|
|
81
83
|
const input = `<input data-type="number" ${name}${inputValue}>`;
|
|
82
84
|
return label + lfTab + input;
|
|
83
85
|
}
|
|
86
|
+
function numberInput(value) {
|
|
87
|
+
const number = (value === '') ? undefined : +(value.replace(/\s/g, '').replace(',', '.'));
|
|
88
|
+
if (!Number.isNaN(number))
|
|
89
|
+
return number;
|
|
90
|
+
const endChar = value[value.length - 1].toUpperCase();
|
|
91
|
+
if (endChar === 'K')
|
|
92
|
+
return (+value.slice(0, -1)) * 1e3;
|
|
93
|
+
if (endChar === 'M')
|
|
94
|
+
return (+value.slice(0, -1)) * 1e6;
|
|
95
|
+
if (endChar === 'G')
|
|
96
|
+
return (+value.slice(0, -2)) * 1e9;
|
|
97
|
+
if (endChar === 'T')
|
|
98
|
+
return (+value.slice(0, -2)) * 1e12;
|
|
99
|
+
if (endChar === 'P')
|
|
100
|
+
return (+value.slice(0, -2)) * 1e15;
|
|
101
|
+
if ((endChar === 'D') && (value[value.length - 2] === 'M'))
|
|
102
|
+
return (+value.slice(0, -2)) * 10 ** 9;
|
|
103
|
+
return number;
|
|
104
|
+
}
|
|
105
|
+
function numberOutput(value, object, property) {
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
return '';
|
|
108
|
+
const precision = (0, precision_1.precisionOf)(object, property);
|
|
109
|
+
return value.toLocaleString('fr-FR', {
|
|
110
|
+
minimumFractionDigits: precision.minimum,
|
|
111
|
+
maximumFractionDigits: precision.maximum
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function numberRead(value) {
|
|
115
|
+
return (typeof value === 'string') ? +value : (value ?? undefined);
|
|
116
|
+
}
|
|
84
117
|
function initNumberHtmlTransformers() {
|
|
85
118
|
(0, transformer_1.setPropertyTypeTransformers)(Number, [
|
|
86
119
|
{ format: transformer_2.HTML, direction: transformer_2.EDIT, transformer: numberEdit },
|
|
87
|
-
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer:
|
|
88
|
-
{ format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer:
|
|
89
|
-
{ format: transformer_3.SQL, direction: transformer_3.READ, transformer:
|
|
120
|
+
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer: numberInput },
|
|
121
|
+
{ format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer: numberOutput },
|
|
122
|
+
{ format: transformer_3.SQL, direction: transformer_3.READ, transformer: numberRead }
|
|
90
123
|
]);
|
|
91
124
|
}
|
|
92
125
|
// default
|
package/cjs/store.js
CHANGED
|
@@ -54,22 +54,20 @@ function storeEdit(value, object, property) {
|
|
|
54
54
|
function storeInput(value, object, property, data) {
|
|
55
55
|
const propertyId = property + 'Id';
|
|
56
56
|
const fieldId = depends.fieldNameOf(propertyId);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Object.assign(object, { [property]: new reflectProperty.type.type(value) });
|
|
72
|
-
}
|
|
57
|
+
const id = +data[fieldId];
|
|
58
|
+
if (id === ((propertyId in object) ? object[propertyId] : value?.id)) {
|
|
59
|
+
return depends.ignoreTransformedValue;
|
|
60
|
+
}
|
|
61
|
+
delete object[property];
|
|
62
|
+
if (id) {
|
|
63
|
+
Object.assign(object, { [propertyId]: id });
|
|
64
|
+
}
|
|
65
|
+
else if ((typeof value === 'object')) {
|
|
66
|
+
Object.assign(object, { [property]: value });
|
|
67
|
+
}
|
|
68
|
+
else if ((typeof value === 'string') && (value !== '')) {
|
|
69
|
+
const reflectProperty = new reflect_1.ReflectProperty(object, property);
|
|
70
|
+
Object.assign(object, { [property]: new reflectProperty.type.type(value) });
|
|
73
71
|
}
|
|
74
72
|
return depends.ignoreTransformedValue;
|
|
75
73
|
}
|
package/esm/collection-type.d.ts
CHANGED
|
@@ -10,5 +10,4 @@ export type Dependencies = {
|
|
|
10
10
|
tr: (text: string) => string;
|
|
11
11
|
};
|
|
12
12
|
export declare function initCollectionHtmlTransformers(dependencies?: Partial<Dependencies>): void;
|
|
13
|
-
export declare function initCollectionSqlTransformers(): void;
|
|
14
13
|
export declare function initCollectionTransformers(dependencies?: Partial<Dependencies>): void;
|
package/esm/collection-type.js
CHANGED
|
@@ -3,10 +3,11 @@ import { dataSource } from '@itrocks/storage';
|
|
|
3
3
|
import { baseType } from '@itrocks/class-type';
|
|
4
4
|
import { typeOf } from '@itrocks/class-type';
|
|
5
5
|
import { CollectionType } from '@itrocks/property-type';
|
|
6
|
+
import { toField } from '@itrocks/rename';
|
|
6
7
|
import { ReflectClass } from '@itrocks/reflect';
|
|
7
8
|
import { ReflectProperty } from '@itrocks/reflect';
|
|
8
9
|
import { EDIT, HTML } from '@itrocks/transformer';
|
|
9
|
-
import { INPUT, OUTPUT
|
|
10
|
+
import { INPUT, OUTPUT } from '@itrocks/transformer';
|
|
10
11
|
import { setPropertyTypeTransformer } from '@itrocks/transformer';
|
|
11
12
|
const depends = {
|
|
12
13
|
displayOf: (_object, property) => property,
|
|
@@ -17,7 +18,7 @@ const depends = {
|
|
|
17
18
|
routeOf: type => '/' + baseType(type).name,
|
|
18
19
|
tr: text => text
|
|
19
20
|
};
|
|
20
|
-
const
|
|
21
|
+
const areMayEntity = (entries) => (typeof entries[0])[0] === 'o';
|
|
21
22
|
function collectionEdit(values, object, property) {
|
|
22
23
|
const fieldId = depends.fieldIdOf(property);
|
|
23
24
|
const fieldName = depends.fieldNameOf(property);
|
|
@@ -36,20 +37,21 @@ function collectionEdit(values, object, property) {
|
|
|
36
37
|
return label + `<ul data-multiple-contained-auto-width data-fetch="${fetch}" data-type="objects">`
|
|
37
38
|
+ inputs.join('')
|
|
38
39
|
+ '<li>'
|
|
39
|
-
+ `<input name="${fieldName}
|
|
40
|
-
+ `<input id="${fieldId}-id
|
|
40
|
+
+ `<input name="${fieldName}" placeholder="+">`
|
|
41
|
+
+ `<input id="${fieldId}-id" name="${fieldName}_id" type="hidden">`
|
|
41
42
|
+ '</li>'
|
|
42
43
|
+ '</ul>';
|
|
43
44
|
}
|
|
44
|
-
function collectionInput(values, object, property) {
|
|
45
|
-
const entries = Object.
|
|
46
|
-
if (
|
|
47
|
-
Object.
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
delete object[property];
|
|
51
|
-
Object.assign(object, { [property + 'Ids']: Object.keys(values).map(id => +id) });
|
|
45
|
+
function collectionInput(values, object, property, data) {
|
|
46
|
+
const entries = Object.values(values);
|
|
47
|
+
if (areMayEntity(entries)) {
|
|
48
|
+
return Object.values(values);
|
|
52
49
|
}
|
|
50
|
+
delete object[property];
|
|
51
|
+
const data_property_id = data[toField(property) + '_id'];
|
|
52
|
+
Object.assign(object, {
|
|
53
|
+
[property + 'Ids']: Object.keys(values).map(key => +data_property_id[key]).filter(value => value)
|
|
54
|
+
});
|
|
53
55
|
return depends.ignoreTransformedValue;
|
|
54
56
|
}
|
|
55
57
|
function collectionOutput(values, object, property, askFor) {
|
|
@@ -74,40 +76,13 @@ function collectionOutput(values, object, property, askFor) {
|
|
|
74
76
|
}
|
|
75
77
|
return values.map(object => depends.representativeValueOf(object)).join(', ');
|
|
76
78
|
}
|
|
77
|
-
async function collectionSave(values, object, property) {
|
|
78
|
-
const dao = dataSource();
|
|
79
|
-
const newIdsPromise = object[property + 'Ids']
|
|
80
|
-
?? values?.map(async (value) => (dao.isObjectConnected(value) ? value : await dao.save(value)).id).sort()
|
|
81
|
-
?? [];
|
|
82
|
-
const previousIdsPromise = dao.isObjectConnected(object)
|
|
83
|
-
? await dao.readCollectionIds(object, property)
|
|
84
|
-
: [];
|
|
85
|
-
return async (object) => {
|
|
86
|
-
const previousIds = await Promise.all(previousIdsPromise);
|
|
87
|
-
const newIds = await Promise.all(newIdsPromise);
|
|
88
|
-
for (const id of previousIds) {
|
|
89
|
-
if (newIds.includes(id))
|
|
90
|
-
continue;
|
|
91
|
-
dao.deleteRelatedId(object, property, id);
|
|
92
|
-
}
|
|
93
|
-
for (const id of newIds) {
|
|
94
|
-
if (previousIds.includes(id))
|
|
95
|
-
continue;
|
|
96
|
-
dao.insertRelatedId(object, property, id);
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
79
|
export function initCollectionHtmlTransformers(dependencies = {}) {
|
|
101
80
|
Object.assign(depends, dependencies);
|
|
102
81
|
setPropertyTypeTransformer(CollectionType, HTML, EDIT, collectionEdit);
|
|
103
82
|
setPropertyTypeTransformer(CollectionType, HTML, INPUT, collectionInput);
|
|
104
83
|
setPropertyTypeTransformer(CollectionType, HTML, OUTPUT, collectionOutput);
|
|
105
84
|
}
|
|
106
|
-
export function initCollectionSqlTransformers() {
|
|
107
|
-
setPropertyTypeTransformer(CollectionType, SQL, SAVE, collectionSave);
|
|
108
|
-
}
|
|
109
85
|
export function initCollectionTransformers(dependencies = {}) {
|
|
110
86
|
initCollectionHtmlTransformers(dependencies);
|
|
111
|
-
initCollectionSqlTransformers();
|
|
112
87
|
}
|
|
113
88
|
//# sourceMappingURL=collection-type.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Dependencies as CollectionTypeDependencies } from './collection-type';
|
|
2
2
|
import { Dependencies as PrimitiveDependencies } from './primitive';
|
|
3
3
|
import { Dependencies as StoreDependencies } from './store';
|
|
4
|
+
type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
|
|
5
|
+
export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type';
|
|
4
6
|
export { HtmlContainer, initContainerTransformers } from './container';
|
|
5
|
-
export { initCollectionHtmlTransformers, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type';
|
|
6
7
|
export { initBigintHtmlTransformers, initBooleanHtmlTransformers, initBooleanSqlTransformers, initDateHtmlTransformers, initDefaultHtmlEditTransformers, initNumberHtmlTransformers, initPrimitiveTransformers, setCorePrimitiveDependencies, setPrimitiveDependencies } from './primitive';
|
|
7
8
|
export { initStoreHtmlTransformers, initStoreSqlTransformers, initStoreTransformers, setStoreDependencies, setStoreSqlDependencies, setStoreHtmlDependencies } from './store';
|
|
8
|
-
type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
|
|
9
9
|
export declare function initCoreTransformers(dependencies: Partial<Dependencies>): void;
|
package/esm/core-transformers.js
CHANGED
|
@@ -2,8 +2,8 @@ import { initCollectionTransformers } from './collection-type.js';
|
|
|
2
2
|
import { initContainerTransformers } from './container.js';
|
|
3
3
|
import { initPrimitiveTransformers } from './primitive.js';
|
|
4
4
|
import { setStoreDependencies } from './store.js';
|
|
5
|
+
export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type.js';
|
|
5
6
|
export { HtmlContainer, initContainerTransformers } from './container.js';
|
|
6
|
-
export { initCollectionHtmlTransformers, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type.js';
|
|
7
7
|
export { initBigintHtmlTransformers, initBooleanHtmlTransformers, initBooleanSqlTransformers, initDateHtmlTransformers, initDefaultHtmlEditTransformers, initNumberHtmlTransformers, initPrimitiveTransformers, setCorePrimitiveDependencies, setPrimitiveDependencies } from './primitive.js';
|
|
8
8
|
export { initStoreHtmlTransformers, initStoreSqlTransformers, initStoreTransformers, setStoreDependencies, setStoreSqlDependencies, setStoreHtmlDependencies } from './store.js';
|
|
9
9
|
export function initCoreTransformers(dependencies) {
|
package/esm/primitive.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { precisionOf } from '@itrocks/precision';
|
|
1
2
|
import { setPropertyTypeTransformers } from '@itrocks/transformer';
|
|
2
3
|
import { EDIT, HTML, INPUT, OUTPUT } from '@itrocks/transformer';
|
|
3
4
|
import { READ, SAVE, SQL } from '@itrocks/transformer';
|
|
@@ -62,20 +63,52 @@ export function initDateHtmlTransformers() {
|
|
|
62
63
|
}
|
|
63
64
|
// Number
|
|
64
65
|
function numberEdit(value, type, property) {
|
|
66
|
+
const output = numberOutput(value, type, property);
|
|
65
67
|
const fieldId = depends.fieldIdOf(property);
|
|
66
68
|
const fieldName = depends.fieldNameOf(property);
|
|
67
69
|
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
|
|
68
70
|
const name = `id="${fieldId}" name="${fieldName}"`;
|
|
69
|
-
const inputValue = (
|
|
71
|
+
const inputValue = (output !== undefined) ? ` value="${output}"` : '';
|
|
70
72
|
const input = `<input data-type="number" ${name}${inputValue}>`;
|
|
71
73
|
return label + lfTab + input;
|
|
72
74
|
}
|
|
75
|
+
function numberInput(value) {
|
|
76
|
+
const number = (value === '') ? undefined : +(value.replace(/\s/g, '').replace(',', '.'));
|
|
77
|
+
if (!Number.isNaN(number))
|
|
78
|
+
return number;
|
|
79
|
+
const endChar = value[value.length - 1].toUpperCase();
|
|
80
|
+
if (endChar === 'K')
|
|
81
|
+
return (+value.slice(0, -1)) * 1e3;
|
|
82
|
+
if (endChar === 'M')
|
|
83
|
+
return (+value.slice(0, -1)) * 1e6;
|
|
84
|
+
if (endChar === 'G')
|
|
85
|
+
return (+value.slice(0, -2)) * 1e9;
|
|
86
|
+
if (endChar === 'T')
|
|
87
|
+
return (+value.slice(0, -2)) * 1e12;
|
|
88
|
+
if (endChar === 'P')
|
|
89
|
+
return (+value.slice(0, -2)) * 1e15;
|
|
90
|
+
if ((endChar === 'D') && (value[value.length - 2] === 'M'))
|
|
91
|
+
return (+value.slice(0, -2)) * 10 ** 9;
|
|
92
|
+
return number;
|
|
93
|
+
}
|
|
94
|
+
function numberOutput(value, object, property) {
|
|
95
|
+
if (value === undefined)
|
|
96
|
+
return '';
|
|
97
|
+
const precision = precisionOf(object, property);
|
|
98
|
+
return value.toLocaleString('fr-FR', {
|
|
99
|
+
minimumFractionDigits: precision.minimum,
|
|
100
|
+
maximumFractionDigits: precision.maximum
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function numberRead(value) {
|
|
104
|
+
return (typeof value === 'string') ? +value : (value ?? undefined);
|
|
105
|
+
}
|
|
73
106
|
export function initNumberHtmlTransformers() {
|
|
74
107
|
setPropertyTypeTransformers(Number, [
|
|
75
108
|
{ format: HTML, direction: EDIT, transformer: numberEdit },
|
|
76
|
-
{ format: HTML, direction: INPUT, transformer:
|
|
77
|
-
{ format: HTML, direction: OUTPUT, transformer:
|
|
78
|
-
{ format: SQL, direction: READ, transformer:
|
|
109
|
+
{ format: HTML, direction: INPUT, transformer: numberInput },
|
|
110
|
+
{ format: HTML, direction: OUTPUT, transformer: numberOutput },
|
|
111
|
+
{ format: SQL, direction: READ, transformer: numberRead }
|
|
79
112
|
]);
|
|
80
113
|
}
|
|
81
114
|
// default
|
package/esm/store.js
CHANGED
|
@@ -47,22 +47,20 @@ function storeEdit(value, object, property) {
|
|
|
47
47
|
function storeInput(value, object, property, data) {
|
|
48
48
|
const propertyId = property + 'Id';
|
|
49
49
|
const fieldId = depends.fieldNameOf(propertyId);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Object.assign(object, { [property]: new reflectProperty.type.type(value) });
|
|
65
|
-
}
|
|
50
|
+
const id = +data[fieldId];
|
|
51
|
+
if (id === ((propertyId in object) ? object[propertyId] : value?.id)) {
|
|
52
|
+
return depends.ignoreTransformedValue;
|
|
53
|
+
}
|
|
54
|
+
delete object[property];
|
|
55
|
+
if (id) {
|
|
56
|
+
Object.assign(object, { [propertyId]: id });
|
|
57
|
+
}
|
|
58
|
+
else if ((typeof value === 'object')) {
|
|
59
|
+
Object.assign(object, { [property]: value });
|
|
60
|
+
}
|
|
61
|
+
else if ((typeof value === 'string') && (value !== '')) {
|
|
62
|
+
const reflectProperty = new ReflectProperty(object, property);
|
|
63
|
+
Object.assign(object, { [property]: new reflectProperty.type.type(value) });
|
|
66
64
|
}
|
|
67
65
|
return depends.ignoreTransformedValue;
|
|
68
66
|
}
|
package/package.json
CHANGED