Source: utils/flattenObject.js

/**
 * @name flattenObject
 * @memberof utils
 * @function
 * @description
 * Flattens a nested object by transforming its nested properties into dot-separated keys.
 * { a: { b: c }} becomes { 'a.b': c }. Arrays and null values are not flattened.
 *
 * @param {Object} obj - The object to be flattened.
 * @returns {Object} A new object with flattened keys.
 */

export const flattenObject = (obj) => {
    const flattened = {};
    Object.keys(obj).forEach((key) => {
        if (typeof obj[key] === "object" && obj[key] !== null && !Array.isArray(obj[key])) {
            Object.keys(obj[key]).forEach(subKey => {
                flattened[`${key}.${subKey}`] = obj[key][subKey];
            });
        } else {
            flattened[key] = obj[key];
        }
    });
    return flattened;
};