/** * Returns a string representing a unique id for a monitored block * where a single reporter block can have more than one monitor * (and therefore more than one monitor block) associated * with it (e.g. when reporter blocks have inputs). * @param {string} baseId The base id to use for the different monitor blocks * @param {object} fields The monitor block's fields object. */ // TODO this function should eventually be the single place where all monitor // IDs are obtained given an opcode for the reporter block and the list of // selected parameters. const getMonitorIdForBlockWithArgs = function (id, fields) { let fieldString = ''; for (const fieldKey in fields) { let fieldValue = fields[fieldKey].value; if (fieldKey === 'CURRENTMENU') { // The 'sensing_current' block has field values in all caps. // However, when importing from scratch 2.0, these // could have gotten imported as lower case field values. // Normalize the field value here so that we don't ever // end up with a different monitor ID representing the same // block configuration // Note: we are not doing this for every block field that comes into // this function so as not to make the faulty assumption that block // field values coming in would be unique after being made lower case fieldValue = fieldValue.toLowerCase(); } fieldString += `_${fieldValue}`; } return `${id}${fieldString}`; }; module.exports = getMonitorIdForBlockWithArgs;