@wordpress/media-utils 4.1.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.4.0 (2022-07-13)
6
+
7
+ ## 4.3.0 (2022-06-29)
8
+
9
+ ## 4.2.0 (2022-06-15)
10
+
5
11
  ## 4.1.0 (2022-06-01)
6
12
 
7
13
  ## 4.0.0 (2022-05-18)
@@ -5,16 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _lodash = require("lodash");
9
-
10
8
  var _element = require("@wordpress/element");
11
9
 
12
10
  var _i18n = require("@wordpress/i18n");
13
11
 
14
- /**
15
- * External dependencies
16
- */
17
-
18
12
  /**
19
13
  * WordPress dependencies
20
14
  */
@@ -159,9 +153,10 @@ const getGalleryDetailsMediaFrame = () => {
159
153
  filterable: 'uploaded',
160
154
  multiple: 'add',
161
155
  editable: false,
162
- library: wp.media.query((0, _lodash.defaults)({
163
- type: 'image'
164
- }, this.options.library))
156
+ library: wp.media.query({
157
+ type: 'image',
158
+ ...this.options.library
159
+ })
165
160
  }), new wp.media.controller.EditImage({
166
161
  model: this.options.editImage
167
162
  }), new wp.media.controller.GalleryEdit({
@@ -179,7 +174,13 @@ const getGalleryDetailsMediaFrame = () => {
179
174
 
180
175
  const slimImageObject = img => {
181
176
  const attrSet = ['sizes', 'mime', 'type', 'subtype', 'id', 'url', 'alt', 'link', 'caption'];
182
- return (0, _lodash.pick)(img, attrSet);
177
+ return attrSet.reduce((result, key) => {
178
+ if (img !== null && img !== void 0 && img.hasOwnProperty(key)) {
179
+ result[key] = img[key];
180
+ }
181
+
182
+ return result;
183
+ }, {});
183
184
  };
184
185
 
185
186
  const getAttachmentsCollection = ids => {
@@ -355,12 +356,18 @@ class MediaUpload extends _element.Component {
355
356
  }
356
357
 
357
358
  onOpen() {
358
- var _this$props$value;
359
+ const {
360
+ value
361
+ } = this.props;
362
+ this.updateCollection(); //Handle active tab in media model on model open.
359
363
 
360
- this.updateCollection(); // Handle both this.props.value being either (number[]) multiple ids
364
+ if (this.props.mode) {
365
+ this.frame.content.mode(this.props.mode);
366
+ } // Handle both this.props.value being either (number[]) multiple ids
361
367
  // (for galleries) or a (number) singular id (e.g. image block).
362
368
 
363
- const hasMedia = Array.isArray(this.props.value) ? !!((_this$props$value = this.props.value) !== null && _this$props$value !== void 0 && _this$props$value.length) : !!this.props.value;
369
+
370
+ const hasMedia = Array.isArray(value) ? !!(value !== null && value !== void 0 && value.length) : !!value;
364
371
 
365
372
  if (!hasMedia) {
366
373
  return;
@@ -368,15 +375,16 @@ class MediaUpload extends _element.Component {
368
375
 
369
376
  const isGallery = this.props.gallery;
370
377
  const selection = this.frame.state().get('selection');
378
+ const valueArray = Array.isArray(value) ? value : [value];
371
379
 
372
380
  if (!isGallery) {
373
- (0, _lodash.castArray)(this.props.value).forEach(id => {
381
+ valueArray.forEach(id => {
374
382
  selection.add(wp.media.attachment(id));
375
383
  });
376
384
  } // Load the images so they are available in the media modal.
377
385
 
378
386
 
379
- const attachments = getAttachmentsCollection((0, _lodash.castArray)(this.props.value)); // Once attachments are loaded, set the current selection.
387
+ const attachments = getAttachmentsCollection(valueArray); // Once attachments are loaded, set the current selection.
380
388
 
381
389
  attachments.more().done(function () {
382
390
  var _attachments$models;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","Component","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","hasMedia","Array","isArray","isGallery","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { castArray, defaults, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query(\n\t\t\t\t\t\tdefaults(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.options.library\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn pick( img, attrSet );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tthis.updateCollection();\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( this.props.value )\n\t\t\t? !! this.props.value?.length\n\t\t\t: !! this.props.value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\n\t\tif ( ! isGallery ) {\n\t\t\tcastArray( this.props.value ).forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection(\n\t\t\tcastArray( this.props.value )\n\t\t);\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
1
+ {"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","reduce","result","key","hasOwnProperty","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","Component","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","mode","hasMedia","Array","isArray","isGallery","valueArray","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query( {\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t...this.options.library,\n\t\t\t\t\t} ),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn attrSet.reduce( ( result, key ) => {\n\t\tif ( img?.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = img[ key ];\n\t\t}\n\t\treturn result;\n\t}, {} );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tconst { value } = this.props;\n\t\tthis.updateCollection();\n\n\t\t//Handle active tab in media model on model open.\n\t\tif ( this.props.mode ) {\n\t\t\tthis.frame.content.mode( this.props.mode );\n\t\t}\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( value ) ? !! value?.length : !! value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\t\tconst valueArray = Array.isArray( value ) ? value : [ value ];\n\n\t\tif ( ! isGallery ) {\n\t\t\tvalueArray.forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection( valueArray );\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
@@ -8,22 +8,16 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.getMimeTypesArray = getMimeTypesArray;
9
9
  exports.uploadMedia = uploadMedia;
10
10
 
11
- var _lodash = require("lodash");
12
-
13
11
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
14
12
 
15
13
  var _blob = require("@wordpress/blob");
16
14
 
17
15
  var _i18n = require("@wordpress/i18n");
18
16
 
19
- /**
20
- * External dependencies
21
- */
22
-
23
17
  /**
24
18
  * WordPress dependencies
25
19
  */
26
-
20
+ const noop = () => {};
27
21
  /**
28
22
  * Browsers may use unexpected mime types, and they differ from browser to browser.
29
23
  * This function computes a flexible array of mime types from the mime type structured provided by the server.
@@ -37,16 +31,19 @@ var _i18n = require("@wordpress/i18n");
37
31
  *
38
32
  * @return {?Array} An array of mime types or the parameter passed if it was "falsy".
39
33
  */
34
+
35
+
40
36
  function getMimeTypesArray(wpMimeTypesObject) {
41
37
  if (!wpMimeTypesObject) {
42
38
  return wpMimeTypesObject;
43
39
  }
44
40
 
45
- return (0, _lodash.flatMap)(wpMimeTypesObject, (mime, extensionsString) => {
41
+ return Object.entries(wpMimeTypesObject).map(_ref => {
42
+ let [extensionsString, mime] = _ref;
46
43
  const [type] = mime.split('/');
47
44
  const extensions = extensionsString.split('|');
48
- return [mime, ...(0, _lodash.map)(extensions, extension => `${type}/${extension}`)];
49
- });
45
+ return [mime, ...extensions.map(extension => `${type}/${extension}`)];
46
+ }).flat();
50
47
  }
51
48
  /**
52
49
  * Media Upload is used by audio, image, gallery, video, and file blocks to
@@ -65,24 +62,26 @@ function getMimeTypesArray(wpMimeTypesObject) {
65
62
  */
66
63
 
67
64
 
68
- async function uploadMedia(_ref) {
65
+ async function uploadMedia(_ref2) {
69
66
  let {
70
67
  allowedTypes,
71
68
  additionalData = {},
72
69
  filesList,
73
70
  maxUploadFileSize,
74
- onError = _lodash.noop,
71
+ onError = noop,
75
72
  onFileChange,
76
73
  wpAllowedMimeTypes = null
77
- } = _ref;
74
+ } = _ref2;
78
75
  // Cast filesList to array.
79
76
  const files = [...filesList];
80
77
  const filesSet = [];
81
78
 
82
79
  const setAndUpdateFiles = (idx, value) => {
83
- (0, _blob.revokeBlobURL)((0, _lodash.get)(filesSet, [idx, 'url']));
80
+ var _filesSet$idx;
81
+
82
+ (0, _blob.revokeBlobURL)((_filesSet$idx = filesSet[idx]) === null || _filesSet$idx === void 0 ? void 0 : _filesSet$idx.url);
84
83
  filesSet[idx] = value;
85
- onFileChange((0, _lodash.compact)(filesSet));
84
+ onFileChange(filesSet.filter(Boolean));
86
85
  }; // Allowed type specified by consumer.
87
86
 
88
87
 
@@ -91,14 +90,14 @@ async function uploadMedia(_ref) {
91
90
  return true;
92
91
  }
93
92
 
94
- return (0, _lodash.some)(allowedTypes, allowedType => {
93
+ return allowedTypes.some(allowedType => {
95
94
  // If a complete mimetype is specified verify if it matches exactly the mime type of the file.
96
- if ((0, _lodash.includes)(allowedType, '/')) {
95
+ if (allowedType.includes('/')) {
97
96
  return allowedType === fileType;
98
97
  } // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
99
98
 
100
99
 
101
- return (0, _lodash.startsWith)(fileType, `${allowedType}/`);
100
+ return fileType.startsWith(`${allowedType}/`);
102
101
  });
103
102
  }; // Allowed types for the current WP_User.
104
103
 
@@ -106,7 +105,7 @@ async function uploadMedia(_ref) {
106
105
  const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
107
106
 
108
107
  const isAllowedMimeTypeForUser = fileType => {
109
- return (0, _lodash.includes)(allowedMimeTypesForUser, fileType);
108
+ return allowedMimeTypesForUser.includes(fileType);
110
109
  };
111
110
 
112
111
  const validFiles = [];
@@ -171,10 +170,18 @@ async function uploadMedia(_ref) {
171
170
  const mediaFile = validFiles[idx];
172
171
 
173
172
  try {
174
- const savedMedia = await createMediaFromFile(mediaFile, additionalData);
175
- const mediaObject = { ...(0, _lodash.omit)(savedMedia, ['alt_text', 'source_url']),
173
+ var _savedMedia$caption$r, _savedMedia$caption;
174
+
175
+ const savedMedia = await createMediaFromFile(mediaFile, additionalData); // eslint-disable-next-line camelcase
176
+
177
+ const {
178
+ alt_text,
179
+ source_url,
180
+ ...savedMediaProps
181
+ } = savedMedia;
182
+ const mediaObject = { ...savedMediaProps,
176
183
  alt: savedMedia.alt_text,
177
- caption: (0, _lodash.get)(savedMedia, ['caption', 'raw'], ''),
184
+ caption: (_savedMedia$caption$r = (_savedMedia$caption = savedMedia.caption) === null || _savedMedia$caption === void 0 ? void 0 : _savedMedia$caption.raw) !== null && _savedMedia$caption$r !== void 0 ? _savedMedia$caption$r : '',
178
185
  title: savedMedia.title.raw,
179
186
  url: savedMedia.source_url
180
187
  };
@@ -184,8 +191,8 @@ async function uploadMedia(_ref) {
184
191
  setAndUpdateFiles(idx, null);
185
192
  let message;
186
193
 
187
- if ((0, _lodash.has)(error, ['message'])) {
188
- message = (0, _lodash.get)(error, ['message']);
194
+ if (error.message) {
195
+ message = error.message;
189
196
  } else {
190
197
  message = (0, _i18n.sprintf)( // translators: %s: file name
191
198
  (0, _i18n.__)('Error while uploading file %s to the media library.'), mediaFile.name);
@@ -211,7 +218,14 @@ function createMediaFromFile(file, additionalData) {
211
218
  // Create upload payload.
212
219
  const data = new window.FormData();
213
220
  data.append('file', file, file.name || file.type.replace('/', '.'));
214
- (0, _lodash.forEach)(additionalData, (value, key) => data.append(key, value));
221
+
222
+ if (additionalData) {
223
+ Object.entries(additionalData).forEach(_ref3 => {
224
+ let [key, value] = _ref3;
225
+ return data.append(key, value);
226
+ });
227
+ }
228
+
215
229
  return (0, _apiFetch.default)({
216
230
  path: '/wp/v2/media',
217
231
  body: data,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["getMimeTypesArray","wpMimeTypesObject","mime","extensionsString","type","split","extensions","extension","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","noop","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","isAllowedType","fileType","allowedType","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","url","length","savedMedia","createMediaFromFile","mediaObject","alt","alt_text","caption","title","raw","source_url","error","data","window","FormData","append","replace","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcompact,\n\tflatMap,\n\tforEach,\n\tget,\n\thas,\n\tincludes,\n\tmap,\n\tnoop,\n\tomit,\n\tsome,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn flatMap( wpMimeTypesObject, ( mime, extensionsString ) => {\n\t\tconst [ type ] = mime.split( '/' );\n\t\tconst extensions = extensionsString.split( '|' );\n\t\treturn [\n\t\t\tmime,\n\t\t\t...map( extensions, ( extension ) => `${ type }/${ extension }` ),\n\t\t];\n\t} );\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( get( filesSet, [ idx, 'url' ] ) );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( compact( filesSet ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn some( allowedTypes, ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( includes( allowedType, '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn startsWith( fileType, `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn includes( allowedMimeTypesForUser, fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\tconst mediaObject = {\n\t\t\t\t...omit( savedMedia, [ 'alt_text', 'source_url' ] ),\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: get( savedMedia, [ 'caption', 'raw' ], '' ),\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( has( error, [ 'message' ] ) ) {\n\t\t\t\tmessage = get( error, [ 'message' ] );\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tforEach( additionalData, ( value, key ) => data.append( key, value ) );\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["noop","getMimeTypesArray","wpMimeTypesObject","Object","entries","map","extensionsString","mime","type","split","extensions","extension","flat","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","url","filter","Boolean","isAllowedType","fileType","some","allowedType","includes","startsWith","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","length","savedMedia","createMediaFromFile","alt_text","source_url","savedMediaProps","mediaObject","alt","caption","raw","title","error","data","window","FormData","append","replace","forEach","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn Object.entries( wpMimeTypesObject )\n\t\t.map( ( [ extensionsString, mime ] ) => {\n\t\t\tconst [ type ] = mime.split( '/' );\n\t\t\tconst extensions = extensionsString.split( '|' );\n\t\t\treturn [\n\t\t\t\tmime,\n\t\t\t\t...extensions.map(\n\t\t\t\t\t( extension ) => `${ type }/${ extension }`\n\t\t\t\t),\n\t\t\t];\n\t\t} )\n\t\t.flat();\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( filesSet[ idx ]?.url );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( filesSet.filter( Boolean ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn allowedTypes.some( ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( allowedType.includes( '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn fileType.startsWith( `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn allowedMimeTypesForUser.includes( fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tconst { alt_text, source_url, ...savedMediaProps } = savedMedia;\n\t\t\tconst mediaObject = {\n\t\t\t\t...savedMediaProps,\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: savedMedia.caption?.raw ?? '',\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( error.message ) {\n\t\t\t\tmessage = error.message;\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tif ( additionalData ) {\n\t\tObject.entries( additionalData ).forEach( ( [ key, value ] ) =>\n\t\t\tdata.append( key, value )\n\t\t);\n\t}\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
@@ -1,11 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { castArray, defaults, pick } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import { Component } from '@wordpress/element';
10
5
  import { __ } from '@wordpress/i18n';
11
6
  const {
@@ -149,9 +144,10 @@ const getGalleryDetailsMediaFrame = () => {
149
144
  filterable: 'uploaded',
150
145
  multiple: 'add',
151
146
  editable: false,
152
- library: wp.media.query(defaults({
153
- type: 'image'
154
- }, this.options.library))
147
+ library: wp.media.query({
148
+ type: 'image',
149
+ ...this.options.library
150
+ })
155
151
  }), new wp.media.controller.EditImage({
156
152
  model: this.options.editImage
157
153
  }), new wp.media.controller.GalleryEdit({
@@ -169,7 +165,13 @@ const getGalleryDetailsMediaFrame = () => {
169
165
 
170
166
  const slimImageObject = img => {
171
167
  const attrSet = ['sizes', 'mime', 'type', 'subtype', 'id', 'url', 'alt', 'link', 'caption'];
172
- return pick(img, attrSet);
168
+ return attrSet.reduce((result, key) => {
169
+ if (img !== null && img !== void 0 && img.hasOwnProperty(key)) {
170
+ result[key] = img[key];
171
+ }
172
+
173
+ return result;
174
+ }, {});
173
175
  };
174
176
 
175
177
  const getAttachmentsCollection = ids => {
@@ -345,12 +347,18 @@ class MediaUpload extends Component {
345
347
  }
346
348
 
347
349
  onOpen() {
348
- var _this$props$value;
350
+ const {
351
+ value
352
+ } = this.props;
353
+ this.updateCollection(); //Handle active tab in media model on model open.
349
354
 
350
- this.updateCollection(); // Handle both this.props.value being either (number[]) multiple ids
355
+ if (this.props.mode) {
356
+ this.frame.content.mode(this.props.mode);
357
+ } // Handle both this.props.value being either (number[]) multiple ids
351
358
  // (for galleries) or a (number) singular id (e.g. image block).
352
359
 
353
- const hasMedia = Array.isArray(this.props.value) ? !!((_this$props$value = this.props.value) !== null && _this$props$value !== void 0 && _this$props$value.length) : !!this.props.value;
360
+
361
+ const hasMedia = Array.isArray(value) ? !!(value !== null && value !== void 0 && value.length) : !!value;
354
362
 
355
363
  if (!hasMedia) {
356
364
  return;
@@ -358,15 +366,16 @@ class MediaUpload extends Component {
358
366
 
359
367
  const isGallery = this.props.gallery;
360
368
  const selection = this.frame.state().get('selection');
369
+ const valueArray = Array.isArray(value) ? value : [value];
361
370
 
362
371
  if (!isGallery) {
363
- castArray(this.props.value).forEach(id => {
372
+ valueArray.forEach(id => {
364
373
  selection.add(wp.media.attachment(id));
365
374
  });
366
375
  } // Load the images so they are available in the media modal.
367
376
 
368
377
 
369
- const attachments = getAttachmentsCollection(castArray(this.props.value)); // Once attachments are loaded, set the current selection.
378
+ const attachments = getAttachmentsCollection(valueArray); // Once attachments are loaded, set the current selection.
370
379
 
371
380
  attachments.more().done(function () {
372
381
  var _attachments$models;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["castArray","defaults","pick","Component","__","wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","hasMedia","Array","isArray","isGallery","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { castArray, defaults, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query(\n\t\t\t\t\t\tdefaults(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.options.library\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn pick( img, attrSet );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tthis.updateCollection();\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( this.props.value )\n\t\t\t? !! this.props.value?.length\n\t\t\t: !! this.props.value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\n\t\tif ( ! isGallery ) {\n\t\t\tcastArray( this.props.value ).forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection(\n\t\t\tcastArray( this.props.value )\n\t\t);\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
1
+ {"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["Component","__","wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","reduce","result","key","hasOwnProperty","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","mode","hasMedia","Array","isArray","isGallery","valueArray","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query( {\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t...this.options.library,\n\t\t\t\t\t} ),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn attrSet.reduce( ( result, key ) => {\n\t\tif ( img?.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = img[ key ];\n\t\t}\n\t\treturn result;\n\t}, {} );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tconst { value } = this.props;\n\t\tthis.updateCollection();\n\n\t\t//Handle active tab in media model on model open.\n\t\tif ( this.props.mode ) {\n\t\t\tthis.frame.content.mode( this.props.mode );\n\t\t}\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( value ) ? !! value?.length : !! value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\t\tconst valueArray = Array.isArray( value ) ? value : [ value ];\n\n\t\tif ( ! isGallery ) {\n\t\t\tvalueArray.forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection( valueArray );\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
@@ -1,14 +1,11 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { compact, flatMap, forEach, get, has, includes, map, noop, omit, some, startsWith } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import apiFetch from '@wordpress/api-fetch';
10
5
  import { createBlobURL, revokeBlobURL } from '@wordpress/blob';
11
6
  import { __, sprintf } from '@wordpress/i18n';
7
+
8
+ const noop = () => {};
12
9
  /**
13
10
  * Browsers may use unexpected mime types, and they differ from browser to browser.
14
11
  * This function computes a flexible array of mime types from the mime type structured provided by the server.
@@ -23,16 +20,18 @@ import { __, sprintf } from '@wordpress/i18n';
23
20
  * @return {?Array} An array of mime types or the parameter passed if it was "falsy".
24
21
  */
25
22
 
23
+
26
24
  export function getMimeTypesArray(wpMimeTypesObject) {
27
25
  if (!wpMimeTypesObject) {
28
26
  return wpMimeTypesObject;
29
27
  }
30
28
 
31
- return flatMap(wpMimeTypesObject, (mime, extensionsString) => {
29
+ return Object.entries(wpMimeTypesObject).map(_ref => {
30
+ let [extensionsString, mime] = _ref;
32
31
  const [type] = mime.split('/');
33
32
  const extensions = extensionsString.split('|');
34
- return [mime, ...map(extensions, extension => `${type}/${extension}`)];
35
- });
33
+ return [mime, ...extensions.map(extension => `${type}/${extension}`)];
34
+ }).flat();
36
35
  }
37
36
  /**
38
37
  * Media Upload is used by audio, image, gallery, video, and file blocks to
@@ -50,7 +49,7 @@ export function getMimeTypesArray(wpMimeTypesObject) {
50
49
  * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.
51
50
  */
52
51
 
53
- export async function uploadMedia(_ref) {
52
+ export async function uploadMedia(_ref2) {
54
53
  let {
55
54
  allowedTypes,
56
55
  additionalData = {},
@@ -59,15 +58,17 @@ export async function uploadMedia(_ref) {
59
58
  onError = noop,
60
59
  onFileChange,
61
60
  wpAllowedMimeTypes = null
62
- } = _ref;
61
+ } = _ref2;
63
62
  // Cast filesList to array.
64
63
  const files = [...filesList];
65
64
  const filesSet = [];
66
65
 
67
66
  const setAndUpdateFiles = (idx, value) => {
68
- revokeBlobURL(get(filesSet, [idx, 'url']));
67
+ var _filesSet$idx;
68
+
69
+ revokeBlobURL((_filesSet$idx = filesSet[idx]) === null || _filesSet$idx === void 0 ? void 0 : _filesSet$idx.url);
69
70
  filesSet[idx] = value;
70
- onFileChange(compact(filesSet));
71
+ onFileChange(filesSet.filter(Boolean));
71
72
  }; // Allowed type specified by consumer.
72
73
 
73
74
 
@@ -76,14 +77,14 @@ export async function uploadMedia(_ref) {
76
77
  return true;
77
78
  }
78
79
 
79
- return some(allowedTypes, allowedType => {
80
+ return allowedTypes.some(allowedType => {
80
81
  // If a complete mimetype is specified verify if it matches exactly the mime type of the file.
81
- if (includes(allowedType, '/')) {
82
+ if (allowedType.includes('/')) {
82
83
  return allowedType === fileType;
83
84
  } // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
84
85
 
85
86
 
86
- return startsWith(fileType, `${allowedType}/`);
87
+ return fileType.startsWith(`${allowedType}/`);
87
88
  });
88
89
  }; // Allowed types for the current WP_User.
89
90
 
@@ -91,7 +92,7 @@ export async function uploadMedia(_ref) {
91
92
  const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
92
93
 
93
94
  const isAllowedMimeTypeForUser = fileType => {
94
- return includes(allowedMimeTypesForUser, fileType);
95
+ return allowedMimeTypesForUser.includes(fileType);
95
96
  };
96
97
 
97
98
  const validFiles = [];
@@ -156,10 +157,18 @@ export async function uploadMedia(_ref) {
156
157
  const mediaFile = validFiles[idx];
157
158
 
158
159
  try {
159
- const savedMedia = await createMediaFromFile(mediaFile, additionalData);
160
- const mediaObject = { ...omit(savedMedia, ['alt_text', 'source_url']),
160
+ var _savedMedia$caption$r, _savedMedia$caption;
161
+
162
+ const savedMedia = await createMediaFromFile(mediaFile, additionalData); // eslint-disable-next-line camelcase
163
+
164
+ const {
165
+ alt_text,
166
+ source_url,
167
+ ...savedMediaProps
168
+ } = savedMedia;
169
+ const mediaObject = { ...savedMediaProps,
161
170
  alt: savedMedia.alt_text,
162
- caption: get(savedMedia, ['caption', 'raw'], ''),
171
+ caption: (_savedMedia$caption$r = (_savedMedia$caption = savedMedia.caption) === null || _savedMedia$caption === void 0 ? void 0 : _savedMedia$caption.raw) !== null && _savedMedia$caption$r !== void 0 ? _savedMedia$caption$r : '',
163
172
  title: savedMedia.title.raw,
164
173
  url: savedMedia.source_url
165
174
  };
@@ -169,8 +178,8 @@ export async function uploadMedia(_ref) {
169
178
  setAndUpdateFiles(idx, null);
170
179
  let message;
171
180
 
172
- if (has(error, ['message'])) {
173
- message = get(error, ['message']);
181
+ if (error.message) {
182
+ message = error.message;
174
183
  } else {
175
184
  message = sprintf( // translators: %s: file name
176
185
  __('Error while uploading file %s to the media library.'), mediaFile.name);
@@ -195,7 +204,14 @@ function createMediaFromFile(file, additionalData) {
195
204
  // Create upload payload.
196
205
  const data = new window.FormData();
197
206
  data.append('file', file, file.name || file.type.replace('/', '.'));
198
- forEach(additionalData, (value, key) => data.append(key, value));
207
+
208
+ if (additionalData) {
209
+ Object.entries(additionalData).forEach(_ref3 => {
210
+ let [key, value] = _ref3;
211
+ return data.append(key, value);
212
+ });
213
+ }
214
+
199
215
  return apiFetch({
200
216
  path: '/wp/v2/media',
201
217
  body: data,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["compact","flatMap","forEach","get","has","includes","map","noop","omit","some","startsWith","apiFetch","createBlobURL","revokeBlobURL","__","sprintf","getMimeTypesArray","wpMimeTypesObject","mime","extensionsString","type","split","extensions","extension","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","isAllowedType","fileType","allowedType","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","url","length","savedMedia","createMediaFromFile","mediaObject","alt","alt_text","caption","title","raw","source_url","error","data","window","FormData","append","replace","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcompact,\n\tflatMap,\n\tforEach,\n\tget,\n\thas,\n\tincludes,\n\tmap,\n\tnoop,\n\tomit,\n\tsome,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn flatMap( wpMimeTypesObject, ( mime, extensionsString ) => {\n\t\tconst [ type ] = mime.split( '/' );\n\t\tconst extensions = extensionsString.split( '|' );\n\t\treturn [\n\t\t\tmime,\n\t\t\t...map( extensions, ( extension ) => `${ type }/${ extension }` ),\n\t\t];\n\t} );\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( get( filesSet, [ idx, 'url' ] ) );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( compact( filesSet ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn some( allowedTypes, ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( includes( allowedType, '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn startsWith( fileType, `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn includes( allowedMimeTypesForUser, fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\tconst mediaObject = {\n\t\t\t\t...omit( savedMedia, [ 'alt_text', 'source_url' ] ),\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: get( savedMedia, [ 'caption', 'raw' ], '' ),\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( has( error, [ 'message' ] ) ) {\n\t\t\t\tmessage = get( error, [ 'message' ] );\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tforEach( additionalData, ( value, key ) => data.append( key, value ) );\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["apiFetch","createBlobURL","revokeBlobURL","__","sprintf","noop","getMimeTypesArray","wpMimeTypesObject","Object","entries","map","extensionsString","mime","type","split","extensions","extension","flat","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","url","filter","Boolean","isAllowedType","fileType","some","allowedType","includes","startsWith","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","length","savedMedia","createMediaFromFile","alt_text","source_url","savedMediaProps","mediaObject","alt","caption","raw","title","error","data","window","FormData","append","replace","forEach","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn Object.entries( wpMimeTypesObject )\n\t\t.map( ( [ extensionsString, mime ] ) => {\n\t\t\tconst [ type ] = mime.split( '/' );\n\t\t\tconst extensions = extensionsString.split( '|' );\n\t\t\treturn [\n\t\t\t\tmime,\n\t\t\t\t...extensions.map(\n\t\t\t\t\t( extension ) => `${ type }/${ extension }`\n\t\t\t\t),\n\t\t\t];\n\t\t} )\n\t\t.flat();\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( filesSet[ idx ]?.url );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( filesSet.filter( Boolean ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn allowedTypes.some( ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( allowedType.includes( '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn fileType.startsWith( `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn allowedMimeTypesForUser.includes( fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tconst { alt_text, source_url, ...savedMediaProps } = savedMedia;\n\t\t\tconst mediaObject = {\n\t\t\t\t...savedMediaProps,\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: savedMedia.caption?.raw ?? '',\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( error.message ) {\n\t\t\t\tmessage = error.message;\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tif ( additionalData ) {\n\t\tObject.entries( additionalData ).forEach( ( [ key, value ] ) =>\n\t\t\tdata.append( key, value )\n\t\t);\n\t}\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/media-utils",
3
- "version": "4.1.0",
3
+ "version": "4.4.0",
4
4
  "description": "WordPress Media Upload Utils.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -26,14 +26,13 @@
26
26
  "module": "build-module/index.js",
27
27
  "dependencies": {
28
28
  "@babel/runtime": "^7.16.0",
29
- "@wordpress/api-fetch": "^6.7.0",
30
- "@wordpress/blob": "^3.10.0",
31
- "@wordpress/element": "^4.8.0",
32
- "@wordpress/i18n": "^4.10.0",
33
- "lodash": "^4.17.21"
29
+ "@wordpress/api-fetch": "^6.10.0",
30
+ "@wordpress/blob": "^3.13.0",
31
+ "@wordpress/element": "^4.11.0",
32
+ "@wordpress/i18n": "^4.13.0"
34
33
  },
35
34
  "publishConfig": {
36
35
  "access": "public"
37
36
  },
38
- "gitHead": "a3e0b62091e8a8bdf5e2518e42d60d7098af48cc"
37
+ "gitHead": "9d9d33bbdf317a4381b8ca1713e43bb50df653b3"
39
38
  }
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { castArray, defaults, pick } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -169,14 +164,10 @@ const getGalleryDetailsMediaFrame = () => {
169
164
  multiple: 'add',
170
165
  editable: false,
171
166
 
172
- library: wp.media.query(
173
- defaults(
174
- {
175
- type: 'image',
176
- },
177
- this.options.library
178
- )
179
- ),
167
+ library: wp.media.query( {
168
+ type: 'image',
169
+ ...this.options.library,
170
+ } ),
180
171
  } ),
181
172
  new wp.media.controller.EditImage( {
182
173
  model: this.options.editImage,
@@ -210,7 +201,12 @@ const slimImageObject = ( img ) => {
210
201
  'link',
211
202
  'caption',
212
203
  ];
213
- return pick( img, attrSet );
204
+ return attrSet.reduce( ( result, key ) => {
205
+ if ( img?.hasOwnProperty( key ) ) {
206
+ result[ key ] = img[ key ];
207
+ }
208
+ return result;
209
+ }, {} );
214
210
  };
215
211
 
216
212
  const getAttachmentsCollection = ( ids ) => {
@@ -375,13 +371,17 @@ class MediaUpload extends Component {
375
371
  }
376
372
 
377
373
  onOpen() {
374
+ const { value } = this.props;
378
375
  this.updateCollection();
379
376
 
377
+ //Handle active tab in media model on model open.
378
+ if ( this.props.mode ) {
379
+ this.frame.content.mode( this.props.mode );
380
+ }
381
+
380
382
  // Handle both this.props.value being either (number[]) multiple ids
381
383
  // (for galleries) or a (number) singular id (e.g. image block).
382
- const hasMedia = Array.isArray( this.props.value )
383
- ? !! this.props.value?.length
384
- : !! this.props.value;
384
+ const hasMedia = Array.isArray( value ) ? !! value?.length : !! value;
385
385
 
386
386
  if ( ! hasMedia ) {
387
387
  return;
@@ -389,17 +389,16 @@ class MediaUpload extends Component {
389
389
 
390
390
  const isGallery = this.props.gallery;
391
391
  const selection = this.frame.state().get( 'selection' );
392
+ const valueArray = Array.isArray( value ) ? value : [ value ];
392
393
 
393
394
  if ( ! isGallery ) {
394
- castArray( this.props.value ).forEach( ( id ) => {
395
+ valueArray.forEach( ( id ) => {
395
396
  selection.add( wp.media.attachment( id ) );
396
397
  } );
397
398
  }
398
399
 
399
400
  // Load the images so they are available in the media modal.
400
- const attachments = getAttachmentsCollection(
401
- castArray( this.props.value )
402
- );
401
+ const attachments = getAttachmentsCollection( valueArray );
403
402
 
404
403
  // Once attachments are loaded, set the current selection.
405
404
  attachments.more().done( function () {
@@ -209,9 +209,9 @@ describe( 'getMimeTypesArray', () => {
209
209
  } );
210
210
 
211
211
  it( 'should return the mime type passed and an additional mime type per extension supported', () => {
212
- expect(
213
- getMimeTypesArray( { 'jpg|jpeg|jpe': 'image/jpeg' } )
214
- ).toEqual( [ 'image/jpeg', 'image/jpg', 'image/jpeg', 'image/jpe' ] );
212
+ expect( getMimeTypesArray( { 'jpg|jpeg|jpe': 'image/jpeg' } ) ).toEqual(
213
+ [ 'image/jpeg', 'image/jpg', 'image/jpeg', 'image/jpe' ]
214
+ );
215
215
  } );
216
216
 
217
217
  it( 'should handle multiple mime types', () => {
@@ -1,20 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import {
5
- compact,
6
- flatMap,
7
- forEach,
8
- get,
9
- has,
10
- includes,
11
- map,
12
- noop,
13
- omit,
14
- some,
15
- startsWith,
16
- } from 'lodash';
17
-
18
1
  /**
19
2
  * WordPress dependencies
20
3
  */
@@ -22,6 +5,8 @@ import apiFetch from '@wordpress/api-fetch';
22
5
  import { createBlobURL, revokeBlobURL } from '@wordpress/blob';
23
6
  import { __, sprintf } from '@wordpress/i18n';
24
7
 
8
+ const noop = () => {};
9
+
25
10
  /**
26
11
  * Browsers may use unexpected mime types, and they differ from browser to browser.
27
12
  * This function computes a flexible array of mime types from the mime type structured provided by the server.
@@ -39,14 +24,18 @@ export function getMimeTypesArray( wpMimeTypesObject ) {
39
24
  if ( ! wpMimeTypesObject ) {
40
25
  return wpMimeTypesObject;
41
26
  }
42
- return flatMap( wpMimeTypesObject, ( mime, extensionsString ) => {
43
- const [ type ] = mime.split( '/' );
44
- const extensions = extensionsString.split( '|' );
45
- return [
46
- mime,
47
- ...map( extensions, ( extension ) => `${ type }/${ extension }` ),
48
- ];
49
- } );
27
+ return Object.entries( wpMimeTypesObject )
28
+ .map( ( [ extensionsString, mime ] ) => {
29
+ const [ type ] = mime.split( '/' );
30
+ const extensions = extensionsString.split( '|' );
31
+ return [
32
+ mime,
33
+ ...extensions.map(
34
+ ( extension ) => `${ type }/${ extension }`
35
+ ),
36
+ ];
37
+ } )
38
+ .flat();
50
39
  }
51
40
 
52
41
  /**
@@ -78,9 +67,9 @@ export async function uploadMedia( {
78
67
 
79
68
  const filesSet = [];
80
69
  const setAndUpdateFiles = ( idx, value ) => {
81
- revokeBlobURL( get( filesSet, [ idx, 'url' ] ) );
70
+ revokeBlobURL( filesSet[ idx ]?.url );
82
71
  filesSet[ idx ] = value;
83
- onFileChange( compact( filesSet ) );
72
+ onFileChange( filesSet.filter( Boolean ) );
84
73
  };
85
74
 
86
75
  // Allowed type specified by consumer.
@@ -88,20 +77,20 @@ export async function uploadMedia( {
88
77
  if ( ! allowedTypes ) {
89
78
  return true;
90
79
  }
91
- return some( allowedTypes, ( allowedType ) => {
80
+ return allowedTypes.some( ( allowedType ) => {
92
81
  // If a complete mimetype is specified verify if it matches exactly the mime type of the file.
93
- if ( includes( allowedType, '/' ) ) {
82
+ if ( allowedType.includes( '/' ) ) {
94
83
  return allowedType === fileType;
95
84
  }
96
85
  // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
97
- return startsWith( fileType, `${ allowedType }/` );
86
+ return fileType.startsWith( `${ allowedType }/` );
98
87
  } );
99
88
  };
100
89
 
101
90
  // Allowed types for the current WP_User.
102
91
  const allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );
103
92
  const isAllowedMimeTypeForUser = ( fileType ) => {
104
- return includes( allowedMimeTypesForUser, fileType );
93
+ return allowedMimeTypesForUser.includes( fileType );
105
94
  };
106
95
 
107
96
  const validFiles = [];
@@ -188,10 +177,12 @@ export async function uploadMedia( {
188
177
  mediaFile,
189
178
  additionalData
190
179
  );
180
+ // eslint-disable-next-line camelcase
181
+ const { alt_text, source_url, ...savedMediaProps } = savedMedia;
191
182
  const mediaObject = {
192
- ...omit( savedMedia, [ 'alt_text', 'source_url' ] ),
183
+ ...savedMediaProps,
193
184
  alt: savedMedia.alt_text,
194
- caption: get( savedMedia, [ 'caption', 'raw' ], '' ),
185
+ caption: savedMedia.caption?.raw ?? '',
195
186
  title: savedMedia.title.raw,
196
187
  url: savedMedia.source_url,
197
188
  };
@@ -200,8 +191,8 @@ export async function uploadMedia( {
200
191
  // Reset to empty on failure.
201
192
  setAndUpdateFiles( idx, null );
202
193
  let message;
203
- if ( has( error, [ 'message' ] ) ) {
204
- message = get( error, [ 'message' ] );
194
+ if ( error.message ) {
195
+ message = error.message;
205
196
  } else {
206
197
  message = sprintf(
207
198
  // translators: %s: file name
@@ -228,7 +219,11 @@ function createMediaFromFile( file, additionalData ) {
228
219
  // Create upload payload.
229
220
  const data = new window.FormData();
230
221
  data.append( 'file', file, file.name || file.type.replace( '/', '.' ) );
231
- forEach( additionalData, ( value, key ) => data.append( key, value ) );
222
+ if ( additionalData ) {
223
+ Object.entries( additionalData ).forEach( ( [ key, value ] ) =>
224
+ data.append( key, value )
225
+ );
226
+ }
232
227
  return apiFetch( {
233
228
  path: '/wp/v2/media',
234
229
  body: data,