{
  "version": 3,
  "sources": ["../../../src/utils/media-upload/index.js"],
  "sourcesContent": ["import { v4 as uuid } from 'uuid';\nimport { select, dispatch } from '@wordpress/data';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport { uploadMedia } from '@wordpress/media-utils';\nimport { store as editorStore } from '../../store';\nimport {\n\taddFiles as trackStart,\n\tadvance as trackAdvance,\n} from '../../components/upload-progress-snackbar/tracker';\n\nconst noop = () => {};\n\n/**\n * Upload a media file when the file upload button is activated.\n * Wrapper around uploadMedia() that injects the current post ID.\n *\n * @param {Object}   $0                   Parameters object passed to the function.\n * @param {?Object}  $0.additionalData    Additional data to include in the request.\n * @param {string}   $0.allowedTypes      Array with the types of media that can be uploaded, if unset all types are allowed.\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 {Function} $0.onSuccess         Function called after the final representation of the file is available.\n * @param {boolean}  $0.multiple          Whether to allow multiple files to be uploaded.\n * @param {boolean}  $0.isTransportOnly   Whether the caller owns the upload lifecycle UX (progress tracking and\n *                                        save locking) and uses this function only as its server transport. Set\n *                                        by the `@wordpress/upload-media` queue, which counts its own items for\n *                                        the progress snackbar and locks saving via `useUploadSaveLock`.\n */\nexport default function mediaUpload( {\n\tadditionalData = {},\n\tallowedTypes,\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\tonSuccess,\n\tmultiple = true,\n\tisTransportOnly = false,\n} ) {\n\tconst { receiveEntityRecords } = dispatch( coreDataStore );\n\tconst { getCurrentPost, getEditorSettings } = select( editorStore );\n\tconst {\n\t\tlockPostAutosaving,\n\t\tunlockPostAutosaving,\n\t\tlockPostSaving,\n\t\tunlockPostSaving,\n\t} = dispatch( editorStore );\n\n\tconst wpAllowedMimeTypes = getEditorSettings().allowedMimeTypes;\n\tconst lockKey = `image-upload-${ uuid() }`;\n\tmaxUploadFileSize =\n\t\tmaxUploadFileSize || getEditorSettings().maxUploadFileSize;\n\tconst currentPost = getCurrentPost();\n\t// Templates and template parts' numerical ID is stored in `wp_id`.\n\tconst currentPostId =\n\t\ttypeof currentPost?.id === 'number'\n\t\t\t? currentPost.id\n\t\t\t: currentPost?.wp_id;\n\tconst clearSaveLock = () => {\n\t\tunlockPostSaving( lockKey );\n\t\tunlockPostAutosaving( lockKey );\n\t};\n\n\t// Lock saving immediately when the upload starts. Skipped for transport\n\t// calls from the `@wordpress/upload-media` queue, whose items already\n\t// lock saving via useUploadSaveLock in the editor provider.\n\tif ( ! isTransportOnly ) {\n\t\tlockPostSaving( lockKey );\n\t\tlockPostAutosaving( lockKey );\n\t}\n\n\tconst postData = currentPostId ? { post: currentPostId } : {};\n\n\t// Track this batch for the upload progress snackbar. Skipped for\n\t// transport calls from the `@wordpress/upload-media` queue — its items\n\t// are already counted by the snackbar, so registering them here would\n\t// double-count them (see gutenberg#80369).\n\tif ( ! isTransportOnly ) {\n\t\tconst trackingFiles = Array.from( filesList ).map(\n\t\t\t( f ) => f?.name || ''\n\t\t);\n\t\ttrackStart( trackingFiles );\n\t}\n\tlet lastCompletedCount = 0;\n\n\tuploadMedia( {\n\t\tallowedTypes,\n\t\tfilesList,\n\t\tonFileChange: ( files ) => {\n\t\t\tonFileChange?.( files );\n\n\t\t\t// Files are initially received by `onFileChange` as a blob.\n\t\t\t// After that the function is called again with the file as an entity.\n\t\t\t// For core-data, we only care about receiving/invalidating entities.\n\t\t\tconst entityFiles = files.filter( ( _file ) => _file?.id );\n\t\t\tif ( entityFiles?.length ) {\n\t\t\t\tconst invalidateCache = true;\n\t\t\t\treceiveEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'attachment',\n\t\t\t\t\tentityFiles,\n\t\t\t\t\tundefined,\n\t\t\t\t\tinvalidateCache\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Unlock saving once all files have been uploaded (all have IDs).\n\t\t\tif ( ! isTransportOnly && entityFiles.length === files.length ) {\n\t\t\t\tclearSaveLock();\n\t\t\t}\n\n\t\t\t// Advance the snackbar tracker for newly-completed files.\n\t\t\tif ( ! isTransportOnly ) {\n\t\t\t\tconst completedCount = entityFiles.length;\n\t\t\t\tif ( completedCount > lastCompletedCount ) {\n\t\t\t\t\ttrackAdvance( completedCount - lastCompletedCount );\n\t\t\t\t\tlastCompletedCount = completedCount;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonSuccess,\n\t\tadditionalData: {\n\t\t\t...postData,\n\t\t\t...additionalData,\n\t\t},\n\t\tmaxUploadFileSize,\n\t\tonError: ( { message } ) => {\n\t\t\tif ( ! isTransportOnly ) {\n\t\t\t\tclearSaveLock();\n\t\t\t\t// Failed files still count as \"done\" for the snackbar.\n\t\t\t\ttrackAdvance( 1 );\n\t\t\t}\n\t\t\tonError( message );\n\t\t},\n\t\twpAllowedMimeTypes,\n\t\tmultiple,\n\t} );\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA2B;AAC3B,kBAAiC;AACjC,uBAAuC;AACvC,yBAA4B;AAC5B,mBAAqC;AACrC,qBAGO;AAEP,IAAM,OAAO,MAAM;AAAC;AAoBL,SAAR,YAA8B;AAAA,EACpC,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AACnB,GAAI;AACH,QAAM,EAAE,qBAAqB,QAAI,sBAAU,iBAAAA,KAAc;AACzD,QAAM,EAAE,gBAAgB,kBAAkB,QAAI,oBAAQ,aAAAC,KAAY;AAClE,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,QAAI,sBAAU,aAAAA,KAAY;AAE1B,QAAM,qBAAqB,kBAAkB,EAAE;AAC/C,QAAM,UAAU,oBAAiB,YAAAC,IAAK,CAAE;AACxC,sBACC,qBAAqB,kBAAkB,EAAE;AAC1C,QAAM,cAAc,eAAe;AAEnC,QAAM,gBACL,OAAO,aAAa,OAAO,WACxB,YAAY,KACZ,aAAa;AACjB,QAAM,gBAAgB,MAAM;AAC3B,qBAAkB,OAAQ;AAC1B,yBAAsB,OAAQ;AAAA,EAC/B;AAKA,MAAK,CAAE,iBAAkB;AACxB,mBAAgB,OAAQ;AACxB,uBAAoB,OAAQ;AAAA,EAC7B;AAEA,QAAM,WAAW,gBAAgB,EAAE,MAAM,cAAc,IAAI,CAAC;AAM5D,MAAK,CAAE,iBAAkB;AACxB,UAAM,gBAAgB,MAAM,KAAM,SAAU,EAAE;AAAA,MAC7C,CAAE,MAAO,GAAG,QAAQ;AAAA,IACrB;AACA,uBAAAC,UAAY,aAAc;AAAA,EAC3B;AACA,MAAI,qBAAqB;AAEzB,sCAAa;AAAA,IACZ;AAAA,IACA;AAAA,IACA,cAAc,CAAE,UAAW;AAC1B,qBAAgB,KAAM;AAKtB,YAAM,cAAc,MAAM,OAAQ,CAAE,UAAW,OAAO,EAAG;AACzD,UAAK,aAAa,QAAS;AAC1B,cAAM,kBAAkB;AACxB;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAGA,UAAK,CAAE,mBAAmB,YAAY,WAAW,MAAM,QAAS;AAC/D,sBAAc;AAAA,MACf;AAGA,UAAK,CAAE,iBAAkB;AACxB,cAAM,iBAAiB,YAAY;AACnC,YAAK,iBAAiB,oBAAqB;AAC1C,6BAAAC,SAAc,iBAAiB,kBAAmB;AAClD,+BAAqB;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,MACf,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS,CAAE,EAAE,QAAQ,MAAO;AAC3B,UAAK,CAAE,iBAAkB;AACxB,sBAAc;AAEd,2BAAAA,SAAc,CAAE;AAAA,MACjB;AACA,cAAS,OAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AACH;",
  "names": ["coreDataStore", "editorStore", "uuid", "trackStart", "trackAdvance"]
}
