UNPKG

@itrocks/core-transformers

Version:

Prefabricated HTML and SQL data transformers for it.rocks primitives and basic types

156 lines 7.41 kB
"use strict"; 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