@atlaskit/editor-plugin-selection-extension
Version:
editor-plugin-selection-extension plugin for @atlaskit/editor-core
62 lines (60 loc) • 2.06 kB
JavaScript
/**
* @jsxRuntime classic
* @jsx
*/
import React, { useMemo } from 'react';
import { injectIntl } from 'react-intl';
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
import { v4 as uuid } from 'uuid';
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
import { SelectionExtensionDropdownMenu } from './SelectionExtensionDropdownMenu';
const transformExtensionsToItems = extensions => {
const extensionToItems = extensions.map(extension => {
return {
key: extension.id,
content: extension.name,
value: {
name: extension.id
}
};
});
return [{
items: extensionToItems
}];
};
export const SelectionExtensionItemsComponent = ({
extensions,
onExtensionClick,
editorAnalyticsAPI
}) => {
const extensionsWithIdentifier = useMemo(
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
() => extensions.map(extension => ({
...extension,
id: uuid()
})), [extensions]);
const items = useMemo(() => transformExtensionsToItems(extensionsWithIdentifier), [extensionsWithIdentifier]);
const handleOnItemActivated = ({
item
}) => {
const extension = extensionsWithIdentifier.find(ext => ext.id === item.value.name);
if (extension) {
onExtensionClick(extension);
if (editorAnalyticsAPI) {
editorAnalyticsAPI.fireAnalyticsEvent({
action: ACTION.CLICKED,
actionSubject: ACTION_SUBJECT.BUTTON,
actionSubjectId: ACTION_SUBJECT_ID.EDITOR_PLUGIN_SELECTION_EXTENSION_ITEM,
eventType: EVENT_TYPE.TRACK
});
}
}
};
return /*#__PURE__*/React.createElement(SelectionExtensionDropdownMenu, {
editorAnalyticsAPI: editorAnalyticsAPI,
items: items,
onItemActivated: handleOnItemActivated
});
};
// eslint-disable-next-line @typescript-eslint/ban-types
export const SelectionExtensionItems = injectIntl(SelectionExtensionItemsComponent);