@wordpress/block-editor
Version:
8 lines (7 loc) • 4.48 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/list-view/use-list-view-images.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n// Maximum number of images to display in a list view row.\nconst MAX_IMAGES = 3;\nconst IMAGE_GETTERS = {\n\t'core/image': ( { clientId, attributes } ) => {\n\t\tif ( attributes.url ) {\n\t\t\treturn {\n\t\t\t\turl: attributes.url,\n\t\t\t\talt: attributes.alt || '',\n\t\t\t\tclientId,\n\t\t\t};\n\t\t}\n\t},\n\t'core/cover': ( { clientId, attributes } ) => {\n\t\tif ( attributes.backgroundType === 'image' && attributes.url ) {\n\t\t\treturn {\n\t\t\t\turl: attributes.url,\n\t\t\t\talt: attributes.alt || '',\n\t\t\t\tclientId,\n\t\t\t};\n\t\t}\n\t},\n\t'core/media-text': ( { clientId, attributes } ) => {\n\t\tif ( attributes.mediaType === 'image' && attributes.mediaUrl ) {\n\t\t\treturn {\n\t\t\t\turl: attributes.mediaUrl,\n\t\t\t\talt: attributes.mediaAlt || '',\n\t\t\t\tclientId,\n\t\t\t};\n\t\t}\n\t},\n\t'core/gallery': ( { innerBlocks } ) => {\n\t\tconst images = [];\n\t\tconst getValues = !! innerBlocks?.length\n\t\t\t? IMAGE_GETTERS[ innerBlocks[ 0 ].name ]\n\t\t\t: undefined;\n\t\tif ( ! getValues ) {\n\t\t\treturn images;\n\t\t}\n\n\t\tfor ( const innerBlock of innerBlocks ) {\n\t\t\tconst img = getValues( innerBlock );\n\t\t\tif ( img ) {\n\t\t\t\timages.push( img );\n\t\t\t}\n\t\t\tif ( images.length >= MAX_IMAGES ) {\n\t\t\t\treturn images;\n\t\t\t}\n\t\t}\n\n\t\treturn images;\n\t},\n};\n\nfunction getImagesFromBlock( block, isExpanded ) {\n\tconst getImages = IMAGE_GETTERS[ block.name ];\n\tconst images = !! getImages ? getImages( block ) : undefined;\n\n\tif ( ! images ) {\n\t\treturn [];\n\t}\n\n\tif ( ! Array.isArray( images ) ) {\n\t\treturn [ images ];\n\t}\n\n\treturn isExpanded ? [] : images;\n}\n\n/**\n * Get a block's preview images for display within a list view row.\n *\n * TODO: Currently only supports images from the core/image and core/gallery\n * blocks. This should be expanded to support other blocks that have images,\n * potentially via an API that blocks can opt into / provide their own logic.\n *\n * @param {Object} props Hook properties.\n * @param {string} props.clientId The block's clientId.\n * @param {boolean} props.isExpanded Whether or not the block is expanded in the list view.\n * @return {Array} Images.\n */\nexport default function useListViewImages( { clientId, isExpanded } ) {\n\tconst { block } = useSelect(\n\t\t( select ) => {\n\t\t\treturn { block: select( blockEditorStore ).getBlock( clientId ) };\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst images = useMemo( () => {\n\t\treturn getImagesFromBlock( block, isExpanded );\n\t}, [ block, isExpanded ] );\n\n\treturn images;\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAwB;AACxB,kBAA0B;AAK1B,mBAA0C;AAG1C,IAAM,aAAa;AACnB,IAAM,gBAAgB;AAAA,EACrB,cAAc,CAAE,EAAE,UAAU,WAAW,MAAO;AAC7C,QAAK,WAAW,KAAM;AACrB,aAAO;AAAA,QACN,KAAK,WAAW;AAAA,QAChB,KAAK,WAAW,OAAO;AAAA,QACvB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,cAAc,CAAE,EAAE,UAAU,WAAW,MAAO;AAC7C,QAAK,WAAW,mBAAmB,WAAW,WAAW,KAAM;AAC9D,aAAO;AAAA,QACN,KAAK,WAAW;AAAA,QAChB,KAAK,WAAW,OAAO;AAAA,QACvB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,mBAAmB,CAAE,EAAE,UAAU,WAAW,MAAO;AAClD,QAAK,WAAW,cAAc,WAAW,WAAW,UAAW;AAC9D,aAAO;AAAA,QACN,KAAK,WAAW;AAAA,QAChB,KAAK,WAAW,YAAY;AAAA,QAC5B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,gBAAgB,CAAE,EAAE,YAAY,MAAO;AACtC,UAAM,SAAS,CAAC;AAChB,UAAM,YAAY,CAAC,CAAE,aAAa,SAC/B,cAAe,YAAa,CAAE,EAAE,IAAK,IACrC;AACH,QAAK,CAAE,WAAY;AAClB,aAAO;AAAA,IACR;AAEA,eAAY,cAAc,aAAc;AACvC,YAAM,MAAM,UAAW,UAAW;AAClC,UAAK,KAAM;AACV,eAAO,KAAM,GAAI;AAAA,MAClB;AACA,UAAK,OAAO,UAAU,YAAa;AAClC,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAEA,SAAS,mBAAoB,OAAO,YAAa;AAChD,QAAM,YAAY,cAAe,MAAM,IAAK;AAC5C,QAAM,SAAS,CAAC,CAAE,YAAY,UAAW,KAAM,IAAI;AAEnD,MAAK,CAAE,QAAS;AACf,WAAO,CAAC;AAAA,EACT;AAEA,MAAK,CAAE,MAAM,QAAS,MAAO,GAAI;AAChC,WAAO,CAAE,MAAO;AAAA,EACjB;AAEA,SAAO,aAAa,CAAC,IAAI;AAC1B;AAce,SAAR,kBAAoC,EAAE,UAAU,WAAW,GAAI;AACrE,QAAM,EAAE,MAAM,QAAI;AAAA,IACjB,CAAE,WAAY;AACb,aAAO,EAAE,OAAO,OAAQ,aAAAA,KAAiB,EAAE,SAAU,QAAS,EAAE;AAAA,IACjE;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AACA,QAAM,aAAS,wBAAS,MAAM;AAC7B,WAAO,mBAAoB,OAAO,UAAW;AAAA,EAC9C,GAAG,CAAE,OAAO,UAAW,CAAE;AAEzB,SAAO;AACR;",
"names": ["blockEditorStore"]
}