export const createFieldsForUpdate = ( columnField: Record, configOpt: CanonicalConfigOption, oldFields: Record, allDerivedData: Record ): SettingsExecute => { let fields: Record = {}; let dependencyFields: string[] = []; Object.keys(columnField).forEach((k) => { let column = configOpt.columns.find((c) => c.id === k); if (!column) { return; } if (configOpt.primary_key != column.id && column.ignored_for.includes('Update')) { return; } let dispatchType = getDispatchType(columnField, column); let referencedVariables = dispatchType.referenced_variables; //logger.debug('editRow', 'Referenced variables', referencedVariables, k); // Ignore unchanged fields that are not the primary key if (isEqual(columnField[k], oldFields[k]) && k != configOpt.primary_key) { return; } // Check if isCleared if (allDerivedData[k]?.isCleared) { fields[k] = null; } else { fields[k] = columnField[k]; } // Add to dependencyFields if (referencedVariables) { dependencyFields.push( ...referencedVariables.filter((v) => !dependencyFields.includes(v)) ); } }); logger.info('editRow', 'Dependency fields', dependencyFields); // Add all dependency fields to the edit dependencyFields.forEach((k) => { let column = configOpt.columns.find((c) => c.id === k); if (!column) { return; } if (configOpt.primary_key != column.id && column.ignored_for.includes('Update')) { return; } if (!columnField[k]) { fields[k] = null; } else { fields[k] = columnField[k]; } }); let payload: SettingsExecute = { operation: 'Update', module: module.id, setting: configOpt.id, fields }; return payload; }