tuain-ng-forms-lib
Version:
Componentes y Clases Angular para la gestión de formularios TUAIN
116 lines • 17.4 kB
JavaScript
import { ComparisonOperator } from '../form.constants';
export class TableRecordData {
recordId = null;
selected = false;
recordData = {};
constructor(recordReceived, recordDefinition, selectionFieldName = null) {
const { tableRecordId, recordData } = recordReceived;
this.recordId = tableRecordId;
if (!recordDefinition || recordDefinition.length === 0 || !recordData || recordData.length === 0) {
return;
}
const fieldNames = recordDefinition.map(column => column.fieldCode);
if (Array.isArray(recordData)) {
const rawRecordData = recordData.filter(fieldData => fieldData.fieldCode && fieldNames.includes(fieldData.fieldCode));
rawRecordData.forEach(fieldData => {
const { fieldCode, fieldValue } = fieldData;
const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);
this.recordData[fieldCode] = fieldValue ?? '';
if (fieldCode === selectionFieldName) {
this.selected = fieldValue;
}
});
}
else {
const fields = Object.keys(recordData);
fields.forEach(fieldCode => {
const fieldValue = recordData[fieldCode];
const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);
this.recordData[fieldCode] = fieldValue ?? '';
});
}
}
toggleSelect() { this.selected = !this.selected; }
select() { this.selected = true; }
unselect() { this.selected = false; }
get recordIdKey() {
return (typeof this.recordId === 'object')
? JSON.stringify(this.recordId) : this.recordId;
}
getFieldValue(fieldCode) {
return (fieldCode && this.recordData) ? this.recordData[fieldCode] : null;
}
hasPattern(words, columnObj) {
if (!words || words.length === 0) {
return true;
}
for (const word of words) {
let wordIsPresent = false;
for (const fieldCode in this.recordData) {
const columnDef = columnObj?.[fieldCode];
if (columnDef?.searchable && this.recordData.hasOwnProperty(fieldCode)) {
const term = word.toUpperCase();
let fieldValue;
if (columnDef.fieldType.toUpperCase().includes('DATE')) {
fieldValue = this.recordData[fieldCode].substring(0, 16);
}
else {
fieldValue = this.recordData[fieldCode];
}
if (fieldValue.toString().toUpperCase().includes(term)) {
wordIsPresent = true;
break;
}
}
}
if (!wordIsPresent) {
return false;
}
}
return true;
}
hasCondition(columnFilters) {
if (!columnFilters || columnFilters.length === 0) {
return true;
}
for (const condition of columnFilters) {
const { fieldCode, operator, values } = condition;
if (this.recordData.hasOwnProperty(fieldCode)) {
const fieldValue = this.recordData[fieldCode];
const stringValue = fieldValue.toString().toUpperCase();
if (operator === ComparisonOperator.G && fieldValue <= values[0]) {
return false;
}
if (operator === ComparisonOperator.L && fieldValue >= values[0]) {
return false;
}
if (operator === ComparisonOperator.GE && fieldValue < values[0]) {
return false;
}
if (operator === ComparisonOperator.LE && fieldValue > values[0]) {
return false;
}
if (operator === ComparisonOperator.IN && !values.includes(fieldValue)) {
return false;
}
if (operator === ComparisonOperator.EQ) {
return fieldValue === values[0];
}
if (operator === ComparisonOperator.NEQ && fieldValue === values[0]) {
return false;
}
if (operator === ComparisonOperator.HAS && !stringValue.includes(values[0].toString().toUpperCase())) {
return false;
}
if (operator === ComparisonOperator.NOTHAS && stringValue.includes(values[0].toString().toUpperCase())) {
return false;
}
if (operator === ComparisonOperator.BETWEEN && (fieldValue < values[0] || fieldValue > values[1])) {
return false;
}
}
}
return true;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3RhYmxlL3Jvdy1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBQy9CLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsVUFBVSxHQUF3QixFQUFFLENBQUM7SUFFckMsWUFBWSxjQUFtQixFQUFFLGdCQUFxQyxFQUFFLHFCQUFvQyxJQUFJO1FBQzlHLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsY0FBYyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakcsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN0SCxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNo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LFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDdkcsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxJQUFJLFFBQVEsS0FBSyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY29yZFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4nO1xuaW1wb3J0IHsgQ29tcGFyaXNvbk9wZXJhdG9yIH0gZnJvbSAnLi4vZm9ybS5jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVSZWNvcmREYXRhIHtcbiAgcmVjb3JkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZWNvcmREYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgY29uc3RydWN0b3IocmVjb3JkUmVjZWl2ZWQ6IGFueSwgcmVjb3JkRGVmaW5pdGlvbjogUmVjb3JkVGFibGVDb2x1bW5bXSwgc2VsZWN0aW9uRmllbGROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHsgdGFibGVSZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gcmVjb3JkUmVjZWl2ZWQ7XG4gICAgdGhpcy5yZWNvcmRJZCA9IHRhYmxlUmVjb3JkSWQ7XG4gICAgaWYgKCFyZWNvcmREZWZpbml0aW9uIHx8IHJlY29yZERlZmluaXRpb24ubGVuZ3RoID09PSAwIHx8ICFyZWNvcmREYXRhIHx8IHJlY29yZERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSByZWNvcmREZWZpbml0aW9uLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkQ29kZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkRGF0YSkpIHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZERhdGEgPSByZWNvcmREYXRhLmZpbHRlcihmaWVsZERhdGEgPT4gZmllbGREYXRhLmZpZWxkQ29kZSAmJiBmaWVsZE5hbWVzLmluY2x1ZGVzKGZpZWxkRGF0YS5maWVsZENvZGUpKTtcbiAgICAgIHJhd1JlY29yZERhdGEuZm9yRWFjaChmaWVsZERhdGEgPT4ge1xuICAgICAgICBjb25zdCB7IGZpZWxkQ29kZSwgZmllbGRWYWx1ZSB9ID0gZmllbGREYXRhO1xuICAgICAgICBjb25zdCBmaWVsZERlZiA9IHJlY29yZERlZmluaXRpb24uZmluZChjb2x1bW4gPT4gY29sdW1uLmZpZWxkQ29kZSA9PT0gZmllbGRDb2RlKTtcbiAgICAgICAgdGhpcy5yZWNvcmREYXRhW2ZpZWxkQ29kZV0gPSBmaWVsZFZhbHVlID8/ICcnO1xuICAgICAgICBpZiAoZmllbGRDb2RlID09PSBzZWxlY3Rpb25GaWVsZE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmllbGRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKHJlY29yZERhdGEpO1xuICAgICAgZmllbGRzLmZvckVhY2goZmllbGRDb2RlID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlY29yZERhdGFbZmllbGRDb2RlXTtcbiAgICAgICAgY29uc3QgZmllbGREZWYgPSByZWNvcmREZWZpbml0aW9uLmZpbmQoY29sdW1uID0+IGNvbHVtbi5maWVsZENvZGUgPT09IGZpZWxkQ29kZSk7XG4gICAgICAgIHRoaXMucmVjb3JkRGF0YVtmaWVsZENvZGVdID0gZmllbGRWYWx1ZSA/PyAnJztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdCgpIHsgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOyB9XG4gIHNlbGVjdCgpIHsgdGhpcy5zZWxlY3RlZCA9IHRydWU7IH1cbiAgdW5zZWxlY3QoKSB7IHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTsgfVxuXG4gIGdldCByZWNvcmRJZEtleSgpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLnJlY29yZElkID09PSAnb2JqZWN0JylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5yZWNvcmRJZCkgOiB0aGlzLnJlY29yZElkO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShmaWVsZENvZGU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIChmaWVsZENvZGUgJiYgdGhpcy5yZWNvcmREYXRhKSA/IHRoaXMucmVjb3JkRGF0YVtmaWVsZENvZGVdIDogbnVsbDtcbiAgfVxuXG4gIGhhc1BhdHRlcm4od29yZHM6IHN0cmluZ1tdLCBjb2x1bW5PYmo6IGFueSkge1xuICAgIGlmICghd29yZHMgfHwgd29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICBsZXQgd29yZElzUHJlc2VudCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgaW4gdGhpcy5yZWNvcmREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZiA9IGNvbHVtbk9iaj8uW2ZpZWxkQ29kZV07XG4gICAgICAgIGlmIChjb2x1bW5EZWY/LnNlYXJjaGFibGUgJiYgdGhpcy5yZWNvcmREYXRhLmhhc093blByb3BlcnR5KGZpZWxkQ29kZSkpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtID0gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGxldCBmaWVsZFZhbHVlO1xuICAgICAgICAgIGlmIChjb2x1bW5EZWYuZmllbGRUeXBlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoJ0RBVEUnKSkge1xuICAgICAgICAgICAgZmllbGRWYWx1ZSA9IHRoaXMucmVjb3JkRGF0YVtmaWVsZENvZGVdLnN1YnN0cmluZygwLCAxNik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkVmFsdWUgPSB0aGlzLnJlY29yZERhdGFbZmllbGRDb2RlXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkVmFsdWUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKSB7XG4gICAgICAgICAgICB3b3JkSXNQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF3b3JkSXNQcmVzZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYXNDb25kaXRpb24oY29sdW1uRmlsdGVyczogYW55W10pIHtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcnMgfHwgY29sdW1uRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb2x1bW5GaWx0ZXJzKSB7XG4gICAgICBjb25zdCB7IGZpZWxkQ29kZSwgb3BlcmF0b3IsIHZhbHVlcyB9ID0gY29uZGl0aW9uO1xuICAgICAgaWYgKHRoaXMucmVjb3JkRGF0YS5oYXNPd25Qcm9wZXJ0eShmaWVsZENvZGUpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLnJlY29yZERhdGFbZmllbGRDb2RlXTtcbiAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBmaWVsZFZhbHVlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBDb21wYXJpc29uT3BlcmF0b3IuRyAmJiBmaWVsZFZhbHVlIDw9IHZhbHVlc1swXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0b3IgPT09IENvbXBhcmlzb25PcGVyYXRvci5MICYmIGZpZWxkVmFsdWUgPj0gdmFsdWVzWzBdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gQ29tcGFyaXNvbk9wZXJhdG9yLkdFICYmIGZpZWxkVmFsdWUgPCB2YWx1ZXNbMF0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBDb21wYXJpc29uT3BlcmF0b3IuTEUgJiYgZmllbGRWYWx1ZSA+IHZhbHVlc1swXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0b3IgPT09IENvbXBhcmlzb25PcGVyYXRvci5JTiAmJiAhdmFsdWVzLmluY2x1ZGVzKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gQ29tcGFyaXNvbk9wZXJhdG9yLkVRKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUgPT09IHZhbHVlc1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0b3IgPT09IENvbXBhcmlzb25PcGVyYXRvci5ORVEgJiYgZmllbGRWYWx1ZSA9PT0gdmFsdWVzWzBdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gQ29tcGFyaXNvbk9wZXJhdG9yLkhBUyAmJiAhc3RyaW5nVmFsdWUuaW5jbHVkZXModmFsdWVzWzBdLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBDb21wYXJpc29uT3BlcmF0b3IuTk9USEFTICYmIHN0cmluZ1ZhbHVlLmluY2x1ZGVzKHZhbHVlc1swXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gQ29tcGFyaXNvbk9wZXJhdG9yLkJFVFdFRU4gJiYgKGZpZWxkVmFsdWUgPCB2YWx1ZXNbMF0gfHwgZmllbGRWYWx1ZSA+IHZhbHVlc1sxXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==