@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
45 lines (44 loc) • 2.04 kB
TypeScript
import type { Transaction, Selection } from '@atlaskit/editor-prosemirror/state';
import type { AnalyticsEventPayload } from './types/events';
export type FireAnalyticsEventOptions = {
context?: {
selection: Selection;
};
immediate?: boolean;
};
export type BaseEventPayload = {
action: string;
actionSubject: string;
actionSubjectId?: string | null;
attributes?: {
[key: string]: any;
};
eventType: string;
};
export type EditorAnalyticsAPI = {
/**
* attachAnalyticsEvent is used to attach an analytics payloads to a transaction
*
* @param {AnalyticsEventPayload} payload - analytics payload
* @param {string} [channel="editor"] - optional channel identifier
* @param {Transaction} tr - a transaction
* @returns {boolean} true if submitted successful, false if not submitted
*/
attachAnalyticsEvent: (payload: AnalyticsEventPayload, channel?: string) => (tr: Transaction) => boolean;
/**
* fireAnalyticsEvent is used to fire an analytics payloads directly
*
* @param {AnalyticsEventPayload} payload - analytics payload
* @param {string} [channel="editor"] - optional channel identifier
* @param {object} [options] - optional options object
* @param {boolean} [options.immediate] - if true, fire the event immediately
* @param {object} [options.context] - optional context object will include the selection data.
*
* @example
* You can also pass custom events using a special type signature:
* ```ts
* editorAnalyticsAPI.fireAnalyticsEvent<CustomEventType, 'customEventType'>(...);
* ```
*/
fireAnalyticsEvent: (<Payload extends BaseEventPayload, CustomEventType extends 'customEventType' | false = false>(payload: CustomEventType extends 'customEventType' ? Payload : never, channel?: string, options?: FireAnalyticsEventOptions) => void | undefined) & ((payload: AnalyticsEventPayload, channel?: string, options?: FireAnalyticsEventOptions) => void | undefined);
};