@itrocks/core-transformers
Version:
Prefabricated HTML and SQL data transformers for it.rocks primitives and basic types
87 lines • 4.16 kB
JavaScript
;
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: async (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;
async 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 ? await 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;
}
async function storeOutput(value) {
return value ? await 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