UNPKG

@itrocks/core-transformers

Version:

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

87 lines 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setStoreSqlDependencies = exports.setStoreHtmlDependencies = void 0; exports.initStoreHtmlTransformers = initStoreHtmlTransformers; exports.initStoreSqlTransformers = initStoreSqlTransformers; exports.initStoreTransformers = initStoreTransformers; exports.setStoreDependencies = setStoreDependencies; const class_type_1 = require("@itrocks/class-type"); const reflect_1 = require("@itrocks/reflect"); const storage_1 = require("@itrocks/storage"); 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, fieldIdOf: property => property, fieldNameOf: property => property, ignoreTransformedValue: Symbol('ignoreTransformedValue'), representativeValueOf: object => (0, class_type_1.baseType)((0, class_type_1.typeOf)(object)).name, routeOf: type => '/' + (0, class_type_1.baseType)(type).name, tr: text => text }; function initStoreHtmlTransformers(target) { (0, transformer_1.setPropertyTypeTransformer)(target, transformer_2.HTML, transformer_2.EDIT, storeEdit); (0, transformer_1.setPropertyTypeTransformer)(target, transformer_2.HTML, transformer_3.INPUT, storeInput); (0, transformer_1.setPropertyTypeTransformer)(target, transformer_2.HTML, transformer_3.OUTPUT, storeOutput); } function initStoreSqlTransformers(target) { (0, transformer_1.setPropertyTypeTransformer)(target, transformer_3.SQL, transformer_3.SAVE, storeSave); } function initStoreTransformers(target) { initStoreHtmlTransformers(target); initStoreSqlTransformers(target); } function setStoreDependencies(dependencies) { Object.assign(depends, dependencies); } exports.setStoreHtmlDependencies = setStoreDependencies; exports.setStoreSqlDependencies = setStoreDependencies; function storeEdit(value, object, property) { const fieldName = depends.fieldNameOf(property); const fieldId = depends.fieldIdOf(property); const type = new reflect_1.ReflectProperty(object, property).type.type; const textValue = value ? depends.representativeValueOf(value) : ''; const fetch = depends.routeOf(type) + '/summary'; const label = `<label for="${fieldId}">${depends.tr(depends.displayOf(object, property))}</label>`; const name = `id="${fieldId}" name="${fieldName}"`; const inputValue = (textValue === '') ? '' : ` value="${textValue}"`; const input = `<input data-fetch="${fetch}" data-type="object" ${name}${inputValue}>`; const inputId = `<input id="${fieldId}-id" name="${fieldName}_id" type="hidden" value="${value?.id}">`; return label + lfTab + input + inputId; } function storeInput(value, object, property, data) { const propertyId = property + 'Id'; const fieldId = depends.fieldNameOf(propertyId); const id = +data[fieldId]; if (id === ((propertyId in object) ? object[propertyId] : value?.id)) { return depends.ignoreTransformedValue; } delete object[property]; if (id) { Object.assign(object, { [propertyId]: id }); } else if ((typeof value === 'object')) { Object.assign(object, { [property]: value }); } else if ((typeof value === 'string') && (value !== '')) { const reflectProperty = new reflect_1.ReflectProperty(object, property); Object.assign(object, { [property]: new reflectProperty.type.type(value) }); } return depends.ignoreTransformedValue; } function storeOutput(value) { return value ? depends.representativeValueOf(value) : ''; } async function storeSave(value, _object, property, record) { const dao = (0, storage_1.dataSource)(); if (value && !dao.isObjectConnected(value)) { await dao.save(value); } const columnId = property + '_id'; const id = (value && dao.isObjectConnected(value)) ? value.id : record[columnId]; record[columnId] = id ?? null; return depends.ignoreTransformedValue; } //# sourceMappingURL=store.js.map