UNPKG

@atlaskit/editor-plugin-media

Version:

Media plugin for @atlaskit/editor-core

129 lines (127 loc) • 7.74 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.DropzoneWrapper = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _utils = require("@atlaskit/editor-common/Popup/utils"); var _useSharedPluginStateWithSelector = require("@atlaskit/editor-common/useSharedPluginStateWithSelector"); var _dropzone = require("@atlaskit/media-picker/dropzone"); var _mediaDropPositionExperiment = require("../../pm-plugins/media-drop-position-experiment"); var _PickerFacadeProvider = _interopRequireDefault(require("./PickerFacadeProvider")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var selector = function selector(states) { var _states$mediaState, _states$mediaState2, _states$mediaState3, _states$mediaState4, _states$mediaState5; return { options: (_states$mediaState = states.mediaState) === null || _states$mediaState === void 0 ? void 0 : _states$mediaState.options, handleDrag: (_states$mediaState2 = states.mediaState) === null || _states$mediaState2 === void 0 ? void 0 : _states$mediaState2.handleDrag, handleDragOver: (_states$mediaState3 = states.mediaState) === null || _states$mediaState3 === void 0 ? void 0 : _states$mediaState3.handleDragOver, handleDrop: (_states$mediaState4 = states.mediaState) === null || _states$mediaState4 === void 0 ? void 0 : _states$mediaState4.handleDrop, dropTargets: (_states$mediaState5 = states.mediaState) === null || _states$mediaState5 === void 0 ? void 0 : _states$mediaState5.dropTargets }; }; var DropzoneWrapperInternal = function DropzoneWrapperInternal(_ref) { var api = _ref.api, isActive = _ref.isActive, featureFlags = _ref.featureFlags, editorDomElement = _ref.editorDomElement, appearance = _ref.appearance, mediaClientConfig = _ref.mediaClientConfig, config = _ref.config, pickerFacadeInstance = _ref.pickerFacadeInstance; var _useSharedPluginState = (0, _useSharedPluginStateWithSelector.useSharedPluginStateWithSelector)(api, ['media'], selector), options = _useSharedPluginState.options, handleDrag = _useSharedPluginState.handleDrag, handleDragOver = _useSharedPluginState.handleDragOver, handleDrop = _useSharedPluginState.handleDrop, dropTargets = _useSharedPluginState.dropTargets; var usePointerPosition = (0, _mediaDropPositionExperiment.isMediaDropPositionEnabled)(); /** The mounted dropzone invokes this only for accepted external file drags and drops. */ var enrolInMediaDropExperiment = (0, _react.useCallback)(function () { (0, _mediaDropPositionExperiment.exposeMediaDropPosition)(); }, []); var handleDragEnter = (0, _react.useCallback)(function () { enrolInMediaDropExperiment(); handleDrag === null || handleDrag === void 0 || handleDrag('enter'); }, [enrolInMediaDropExperiment, handleDrag]); var handleError = (0, _react.useCallback)(function (payload) { dropTargets === null || dropTargets === void 0 || dropTargets.inserted(payload.fileId); pickerFacadeInstance.handleUploadError(payload); }, [dropTargets, pickerFacadeInstance]); var handleUploadsStart = (0, _react.useCallback)(function (_ref2) { var files = _ref2.files, traceContext = _ref2.traceContext; if (traceContext) { dropTargets === null || dropTargets === void 0 || dropTargets.register(traceContext.traceId, files.map(function (file) { return file.id; })); } }, [dropTargets]); var _ref3 = options || {}, customDropzoneContainer = _ref3.customDropzoneContainer; // Ignored via go/ees005 // eslint-disable-next-line @atlaskit/editor/no-as-casting var editorHtmlElement = editorDomElement; var scrollParent = appearance === 'full-page' && (0, _utils.findOverflowScrollParent)(editorHtmlElement); var container = customDropzoneContainer || (scrollParent ? scrollParent : editorHtmlElement); /** Clears a stale hover indicator when the dropzone is removed or replaced mid-drag. */ (0, _react.useEffect)(function () { if (!usePointerPosition || !isActive) { return; } return function () { return handleDrag === null || handleDrag === void 0 ? void 0 : handleDrag('leave'); }; }, [container, handleDrag, isActive, usePointerPosition]); var dropzoneConfig = _objectSpread(_objectSpread({}, config), {}, { container: container }); return isActive ? /*#__PURE__*/_react.default.createElement(_dropzone.DropzoneLoader, { mediaClientConfig: mediaClientConfig, config: dropzoneConfig, onDragOver: usePointerPosition ? handleDragOver : undefined, onDrop: enrolInMediaDropExperiment, onDropWithContext: usePointerPosition ? handleDrop : undefined, onUploadsStart: usePointerPosition ? handleUploadsStart : undefined, onError: usePointerPosition ? handleError : pickerFacadeInstance.handleUploadError, onPreviewUpdate: pickerFacadeInstance.handleUploadPreviewUpdate, onEnd: pickerFacadeInstance.handleReady, onDragEnter: handleDragEnter // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , onDragLeave: function onDragLeave() { return handleDrag === null || handleDrag === void 0 ? void 0 : handleDrag('leave'); }, featureFlags: featureFlags }) : null; }; var DropzoneWrapper = exports.DropzoneWrapper = function DropzoneWrapper(_ref4) { var api = _ref4.api, isActive = _ref4.isActive, featureFlags = _ref4.featureFlags, editorDomElement = _ref4.editorDomElement, appearance = _ref4.appearance; return /*#__PURE__*/_react.default.createElement(_PickerFacadeProvider.default, { api: api, analyticsName: "dropzone" }, function (_ref5) { var mediaClientConfig = _ref5.mediaClientConfig, config = _ref5.config, pickerFacadeInstance = _ref5.pickerFacadeInstance; return /*#__PURE__*/_react.default.createElement(DropzoneWrapperInternal, { api: api, isActive: isActive, featureFlags: featureFlags, editorDomElement: editorDomElement, appearance: appearance, mediaClientConfig: mediaClientConfig, config: config, pickerFacadeInstance: pickerFacadeInstance }); }); };