@atlaskit/editor-plugin-loom
Version:
Loom plugin for @atlaskit/editor-core
101 lines • 3.8 kB
JavaScript
import React, { useCallback } from 'react';
import { useIntl } from 'react-intl';
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
import { useEditorToolbar } from '@atlaskit/editor-common/toolbar';
import { LoomIcon, ToolbarDropdownItem } from '@atlaskit/editor-toolbar';
import { executeRecordVideo } from '../pm-plugins/commands';
var useLoomEnabled = function useLoomEnabled(api) {
var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['loom'], function (states) {
var _states$loomState;
return {
loomEnabled: (_states$loomState = states.loomState) === null || _states$loomState === void 0 ? void 0 : _states$loomState.isEnabled
};
}),
loomEnabled = _useSharedPluginState.loomEnabled;
return loomEnabled;
};
export var LoomMenuItem = function LoomMenuItem(_ref) {
var api = _ref.api,
renderButton = _ref.renderButton;
var loomEnabled = useLoomEnabled(api);
var _useEditorToolbar = useEditorToolbar(),
editorViewMode = _useEditorToolbar.editorViewMode;
if (editorViewMode !== 'edit') {
return null;
}
if (renderButton) {
return renderButton(CustomisableLoomMenuItem(api));
} else if (loomEnabled !== undefined) {
return /*#__PURE__*/React.createElement(DefaultLoomMenuItem, {
api: api
});
}
};
export var CustomisableLoomMenuItem = function CustomisableLoomMenuItem(api) {
return /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
var _ref2$isDisabled = _ref2.isDisabled,
isDisabled = _ref2$isDisabled === void 0 ? false : _ref2$isDisabled,
onClickBeforeInit = _ref2.onClickBeforeInit,
href = _ref2.href,
target = _ref2.target,
rel = _ref2.rel;
var loomEnabled = !!useLoomEnabled(api);
var handleOnClick = useCallback(function (e) {
if (loomEnabled) {
executeRecordVideo(api);
} else if (onClickBeforeInit && e.type === 'click' && e.target instanceof HTMLElement) {
onClickBeforeInit(e);
}
}, [loomEnabled, onClickBeforeInit]);
return /*#__PURE__*/React.createElement(MenuItemComponent, {
ref: ref
// Ignore href if Loom is enabled so that it doesn't interfere with recording
,
href: loomEnabled ? undefined : href,
disabled: isDisabled,
onClick: handleOnClick,
target: target,
rel: rel
});
});
};
var DefaultLoomMenuItem = function DefaultLoomMenuItem(_ref3) {
var api = _ref3.api;
var loomEnabled = useLoomEnabled(api);
var handleOnClick = useCallback(function () {
return executeRecordVideo(api);
}, [api]);
return /*#__PURE__*/React.createElement(MenuItemComponent, {
disabled: !loomEnabled,
onClick: handleOnClick
});
};
var MenuItemComponent = /*#__PURE__*/React.forwardRef(
// eslint-disable-next-line no-unused-vars
function (_ref4, ref) {
var disabled = _ref4.disabled,
_onClick = _ref4.onClick,
href = _ref4.href,
target = _ref4.target,
rel = _ref4.rel;
var _useEditorToolbar2 = useEditorToolbar(),
editorAppearance = _useEditorToolbar2.editorAppearance;
var _useIntl = useIntl(),
formatMessage = _useIntl.formatMessage;
return /*#__PURE__*/React.createElement(ToolbarDropdownItem, {
elemBefore: /*#__PURE__*/React.createElement(LoomIcon, {
size: "small",
label: ""
}),
isDisabled: disabled,
href: href,
target: target,
rel: rel
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
,
onClick: function onClick(e) {
return _onClick(e);
}
}, formatMessage(editorAppearance === 'comment' ? messages.addLoomVideoComment : messages.addLoomVideo));
});