UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 5.16 kB
{ "version": 3, "sources": ["../../src/utils/hooks.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useLayoutEffect, useEffect, useRef } from '@wordpress/element';\nimport { getBlobByURL, isBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n */\nexport function useCanEditEntity( kind, name, recordId ) {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).canUser( 'update', {\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\tid: recordId,\n\t\t\t} ),\n\t\t[ kind, name, recordId ]\n\t);\n}\n\n/**\n * Handles uploading a media file from a blob URL on mount.\n *\n * @param {Object} args Upload media arguments.\n * @param {string} args.url Blob URL.\n * @param {?Array} args.allowedTypes Array of allowed media types.\n * @param {Function} args.onChange Function called when the media is uploaded.\n * @param {Function} args.onError Function called when an error happens.\n */\nexport function useUploadMediaFromBlobURL( args = {} ) {\n\tconst latestArgsRef = useRef( args );\n\tconst hasUploadStartedRef = useRef( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tuseLayoutEffect( () => {\n\t\tlatestArgsRef.current = args;\n\t} );\n\n\tuseEffect( () => {\n\t\t// Uploading is a special effect that can't be canceled via the cleanup method.\n\t\t// The extra check avoids duplicate uploads in development mode (React.StrictMode).\n\t\tif ( hasUploadStartedRef.current ) {\n\t\t\treturn;\n\t\t}\n\t\tif (\n\t\t\t! latestArgsRef.current.url ||\n\t\t\t! isBlobURL( latestArgsRef.current.url )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst file = getBlobByURL( latestArgsRef.current.url );\n\t\tif ( ! file ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { url, allowedTypes, onChange, onError } = latestArgsRef.current;\n\t\tconst { mediaUpload } = getSettings();\n\n\t\tif ( ! mediaUpload ) {\n\t\t\treturn;\n\t\t}\n\n\t\thasUploadStartedRef.current = true;\n\n\t\tmediaUpload( {\n\t\t\tfilesList: [ file ],\n\t\t\tallowedTypes,\n\t\t\tonFileChange: ( [ media ] ) => {\n\t\t\t\tif ( isBlobURL( media?.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\trevokeBlobURL( url );\n\t\t\t\tonChange( media );\n\t\t\t\thasUploadStartedRef.current = false;\n\t\t\t},\n\t\t\tonError: ( message ) => {\n\t\t\t\trevokeBlobURL( url );\n\t\t\t\tonError( message );\n\t\t\t\thasUploadStartedRef.current = false;\n\t\t\t},\n\t\t} );\n\t}, [ getSettings ] );\n}\n\nexport function useDefaultAvatar() {\n\tconst avatarURL = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst { __experimentalDiscussionSettings } = getSettings();\n\t\treturn __experimentalDiscussionSettings?.avatarURL ?? '';\n\t}, [] );\n\treturn avatarURL;\n}\n\nexport function useToolsPanelDropdownMenuProps() {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAA0B;AAC1B,qBAAmD;AACnD,kBAAuD;AACvD,0BAA0C;AAC1C,uBAAmC;AACnC,qBAAiC;AAS1B,SAAS,iBAAkB,MAAM,MAAM,UAAW;AACxD,aAAO;AAAA,IACN,CAAE,WACD,OAAQ,iBAAAA,KAAU,EAAE,QAAS,UAAU;AAAA,MACtC;AAAA,MACA;AAAA,MACA,IAAI;AAAA,IACL,CAAE;AAAA,IACH,CAAE,MAAM,MAAM,QAAS;AAAA,EACxB;AACD;AAWO,SAAS,0BAA2B,OAAO,CAAC,GAAI;AACtD,QAAM,oBAAgB,uBAAQ,IAAK;AACnC,QAAM,0BAAsB,uBAAQ,KAAM;AAC1C,QAAM,EAAE,YAAY,QAAI,uBAAW,oBAAAC,KAAiB;AAEpD,sCAAiB,MAAM;AACtB,kBAAc,UAAU;AAAA,EACzB,CAAE;AAEF,gCAAW,MAAM;AAGhB,QAAK,oBAAoB,SAAU;AAClC;AAAA,IACD;AACA,QACC,CAAE,cAAc,QAAQ,OACxB,KAAE,uBAAW,cAAc,QAAQ,GAAI,GACtC;AACD;AAAA,IACD;AAEA,UAAM,WAAO,0BAAc,cAAc,QAAQ,GAAI;AACrD,QAAK,CAAE,MAAO;AACb;AAAA,IACD;AAEA,UAAM,EAAE,KAAK,cAAc,UAAU,QAAQ,IAAI,cAAc;AAC/D,UAAM,EAAE,YAAY,IAAI,YAAY;AAEpC,QAAK,CAAE,aAAc;AACpB;AAAA,IACD;AAEA,wBAAoB,UAAU;AAE9B,gBAAa;AAAA,MACZ,WAAW,CAAE,IAAK;AAAA,MAClB;AAAA,MACA,cAAc,CAAE,CAAE,KAAM,MAAO;AAC9B,gBAAK,uBAAW,OAAO,GAAI,GAAI;AAC9B;AAAA,QACD;AAEA,uCAAe,GAAI;AACnB,iBAAU,KAAM;AAChB,4BAAoB,UAAU;AAAA,MAC/B;AAAA,MACA,SAAS,CAAE,YAAa;AACvB,uCAAe,GAAI;AACnB,gBAAS,OAAQ;AACjB,4BAAoB,UAAU;AAAA,MAC/B;AAAA,IACD,CAAE;AAAA,EACH,GAAG,CAAE,WAAY,CAAE;AACpB;AAEO,SAAS,mBAAmB;AAClC,QAAM,gBAAY,uBAAW,CAAE,WAAY;AAC1C,UAAM,EAAE,YAAY,IAAI,OAAQ,oBAAAA,KAAiB;AACjD,UAAM,EAAE,iCAAiC,IAAI,YAAY;AACzD,WAAO,kCAAkC,aAAa;AAAA,EACvD,GAAG,CAAC,CAAE;AACN,SAAO;AACR;AAEO,SAAS,iCAAiC;AAChD,QAAM,eAAW,iCAAkB,UAAU,GAAI;AACjD,SAAO,CAAE,WACN;AAAA,IACA,cAAc;AAAA,MACb,WAAW;AAAA;AAAA,MAEX,QAAQ;AAAA,IACT;AAAA,EACA,IACA,CAAC;AACL;", "names": ["coreStore", "blockEditorStore"] }