UNPKG

@wordpress/block-editor

Version:
119 lines (114 loc) 4.66 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ExperimentalBlockEditorProvider = exports.BlockEditorProvider = void 0; var _data = require("@wordpress/data"); var _element = require("@wordpress/element"); var _components = require("@wordpress/components"); var _uploadMedia = require("@wordpress/upload-media"); var _withRegistryProvider = _interopRequireDefault(require("./with-registry-provider")); var _useBlockSync = _interopRequireDefault(require("./use-block-sync")); var _store = require("../../store"); var _blockRefsProvider = require("./block-refs-provider"); var _lockUnlock = require("../../lock-unlock"); var _keyboardShortcuts = _interopRequireDefault(require("../keyboard-shortcuts")); var _useMediaUploadSettings = _interopRequireDefault(require("./use-media-upload-settings")); var _jsxRuntime = require("react/jsx-runtime"); /** * WordPress dependencies */ /** * Internal dependencies */ /** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */const noop = () => {}; /** * Upload a media file when the file upload button is activated * or when adding a file to the editor via drag & drop. * * @param {WPDataRegistry} registry * @param {Object} $3 Parameters object passed to the function. * @param {Array} $3.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed. * @param {Object} $3.additionalData Additional data to include in the request. * @param {Array<File>} $3.filesList List of files. * @param {Function} $3.onError Function called when an error happens. * @param {Function} $3.onFileChange Function called each time a file or a temporary representation of the file is available. * @param {Function} $3.onSuccess Function called once a file has completely finished uploading, including thumbnails. * @param {Function} $3.onBatchSuccess Function called once all files in a group have completely finished uploading, including thumbnails. */ function mediaUpload(registry, { allowedTypes, additionalData = {}, filesList, onError = noop, onFileChange, onSuccess, onBatchSuccess }) { void registry.dispatch(_uploadMedia.store).addItems({ files: filesList, onChange: onFileChange, onSuccess, onBatchSuccess, onError: ({ message }) => onError(message), additionalData, allowedTypes }); } const ExperimentalBlockEditorProvider = exports.ExperimentalBlockEditorProvider = (0, _withRegistryProvider.default)(props => { const { settings: _settings, registry, stripExperimentalSettings = false } = props; const mediaUploadSettings = (0, _useMediaUploadSettings.default)(_settings); let settings = _settings; if (window.__experimentalMediaProcessing && _settings.mediaUpload) { // Create a new variable so that the original props.settings.mediaUpload is not modified. settings = (0, _element.useMemo)(() => ({ ..._settings, mediaUpload: mediaUpload.bind(null, registry) }), [_settings, registry]); } const { __experimentalUpdateSettings } = (0, _lockUnlock.unlock)((0, _data.useDispatch)(_store.store)); (0, _element.useEffect)(() => { __experimentalUpdateSettings({ ...settings, __internalIsInitialized: true }, { stripExperimentalSettings, reset: true }); }, [settings, stripExperimentalSettings, __experimentalUpdateSettings]); // Syncs the entity provider with changes in the block-editor store. (0, _useBlockSync.default)(props); const children = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.SlotFillProvider, { passthrough: true, children: [!settings?.isPreviewMode && /*#__PURE__*/(0, _jsxRuntime.jsx)(_keyboardShortcuts.default.Register, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockRefsProvider.BlockRefsProvider, { children: props.children })] }); if (window.__experimentalMediaProcessing) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_uploadMedia.MediaUploadProvider, { settings: mediaUploadSettings, useSubRegistry: false, children: children }); } return children; }); const BlockEditorProvider = props => { return /*#__PURE__*/(0, _jsxRuntime.jsx)(ExperimentalBlockEditorProvider, { ...props, stripExperimentalSettings: true, children: props.children }); }; exports.BlockEditorProvider = BlockEditorProvider; var _default = exports.default = BlockEditorProvider; //# sourceMappingURL=index.js.map