@cobuildlab/8base-utils
Version:
This is package to deal with common scenarios working with 8base platform
184 lines (183 loc) • 7.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalize8baseDocumentsDeleteAndUpdate = exports.normalize8baseDocumentDeleteAndUpdate = exports.normalize8baseDocumentsCreateItems = exports.normalize8baseDocumentsCreate = exports.normalize8baseDocumentCreate = void 0;
var validation_utils_1 = require("@cobuildlab/validation-utils");
var utils_1 = require("./utils");
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* Helper to change non null keys to 8base 'create' reference for files.
* If the value of the key is undefined or null, the property gets deleted from the object.
* WARNING: This function mutates the data.
* WARNING: This functions assumes that all 8base keys are strings.
*
* @param {object} data - The Object to be Mutated.
* @param {string} key - The key in the Object.
*/
exports.normalize8baseDocumentCreate = function (data, key) {
utils_1._validateNullOrUndefinedOrBlank(key, 'normalize8baseDocumentCreate:key');
var currentValue = data[key];
if (validation_utils_1.isNullOrUndefined(currentValue)) {
delete data[key];
return;
}
utils_1._validateFile(currentValue, 'normalize8baseDocumentCreate:currentValue');
data[key] = {
create: { fileId: currentValue.fileId, filename: currentValue.filename },
};
};
/**
* Helper to change non null keys to 8base 'create' reference for files.
* WARNING: This function mutates the data.
* WARNING: This functions assumes that all 8base keys are strings.
*
* @param {object} data - The Object to be Mutated.
* @param {string} key - The key in the Object.
*/
exports.normalize8baseDocumentsCreate = function (data, key) {
utils_1._validateNullOrUndefinedOrBlank(key, 'normalize8baseDocumentsCreate:key');
var currentValues = data[key];
if (validation_utils_1.isNullOrUndefined(currentValues)) {
delete data[key];
return;
}
utils_1._validateFiles(currentValues, 'normalize8baseDocumentsCreate:currentValues');
if (currentValues.length === 0) {
delete data[key];
return;
}
var documents = [];
for (var _i = 0, currentValues_1 = currentValues; _i < currentValues_1.length; _i++) {
var file = currentValues_1[_i];
utils_1._validateFile(file, 'normalize8baseDocumentsCreate:file.fileId');
documents.push({ fileId: file.fileId, filename: file.filename });
}
data[key] = { create: documents };
};
/**
* Helper to change non null keys to 8base 'create' reference for files.
* // USE this for { items: [] } models.
* WARNING: This function mutates the data.
* WARNING: This functions assumes that all 8base keys are strings.
*
* @param {object} data - The Object to be Mutated.
* @param {string} key - The key in the Object.
*/
exports.normalize8baseDocumentsCreateItems = function (data, key) {
utils_1._validateNullOrUndefinedOrBlank(key, 'normalize8baseDocumentsCreateItems:key');
var value = data[key];
if (validation_utils_1.isNullOrUndefined(value)) {
delete data[key];
return;
}
var currentValues = value.items;
if (validation_utils_1.isNullOrUndefined(currentValues)) {
delete data[key];
return;
}
utils_1._validateFiles(currentValues, 'normalize8baseDocumentsCreateItems:currentValues');
if (currentValues.length === 0) {
delete data[key];
return;
}
var documents = [];
for (var _i = 0, currentValues_2 = currentValues; _i < currentValues_2.length; _i++) {
var file = currentValues_2[_i];
utils_1._validateFile(file, 'normalize8baseDocumentsCreateItems:file.fileId');
documents.push({ fileId: file.fileId, filename: file.filename });
}
data[key] = { create: documents };
};
/**
* Helper to update or delete one document key from an Object.
* WARNING: This function mutates the data.
*
* @param {object}data - Data for mutation.
* @param {string}key - Key object.
* @param {object}originalData - Original object.
*/
exports.normalize8baseDocumentDeleteAndUpdate = function (data, key, originalData) {
utils_1._validateNullOrUndefinedOrBlank(key, 'normalize8baseDocumentDeleteAndUpdate:key');
var newFile = data[key];
var oldFile = originalData[key];
if (validation_utils_1.isNullOrUndefined(newFile)) {
if (validation_utils_1.isNullOrUndefined(oldFile)) {
delete data[key];
}
else {
utils_1._validateReference(oldFile, 'normalize8baseDocumentDeleteAndUpdate:oldFile');
data[key] = { disconnect: { id: oldFile.id } };
}
return;
}
if (newFile.id) {
delete data[key];
return;
}
utils_1._validateFile(newFile, 'normalize8baseDocumentDeleteAndUpdate:newFile');
if (validation_utils_1.isNullOrUndefined(newFile.id)) {
data[key] = {
create: { fileId: newFile.fileId, filename: newFile.filename },
};
return;
}
delete data[key];
};
/**
* Helper to change non null keys to 8base 'delete & create' reference for Documents Lists
* WARNING: This function mutates the data.
*
* @param {object} data - To mutate.
* @param {string} key - The key of the property to mutate.
* @param {Array} originalData - The documents originals.
*/
exports.normalize8baseDocumentsDeleteAndUpdate = function (data, key, originalData) {
utils_1._validateNullOrUndefinedOrBlank(key, 'normalize8baseDocumentsDeleteAndUpdate:key');
var newFiles = data[key];
var oldFiles = originalData[key];
if (validation_utils_1.isNullOrUndefined(newFiles)) {
if (validation_utils_1.isNullOrUndefined(oldFiles)) {
delete data[key];
}
else {
utils_1._validateReferences(oldFiles, 'normalize8baseDocumentsDeleteAndUpdate:oldFiles');
if (oldFiles.length === 0)
delete data[key];
else
data[key] = {
disconnect: oldFiles.map(function (file) {
return { id: file.id };
}),
};
}
return;
}
utils_1._validateFiles(newFiles, 'normalize8baseDocumentsDeleteAndUpdate:newFiles');
utils_1._validateReferences(oldFiles, 'normalize8baseDocumentsDeleteAndUpdate:oldFiles');
var toBeDeleted = [];
var toBeCreated = [];
newFiles.forEach(function (file) {
if (file.id === undefined)
toBeCreated.push(file);
});
oldFiles.forEach(function (oldFile) {
for (var _i = 0, newFiles_1 = newFiles; _i < newFiles_1.length; _i++) {
var newFile = newFiles_1[_i];
if (newFile.id === oldFile.id)
return;
}
toBeDeleted.push(oldFile);
});
if (toBeCreated.length === 0 && toBeDeleted.length === 0) {
delete data[key];
return;
}
data[key] = {};
if (toBeCreated.length > 0)
data[key].create = toBeCreated.map(function (file) {
return { fileId: file.fileId, filename: file.filename };
});
if (toBeDeleted.length > 0)
data[key].disconnect = toBeDeleted.map(function (file) {
return { id: file.id };
});
};