@itrocks/core-transformers 0.0.10 → 0.0.12

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.
@@ -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;
@@ -1,7 +1,6 @@
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");
@@ -23,7 +22,7 @@ const depends = {
23
22
  routeOf: type => '/' + (0, class_type_1.baseType)(type).name,
24
23
  tr: text => text
25
24
  };
26
- const areMayEntityEntries = (entries) => (typeof entries[0]?.[1])[0] === 'o';
25
+ const areMayEntity = (entries) => (typeof entries[0])[0] === 'o';
27
26
  function collectionEdit(values, object, property) {
28
27
  const fieldId = depends.fieldIdOf(property);
29
28
  const fieldName = depends.fieldNameOf(property);
@@ -48,20 +47,18 @@ function collectionEdit(values, object, property) {
48
47
  + '</ul>';
49
48
  }
50
49
  function collectionInput(values, object, property, data) {
51
- const entries = Object.entries(values);
52
- if (areMayEntityEntries(entries)) {
53
- Object.assign(object, { [property]: entries.map(([id, value]) => (0, storage_1.dataSource)().connectObject(value, +id)) });
54
- }
55
- else {
56
- delete object[property];
57
- const data_property_id = data[(0, rename_1.toField)(property) + '_id'];
58
- Object.assign(object, {
59
- [property + 'Ids']: Object.keys(values).map(key => +data_property_id[key]).filter(value => value)
60
- });
50
+ const entries = Object.values(values);
51
+ if (areMayEntity(entries)) {
52
+ return Object.values(values);
61
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
+ });
62
59
  return depends.ignoreTransformedValue;
63
60
  }
64
- function collectionOutput(values, object, property, askFor) {
61
+ async function collectionOutput(values, object, property, askFor) {
65
62
  if (!values.length) {
66
63
  return '';
67
64
  }
@@ -72,51 +69,36 @@ function collectionOutput(values, object, property, askFor) {
72
69
  const properties = propertyClass.propertyNames.filter(property => !(0, composition_1.compositeOf)(type, property));
73
70
  const html = [];
74
71
  html.push('<table>');
75
- html.push('<tr>' + properties.map(property => '<th>' + depends.tr(property) + '</th>').join('') + '</tr>');
76
- html.push(...values.map(value => '<tr>' + properties.map(property => '<td>' + value[property] + '</td>').join('') + '</tr>'));
72
+ html.push('<tr>'
73
+ + properties.map(property => '<th>'
74
+ + depends.tr(property)
75
+ + '</th>').join('')
76
+ + '</tr>');
77
+ html.push(...await Promise.all(values.map(async (value) => '<tr>'
78
+ + (await Promise.all(properties.map(async (property) => '<td>'
79
+ + (await value[property])
80
+ + '</td>'))).join('')
81
+ + '</tr>')));
77
82
  html.push('</table>');
78
83
  return html.join('\n');
79
84
  }
80
85
  if (askFor?.container) {
81
86
  askFor.container = false;
82
- return '<ul>' + values.map(object => '<li>' + depends.representativeValueOf(object) + '</li>').join('') + '</ul>';
87
+ return '<ul>'
88
+ + values.map(object => '<li>'
89
+ + depends.representativeValueOf(object)
90
+ + '</li>').join('')
91
+ + '</ul>';
83
92
  }
84
93
  return values.map(object => depends.representativeValueOf(object)).join(', ');
85
94
  }
86
- async function collectionSave(values, object, property) {
87
- const dao = (0, storage_1.dataSource)();
88
- const newIdsPromise = object[property + 'Ids']
89
- ?? values?.map(async (value) => (dao.isObjectConnected(value) ? value : await dao.save(value)).id).sort()
90
- ?? [];
91
- const previousIdsPromise = dao.isObjectConnected(object)
92
- ? await dao.readCollectionIds(object, property)
93
- : [];
94
- return async (object) => {
95
- const previousIds = await Promise.all(previousIdsPromise);
96
- const newIds = await Promise.all(newIdsPromise);
97
- for (const id of previousIds) {
98
- if (newIds.includes(id))
99
- continue;
100
- dao.deleteRelatedId(object, property, id);
101
- }
102
- for (const id of newIds) {
103
- if (previousIds.includes(id))
104
- continue;
105
- dao.insertRelatedId(object, property, id);
106
- }
107
- };
108
- }
109
95
  function initCollectionHtmlTransformers(dependencies = {}) {
110
96
  Object.assign(depends, dependencies);
111
97
  (0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_1.EDIT, collectionEdit);
112
98
  (0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_2.INPUT, collectionInput);
113
99
  (0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_1.HTML, transformer_2.OUTPUT, collectionOutput);
114
100
  }
115
- function initCollectionSqlTransformers() {
116
- (0, transformer_3.setPropertyTypeTransformer)(property_type_1.CollectionType, transformer_2.SQL, transformer_2.SAVE, collectionSave);
117
- }
118
101
  function initCollectionTransformers(dependencies = {}) {
119
102
  initCollectionHtmlTransformers(dependencies);
120
- initCollectionSqlTransformers();
121
103
  }
122
104
  //# sourceMappingURL=collection-type.js.map
@@ -2,7 +2,7 @@ import { Dependencies as CollectionTypeDependencies } from './collection-type';
2
2
  import { Dependencies as PrimitiveDependencies } from './primitive';
3
3
  import { Dependencies as StoreDependencies } from './store';
4
4
  type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
5
- export { initCollectionHtmlTransformers, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type';
5
+ export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type';
6
6
  export { HtmlContainer, initContainerTransformers } from './container';
7
7
  export { initBigintHtmlTransformers, initBooleanHtmlTransformers, initBooleanSqlTransformers, initDateHtmlTransformers, initDefaultHtmlEditTransformers, initNumberHtmlTransformers, initPrimitiveTransformers, setCorePrimitiveDependencies, setPrimitiveDependencies } from './primitive';
8
8
  export { initStoreHtmlTransformers, initStoreSqlTransformers, initStoreTransformers, setStoreDependencies, setStoreSqlDependencies, setStoreHtmlDependencies } from './store';
@@ -1,6 +1,6 @@
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.initContainerTransformers = exports.HtmlContainer = exports.initCollectionTransformers = exports.initCollectionSqlTransformers = exports.initCollectionHtmlTransformers = void 0;
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");
@@ -8,7 +8,6 @@ const primitive_1 = require("./primitive");
8
8
  const store_1 = require("./store");
9
9
  var collection_type_2 = require("./collection-type");
10
10
  Object.defineProperty(exports, "initCollectionHtmlTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionHtmlTransformers; } });
11
- Object.defineProperty(exports, "initCollectionSqlTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionSqlTransformers; } });
12
11
  Object.defineProperty(exports, "initCollectionTransformers", { enumerable: true, get: function () { return collection_type_2.initCollectionTransformers; } });
13
12
  var container_2 = require("./container");
14
13
  Object.defineProperty(exports, "HtmlContainer", { enumerable: true, get: function () { return container_2.HtmlContainer; } });
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 = (value !== undefined) ? ` value="${value}"` : '';
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: (value) => (value === '') ? undefined : +value },
88
- { format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer: (value) => (value === undefined) ? '' : ('' + value) },
89
- { format: transformer_3.SQL, direction: transformer_3.READ, transformer: (value) => (value === null) ? undefined : value }
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
- if ((fieldId in data)
58
- && ((propertyId in object)
59
- ? (data[fieldId] !== object[propertyId] + '')
60
- : (data[fieldId] !== value?.id + ''))) {
61
- delete object[property];
62
- const id = +data[fieldId];
63
- if (id) {
64
- Object.assign(object, { [propertyId]: id });
65
- }
66
- else if ((typeof value === 'object')) {
67
- Object.assign(object, { [property]: value });
68
- }
69
- else if ((typeof value === 'string') && (value !== '')) {
70
- const reflectProperty = new reflect_1.ReflectProperty(object, property);
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
  }
@@ -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;
@@ -7,7 +7,7 @@ import { toField } from '@itrocks/rename';
7
7
  import { ReflectClass } from '@itrocks/reflect';
8
8
  import { ReflectProperty } from '@itrocks/reflect';
9
9
  import { EDIT, HTML } from '@itrocks/transformer';
10
- import { INPUT, OUTPUT, SAVE, SQL } from '@itrocks/transformer';
10
+ import { INPUT, OUTPUT } from '@itrocks/transformer';
11
11
  import { setPropertyTypeTransformer } from '@itrocks/transformer';
12
12
  const depends = {
13
13
  displayOf: (_object, property) => property,
@@ -18,7 +18,7 @@ const depends = {
18
18
  routeOf: type => '/' + baseType(type).name,
19
19
  tr: text => text
20
20
  };
21
- const areMayEntityEntries = (entries) => (typeof entries[0]?.[1])[0] === 'o';
21
+ const areMayEntity = (entries) => (typeof entries[0])[0] === 'o';
22
22
  function collectionEdit(values, object, property) {
23
23
  const fieldId = depends.fieldIdOf(property);
24
24
  const fieldName = depends.fieldNameOf(property);
@@ -43,20 +43,18 @@ function collectionEdit(values, object, property) {
43
43
  + '</ul>';
44
44
  }
45
45
  function collectionInput(values, object, property, data) {
46
- const entries = Object.entries(values);
47
- if (areMayEntityEntries(entries)) {
48
- Object.assign(object, { [property]: entries.map(([id, value]) => dataSource().connectObject(value, +id)) });
49
- }
50
- else {
51
- delete object[property];
52
- const data_property_id = data[toField(property) + '_id'];
53
- Object.assign(object, {
54
- [property + 'Ids']: Object.keys(values).map(key => +data_property_id[key]).filter(value => value)
55
- });
46
+ const entries = Object.values(values);
47
+ if (areMayEntity(entries)) {
48
+ return Object.values(values);
56
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
+ });
57
55
  return depends.ignoreTransformedValue;
58
56
  }
59
- function collectionOutput(values, object, property, askFor) {
57
+ async function collectionOutput(values, object, property, askFor) {
60
58
  if (!values.length) {
61
59
  return '';
62
60
  }
@@ -67,51 +65,36 @@ function collectionOutput(values, object, property, askFor) {
67
65
  const properties = propertyClass.propertyNames.filter(property => !compositeOf(type, property));
68
66
  const html = [];
69
67
  html.push('<table>');
70
- html.push('<tr>' + properties.map(property => '<th>' + depends.tr(property) + '</th>').join('') + '</tr>');
71
- html.push(...values.map(value => '<tr>' + properties.map(property => '<td>' + value[property] + '</td>').join('') + '</tr>'));
68
+ html.push('<tr>'
69
+ + properties.map(property => '<th>'
70
+ + depends.tr(property)
71
+ + '</th>').join('')
72
+ + '</tr>');
73
+ html.push(...await Promise.all(values.map(async (value) => '<tr>'
74
+ + (await Promise.all(properties.map(async (property) => '<td>'
75
+ + (await value[property])
76
+ + '</td>'))).join('')
77
+ + '</tr>')));
72
78
  html.push('</table>');
73
79
  return html.join('\n');
74
80
  }
75
81
  if (askFor?.container) {
76
82
  askFor.container = false;
77
- return '<ul>' + values.map(object => '<li>' + depends.representativeValueOf(object) + '</li>').join('') + '</ul>';
83
+ return '<ul>'
84
+ + values.map(object => '<li>'
85
+ + depends.representativeValueOf(object)
86
+ + '</li>').join('')
87
+ + '</ul>';
78
88
  }
79
89
  return values.map(object => depends.representativeValueOf(object)).join(', ');
80
90
  }
81
- async function collectionSave(values, object, property) {
82
- const dao = dataSource();
83
- const newIdsPromise = object[property + 'Ids']
84
- ?? values?.map(async (value) => (dao.isObjectConnected(value) ? value : await dao.save(value)).id).sort()
85
- ?? [];
86
- const previousIdsPromise = dao.isObjectConnected(object)
87
- ? await dao.readCollectionIds(object, property)
88
- : [];
89
- return async (object) => {
90
- const previousIds = await Promise.all(previousIdsPromise);
91
- const newIds = await Promise.all(newIdsPromise);
92
- for (const id of previousIds) {
93
- if (newIds.includes(id))
94
- continue;
95
- dao.deleteRelatedId(object, property, id);
96
- }
97
- for (const id of newIds) {
98
- if (previousIds.includes(id))
99
- continue;
100
- dao.insertRelatedId(object, property, id);
101
- }
102
- };
103
- }
104
91
  export function initCollectionHtmlTransformers(dependencies = {}) {
105
92
  Object.assign(depends, dependencies);
106
93
  setPropertyTypeTransformer(CollectionType, HTML, EDIT, collectionEdit);
107
94
  setPropertyTypeTransformer(CollectionType, HTML, INPUT, collectionInput);
108
95
  setPropertyTypeTransformer(CollectionType, HTML, OUTPUT, collectionOutput);
109
96
  }
110
- export function initCollectionSqlTransformers() {
111
- setPropertyTypeTransformer(CollectionType, SQL, SAVE, collectionSave);
112
- }
113
97
  export function initCollectionTransformers(dependencies = {}) {
114
98
  initCollectionHtmlTransformers(dependencies);
115
- initCollectionSqlTransformers();
116
99
  }
117
100
  //# sourceMappingURL=collection-type.js.map
@@ -2,7 +2,7 @@ import { Dependencies as CollectionTypeDependencies } from './collection-type';
2
2
  import { Dependencies as PrimitiveDependencies } from './primitive';
3
3
  import { Dependencies as StoreDependencies } from './store';
4
4
  type Dependencies = CollectionTypeDependencies & PrimitiveDependencies & StoreDependencies;
5
- export { initCollectionHtmlTransformers, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type';
5
+ export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type';
6
6
  export { HtmlContainer, initContainerTransformers } from './container';
7
7
  export { initBigintHtmlTransformers, initBooleanHtmlTransformers, initBooleanSqlTransformers, initDateHtmlTransformers, initDefaultHtmlEditTransformers, initNumberHtmlTransformers, initPrimitiveTransformers, setCorePrimitiveDependencies, setPrimitiveDependencies } from './primitive';
8
8
  export { initStoreHtmlTransformers, initStoreSqlTransformers, initStoreTransformers, setStoreDependencies, setStoreSqlDependencies, setStoreHtmlDependencies } from './store';
@@ -2,7 +2,7 @@ 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, initCollectionSqlTransformers, initCollectionTransformers } from './collection-type.js';
5
+ export { initCollectionHtmlTransformers, initCollectionTransformers } from './collection-type.js';
6
6
  export { HtmlContainer, initContainerTransformers } from './container.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';
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 = (value !== undefined) ? ` value="${value}"` : '';
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: (value) => (value === '') ? undefined : +value },
77
- { format: HTML, direction: OUTPUT, transformer: (value) => (value === undefined) ? '' : ('' + value) },
78
- { format: SQL, direction: READ, transformer: (value) => (value === null) ? undefined : value }
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
- if ((fieldId in data)
51
- && ((propertyId in object)
52
- ? (data[fieldId] !== object[propertyId] + '')
53
- : (data[fieldId] !== value?.id + ''))) {
54
- delete object[property];
55
- const id = +data[fieldId];
56
- if (id) {
57
- Object.assign(object, { [propertyId]: id });
58
- }
59
- else if ((typeof value === 'object')) {
60
- Object.assign(object, { [property]: value });
61
- }
62
- else if ((typeof value === 'string') && (value !== '')) {
63
- const reflectProperty = new ReflectProperty(object, property);
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
@@ -48,5 +48,5 @@
48
48
  "build:esm": "tsc -p tsconfig.esm.json && node esm/esm"
49
49
  },
50
50
  "types": "./esm/core-transformers.d.ts",
51
- "version": "0.0.10"
51
+ "version": "0.0.12"
52
52
  }