UNPKG

@atlaskit/editor-plugin-selection-extension

Version:

editor-plugin-selection-extension plugin for @atlaskit/editor-core

62 lines (60 loc) 2.06 kB
/** * @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);