@itrocks/core-transformers
Version:
Prefabricated HTML and SQL data transformers for it.rocks primitives and basic types
156 lines • 7.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initBigintHtmlTransformers = initBigintHtmlTransformers;
exports.initBooleanHtmlTransformers = initBooleanHtmlTransformers;
exports.initBooleanSqlTransformers = initBooleanSqlTransformers;
exports.initDateHtmlTransformers = initDateHtmlTransformers;
exports.initNumberHtmlTransformers = initNumberHtmlTransformers;
exports.initDefaultHtmlEditTransformers = initDefaultHtmlEditTransformers;
exports.initPrimitiveTransformers = initPrimitiveTransformers;
exports.setCorePrimitiveDependencies = setCorePrimitiveDependencies;
exports.setPrimitiveDependencies = setPrimitiveDependencies;
const precision_1 = require("@itrocks/precision");
const transformer_1 = require("@itrocks/transformer");
const transformer_2 = require("@itrocks/transformer");
const transformer_3 = require("@itrocks/transformer");
const lfTab = '\n\t\t\t\t';
const depends = {
displayOf: (_object, property) => property,
formatDate: date => date.toString(),
fieldIdOf: property => property,
fieldNameOf: property => property,
parseDate: date => new Date(date),
tr: text => text
};
// Bigint
function initBigintHtmlTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(BigInt, [
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer: (value) => BigInt(value) }
]);
}
// Boolean
function booleanEdit(value, type, property) {
const fieldId = depends.fieldIdOf(property);
const fieldName = depends.fieldNameOf(property);
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
const name = `id="${fieldId}" name="${fieldName}"`;
const hidden = `<input name="${fieldName}" type="hidden" value="0">`;
const checked = value ? 'checked ' : '';
const checkbox = `<input ${checked}${name} type="checkbox" value="1">`;
return label + lfTab + hidden + lfTab + checkbox;
}
const booleanInput = (value) => !['', '0', 'false', 'no', depends.tr('false'), depends.tr('no')].includes(value);
function initBooleanHtmlTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(Boolean, [
{ format: transformer_2.HTML, direction: transformer_2.EDIT, transformer: booleanEdit },
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer: booleanInput },
{ format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer: (value) => value ? depends.tr('yes') : depends.tr('no') }
]);
}
function initBooleanSqlTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(Boolean, [
{ format: transformer_3.SQL, direction: transformer_3.READ, transformer: (value) => !!value },
{ format: transformer_3.SQL, direction: transformer_3.SAVE, transformer: (value) => +value }
]);
}
// Date
function dateEdit(value, type, property) {
const fieldId = depends.fieldIdOf(property);
const fieldName = depends.fieldNameOf(property);
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
const name = `id="${fieldId}" name="${fieldName}"`;
const inputValue = value ? ` value="${depends.formatDate(value)}"` : '';
const input = `<input data-type="date" ${name}${inputValue}>`;
return label + lfTab + input;
}
const dateInput = (value) => depends.parseDate(value);
const dateOutput = (value) => value ? depends.formatDate(value) : '';
function initDateHtmlTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(Date, [
{ format: transformer_2.HTML, direction: transformer_2.EDIT, transformer: dateEdit },
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer: dateInput },
{ format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer: dateOutput }
]);
}
// Number
function numberEdit(value, type, property) {
const output = numberOutput(value, type, property);
const fieldId = depends.fieldIdOf(property);
const fieldName = depends.fieldNameOf(property);
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
const name = `id="${fieldId}" name="${fieldName}"`;
const inputValue = (output !== undefined) ? ` value="${output}"` : '';
const input = `<input data-type="number" ${name}${inputValue}>`;
return label + lfTab + input;
}
function numberInput(value) {
const number = (value === '') ? undefined : +(value.replace(/\s/g, '').replace(',', '.'));
if (!Number.isNaN(number))
return number;
const endChar = value[value.length - 1].toUpperCase();
if (endChar === 'K')
return (+value.slice(0, -1)) * 1e3;
if (endChar === 'M')
return (+value.slice(0, -1)) * 1e6;
if (endChar === 'G')
return (+value.slice(0, -2)) * 1e9;
if (endChar === 'T')
return (+value.slice(0, -2)) * 1e12;
if (endChar === 'P')
return (+value.slice(0, -2)) * 1e15;
if ((endChar === 'D') && (value[value.length - 2] === 'M'))
return (+value.slice(0, -2)) * 10 ** 9;
return number;
}
function numberOutput(value, object, property) {
if (value === undefined)
return '';
const precision = (0, precision_1.precisionOf)(object, property);
return value.toLocaleString('fr-FR', {
minimumFractionDigits: precision.minimum,
maximumFractionDigits: precision.maximum
});
}
function numberRead(value) {
return (typeof value === 'string') ? +value : (value ?? undefined);
}
function initNumberHtmlTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(Number, [
{ format: transformer_2.HTML, direction: transformer_2.EDIT, transformer: numberEdit },
{ format: transformer_2.HTML, direction: transformer_2.INPUT, transformer: numberInput },
{ format: transformer_2.HTML, direction: transformer_2.OUTPUT, transformer: numberOutput },
{ format: transformer_3.SQL, direction: transformer_3.READ, transformer: numberRead }
]);
}
// default
function defaultEdit(value, type, property) {
const fieldId = depends.fieldIdOf(property);
const fieldName = depends.fieldNameOf(property);
const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(type, property))}</label>`;
const name = `id="${fieldId}" name="${fieldName}"`;
const inputValue = value ? ` value="${value}"` : '';
const input = `<input ${name}${inputValue}>`;
return label + lfTab + input;
}
function initDefaultHtmlEditTransformers() {
(0, transformer_1.setPropertyTypeTransformers)(null, [{ format: transformer_2.HTML, direction: transformer_2.EDIT, transformer: defaultEdit }]);
}
// all
function initPrimitiveTransformers(dependencies = {}) {
setPrimitiveDependencies(dependencies);
initBigintHtmlTransformers();
initBooleanSqlTransformers();
initBooleanHtmlTransformers();
initDateHtmlTransformers();
initNumberHtmlTransformers();
initDefaultHtmlEditTransformers();
}
// Initialize dependencies required by all core primitive transformers except Date
function setCorePrimitiveDependencies(dependencies) {
Object.assign(depends, dependencies);
}
// Initialize dependencies required by all core primitive transformers, including Date
function setPrimitiveDependencies(dependencies) {
Object.assign(depends, dependencies);
}
//# sourceMappingURL=primitive.js.map