@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
61 lines • 2.48 kB
JavaScript
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics/types/enums';
import { logException } from '@atlaskit/editor-common/monitoring/error';
const sourceTypeName = sourceNodes => sourceNodes.length === 1 ? sourceNodes[0].type.name : 'multiple';
const sourceNodesCountByType = sourceNodes => {
const counts = {};
for (const node of sourceNodes) {
counts[node.type.name] = (counts[node.type.name] || 0) + 1;
}
return counts;
};
export const createTransformAnalytics = (api, tr, selection) => ({
transformed: (duration, startTime, {
isEmptyLine = false,
isNested,
isSuggested = false,
outputNodesCount,
sourceNodes,
targetNodeType
}) => {
var _api$analytics, _api$analytics$action;
api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : (_api$analytics$action = _api$analytics.actions) === null || _api$analytics$action === void 0 ? void 0 : _api$analytics$action.attachAnalyticsEvent({
action: ACTION.TRANSFORMED,
actionSubject: ACTION_SUBJECT.ELEMENT,
attributes: {
duration,
isEmptyLine,
isNested,
isSuggested,
outputNodesCount,
sourceNodeType: sourceTypeName(sourceNodes),
sourceNodesCount: sourceNodes.length,
sourceNodesCountByType: sourceNodesCountByType(sourceNodes),
startTime,
targetNodeType,
inputMethod: INPUT_METHOD.BLOCK_MENU
},
eventType: EVENT_TYPE.TRACK
})(tr);
},
errored: (error, sourceNodes, to) => {
var _api$analytics2, _api$analytics2$actio;
logException(error, {
location: 'editor-plugin-block-menu'
});
api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : (_api$analytics2$actio = _api$analytics2.actions) === null || _api$analytics2$actio === void 0 ? void 0 : _api$analytics2$actio.attachAnalyticsEvent({
action: ACTION.ERRORED,
actionSubject: ACTION_SUBJECT.ELEMENT,
actionSubjectId: ACTION_SUBJECT_ID.TRANSFORM,
eventType: EVENT_TYPE.OPERATIONAL,
attributes: {
docSize: tr.doc.nodeSize,
error: error.message,
errorStack: error.stack,
from: sourceTypeName(sourceNodes),
inputMethod: INPUT_METHOD.BLOCK_MENU,
selection: selection.toJSON(),
to
}
})(tr);
}
});