@atlaskit/editor-plugin-media
Version:
Media plugin for @atlaskit/editor-core
63 lines (62 loc) • 2.89 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
/**
* @jsxRuntime classic
* @jsx jsx
*/
import React, { Fragment, useEffect, useState } from 'react';
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
import { css, jsx } from '@emotion/react';
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
import { isVideo } from '../../pm-plugins/utils/is-type';
import { getSelectedNearestMediaContainerNodeAttrsFunction } from '../../ui/toolbar/utils';
import { RenderMediaViewer } from './PortalWrapper';
var interactiveStyles = css({
cursor: 'pointer'
});
var mediaViewerContainerTestID = 'media-viewer-container-test';
export var MediaViewerContainer = function MediaViewerContainer(_ref) {
var _mediaNode$firstChild;
var mediaNode = _ref.mediaNode,
selectedMediaContainerNode = _ref.selectedMediaContainerNode,
mediaClientConfig = _ref.mediaClientConfig,
_ref$isEditorViewMode = _ref.isEditorViewMode,
isEditorViewMode = _ref$isEditorViewMode === void 0 ? false : _ref$isEditorViewMode,
_ref$isSelected = _ref.isSelected,
isSelected = _ref$isSelected === void 0 ? true : _ref$isSelected,
_ref$isInline = _ref.isInline,
isInline = _ref$isInline === void 0 ? false : _ref$isInline,
mediaViewerExtensions = _ref.mediaViewerExtensions,
children = _ref.children;
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
showViewer = _useState2[0],
setShowMediaViewer = _useState2[1];
useEffect(function () {
setShowMediaViewer(isSelected);
}, [isSelected]);
var selectedNodeAttrs = getSelectedNearestMediaContainerNodeAttrsFunction(selectedMediaContainerNode);
var showMediaViewer = function showMediaViewer() {
setShowMediaViewer(true);
};
var closeMediaViewer = function closeMediaViewer() {
setShowMediaViewer(false);
};
var isVideoMedia = isVideo((_mediaNode$firstChild = mediaNode.firstChild) === null || _mediaNode$firstChild === void 0 ? void 0 : _mediaNode$firstChild.attrs.__fileMimeType);
var shouldShowViewer = isEditorViewMode && showViewer && selectedNodeAttrs && mediaClientConfig && !isVideoMedia && editorExperiment('platform_editor_controls', 'control');
return jsx(Fragment, null, isEditorViewMode ? jsx(Fragment, null, isInline ? jsx("span", {
onClick: showMediaViewer,
css: interactiveStyles,
"data-testid": mediaViewerContainerTestID,
role: "none"
}, children) : jsx("div", {
onClick: showMediaViewer,
css: interactiveStyles,
"data-testid": mediaViewerContainerTestID,
role: "none"
}, children), shouldShowViewer && jsx(RenderMediaViewer, {
selectedNodeAttrs: selectedNodeAttrs,
mediaClientConfig: mediaClientConfig,
onClose: closeMediaViewer,
extensions: mediaViewerExtensions
})) : children);
};