@atlaskit/editor-plugin-metrics
Version:
Metrics plugin for @atlaskit/editor-core
28 lines • 882 B
JavaScript
function countNodesByType(fragment) {
const counts = {};
fragment.forEach(node => {
counts[node.type.name] = (counts[node.type.name] || 0) + 1;
});
return counts;
}
export const getNodeChanges = ({
currentContent,
pluginState
}) => {
if (pluginState !== null && pluginState !== void 0 && pluginState.initialContent) {
const initialCounts = countNodesByType(pluginState.initialContent);
const currentCounts = countNodesByType(currentContent);
const netChanges = Object.keys({
...initialCounts,
...currentCounts
}).filter(value => !['paragraph', 'heading'].includes(value)).reduce((changes, nodeType) => {
const change = (currentCounts[nodeType] || 0) - (initialCounts[nodeType] || 0);
if (change !== 0) {
changes[nodeType] = change;
}
return changes;
}, {});
return netChanges;
}
return {};
};