UNPKG

@atlaskit/editor-plugin-list

Version:

List plugin for @atlaskit/editor-core

53 lines (52 loc) 2.22 kB
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD, JOIN_SCENARIOS_WHEN_TYPING_TO_INSERT_LIST } from '@atlaskit/editor-common/analytics'; import { inputRuleWithAnalytics as ruleWithAnalytics } from '@atlaskit/editor-common/utils'; import { createWrappingJoinRule } from './wrapping-join-rule'; var getOrder = function getOrder(matchResult) { return Number(matchResult[1]); }; export function createRuleForListType(_ref) { var listType = _ref.listType, expression = _ref.expression, editorAnalyticsApi = _ref.editorAnalyticsApi; var joinScenario = JOIN_SCENARIOS_WHEN_TYPING_TO_INSERT_LIST.NO_JOIN; var isBulletList = listType.name === 'bulletList'; var actionSubjectId = isBulletList ? ACTION_SUBJECT_ID.FORMAT_LIST_BULLET : ACTION_SUBJECT_ID.FORMAT_LIST_NUMBER; var getAnalyticsPayload = function getAnalyticsPayload(state, matchResult) { var analyticsPayload = { action: ACTION.INSERTED, actionSubject: ACTION_SUBJECT.LIST, actionSubjectId: actionSubjectId, eventType: EVENT_TYPE.TRACK, attributes: { inputMethod: INPUT_METHOD.FORMATTING } }; if (listType === state.schema.nodes.orderedList && analyticsPayload.attributes) { analyticsPayload.attributes.listStartNumber = getOrder(matchResult); analyticsPayload.attributes.joinScenario = joinScenario; // we reset the tracked joinScenario after storing it in the event payload joinScenario = JOIN_SCENARIOS_WHEN_TYPING_TO_INSERT_LIST.NO_JOIN; } return analyticsPayload; }; var joinToNeighbourIfSameListType = function joinToNeighbourIfSameListType(_, node, scenario) { var shouldJoin = node.type === listType; if (shouldJoin) { joinScenario = scenario; } return shouldJoin; }; // eslint-disable-next-line @typescript-eslint/no-explicit-any var getAttrs = function getAttrs(matchResult) { return { order: getOrder(matchResult) }; }; var inputRule = createWrappingJoinRule({ match: expression, nodeType: listType, getAttrs: getAttrs, joinPredicate: joinToNeighbourIfSameListType }); return ruleWithAnalytics(getAnalyticsPayload, editorAnalyticsApi)(inputRule); }