UNPKG

@atlaskit/editor-plugin-caption

Version:

Caption plugin for @atlaskit/editor-core

50 lines (49 loc) 2.22 kB
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics'; import { SafePlugin } from '@atlaskit/editor-common/safe-plugin'; import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils'; import captionNodeView from '../nodeviews'; import { pluginKey } from './plugin-key'; var fireAnalytics = function fireAnalytics(tr, action, analyticsApi) { analyticsApi === null || analyticsApi === void 0 || analyticsApi.attachAnalyticsEvent({ action: action, eventType: EVENT_TYPE.TRACK, actionSubject: ACTION_SUBJECT.MEDIA_SINGLE, actionSubjectId: ACTION_SUBJECT_ID.CAPTION })(tr); }; export default (function (portalProviderAPI, eventDispatcher, providerFactory, dispatch, pluginInjectionApi) { var _pluginInjectionApi$a; var analyticsApi = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a === void 0 ? void 0 : _pluginInjectionApi$a.actions; return new SafePlugin({ appendTransaction: function appendTransaction(transactions, oldState, newState) { // only run for transactions that change selection if (!transactions.find(function (tr) { return tr.selectionSet; })) { return; } var newSelection = !newState.selection.eq(oldState.selection); var findCaption = findParentNodeOfType(oldState.schema.nodes.caption); var oldSelectionCaption = findCaption(oldState.selection); var tr = newState.tr; // if selecting away from caption, or selecting a different caption if (newSelection && oldSelectionCaption) { if (oldSelectionCaption.node.childCount === 0) { tr.delete(oldSelectionCaption.start - 1, oldSelectionCaption.start); tr.setMeta('scrollIntoView', false); fireAnalytics(tr, ACTION.DELETED, analyticsApi); return tr; } else { fireAnalytics(tr, ACTION.EDITED, analyticsApi); return tr; } } }, key: pluginKey, props: { nodeViews: { caption: captionNodeView(portalProviderAPI, eventDispatcher, pluginInjectionApi) } } }); });