UNPKG

@cobuildlab/8base-utils

Version:

This is package to deal with common scenarios working with 8base platform

184 lines (183 loc) 7.24 kB
"use strict"; 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 }; }); };