UNPKG

@atlaskit/editor-plugin-selection-toolbar

Version:

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

62 lines (61 loc) • 3.01 kB
import React from 'react'; import { useIntl } from 'react-intl'; import { selectionToolbarMessages } from '@atlaskit/editor-common/messages/selection-toolbar'; import { useEditorToolbar } from '@atlaskit/editor-common/toolbar/context'; import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/useSharedPluginStateWithSelector'; import { PinIcon } from '@atlaskit/editor-toolbar/pin-icon'; import { PinnedIcon } from '@atlaskit/editor-toolbar/pinned-icon'; import { ToolbarDropdownItem } from '@atlaskit/editor-toolbar/toolbar-dropdown-item'; var shouldShowPinMenuItem = function shouldShowPinMenuItem(editMode) { return editMode !== 'view'; }; var usePluginState = function usePluginState(_api) { var _useEditorToolbar = useEditorToolbar(), editorViewMode = _useEditorToolbar.editorViewMode, editorToolbarDockingPreference = _useEditorToolbar.editorToolbarDockingPreference, isOffline = _useEditorToolbar.isOffline; return { editorViewMode: editorViewMode, editorToolbarDockingPreference: editorToolbarDockingPreference, isOffline: isOffline }; }; /** * The menu-item version of pin only appears in selection toolbar - the primary toolbar will have its own component */ export var PinMenuItem = function PinMenuItem(_ref) { var api = _ref.api, disablePin = _ref.disablePin; var intl = useIntl(); var runtimeOverride = useSharedPluginStateWithSelector(api, ['toolbar'], function (states) { var _states$toolbarState; return (_states$toolbarState = states.toolbarState) === null || _states$toolbarState === void 0 ? void 0 : _states$toolbarState.contextualFormattingModeOverride; }); var _usePluginState = usePluginState(api), editorViewMode = _usePluginState.editorViewMode, editorToolbarDockingPreference = _usePluginState.editorToolbarDockingPreference, isDisabled = _usePluginState.isOffline; var isToolbarDocked = editorToolbarDockingPreference === 'top'; if (disablePin || !shouldShowPinMenuItem(editorViewMode) || runtimeOverride === 'always-pinned') { return null; } var onClick = function onClick() { var _api$userPreferences; if (!api || isDisabled) { return; } api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$userPreferences = api.userPreferences) === null || _api$userPreferences === void 0 ? void 0 : _api$userPreferences.actions.updateUserPreference('toolbarDockingPosition', isToolbarDocked ? 'none' : 'top')); }; var message = intl.formatMessage(isToolbarDocked ? selectionToolbarMessages.toolbarPositionPinedAtTop : selectionToolbarMessages.toolbarPositionUnpinnedConcise); return /*#__PURE__*/React.createElement(ToolbarDropdownItem, { onClick: onClick, isDisabled: isDisabled, elemBefore: isToolbarDocked ? /*#__PURE__*/React.createElement(PinnedIcon, { size: "small", label: "" }) : /*#__PURE__*/React.createElement(PinIcon, { size: "small", label: "" }) }, message); };