in src/reducers/vis-state-merger.js [188:245]
export function mergeInteractions(state, interactionToBeMerged) {
const merged = {};
const unmerged = {};
if (interactionToBeMerged) {
Object.keys(interactionToBeMerged).forEach(key => {
if (!state.interactionConfig[key]) {
return;
}
const currentConfig = state.interactionConfig[key].config;
const {enabled, ...configSaved} = interactionToBeMerged[key] || {};
let configToMerge = configSaved;
if (key === 'tooltip') {
const {mergedTooltip, unmergedTooltip} = mergeInteractionTooltipConfig(state, configSaved);
// merge new dataset tooltips with original dataset tooltips
configToMerge = {
fieldsToShow: {
...currentConfig.fieldsToShow,
...mergedTooltip
}
};
if (Object.keys(unmergedTooltip).length) {
unmerged.tooltip = {fieldsToShow: unmergedTooltip, enabled};
}
}
merged[key] = {
...state.interactionConfig[key],
enabled,
...(currentConfig
? {
config: pick(
{
...currentConfig,
...configToMerge
},
Object.keys(currentConfig)
)
}
: {})
};
});
}
return {
...state,
interactionConfig: {
...state.interactionConfig,
...merged
},
interactionToBeMerged: unmerged
};
}