@wordpress/block-editor 12.10.2 → 12.10.4
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/build/components/block-styles/index.js +1 -2
- package/build/components/block-styles/index.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +17 -5
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +22 -0
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/iframe/index.js +9 -1
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/inserter/block-patterns-filter.js +11 -10
- package/build/components/inserter/block-patterns-filter.js.map +1 -1
- package/build/components/inserter/block-patterns-tab.js +1 -1
- package/build/components/inserter/block-patterns-tab.js.map +1 -1
- package/build/components/inserter/media-tab/hooks.js +4 -33
- package/build/components/inserter/media-tab/hooks.js.map +1 -1
- package/build/components/link-control/search-item.js +36 -1
- package/build/components/link-control/search-item.js.map +1 -1
- package/build/components/list-view/block.js +1 -32
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/branch.js +8 -1
- package/build/components/list-view/branch.js.map +1 -1
- package/build/components/list-view/index.js +8 -3
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/utils.js +35 -0
- package/build/components/list-view/utils.js.map +1 -1
- package/build/components/tool-selector/index.js +2 -1
- package/build/components/tool-selector/index.js.map +1 -1
- package/build/hooks/block-rename-ui.js +5 -2
- package/build/hooks/block-rename-ui.js.map +1 -1
- package/build/store/actions.js +8 -12
- package/build/store/actions.js.map +1 -1
- package/build/store/private-selectors.js +55 -1
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +19 -1
- package/build/store/reducer.js.map +1 -1
- package/build/utils/transform-styles/transforms/wrap.js +5 -0
- package/build/utils/transform-styles/transforms/wrap.js.map +1 -1
- package/build-module/components/block-styles/index.js +1 -2
- package/build-module/components/block-styles/index.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +17 -6
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +21 -0
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/iframe/index.js +9 -1
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-filter.js +13 -12
- package/build-module/components/inserter/block-patterns-filter.js.map +1 -1
- package/build-module/components/inserter/block-patterns-tab.js +1 -1
- package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
- package/build-module/components/inserter/media-tab/hooks.js +5 -34
- package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
- package/build-module/components/link-control/search-item.js +37 -2
- package/build-module/components/link-control/search-item.js.map +1 -1
- package/build-module/components/list-view/block.js +3 -34
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/branch.js +8 -1
- package/build-module/components/list-view/branch.js.map +1 -1
- package/build-module/components/list-view/index.js +8 -3
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/utils.js +34 -0
- package/build-module/components/list-view/utils.js.map +1 -1
- package/build-module/components/tool-selector/index.js +2 -1
- package/build-module/components/tool-selector/index.js.map +1 -1
- package/build-module/hooks/block-rename-ui.js +5 -2
- package/build-module/hooks/block-rename-ui.js.map +1 -1
- package/build-module/store/actions.js +8 -12
- package/build-module/store/actions.js.map +1 -1
- package/build-module/store/private-selectors.js +52 -0
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +18 -1
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/utils/transform-styles/transforms/wrap.js +5 -0
- package/build-module/utils/transform-styles/transforms/wrap.js.map +1 -1
- package/build-style/style-rtl.css +1 -1
- package/build-style/style.css +1 -1
- package/package.json +32 -32
- package/src/components/block-styles/index.js +1 -4
- package/src/components/global-styles/hooks.js +1 -1
- package/src/components/global-styles/test/use-global-styles-output.js +39 -0
- package/src/components/global-styles/use-global-styles-output.js +26 -6
- package/src/components/global-styles/utils.js +21 -0
- package/src/components/iframe/index.js +8 -1
- package/src/components/inserter/block-patterns-filter.js +22 -10
- package/src/components/inserter/block-patterns-tab.js +0 -3
- package/src/components/inserter/media-tab/hooks.js +10 -44
- package/src/components/inserter/style.scss +1 -1
- package/src/components/link-control/search-item.js +55 -2
- package/src/components/list-view/block.js +3 -43
- package/src/components/list-view/branch.js +11 -1
- package/src/components/list-view/index.js +8 -4
- package/src/components/list-view/utils.js +37 -0
- package/src/components/tool-selector/index.js +1 -1
- package/src/hooks/block-rename-ui.js +14 -10
- package/src/store/actions.js +7 -11
- package/src/store/private-selectors.js +72 -0
- package/src/store/reducer.js +17 -0
- package/src/store/test/actions.js +10 -16
- package/src/utils/transform-styles/transforms/test/__snapshots__/wrap.js.snap +13 -6
- package/src/utils/transform-styles/transforms/test/wrap.js +9 -0
- package/src/utils/transform-styles/transforms/wrap.js +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","useRef","useMemo","useSelect","store","blockEditorStore","useMediaResults","category","query","mediaList","setMediaList","isLoading","setIsLoading","lastRequest","key","JSON","stringify","name","current","_media","fetch","Object","values","useInserterMediaCategories","inserterMediaCategories","allowedMimeTypes","enableOpenverseMediaCategory","select","settings","getSettings","allowedCategories","filter","some","mimeType","startsWith","mediaType","useMediaCategories","rootClientId","categories","setCategories","canInsertImage","canInsertVideo","canInsertAudio","canInsertBlockType","_categories","categoriesHaveMedia","Map","Promise","all","map","isExternalResource","results","per_page","e","length","canInsertMediaType","image","video","audio","forEach","get","push"],"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useRef, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/** @typedef {import('./api').InserterMediaRequest} InserterMediaRequest */\n/** @typedef {import('./api').InserterMediaItem} InserterMediaItem */\n\n/**\n * Fetches media items based on the provided category.\n * Each media category is responsible for providing a `fetch` function.\n *\n * @param {Object} category The media category to fetch results for.\n * @param {InserterMediaRequest} query The query args to use for the request.\n * @return {InserterMediaItem[]} The media results.\n */\nexport function useMediaResults( category, query = {} ) {\n\tconst [ mediaList, setMediaList ] = useState();\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\t// We need to keep track of the last request made because\n\t// multiple request can be fired without knowing the order\n\t// of resolution, and we need to ensure we are showing\n\t// the results of the last request.\n\t// In the future we could use AbortController to cancel previous\n\t// requests, but we don't for now as it involves adding support\n\t// for this to `core-data` package.\n\tconst lastRequest = useRef();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst key = JSON.stringify( {\n\t\t\t\tcategory: category.name,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tlastRequest.current = key;\n\t\t\tsetIsLoading( true );\n\t\t\tsetMediaList( [] ); // Empty the previous results.\n\t\t\tconst _media = await category.fetch?.( query );\n\t\t\tif ( key === lastRequest.current ) {\n\t\t\t\tsetMediaList( _media );\n\t\t\t\tsetIsLoading( false );\n\t\t\t}\n\t\t} )();\n\t}, [ category.name, ...Object.values( query ) ] );\n\treturn { mediaList, isLoading };\n}\n\nfunction useInserterMediaCategories() {\n\tconst {\n\t\tinserterMediaCategories,\n\t\tallowedMimeTypes,\n\t\tenableOpenverseMediaCategory,\n\t} = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\treturn {\n\t\t\tinserterMediaCategories: settings.inserterMediaCategories,\n\t\t\tallowedMimeTypes: settings.allowedMimeTypes,\n\t\t\tenableOpenverseMediaCategory: settings.enableOpenverseMediaCategory,\n\t\t};\n\t}, [] );\n\t// The allowed `mime_types` can be altered by `upload_mimes` filter and restrict\n\t// some of them. In this case we shouldn't add the category to the available media\n\t// categories list in the inserter.\n\tconst allowedCategories = useMemo( () => {\n\t\tif ( ! inserterMediaCategories || ! allowedMimeTypes ) {\n\t\t\treturn;\n\t\t}\n\t\treturn inserterMediaCategories.filter( ( category ) => {\n\t\t\t// Check if Openverse category is enabled.\n\t\t\tif (\n\t\t\t\t! enableOpenverseMediaCategory &&\n\t\t\t\tcategory.name === 'openverse'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Object.values( allowedMimeTypes ).some( ( mimeType ) =>\n\t\t\t\tmimeType.startsWith( `${ category.mediaType }/` )\n\t\t\t);\n\t\t} );\n\t}, [\n\t\tinserterMediaCategories,\n\t\tallowedMimeTypes,\n\t\tenableOpenverseMediaCategory,\n\t] );\n\treturn allowedCategories;\n}\n\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\tconst { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t'core/image',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t'core/video',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t'core/audio',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tconst inserterMediaCategories = useInserterMediaCategories();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst _categories = [];\n\t\t\t// If `inserterMediaCategories` is not defined in\n\t\t\t// block editor settings, do not show any media categories.\n\t\t\tif ( ! inserterMediaCategories ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Loop through categories to check if they have at least one media item.\n\t\t\tconst categoriesHaveMedia = new Map(\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tinserterMediaCategories.map( async ( category ) => {\n\t\t\t\t\t\t// Some sources are external and we don't need to make a request.\n\t\t\t\t\t\tif ( category.isExternalResource ) {\n\t\t\t\t\t\t\treturn [ category.name, true ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ category.name, !! results.length ];\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t);\n\t\t\t// We need to filter out categories that don't have any media items or\n\t\t\t// whose corresponding block type is not allowed to be inserted, based\n\t\t\t// on the category's `mediaType`.\n\t\t\tconst canInsertMediaType = {\n\t\t\t\timage: canInsertImage,\n\t\t\t\tvideo: canInsertVideo,\n\t\t\t\taudio: canInsertAudio,\n\t\t\t};\n\t\t\tinserterMediaCategories.forEach( ( category ) => {\n\t\t\t\tif (\n\t\t\t\t\tcanInsertMediaType[ category.mediaType ] &&\n\t\t\t\t\tcategoriesHaveMedia.get( category.name )\n\t\t\t\t) {\n\t\t\t\t\t_categories.push( category );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !! _categories.length ) {\n\t\t\t\tsetCategories( _categories );\n\t\t\t}\n\t\t} )();\n\t}, [\n\t\tcanInsertImage,\n\t\tcanInsertVideo,\n\t\tcanInsertAudio,\n\t\tinserterMediaCategories,\n\t] );\n\treturn categories;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useEffect","useState","useRef","useSelect","store","blockEditorStore","unlock","useMediaResults","category","query","mediaList","setMediaList","isLoading","setIsLoading","lastRequest","key","JSON","stringify","name","current","_media","fetch","Object","values","useMediaCategories","rootClientId","categories","setCategories","inserterMediaCategories","select","getInserterMediaCategories","canInsertImage","canInsertVideo","canInsertAudio","canInsertBlockType","_categories","categoriesHaveMedia","Map","Promise","all","map","isExternalResource","results","per_page","e","length","canInsertMediaType","image","video","audio","forEach","mediaType","get","push"],"sources":["@wordpress/block-editor/src/components/inserter/media-tab/hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useState, useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/** @typedef {import('../../../store/actions').InserterMediaRequest} InserterMediaRequest */\n/** @typedef {import('../../../store/actions').InserterMediaItem} InserterMediaItem */\n\n/**\n * Fetches media items based on the provided category.\n * Each media category is responsible for providing a `fetch` function.\n *\n * @param {Object} category The media category to fetch results for.\n * @param {InserterMediaRequest} query The query args to use for the request.\n * @return {InserterMediaItem[]} The media results.\n */\nexport function useMediaResults( category, query = {} ) {\n\tconst [ mediaList, setMediaList ] = useState();\n\tconst [ isLoading, setIsLoading ] = useState( false );\n\t// We need to keep track of the last request made because\n\t// multiple request can be fired without knowing the order\n\t// of resolution, and we need to ensure we are showing\n\t// the results of the last request.\n\t// In the future we could use AbortController to cancel previous\n\t// requests, but we don't for now as it involves adding support\n\t// for this to `core-data` package.\n\tconst lastRequest = useRef();\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst key = JSON.stringify( {\n\t\t\t\tcategory: category.name,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tlastRequest.current = key;\n\t\t\tsetIsLoading( true );\n\t\t\tsetMediaList( [] ); // Empty the previous results.\n\t\t\tconst _media = await category.fetch?.( query );\n\t\t\tif ( key === lastRequest.current ) {\n\t\t\t\tsetMediaList( _media );\n\t\t\t\tsetIsLoading( false );\n\t\t\t}\n\t\t} )();\n\t}, [ category.name, ...Object.values( query ) ] );\n\treturn { mediaList, isLoading };\n}\n\nexport function useMediaCategories( rootClientId ) {\n\tconst [ categories, setCategories ] = useState( [] );\n\n\tconst inserterMediaCategories = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getInserterMediaCategories(),\n\t\t[]\n\t);\n\tconst { canInsertImage, canInsertVideo, canInsertAudio } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { canInsertBlockType } = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanInsertImage: canInsertBlockType(\n\t\t\t\t\t'core/image',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertVideo: canInsertBlockType(\n\t\t\t\t\t'core/video',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t\tcanInsertAudio: canInsertBlockType(\n\t\t\t\t\t'core/audio',\n\t\t\t\t\trootClientId\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\tuseEffect( () => {\n\t\t( async () => {\n\t\t\tconst _categories = [];\n\t\t\t// If `inserterMediaCategories` is not defined in\n\t\t\t// block editor settings, do not show any media categories.\n\t\t\tif ( ! inserterMediaCategories ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Loop through categories to check if they have at least one media item.\n\t\t\tconst categoriesHaveMedia = new Map(\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tinserterMediaCategories.map( async ( category ) => {\n\t\t\t\t\t\t// Some sources are external and we don't need to make a request.\n\t\t\t\t\t\tif ( category.isExternalResource ) {\n\t\t\t\t\t\t\treturn [ category.name, true ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet results = [];\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresults = await category.fetch( {\n\t\t\t\t\t\t\t\tper_page: 1,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t// If the request fails, we shallow the error and just don't show\n\t\t\t\t\t\t\t// the category, in order to not break the media tab.\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [ category.name, !! results.length ];\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t);\n\t\t\t// We need to filter out categories that don't have any media items or\n\t\t\t// whose corresponding block type is not allowed to be inserted, based\n\t\t\t// on the category's `mediaType`.\n\t\t\tconst canInsertMediaType = {\n\t\t\t\timage: canInsertImage,\n\t\t\t\tvideo: canInsertVideo,\n\t\t\t\taudio: canInsertAudio,\n\t\t\t};\n\t\t\tinserterMediaCategories.forEach( ( category ) => {\n\t\t\t\tif (\n\t\t\t\t\tcanInsertMediaType[ category.mediaType ] &&\n\t\t\t\t\tcategoriesHaveMedia.get( category.name )\n\t\t\t\t) {\n\t\t\t\t\t_categories.push( category );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !! _categories.length ) {\n\t\t\t\tsetCategories( _categories );\n\t\t\t}\n\t\t} )();\n\t}, [\n\t\tcanInsertImage,\n\t\tcanInsertVideo,\n\t\tcanInsertAudio,\n\t\tinserterMediaCategories,\n\t] );\n\treturn categories;\n}\n"],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@ import { __ } from '@wordpress/i18n';
|
|
|
6
6
|
import { MenuItem, TextHighlight } from '@wordpress/components';
|
|
7
7
|
import { Icon, globe, page, tag, postList, category, file } from '@wordpress/icons';
|
|
8
8
|
import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
|
|
9
|
-
import { safeDecodeURI, filterURLForDisplay } from '@wordpress/url';
|
|
9
|
+
import { safeDecodeURI, filterURLForDisplay, getPath } from '@wordpress/url';
|
|
10
|
+
import { pipe } from '@wordpress/compose';
|
|
10
11
|
const ICONS_MAP = {
|
|
11
12
|
post: postList,
|
|
12
13
|
page,
|
|
@@ -32,6 +33,40 @@ function SearchItemIcon({
|
|
|
32
33
|
}
|
|
33
34
|
return null;
|
|
34
35
|
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Adds a leading slash to a url if it doesn't already have one.
|
|
39
|
+
* @param {string} url the url to add a leading slash to.
|
|
40
|
+
* @return {string} the url with a leading slash.
|
|
41
|
+
*/
|
|
42
|
+
function addLeadingSlash(url) {
|
|
43
|
+
const trimmedURL = url?.trim();
|
|
44
|
+
if (!trimmedURL?.length) return url;
|
|
45
|
+
return url?.replace(/^\/?/, '/');
|
|
46
|
+
}
|
|
47
|
+
function removeTrailingSlash(url) {
|
|
48
|
+
const trimmedURL = url?.trim();
|
|
49
|
+
if (!trimmedURL?.length) return url;
|
|
50
|
+
return url?.replace(/\/$/, '');
|
|
51
|
+
}
|
|
52
|
+
const partialRight = (fn, ...partialArgs) => (...args) => fn(...args, ...partialArgs);
|
|
53
|
+
const defaultTo = d => v => {
|
|
54
|
+
return v === null || v === undefined || v !== v ? d : v;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Prepares a URL for display in the UI.
|
|
59
|
+
* - decodes the URL.
|
|
60
|
+
* - filters it (removes protocol, www, etc.).
|
|
61
|
+
* - truncates it if necessary.
|
|
62
|
+
* - adds a leading slash.
|
|
63
|
+
* @param {string} url the url.
|
|
64
|
+
* @return {string} the processed url to display.
|
|
65
|
+
*/
|
|
66
|
+
function getURLForDisplay(url) {
|
|
67
|
+
if (!url) return url;
|
|
68
|
+
return pipe(safeDecodeURI, getPath, defaultTo(''), partialRight(filterURLForDisplay, 24), removeTrailingSlash, addLeadingSlash)(url);
|
|
69
|
+
}
|
|
35
70
|
export const LinkControlSearchItem = ({
|
|
36
71
|
itemProps,
|
|
37
72
|
suggestion,
|
|
@@ -40,7 +75,7 @@ export const LinkControlSearchItem = ({
|
|
|
40
75
|
isURL = false,
|
|
41
76
|
shouldShowType = false
|
|
42
77
|
}) => {
|
|
43
|
-
const info = isURL ? __('Press ENTER to add this link') :
|
|
78
|
+
const info = isURL ? __('Press ENTER to add this link') : getURLForDisplay(suggestion.url);
|
|
44
79
|
return createElement(MenuItem, {
|
|
45
80
|
...itemProps,
|
|
46
81
|
info: info,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","MenuItem","TextHighlight","Icon","globe","page","tag","postList","category","file","__unstableStripHTML","stripHTML","safeDecodeURI","filterURLForDisplay","ICONS_MAP","post","post_tag","attachment","SearchItemIcon","isURL","suggestion","icon","type","createElement","className","LinkControlSearchItem","itemProps","searchTerm","onClick","shouldShowType","info","
|
|
1
|
+
{"version":3,"names":["__","MenuItem","TextHighlight","Icon","globe","page","tag","postList","category","file","__unstableStripHTML","stripHTML","safeDecodeURI","filterURLForDisplay","getPath","pipe","ICONS_MAP","post","post_tag","attachment","SearchItemIcon","isURL","suggestion","icon","type","createElement","className","addLeadingSlash","url","trimmedURL","trim","length","replace","removeTrailingSlash","partialRight","fn","partialArgs","args","defaultTo","d","v","undefined","getURLForDisplay","LinkControlSearchItem","itemProps","searchTerm","onClick","shouldShowType","info","iconPosition","shortcut","getVisualTypeName","text","title","highlight","isFrontPage"],"sources":["@wordpress/block-editor/src/components/link-control/search-item.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuItem, TextHighlight } from '@wordpress/components';\nimport {\n\tIcon,\n\tglobe,\n\tpage,\n\ttag,\n\tpostList,\n\tcategory,\n\tfile,\n} from '@wordpress/icons';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { safeDecodeURI, filterURLForDisplay, getPath } from '@wordpress/url';\nimport { pipe } from '@wordpress/compose';\n\nconst ICONS_MAP = {\n\tpost: postList,\n\tpage,\n\tpost_tag: tag,\n\tcategory,\n\tattachment: file,\n};\n\nfunction SearchItemIcon( { isURL, suggestion } ) {\n\tlet icon = null;\n\n\tif ( isURL ) {\n\t\ticon = globe;\n\t} else if ( suggestion.type in ICONS_MAP ) {\n\t\ticon = ICONS_MAP[ suggestion.type ];\n\t}\n\n\tif ( icon ) {\n\t\treturn (\n\t\t\t<Icon\n\t\t\t\tclassName=\"block-editor-link-control__search-item-icon\"\n\t\t\t\ticon={ icon }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n\n/**\n * Adds a leading slash to a url if it doesn't already have one.\n * @param {string} url the url to add a leading slash to.\n * @return {string} the url with a leading slash.\n */\nfunction addLeadingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) return url;\n\n\treturn url?.replace( /^\\/?/, '/' );\n}\n\nfunction removeTrailingSlash( url ) {\n\tconst trimmedURL = url?.trim();\n\n\tif ( ! trimmedURL?.length ) return url;\n\n\treturn url?.replace( /\\/$/, '' );\n}\n\nconst partialRight =\n\t( fn, ...partialArgs ) =>\n\t( ...args ) =>\n\t\tfn( ...args, ...partialArgs );\n\nconst defaultTo = ( d ) => ( v ) => {\n\treturn v === null || v === undefined || v !== v ? d : v;\n};\n\n/**\n * Prepares a URL for display in the UI.\n * - decodes the URL.\n * - filters it (removes protocol, www, etc.).\n * - truncates it if necessary.\n * - adds a leading slash.\n * @param {string} url the url.\n * @return {string} the processed url to display.\n */\nfunction getURLForDisplay( url ) {\n\tif ( ! url ) return url;\n\n\treturn pipe(\n\t\tsafeDecodeURI,\n\t\tgetPath,\n\t\tdefaultTo( '' ),\n\t\tpartialRight( filterURLForDisplay, 24 ),\n\t\tremoveTrailingSlash,\n\t\taddLeadingSlash\n\t)( url );\n}\n\nexport const LinkControlSearchItem = ( {\n\titemProps,\n\tsuggestion,\n\tsearchTerm,\n\tonClick,\n\tisURL = false,\n\tshouldShowType = false,\n} ) => {\n\tconst info = isURL\n\t\t? __( 'Press ENTER to add this link' )\n\t\t: getURLForDisplay( suggestion.url );\n\n\treturn (\n\t\t<MenuItem\n\t\t\t{ ...itemProps }\n\t\t\tinfo={ info }\n\t\t\ticonPosition=\"left\"\n\t\t\ticon={\n\t\t\t\t<SearchItemIcon suggestion={ suggestion } isURL={ isURL } />\n\t\t\t}\n\t\t\tonClick={ onClick }\n\t\t\tshortcut={ shouldShowType && getVisualTypeName( suggestion ) }\n\t\t\tclassName=\"block-editor-link-control__search-item\"\n\t\t>\n\t\t\t<TextHighlight\n\t\t\t\t// The component expects a plain text string.\n\t\t\t\ttext={ stripHTML( suggestion.title ) }\n\t\t\t\thighlight={ searchTerm }\n\t\t\t/>\n\t\t</MenuItem>\n\t);\n};\n\nfunction getVisualTypeName( suggestion ) {\n\tif ( suggestion.isFrontPage ) {\n\t\treturn 'front page';\n\t}\n\n\t// Rename 'post_tag' to 'tag'. Ideally, the API would return the localised CPT or taxonomy label.\n\treturn suggestion.type === 'post_tag' ? 'tag' : suggestion.type;\n}\n\nexport default LinkControlSearchItem;\n"],"mappings":"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"}
|
|
@@ -11,10 +11,9 @@ import { hasBlockSupport } from '@wordpress/blocks';
|
|
|
11
11
|
import { __experimentalTreeGridCell as TreeGridCell, __experimentalTreeGridItem as TreeGridItem } from '@wordpress/components';
|
|
12
12
|
import { useInstanceId } from '@wordpress/compose';
|
|
13
13
|
import { moreVertical } from '@wordpress/icons';
|
|
14
|
-
import { useState, useRef,
|
|
14
|
+
import { useState, useRef, useCallback, memo } from '@wordpress/element';
|
|
15
15
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
16
16
|
import { sprintf, __ } from '@wordpress/i18n';
|
|
17
|
-
import { focus } from '@wordpress/dom';
|
|
18
17
|
import { ESCAPE } from '@wordpress/keycodes';
|
|
19
18
|
|
|
20
19
|
/**
|
|
@@ -25,7 +24,7 @@ import useListViewScrollIntoView from './use-list-view-scroll-into-view';
|
|
|
25
24
|
import { BlockMoverUpButton, BlockMoverDownButton } from '../block-mover/button';
|
|
26
25
|
import ListViewBlockContents from './block-contents';
|
|
27
26
|
import { useListViewContext } from './context';
|
|
28
|
-
import { getBlockPositionDescription } from './utils';
|
|
27
|
+
import { getBlockPositionDescription, focusListItem } from './utils';
|
|
29
28
|
import { store as blockEditorStore } from '../../store';
|
|
30
29
|
import useBlockDisplayInformation from '../use-block-display-information';
|
|
31
30
|
import { useBlockLock } from '../block-lock';
|
|
@@ -82,7 +81,6 @@ function ListViewBlock({
|
|
|
82
81
|
// translators: %s: The title of the block.
|
|
83
82
|
__('Options for %s'), blockTitle);
|
|
84
83
|
const {
|
|
85
|
-
isTreeGridMounted,
|
|
86
84
|
expand,
|
|
87
85
|
collapse,
|
|
88
86
|
BlockSettingsMenu,
|
|
@@ -100,15 +98,6 @@ function ListViewBlock({
|
|
|
100
98
|
'is-visible': isHovered || isFirstSelectedBlock
|
|
101
99
|
});
|
|
102
100
|
|
|
103
|
-
// If ListView has experimental features related to the Persistent List View,
|
|
104
|
-
// only focus the selected list item on mount; otherwise the list would always
|
|
105
|
-
// try to steal the focus from the editor canvas.
|
|
106
|
-
useEffect(() => {
|
|
107
|
-
if (!isTreeGridMounted && isSelected) {
|
|
108
|
-
cellRef.current.focus();
|
|
109
|
-
}
|
|
110
|
-
}, []);
|
|
111
|
-
|
|
112
101
|
// If multiple blocks are selected, deselect all blocks when the user
|
|
113
102
|
// presses the escape key.
|
|
114
103
|
const onKeyDown = event => {
|
|
@@ -134,27 +123,7 @@ function ListViewBlock({
|
|
|
134
123
|
if (shouldSelectBlock) {
|
|
135
124
|
selectBlock(undefined, focusClientId, null, null);
|
|
136
125
|
}
|
|
137
|
-
|
|
138
|
-
const row = treeGridElementRef.current?.querySelector(`[role=row][data-block="${focusClientId}"]`);
|
|
139
|
-
if (!row) return null;
|
|
140
|
-
// Focus the first focusable in the row, which is the ListViewBlockSelectButton.
|
|
141
|
-
return focus.focusable.find(row)[0];
|
|
142
|
-
};
|
|
143
|
-
let focusElement = getFocusElement();
|
|
144
|
-
if (focusElement) {
|
|
145
|
-
focusElement.focus();
|
|
146
|
-
} else {
|
|
147
|
-
// The element hasn't been painted yet. Defer focusing on the next frame.
|
|
148
|
-
// This could happen when all blocks have been deleted and the default block
|
|
149
|
-
// hasn't been added to the editor yet.
|
|
150
|
-
window.requestAnimationFrame(() => {
|
|
151
|
-
focusElement = getFocusElement();
|
|
152
|
-
// Ignore if the element still doesn't exist.
|
|
153
|
-
if (focusElement) {
|
|
154
|
-
focusElement.focus();
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
126
|
+
focusListItem(focusClientId, treeGridElementRef);
|
|
158
127
|
}, [selectBlock, treeGridElementRef]);
|
|
159
128
|
const toggleExpanded = useCallback(event => {
|
|
160
129
|
// Prevent shift+click from opening link in a new window when toggling.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["classnames","hasBlockSupport","__experimentalTreeGridCell","TreeGridCell","__experimentalTreeGridItem","TreeGridItem","useInstanceId","moreVertical","useState","useRef","useEffect","useCallback","memo","useDispatch","useSelect","sprintf","__","focus","ESCAPE","ListViewLeaf","useListViewScrollIntoView","BlockMoverUpButton","BlockMoverDownButton","ListViewBlockContents","useListViewContext","getBlockPositionDescription","store","blockEditorStore","useBlockDisplayInformation","useBlockLock","AriaReferencedText","ListViewBlock","block","clientId","isDragged","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","selectedClientIds","isSyncedBranch","cellRef","rowRef","isHovered","setIsHovered","isLocked","canEdit","isFirstSelectedBlock","isLastSelectedBlock","length","toggleBlockHighlight","blockInformation","blockTitle","name","title","select","getBlock","blockName","getBlockName","blockEditingMode","getBlockEditingMode","showBlockActions","instanceId","descriptionId","blockPositionDescription","blockAriaLabel","settingsAriaLabel","isTreeGridMounted","expand","collapse","BlockSettingsMenu","listViewInstanceId","expandedState","setInsertedBlock","treeGridElementRef","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","current","onKeyDown","event","keyCode","defaultPrevented","stopPropagation","preventDefault","undefined","onMouseEnter","onMouseLeave","selectEditorBlock","updateFocusAndSelection","focusClientId","shouldSelectBlock","getFocusElement","row","querySelector","focusable","find","focusElement","window","requestAnimationFrame","toggleExpanded","colSpan","classes","isSynced","dropdownClientIds","includes","rowItemRef","currentlyEditingBlockInCanvas","createElement","className","onFocus","onBlur","id","ref","tabIndex","onClick","onToggleExpanded","ariaLabel","ariaDescribedBy","Fragment","withoutGridItem","orientation","clientIds","icon","label","toggleProps","disableOpenOnArrowDown","__experimentalSelectBlock"],"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { sprintf, __ } from '@wordpress/i18n';\nimport { focus } from '@wordpress/dom';\nimport { ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport { getBlockPositionDescription } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tisDragged,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\n\tconst { isLocked, canEdit } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle =\n\t\tblockInformation?.name || blockInformation?.title || __( 'Untitled' );\n\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst blockName = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlockName( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst blockEditingMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockEditingMode( clientId ),\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true ) &&\n\t\t// Don't show the settings menu if block is disabled or content only.\n\t\tblockEditingMode === 'default';\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__${ instanceId }`;\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockAriaLabel = isLocked\n\t\t? sprintf(\n\t\t\t\t// translators: %s: The title of the block. This string indicates a link to select the locked block.\n\t\t\t\t__( '%s (locked)' ),\n\t\t\t\tblockTitle\n\t\t )\n\t\t: blockTitle;\n\n\tconst settingsAriaLabel = sprintf(\n\t\t// translators: %s: The title of the block.\n\t\t__( 'Options for %s' ),\n\t\tblockTitle\n\t);\n\n\tconst {\n\t\tisTreeGridMounted,\n\t\texpand,\n\t\tcollapse,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t} = useListViewContext();\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\t// If ListView has experimental features related to the Persistent List View,\n\t// only focus the selected list item on mount; otherwise the list would always\n\t// try to steal the focus from the editor canvas.\n\tuseEffect( () => {\n\t\tif ( ! isTreeGridMounted && isSelected ) {\n\t\t\tcellRef.current.focus();\n\t\t}\n\t}, [] );\n\n\t// If multiple blocks are selected, deselect all blocks when the user\n\t// presses the escape key.\n\tconst onKeyDown = ( event ) => {\n\t\tif (\n\t\t\tevent.keyCode === ESCAPE &&\n\t\t\t! event.defaultPrevented &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t}\n\t};\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tconst getFocusElement = () => {\n\t\t\t\tconst row = treeGridElementRef.current?.querySelector(\n\t\t\t\t\t`[role=row][data-block=\"${ focusClientId }\"]`\n\t\t\t\t);\n\t\t\t\tif ( ! row ) return null;\n\t\t\t\t// Focus the first focusable in the row, which is the ListViewBlockSelectButton.\n\t\t\t\treturn focus.focusable.find( row )[ 0 ];\n\t\t\t};\n\n\t\t\tlet focusElement = getFocusElement();\n\t\t\tif ( focusElement ) {\n\t\t\t\tfocusElement.focus();\n\t\t\t} else {\n\t\t\t\t// The element hasn't been painted yet. Defer focusing on the next frame.\n\t\t\t\t// This could happen when all blocks have been deleted and the default block\n\t\t\t\t// hasn't been added to the editor yet.\n\t\t\t\twindow.requestAnimationFrame( () => {\n\t\t\t\t\tfocusElement = getFocusElement();\n\t\t\t\t\t// Ignore if the element still doesn't exist.\n\t\t\t\t\tif ( focusElement ) {\n\t\t\t\t\t\tfocusElement.focus();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-${ listViewInstanceId }-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tdata-expanded={ canEdit ? isExpanded : undefined }\n\t\t\tref={ rowRef }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t\taria-selected={ !! isSelected }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={\n\t\t\t\t\t\t\t\tcurrentlyEditingBlockInCanvas ? 0 : tabIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ canEdit ? isExpanded : undefined }\n\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\tariaLabel={ blockAriaLabel }\n\t\t\t\t\t\t\tariaDescribedBy={ descriptionId }\n\t\t\t\t\t\t\tupdateFocusAndSelection={ updateFocusAndSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AriaReferencedText id={ descriptionId }>\n\t\t\t\t\t\t\t{ blockPositionDescription }\n\t\t\t\t\t\t</AriaReferencedText>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t<TreeGridCell\n\t\t\t\t\tclassName={ listViewBlockSettingsClassName }\n\t\t\t\t\taria-selected={ !! isSelected }\n\t\t\t\t>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsMenu\n\t\t\t\t\t\t\tclientIds={ dropdownClientIds }\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ settingsAriaLabel }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\texpand={ expand }\n\t\t\t\t\t\t\texpandedState={ expandedState }\n\t\t\t\t\t\t\tsetInsertedBlock={ setInsertedBlock }\n\t\t\t\t\t\t\t__experimentalSelectBlock={\n\t\t\t\t\t\t\t\tupdateFocusAndSelection\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</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["classnames","hasBlockSupport","__experimentalTreeGridCell","TreeGridCell","__experimentalTreeGridItem","TreeGridItem","useInstanceId","moreVertical","useState","useRef","useCallback","memo","useDispatch","useSelect","sprintf","__","ESCAPE","ListViewLeaf","useListViewScrollIntoView","BlockMoverUpButton","BlockMoverDownButton","ListViewBlockContents","useListViewContext","getBlockPositionDescription","focusListItem","store","blockEditorStore","useBlockDisplayInformation","useBlockLock","AriaReferencedText","ListViewBlock","block","clientId","isDragged","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","selectedClientIds","isSyncedBranch","cellRef","rowRef","isHovered","setIsHovered","isLocked","canEdit","isFirstSelectedBlock","isLastSelectedBlock","length","toggleBlockHighlight","blockInformation","blockTitle","name","title","select","getBlock","blockName","getBlockName","blockEditingMode","getBlockEditingMode","showBlockActions","instanceId","descriptionId","blockPositionDescription","blockAriaLabel","settingsAriaLabel","expand","collapse","BlockSettingsMenu","listViewInstanceId","expandedState","setInsertedBlock","treeGridElementRef","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","onKeyDown","event","keyCode","defaultPrevented","stopPropagation","preventDefault","undefined","onMouseEnter","onMouseLeave","selectEditorBlock","updateFocusAndSelection","focusClientId","shouldSelectBlock","toggleExpanded","colSpan","classes","isSynced","dropdownClientIds","includes","rowItemRef","currentlyEditingBlockInCanvas","createElement","className","onFocus","onBlur","id","ref","tabIndex","onClick","onToggleExpanded","ariaLabel","ariaDescribedBy","Fragment","withoutGridItem","orientation","clientIds","icon","label","toggleProps","disableOpenOnArrowDown","__experimentalSelectBlock"],"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport { useState, useRef, useCallback, memo } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { sprintf, __ } from '@wordpress/i18n';\nimport { ESCAPE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport { getBlockPositionDescription, focusListItem } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tisDragged,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\n\tconst { isLocked, canEdit } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst blockTitle =\n\t\tblockInformation?.name || blockInformation?.title || __( 'Untitled' );\n\n\tconst block = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst blockName = useSelect(\n\t\t( select ) => select( blockEditorStore ).getBlockName( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst blockEditingMode = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockEditingMode( clientId ),\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true ) &&\n\t\t// Don't show the settings menu if block is disabled or content only.\n\t\tblockEditingMode === 'default';\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__${ instanceId }`;\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockAriaLabel = isLocked\n\t\t? sprintf(\n\t\t\t\t// translators: %s: The title of the block. This string indicates a link to select the locked block.\n\t\t\t\t__( '%s (locked)' ),\n\t\t\t\tblockTitle\n\t\t )\n\t\t: blockTitle;\n\n\tconst settingsAriaLabel = sprintf(\n\t\t// translators: %s: The title of the block.\n\t\t__( 'Options for %s' ),\n\t\tblockTitle\n\t);\n\n\tconst {\n\t\texpand,\n\t\tcollapse,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t} = useListViewContext();\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\t// If multiple blocks are selected, deselect all blocks when the user\n\t// presses the escape key.\n\tconst onKeyDown = ( event ) => {\n\t\tif (\n\t\t\tevent.keyCode === ESCAPE &&\n\t\t\t! event.defaultPrevented &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t}\n\t};\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, treeGridElementRef );\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-${ listViewInstanceId }-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tdata-expanded={ canEdit ? isExpanded : undefined }\n\t\t\tref={ rowRef }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t\taria-selected={ !! isSelected }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={\n\t\t\t\t\t\t\t\tcurrentlyEditingBlockInCanvas ? 0 : tabIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ canEdit ? isExpanded : undefined }\n\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\tariaLabel={ blockAriaLabel }\n\t\t\t\t\t\t\tariaDescribedBy={ descriptionId }\n\t\t\t\t\t\t\tupdateFocusAndSelection={ updateFocusAndSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AriaReferencedText id={ descriptionId }>\n\t\t\t\t\t\t\t{ blockPositionDescription }\n\t\t\t\t\t\t</AriaReferencedText>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t<TreeGridCell\n\t\t\t\t\tclassName={ listViewBlockSettingsClassName }\n\t\t\t\t\taria-selected={ !! isSelected }\n\t\t\t\t>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsMenu\n\t\t\t\t\t\t\tclientIds={ dropdownClientIds }\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ settingsAriaLabel }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\texpand={ expand }\n\t\t\t\t\t\t\texpandedState={ expandedState }\n\t\t\t\t\t\t\tsetInsertedBlock={ setInsertedBlock }\n\t\t\t\t\t\t\t__experimentalSelectBlock={\n\t\t\t\t\t\t\t\tupdateFocusAndSelection\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</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"],"mappings":"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"}
|
|
@@ -118,7 +118,14 @@ function ListViewBranch(props) {
|
|
|
118
118
|
// but asynchronous for any other block.
|
|
119
119
|
const isSelected = isClientIdSelected(clientId, selectedClientIds);
|
|
120
120
|
const isSelectedBranch = isBranchSelected || isSelected && hasNestedBlocks;
|
|
121
|
-
|
|
121
|
+
|
|
122
|
+
// To avoid performance issues, we only render blocks that are in view,
|
|
123
|
+
// or blocks that are selected or dragged. If a block is selected,
|
|
124
|
+
// it is only counted if it is the first of the block selection.
|
|
125
|
+
// This prevents the entire tree from being rendered when a branch is
|
|
126
|
+
// selected, or a user selects all blocks, while still enabling scroll
|
|
127
|
+
// into view behavior when selecting a block or opening the list view.
|
|
128
|
+
const showBlock = isDragged || blockInView || isBranchDragged || isSelected && clientId === selectedClientIds[0];
|
|
122
129
|
return createElement(AsyncModeProvider, {
|
|
123
130
|
key: clientId,
|
|
124
131
|
value: !isSelected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__experimentalTreeGridRow","TreeGridRow","__experimentalTreeGridCell","TreeGridCell","memo","AsyncModeProvider","useSelect","Appender","ListViewBlock","useListViewContext","isClientIdSelected","store","blockEditorStore","useBlockDisplayInformation","countBlocks","block","expandedState","draggedClientIds","isExpandedByDefault","_expandedState$block$","isDragged","includes","clientId","isExpanded","innerBlocks","reduce","countReducer","count","_expandedState$block$2","length","noop","ListViewBranch","props","blocks","selectBlock","showBlockMovers","selectedClientIds","level","path","isBranchDragged","isBranchSelected","listPosition","fixedListWindow","parentId","shouldShowInnerBlocks","isSyncedBranch","showAppender","showAppenderProp","parentBlockInformation","syncedBranch","isSynced","canParentExpand","select","canEditBlock","filteredBlocks","filter","Boolean","blockCount","rowCount","nextPosition","createElement","Fragment","map","index","_expandedState$client","itemInView","blockInView","position","updatedPath","hasNestedBlocks","shouldExpand","undefined","isSelected","isSelectedBranch","showBlock","key","value","siblingBlockCount","className","setSize","positionInSet","treeGridCellProps","nestingLevel"],"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridRow as TreeGridRow,\n\t__experimentalTreeGridCell as TreeGridCell,\n} from '@wordpress/components';\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { Appender } from './appender';\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { isClientIdSelected } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @param {boolean} isExpandedByDefault flag to determine the default fallback expanded state.\n * @return {number} block count\n */\nfunction countBlocks(\n\tblock,\n\texpandedState,\n\tdraggedClientIds,\n\tisExpandedByDefault\n) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? isExpandedByDefault;\n\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer(\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer =\n\t( expandedState, draggedClientIds, isExpandedByDefault ) =>\n\t( count, block ) => {\n\t\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\t\tif ( isDragged ) {\n\t\t\treturn count;\n\t\t}\n\t\tconst isExpanded =\n\t\t\texpandedState[ block.clientId ] ?? isExpandedByDefault;\n\t\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\t\treturn (\n\t\t\t\tcount +\n\t\t\t\tcountBlocks(\n\t\t\t\t\tblock,\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn count + 1;\n\t};\n\nconst noop = () => {};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock = noop,\n\t\tshowBlockMovers,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchDragged = false,\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t\tisExpanded,\n\t\tparentId,\n\t\tshouldShowInnerBlocks = true,\n\t\tisSyncedBranch = false,\n\t\tshowAppender: showAppenderProp = true,\n\t} = props;\n\n\tconst parentBlockInformation = useBlockDisplayInformation( parentId );\n\tconst syncedBranch = isSyncedBranch || !! parentBlockInformation?.isSynced;\n\n\tconst canParentExpand = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parentId ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn select( blockEditorStore ).canEditBlock( parentId );\n\t\t},\n\t\t[ parentId ]\n\t);\n\n\tconst { expandedState, draggedClientIds } = useListViewContext();\n\n\tif ( ! canParentExpand ) {\n\t\treturn null;\n\t}\n\n\t// Only show the appender at the first level.\n\tconst showAppender = showAppenderProp && level === 1;\n\tconst filteredBlocks = blocks.filter( Boolean );\n\tconst blockCount = filteredBlocks.length;\n\t// The appender means an extra row in List View, so add 1 to the row count.\n\tconst rowCount = showAppender ? blockCount + 1 : blockCount;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\t\tisExpanded\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\t\t\t\tconst blockInView = itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks = !! innerBlocks?.length;\n\n\t\t\t\tconst shouldExpand =\n\t\t\t\t\thasNestedBlocks && shouldShowInnerBlocks\n\t\t\t\t\t\t? expandedState[ clientId ] ?? isExpanded\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\t\t\t\tconst showBlock =\n\t\t\t\t\tisDragged || blockInView || isSelected || isBranchDragged;\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisDragged={ isDragged || isBranchDragged }\n\t\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\t\trowCount={ rowCount }\n\t\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tisExpanded={ shouldExpand }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t\tisSyncedBranch={ syncedBranch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"block-editor-list-view-placeholder\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && shouldExpand && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tparentId={ clientId }\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition + 1 }\n\t\t\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisBranchDragged={ isDragged || isBranchDragged }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\t\tisSyncedBranch={ syncedBranch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ showAppender && (\n\t\t\t\t<TreeGridRow\n\t\t\t\t\tlevel={ level }\n\t\t\t\t\tsetSize={ rowCount }\n\t\t\t\t\tpositionInSet={ rowCount }\n\t\t\t\t\tisExpanded={ true }\n\t\t\t\t>\n\t\t\t\t\t<TreeGridCell>\n\t\t\t\t\t\t{ ( treeGridCellProps ) => (\n\t\t\t\t\t\t\t<Appender\n\t\t\t\t\t\t\t\tclientId={ parentId }\n\t\t\t\t\t\t\t\tnestingLevel={ level }\n\t\t\t\t\t\t\t\tblockCount={ blockCount }\n\t\t\t\t\t\t\t\t{ ...treeGridCellProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</TreeGridRow>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default memo( ListViewBranch );\n"],"mappings":";AAAA;AACA;AACA;AACA,SACCA,yBAAyB,IAAIC,WAAW,EACxCC,0BAA0B,IAAIC,YAAY,QACpC,uBAAuB;AAC9B,SAASC,IAAI,QAAQ,oBAAoB;AACzC,SAASC,iBAAiB,EAAEC,SAAS,QAAQ,iBAAiB;;AAE9D;AACA;AACA;AACA,SAASC,QAAQ,QAAQ,YAAY;AACrC,OAAOC,aAAa,MAAM,SAAS;AACnC,SAASC,kBAAkB,QAAQ,WAAW;AAC9C,SAASC,kBAAkB,QAAQ,SAAS;AAC5C,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,OAAOC,0BAA0B,MAAM,kCAAkC;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CACnBC,KAAK,EACLC,aAAa,EACbC,gBAAgB,EAChBC,mBAAmB,EAClB;EAAA,IAAAC,qBAAA;EACD,MAAMC,SAAS,GAAGH,gBAAgB,EAAEI,QAAQ,CAAEN,KAAK,CAACO,QAAS,CAAC;EAC9D,IAAKF,SAAS,EAAG;IAChB,OAAO,CAAC;EACT;EACA,MAAMG,UAAU,IAAAJ,qBAAA,GAAGH,aAAa,CAAED,KAAK,CAACO,QAAQ,CAAE,cAAAH,qBAAA,cAAAA,qBAAA,GAAID,mBAAmB;EAEzE,IAAKK,UAAU,EAAG;IACjB,OACC,CAAC,GACDR,KAAK,CAACS,WAAW,CAACC,MAAM,CACvBC,YAAY,CACXV,aAAa,EACbC,gBAAgB,EAChBC,mBACD,CAAC,EACD,CACD,CAAC;EAEH;EACA,OAAO,CAAC;AACT;AACA,MAAMQ,YAAY,GACjBA,CAAEV,aAAa,EAAEC,gBAAgB,EAAEC,mBAAmB,KACtD,CAAES,KAAK,EAAEZ,KAAK,KAAM;EAAA,IAAAa,sBAAA;EACnB,MAAMR,SAAS,GAAGH,gBAAgB,EAAEI,QAAQ,CAAEN,KAAK,CAACO,QAAS,CAAC;EAC9D,IAAKF,SAAS,EAAG;IAChB,OAAOO,KAAK;EACb;EACA,MAAMJ,UAAU,IAAAK,sBAAA,GACfZ,aAAa,CAAED,KAAK,CAACO,QAAQ,CAAE,cAAAM,sBAAA,cAAAA,sBAAA,GAAIV,mBAAmB;EACvD,IAAKK,UAAU,IAAIR,KAAK,CAACS,WAAW,CAACK,MAAM,GAAG,CAAC,EAAG;IACjD,OACCF,KAAK,GACLb,WAAW,CACVC,KAAK,EACLC,aAAa,EACbC,gBAAgB,EAChBC,mBACD,CAAC;EAEH;EACA,OAAOS,KAAK,GAAG,CAAC;AACjB,CAAC;AAEF,MAAMG,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAErB,SAASC,cAAcA,CAAEC,KAAK,EAAG;EAChC,MAAM;IACLC,MAAM;IACNC,WAAW,GAAGJ,IAAI;IAClBK,eAAe;IACfC,iBAAiB;IACjBC,KAAK,GAAG,CAAC;IACTC,IAAI,GAAG,EAAE;IACTC,eAAe,GAAG,KAAK;IACvBC,gBAAgB,GAAG,KAAK;IACxBC,YAAY,GAAG,CAAC;IAChBC,eAAe;IACfnB,UAAU;IACVoB,QAAQ;IACRC,qBAAqB,GAAG,IAAI;IAC5BC,cAAc,GAAG,KAAK;IACtBC,YAAY,EAAEC,gBAAgB,GAAG;EAClC,CAAC,GAAGf,KAAK;EAET,MAAMgB,sBAAsB,GAAGnC,0BAA0B,CAAE8B,QAAS,CAAC;EACrE,MAAMM,YAAY,GAAGJ,cAAc,IAAI,CAAC,CAAEG,sBAAsB,EAAEE,QAAQ;EAE1E,MAAMC,eAAe,GAAG7C,SAAS,CAC9B8C,MAAM,IAAM;IACb,IAAK,CAAET,QAAQ,EAAG;MACjB,OAAO,IAAI;IACZ;IACA,OAAOS,MAAM,CAAExC,gBAAiB,CAAC,CAACyC,YAAY,CAAEV,QAAS,CAAC;EAC3D,CAAC,EACD,CAAEA,QAAQ,CACX,CAAC;EAED,MAAM;IAAE3B,aAAa;IAAEC;EAAiB,CAAC,GAAGR,kBAAkB,CAAC,CAAC;EAEhE,IAAK,CAAE0C,eAAe,EAAG;IACxB,OAAO,IAAI;EACZ;;EAEA;EACA,MAAML,YAAY,GAAGC,gBAAgB,IAAIV,KAAK,KAAK,CAAC;EACpD,MAAMiB,cAAc,GAAGrB,MAAM,CAACsB,MAAM,CAAEC,OAAQ,CAAC;EAC/C,MAAMC,UAAU,GAAGH,cAAc,CAACzB,MAAM;EACxC;EACA,MAAM6B,QAAQ,GAAGZ,YAAY,GAAGW,UAAU,GAAG,CAAC,GAAGA,UAAU;EAC3D,IAAIE,YAAY,GAAGlB,YAAY;EAE/B,OACCmB,aAAA,CAAAC,QAAA,QACGP,cAAc,CAACQ,GAAG,CAAE,CAAE/C,KAAK,EAAEgD,KAAK,KAAM;IAAA,IAAAC,qBAAA;IACzC,MAAM;MAAE1C,QAAQ;MAAEE;IAAY,CAAC,GAAGT,KAAK;IAEvC,IAAKgD,KAAK,GAAG,CAAC,EAAG;MAChBJ,YAAY,IAAI7C,WAAW,CAC1BwC,cAAc,CAAES,KAAK,GAAG,CAAC,CAAE,EAC3B/C,aAAa,EACbC,gBAAgB,EAChBM,UACD,CAAC;IACF;IAEA,MAAM;MAAE0C;IAAW,CAAC,GAAGvB,eAAe;IACtC,MAAMwB,WAAW,GAAGD,UAAU,CAAEN,YAAa,CAAC;IAE9C,MAAMQ,QAAQ,GAAGJ,KAAK,GAAG,CAAC;IAC1B,MAAMK,WAAW,GAChB9B,IAAI,CAACT,MAAM,GAAG,CAAC,GACX,GAAGS,IAAM,IAAI6B,QAAU,EAAC,GACxB,GAAGA,QAAU,EAAC;IACnB,MAAME,eAAe,GAAG,CAAC,CAAE7C,WAAW,EAAEK,MAAM;IAE9C,MAAMyC,YAAY,GACjBD,eAAe,IAAIzB,qBAAqB,IAAAoB,qBAAA,GACrChD,aAAa,CAAEM,QAAQ,CAAE,cAAA0C,qBAAA,cAAAA,qBAAA,GAAIzC,UAAU,GACvCgD,SAAS;IAEb,MAAMnD,SAAS,GAAG,CAAC,CAAEH,gBAAgB,EAAEI,QAAQ,CAAEC,QAAS,CAAC;;IAE3D;IACA;IACA,MAAMkD,UAAU,GAAG9D,kBAAkB,CACpCY,QAAQ,EACRc,iBACD,CAAC;IACD,MAAMqC,gBAAgB,GACrBjC,gBAAgB,IAAMgC,UAAU,IAAIH,eAAiB;IACtD,MAAMK,SAAS,GACdtD,SAAS,IAAI8C,WAAW,IAAIM,UAAU,IAAIjC,eAAe;IAC1D,OACCqB,aAAA,CAACvD,iBAAiB;MAACsE,GAAG,EAAGrD,QAAU;MAACsD,KAAK,EAAG,CAAEJ;IAAY,GACvDE,SAAS,IACVd,aAAA,CAACpD,aAAa;MACbO,KAAK,EAAGA,KAAO;MACfmB,WAAW,EAAGA,WAAa;MAC3BsC,UAAU,EAAGA,UAAY;MACzBhC,gBAAgB,EAAGiC,gBAAkB;MACrCrD,SAAS,EAAGA,SAAS,IAAImB,eAAiB;MAC1CF,KAAK,EAAGA,KAAO;MACf8B,QAAQ,EAAGA,QAAU;MACrBT,QAAQ,EAAGA,QAAU;MACrBmB,iBAAiB,EAAGpB,UAAY;MAChCtB,eAAe,EAAGA,eAAiB;MACnCG,IAAI,EAAG8B,WAAa;MACpB7C,UAAU,EAAG+C,YAAc;MAC3B7B,YAAY,EAAGkB,YAAc;MAC7BvB,iBAAiB,EAAGA,iBAAmB;MACvCS,cAAc,EAAGI;IAAc,CAC/B,CACD,EACC,CAAEyB,SAAS,IACZd,aAAA,aACCA,aAAA;MAAIkB,SAAS,EAAC;IAAoC,CAAE,CACjD,CACJ,EACCT,eAAe,IAAIC,YAAY,IAChCV,aAAA,CAAC7B,cAAc;MACdY,QAAQ,EAAGrB,QAAU;MACrBW,MAAM,EAAGT,WAAa;MACtBU,WAAW,EAAGA,WAAa;MAC3BC,eAAe,EAAGA,eAAiB;MACnCE,KAAK,EAAGA,KAAK,GAAG,CAAG;MACnBC,IAAI,EAAG8B,WAAa;MACpB3B,YAAY,EAAGkB,YAAY,GAAG,CAAG;MACjCjB,eAAe,EAAGA,eAAiB;MACnCF,gBAAgB,EAAGiC,gBAAkB;MACrClC,eAAe,EAAGnB,SAAS,IAAImB,eAAiB;MAChDH,iBAAiB,EAAGA,iBAAmB;MACvCb,UAAU,EAAGA,UAAY;MACzBsB,cAAc,EAAGI;IAAc,CAC/B,CAEgB,CAAC;EAEtB,CAAE,CAAC,EACDH,YAAY,IACbc,aAAA,CAAC3D,WAAW;IACXoC,KAAK,EAAGA,KAAO;IACf0C,OAAO,EAAGrB,QAAU;IACpBsB,aAAa,EAAGtB,QAAU;IAC1BnC,UAAU,EAAG;EAAM,GAEnBqC,aAAA,CAACzD,YAAY,QACR8E,iBAAiB,IACpBrB,aAAA,CAACrD,QAAQ;IACRe,QAAQ,EAAGqB,QAAU;IACrBuC,YAAY,EAAG7C,KAAO;IACtBoB,UAAU,EAAGA,UAAY;IAAA,GACpBwB;EAAiB,CACtB,CAEW,CACF,CAEb,CAAC;AAEL;AAEA,eAAe7E,IAAI,CAAE2B,cAAe,CAAC"}
|
|
1
|
+
{"version":3,"names":["__experimentalTreeGridRow","TreeGridRow","__experimentalTreeGridCell","TreeGridCell","memo","AsyncModeProvider","useSelect","Appender","ListViewBlock","useListViewContext","isClientIdSelected","store","blockEditorStore","useBlockDisplayInformation","countBlocks","block","expandedState","draggedClientIds","isExpandedByDefault","_expandedState$block$","isDragged","includes","clientId","isExpanded","innerBlocks","reduce","countReducer","count","_expandedState$block$2","length","noop","ListViewBranch","props","blocks","selectBlock","showBlockMovers","selectedClientIds","level","path","isBranchDragged","isBranchSelected","listPosition","fixedListWindow","parentId","shouldShowInnerBlocks","isSyncedBranch","showAppender","showAppenderProp","parentBlockInformation","syncedBranch","isSynced","canParentExpand","select","canEditBlock","filteredBlocks","filter","Boolean","blockCount","rowCount","nextPosition","createElement","Fragment","map","index","_expandedState$client","itemInView","blockInView","position","updatedPath","hasNestedBlocks","shouldExpand","undefined","isSelected","isSelectedBranch","showBlock","key","value","siblingBlockCount","className","setSize","positionInSet","treeGridCellProps","nestingLevel"],"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridRow as TreeGridRow,\n\t__experimentalTreeGridCell as TreeGridCell,\n} from '@wordpress/components';\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { Appender } from './appender';\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { isClientIdSelected } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @param {boolean} isExpandedByDefault flag to determine the default fallback expanded state.\n * @return {number} block count\n */\nfunction countBlocks(\n\tblock,\n\texpandedState,\n\tdraggedClientIds,\n\tisExpandedByDefault\n) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? isExpandedByDefault;\n\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer(\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer =\n\t( expandedState, draggedClientIds, isExpandedByDefault ) =>\n\t( count, block ) => {\n\t\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\t\tif ( isDragged ) {\n\t\t\treturn count;\n\t\t}\n\t\tconst isExpanded =\n\t\t\texpandedState[ block.clientId ] ?? isExpandedByDefault;\n\t\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\t\treturn (\n\t\t\t\tcount +\n\t\t\t\tcountBlocks(\n\t\t\t\t\tblock,\n\t\t\t\t\texpandedState,\n\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\tisExpandedByDefault\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn count + 1;\n\t};\n\nconst noop = () => {};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock = noop,\n\t\tshowBlockMovers,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchDragged = false,\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t\tisExpanded,\n\t\tparentId,\n\t\tshouldShowInnerBlocks = true,\n\t\tisSyncedBranch = false,\n\t\tshowAppender: showAppenderProp = true,\n\t} = props;\n\n\tconst parentBlockInformation = useBlockDisplayInformation( parentId );\n\tconst syncedBranch = isSyncedBranch || !! parentBlockInformation?.isSynced;\n\n\tconst canParentExpand = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parentId ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn select( blockEditorStore ).canEditBlock( parentId );\n\t\t},\n\t\t[ parentId ]\n\t);\n\n\tconst { expandedState, draggedClientIds } = useListViewContext();\n\n\tif ( ! canParentExpand ) {\n\t\treturn null;\n\t}\n\n\t// Only show the appender at the first level.\n\tconst showAppender = showAppenderProp && level === 1;\n\tconst filteredBlocks = blocks.filter( Boolean );\n\tconst blockCount = filteredBlocks.length;\n\t// The appender means an extra row in List View, so add 1 to the row count.\n\tconst rowCount = showAppender ? blockCount + 1 : blockCount;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds,\n\t\t\t\t\t\tisExpanded\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\t\t\t\tconst blockInView = itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks = !! innerBlocks?.length;\n\n\t\t\t\tconst shouldExpand =\n\t\t\t\t\thasNestedBlocks && shouldShowInnerBlocks\n\t\t\t\t\t\t? expandedState[ clientId ] ?? isExpanded\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\n\t\t\t\t// To avoid performance issues, we only render blocks that are in view,\n\t\t\t\t// or blocks that are selected or dragged. If a block is selected,\n\t\t\t\t// it is only counted if it is the first of the block selection.\n\t\t\t\t// This prevents the entire tree from being rendered when a branch is\n\t\t\t\t// selected, or a user selects all blocks, while still enabling scroll\n\t\t\t\t// into view behavior when selecting a block or opening the list view.\n\t\t\t\tconst showBlock =\n\t\t\t\t\tisDragged ||\n\t\t\t\t\tblockInView ||\n\t\t\t\t\tisBranchDragged ||\n\t\t\t\t\t( isSelected && clientId === selectedClientIds[ 0 ] );\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisDragged={ isDragged || isBranchDragged }\n\t\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\t\trowCount={ rowCount }\n\t\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tisExpanded={ shouldExpand }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t\tisSyncedBranch={ syncedBranch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"block-editor-list-view-placeholder\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && shouldExpand && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tparentId={ clientId }\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition + 1 }\n\t\t\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisBranchDragged={ isDragged || isBranchDragged }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\t\tisSyncedBranch={ syncedBranch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ showAppender && (\n\t\t\t\t<TreeGridRow\n\t\t\t\t\tlevel={ level }\n\t\t\t\t\tsetSize={ rowCount }\n\t\t\t\t\tpositionInSet={ rowCount }\n\t\t\t\t\tisExpanded={ true }\n\t\t\t\t>\n\t\t\t\t\t<TreeGridCell>\n\t\t\t\t\t\t{ ( treeGridCellProps ) => (\n\t\t\t\t\t\t\t<Appender\n\t\t\t\t\t\t\t\tclientId={ parentId }\n\t\t\t\t\t\t\t\tnestingLevel={ level }\n\t\t\t\t\t\t\t\tblockCount={ blockCount }\n\t\t\t\t\t\t\t\t{ ...treeGridCellProps }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</TreeGridRow>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default memo( ListViewBranch );\n"],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ import useListViewDropZone from './use-list-view-drop-zone';
|
|
|
21
21
|
import useListViewExpandSelectedItem from './use-list-view-expand-selected-item';
|
|
22
22
|
import { store as blockEditorStore } from '../../store';
|
|
23
23
|
import { BlockSettingsDropdown } from '../block-settings-menu/block-settings-dropdown';
|
|
24
|
+
import { focusListItem } from './utils';
|
|
24
25
|
const expanded = (state, action) => {
|
|
25
26
|
if (Array.isArray(action.clientIds)) {
|
|
26
27
|
return {
|
|
@@ -114,7 +115,6 @@ function ListViewComponent({
|
|
|
114
115
|
});
|
|
115
116
|
const elementRef = useRef();
|
|
116
117
|
const treeGridRef = useMergeRefs([elementRef, dropZoneRef, ref]);
|
|
117
|
-
const isMounted = useRef(false);
|
|
118
118
|
const [insertedBlock, setInsertedBlock] = useState(null);
|
|
119
119
|
const {
|
|
120
120
|
setSelectedTreeId
|
|
@@ -136,7 +136,13 @@ function ListViewComponent({
|
|
|
136
136
|
}
|
|
137
137
|
}, [setSelectedTreeId, updateBlockSelection, onSelect, getBlock]);
|
|
138
138
|
useEffect(() => {
|
|
139
|
-
|
|
139
|
+
// If a blocks are already selected when the list view is initially
|
|
140
|
+
// mounted, shift focus to the first selected block.
|
|
141
|
+
if (selectedClientIds?.length) {
|
|
142
|
+
focusListItem(selectedClientIds[0], elementRef);
|
|
143
|
+
}
|
|
144
|
+
// Disable reason: Only focus on the selected item when the list view is mounted.
|
|
145
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
140
146
|
}, []);
|
|
141
147
|
const expand = useCallback(clientId => {
|
|
142
148
|
if (!clientId) {
|
|
@@ -168,7 +174,6 @@ function ListViewComponent({
|
|
|
168
174
|
}
|
|
169
175
|
}, [updateBlockSelection]);
|
|
170
176
|
const contextValue = useMemo(() => ({
|
|
171
|
-
isTreeGridMounted: isMounted.current,
|
|
172
177
|
draggedClientIds,
|
|
173
178
|
expandedState,
|
|
174
179
|
expand,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useInstanceId","useMergeRefs","__experimentalUseFixedWindowList","useFixedWindowList","__experimentalTreeGrid","TreeGrid","AsyncModeProvider","useSelect","deprecated","useCallback","useEffect","useMemo","useRef","useReducer","forwardRef","useState","__","ListViewBranch","ListViewContext","ListViewDropIndicator","useBlockSelection","useListViewClientIds","useListViewDropZone","useListViewExpandSelectedItem","store","blockEditorStore","BlockSettingsDropdown","expanded","state","action","Array","isArray","clientIds","reduce","newState","id","type","BLOCK_LIST_ITEM_HEIGHT","ListViewComponent","blocks","dropZoneElement","showBlockMovers","isExpanded","showAppender","blockSettingsMenu","BlockSettingsMenu","rootClientId","description","onSelect","additionalBlockContent","AdditionalBlockContent","ref","since","alternative","instanceId","clientIdsTree","draggedClientIds","selectedClientIds","getBlock","visibleBlockCount","shouldShowInnerBlocks","select","getGlobalBlockCount","getClientIdsOfDescendants","__unstableGetEditorMode","draggedBlockCount","length","updateBlockSelection","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","isMounted","insertedBlock","setInsertedBlock","setSelectedTreeId","firstSelectedBlockClientId","selectEditorBlock","event","blockClientId","focusPosition","current","expand","clientId","collapse","expandRow","row","dataset","block","collapseRow","focusRow","startRow","endRow","shiftKey","contextValue","isTreeGridMounted","listViewInstanceId","treeGridElementRef","fixedListWindow","useWindowing","windowOverscan","createElement","value","listViewRef","className","onCollapseRow","onExpandRow","onFocusRow","applicationAriaLabel","Provider","parentId","selectBlock","PrivateListView","props","undefined"],"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseInstanceId,\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useBlockSelection from './use-block-selection';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport useListViewExpandSelectedItem from './use-list-view-expand-selected-item';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockSettingsDropdown } from '../block-settings-menu/block-settings-dropdown';\n\nconst expanded = ( state, action ) => {\n\tif ( Array.isArray( action.clientIds ) ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.clientIds.reduce(\n\t\t\t\t( newState, id ) => ( {\n\t\t\t\t\t...newState,\n\t\t\t\t\t[ id ]: action.type === 'expand',\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t};\n\t}\n\treturn state;\n};\n\nexport const BLOCK_LIST_ITEM_HEIGHT = 36;\n\n/** @typedef {import('react').ComponentType} ComponentType */\n/** @typedef {import('react').Ref<HTMLElement>} Ref */\n\n/**\n * Show a hierarchical list of blocks.\n *\n * @param {Object} props Components props.\n * @param {string} props.id An HTML element id for the root element of ListView.\n * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {?HTMLElement} props.dropZoneElement Optional element to be used as the drop zone.\n * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.\n * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.\n * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.\n * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.\n * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.\n * @param {string} props.description Optional accessible description for the tree grid component.\n * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.\n * @param {?ComponentType} props.additionalBlockContent Component that renders additional block content UI.\n * @param {Ref} ref Forwarded ref\n */\nfunction ListViewComponent(\n\t{\n\t\tid,\n\t\tblocks,\n\t\tdropZoneElement,\n\t\tshowBlockMovers = false,\n\t\tisExpanded = false,\n\t\tshowAppender = false,\n\t\tblockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,\n\t\trootClientId,\n\t\tdescription,\n\t\tonSelect,\n\t\tadditionalBlockContent: AdditionalBlockContent,\n\t},\n\tref\n) {\n\t// This can be removed once we no longer need to support the blocks prop.\n\tif ( blocks ) {\n\t\tdeprecated(\n\t\t\t'`blocks` property in `wp.blockEditor.__experimentalListView`',\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\talternative: '`rootClientId` property',\n\t\t\t}\n\t\t);\n\t}\n\n\tconst instanceId = useInstanceId( ListViewComponent );\n\tconst { clientIdsTree, draggedClientIds, selectedClientIds } =\n\t\tuseListViewClientIds( { blocks, rootClientId } );\n\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst { visibleBlockCount, shouldShowInnerBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetGlobalBlockCount,\n\t\t\t\tgetClientIdsOfDescendants,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t\tshouldShowInnerBlocks: __unstableGetEditorMode() !== 'zoom-out',\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\n\tconst { updateBlockSelection } = useBlockSelection();\n\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone( {\n\t\tdropZoneElement,\n\t} );\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst isMounted = useRef( false );\n\n\tconst [ insertedBlock, setInsertedBlock ] = useState( null );\n\n\tconst { setSelectedTreeId } = useListViewExpandSelectedItem( {\n\t\tfirstSelectedBlockClientId: selectedClientIds[ 0 ],\n\t\tsetExpandedState,\n\t} );\n\tconst selectEditorBlock = useCallback(\n\t\t/**\n\t\t * @param {MouseEvent | KeyboardEvent | undefined} event\n\t\t * @param {string} blockClientId\n\t\t * @param {null | undefined | -1 | 1} focusPosition\n\t\t */\n\t\t( event, blockClientId, focusPosition ) => {\n\t\t\tupdateBlockSelection( event, blockClientId, null, focusPosition );\n\t\t\tsetSelectedTreeId( blockClientId );\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( getBlock( blockClientId ) );\n\t\t\t}\n\t\t},\n\t\t[ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]\n\t);\n\tuseEffect( () => {\n\t\tisMounted.current = true;\n\t}, [] );\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\tconst focusRow = useCallback(\n\t\t( event, startRow, endRow ) => {\n\t\t\tif ( event.shiftKey ) {\n\t\t\t\tupdateBlockSelection(\n\t\t\t\t\tevent,\n\t\t\t\t\tstartRow?.dataset?.block,\n\t\t\t\t\tendRow?.dataset?.block\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ updateBlockSelection ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tisTreeGridMounted: isMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t\tBlockSettingsMenu,\n\t\t\tlistViewInstanceId: instanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\ttreeGridElementRef: elementRef,\n\t\t} ),\n\t\t[\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t\tBlockSettingsMenu,\n\t\t\tinstanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t]\n\t);\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\tBLOCK_LIST_ITEM_HEIGHT,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\t// Ensure that the windowing logic is recalculated when the expanded state changes.\n\t\t\t// This is necessary because expanding a collapsed block in a short list view can\n\t\t\t// switch the list view to a tall list view with a scrollbar, and vice versa.\n\t\t\t// When this happens, the windowing logic needs to be recalculated to ensure that\n\t\t\t// the correct number of blocks are rendered, by rechecking for a scroll container.\n\t\t\texpandedState,\n\t\t\tuseWindowing: true,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\t// If there are no blocks to show and we're not showing the appender, do not render the list view.\n\tif ( ! clientIdsTree.length && ! showAppender ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tid={ id }\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t\tonFocusRow={ focusRow }\n\t\t\t\tapplicationAriaLabel={ __( 'Block navigation structure' ) }\n\t\t\t\t// eslint-disable-next-line jsx-a11y/aria-props\n\t\t\t\taria-description={ description }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tparentId={ rootClientId }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\tshouldShowInnerBlocks={ shouldShowInnerBlocks }\n\t\t\t\t\t\tshowAppender={ showAppender }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\n\n// This is the private API for the ListView component.\n// It allows access to all props, not just the public ones.\nexport const PrivateListView = forwardRef( ListViewComponent );\n\n// This is the public API for the ListView component.\n// We wrap the PrivateListView component to hide some props from the public API.\nexport default forwardRef( ( props, ref ) => {\n\treturn (\n\t\t<PrivateListView\n\t\t\tref={ ref }\n\t\t\t{ ...props }\n\t\t\tshowAppender={ false }\n\t\t\trootClientId={ null }\n\t\t\tonSelect={ null }\n\t\t\tadditionalBlockContent={ null }\n\t\t\tblockSettingsMenu={ undefined }\n\t\t/>\n\t);\n} );\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useInstanceId","useMergeRefs","__experimentalUseFixedWindowList","useFixedWindowList","__experimentalTreeGrid","TreeGrid","AsyncModeProvider","useSelect","deprecated","useCallback","useEffect","useMemo","useRef","useReducer","forwardRef","useState","__","ListViewBranch","ListViewContext","ListViewDropIndicator","useBlockSelection","useListViewClientIds","useListViewDropZone","useListViewExpandSelectedItem","store","blockEditorStore","BlockSettingsDropdown","focusListItem","expanded","state","action","Array","isArray","clientIds","reduce","newState","id","type","BLOCK_LIST_ITEM_HEIGHT","ListViewComponent","blocks","dropZoneElement","showBlockMovers","isExpanded","showAppender","blockSettingsMenu","BlockSettingsMenu","rootClientId","description","onSelect","additionalBlockContent","AdditionalBlockContent","ref","since","alternative","instanceId","clientIdsTree","draggedClientIds","selectedClientIds","getBlock","visibleBlockCount","shouldShowInnerBlocks","select","getGlobalBlockCount","getClientIdsOfDescendants","__unstableGetEditorMode","draggedBlockCount","length","updateBlockSelection","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","insertedBlock","setInsertedBlock","setSelectedTreeId","firstSelectedBlockClientId","selectEditorBlock","event","blockClientId","focusPosition","expand","clientId","collapse","expandRow","row","dataset","block","collapseRow","focusRow","startRow","endRow","shiftKey","contextValue","listViewInstanceId","treeGridElementRef","fixedListWindow","useWindowing","windowOverscan","createElement","value","listViewRef","className","onCollapseRow","onExpandRow","onFocusRow","applicationAriaLabel","Provider","parentId","selectBlock","PrivateListView","props","undefined"],"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseInstanceId,\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n\tuseState,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useBlockSelection from './use-block-selection';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport useListViewExpandSelectedItem from './use-list-view-expand-selected-item';\nimport { store as blockEditorStore } from '../../store';\nimport { BlockSettingsDropdown } from '../block-settings-menu/block-settings-dropdown';\nimport { focusListItem } from './utils';\n\nconst expanded = ( state, action ) => {\n\tif ( Array.isArray( action.clientIds ) ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.clientIds.reduce(\n\t\t\t\t( newState, id ) => ( {\n\t\t\t\t\t...newState,\n\t\t\t\t\t[ id ]: action.type === 'expand',\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t};\n\t}\n\treturn state;\n};\n\nexport const BLOCK_LIST_ITEM_HEIGHT = 36;\n\n/** @typedef {import('react').ComponentType} ComponentType */\n/** @typedef {import('react').Ref<HTMLElement>} Ref */\n\n/**\n * Show a hierarchical list of blocks.\n *\n * @param {Object} props Components props.\n * @param {string} props.id An HTML element id for the root element of ListView.\n * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {?HTMLElement} props.dropZoneElement Optional element to be used as the drop zone.\n * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.\n * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.\n * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.\n * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.\n * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.\n * @param {string} props.description Optional accessible description for the tree grid component.\n * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.\n * @param {?ComponentType} props.additionalBlockContent Component that renders additional block content UI.\n * @param {Ref} ref Forwarded ref\n */\nfunction ListViewComponent(\n\t{\n\t\tid,\n\t\tblocks,\n\t\tdropZoneElement,\n\t\tshowBlockMovers = false,\n\t\tisExpanded = false,\n\t\tshowAppender = false,\n\t\tblockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,\n\t\trootClientId,\n\t\tdescription,\n\t\tonSelect,\n\t\tadditionalBlockContent: AdditionalBlockContent,\n\t},\n\tref\n) {\n\t// This can be removed once we no longer need to support the blocks prop.\n\tif ( blocks ) {\n\t\tdeprecated(\n\t\t\t'`blocks` property in `wp.blockEditor.__experimentalListView`',\n\t\t\t{\n\t\t\t\tsince: '6.3',\n\t\t\t\talternative: '`rootClientId` property',\n\t\t\t}\n\t\t);\n\t}\n\n\tconst instanceId = useInstanceId( ListViewComponent );\n\tconst { clientIdsTree, draggedClientIds, selectedClientIds } =\n\t\tuseListViewClientIds( { blocks, rootClientId } );\n\n\tconst { getBlock } = useSelect( blockEditorStore );\n\tconst { visibleBlockCount, shouldShowInnerBlocks } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetGlobalBlockCount,\n\t\t\t\tgetClientIdsOfDescendants,\n\t\t\t\t__unstableGetEditorMode,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t\tshouldShowInnerBlocks: __unstableGetEditorMode() !== 'zoom-out',\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\n\tconst { updateBlockSelection } = useBlockSelection();\n\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone( {\n\t\tdropZoneElement,\n\t} );\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst [ insertedBlock, setInsertedBlock ] = useState( null );\n\n\tconst { setSelectedTreeId } = useListViewExpandSelectedItem( {\n\t\tfirstSelectedBlockClientId: selectedClientIds[ 0 ],\n\t\tsetExpandedState,\n\t} );\n\tconst selectEditorBlock = useCallback(\n\t\t/**\n\t\t * @param {MouseEvent | KeyboardEvent | undefined} event\n\t\t * @param {string} blockClientId\n\t\t * @param {null | undefined | -1 | 1} focusPosition\n\t\t */\n\t\t( event, blockClientId, focusPosition ) => {\n\t\t\tupdateBlockSelection( event, blockClientId, null, focusPosition );\n\t\t\tsetSelectedTreeId( blockClientId );\n\t\t\tif ( onSelect ) {\n\t\t\t\tonSelect( getBlock( blockClientId ) );\n\t\t\t}\n\t\t},\n\t\t[ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]\n\t);\n\tuseEffect( () => {\n\t\t// If a blocks are already selected when the list view is initially\n\t\t// mounted, shift focus to the first selected block.\n\t\tif ( selectedClientIds?.length ) {\n\t\t\tfocusListItem( selectedClientIds[ 0 ], elementRef );\n\t\t}\n\t\t// Disable reason: Only focus on the selected item when the list view is mounted.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\tconst focusRow = useCallback(\n\t\t( event, startRow, endRow ) => {\n\t\t\tif ( event.shiftKey ) {\n\t\t\t\tupdateBlockSelection(\n\t\t\t\t\tevent,\n\t\t\t\t\tstartRow?.dataset?.block,\n\t\t\t\t\tendRow?.dataset?.block\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ updateBlockSelection ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t\tBlockSettingsMenu,\n\t\t\tlistViewInstanceId: instanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t\ttreeGridElementRef: elementRef,\n\t\t} ),\n\t\t[\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t\tBlockSettingsMenu,\n\t\t\tinstanceId,\n\t\t\tAdditionalBlockContent,\n\t\t\tinsertedBlock,\n\t\t\tsetInsertedBlock,\n\t\t]\n\t);\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\tBLOCK_LIST_ITEM_HEIGHT,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\t// Ensure that the windowing logic is recalculated when the expanded state changes.\n\t\t\t// This is necessary because expanding a collapsed block in a short list view can\n\t\t\t// switch the list view to a tall list view with a scrollbar, and vice versa.\n\t\t\t// When this happens, the windowing logic needs to be recalculated to ensure that\n\t\t\t// the correct number of blocks are rendered, by rechecking for a scroll container.\n\t\t\texpandedState,\n\t\t\tuseWindowing: true,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\t// If there are no blocks to show and we're not showing the appender, do not render the list view.\n\tif ( ! clientIdsTree.length && ! showAppender ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tid={ id }\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t\tonFocusRow={ focusRow }\n\t\t\t\tapplicationAriaLabel={ __( 'Block navigation structure' ) }\n\t\t\t\t// eslint-disable-next-line jsx-a11y/aria-props\n\t\t\t\taria-description={ description }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tparentId={ rootClientId }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\tshouldShowInnerBlocks={ shouldShowInnerBlocks }\n\t\t\t\t\t\tshowAppender={ showAppender }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\n\n// This is the private API for the ListView component.\n// It allows access to all props, not just the public ones.\nexport const PrivateListView = forwardRef( ListViewComponent );\n\n// This is the public API for the ListView component.\n// We wrap the PrivateListView component to hide some props from the public API.\nexport default forwardRef( ( props, ref ) => {\n\treturn (\n\t\t<PrivateListView\n\t\t\tref={ ref }\n\t\t\t{ ...props }\n\t\t\tshowAppender={ false }\n\t\t\trootClientId={ null }\n\t\t\tonSelect={ null }\n\t\t\tadditionalBlockContent={ null }\n\t\t\tblockSettingsMenu={ undefined }\n\t\t/>\n\t);\n} );\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { __, sprintf } from '@wordpress/i18n';
|
|
5
|
+
import { focus } from '@wordpress/dom';
|
|
5
6
|
export const getBlockPositionDescription = (position, siblingCount, level) => sprintf( /* translators: 1: The numerical position of the block. 2: The total number of blocks. 3. The level of nesting for the block. */
|
|
6
7
|
__('Block %1$d of %2$d, Level %3$d'), position, siblingCount, level);
|
|
7
8
|
|
|
@@ -40,4 +41,37 @@ export function getCommonDepthClientIds(startId, endId, startParents, endParents
|
|
|
40
41
|
end
|
|
41
42
|
};
|
|
42
43
|
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Shift focus to the list view item associated with a particular clientId.
|
|
47
|
+
*
|
|
48
|
+
* @typedef {import('@wordpress/element').RefObject} RefObject
|
|
49
|
+
*
|
|
50
|
+
* @param {string} focusClientId The client ID of the block to focus.
|
|
51
|
+
* @param {RefObject<HTMLElement>} treeGridElementRef The container element to search within.
|
|
52
|
+
*/
|
|
53
|
+
export function focusListItem(focusClientId, treeGridElementRef) {
|
|
54
|
+
const getFocusElement = () => {
|
|
55
|
+
const row = treeGridElementRef.current?.querySelector(`[role=row][data-block="${focusClientId}"]`);
|
|
56
|
+
if (!row) return null;
|
|
57
|
+
// Focus the first focusable in the row, which is the ListViewBlockSelectButton.
|
|
58
|
+
return focus.focusable.find(row)[0];
|
|
59
|
+
};
|
|
60
|
+
let focusElement = getFocusElement();
|
|
61
|
+
if (focusElement) {
|
|
62
|
+
focusElement.focus();
|
|
63
|
+
} else {
|
|
64
|
+
// The element hasn't been painted yet. Defer focusing on the next frame.
|
|
65
|
+
// This could happen when all blocks have been deleted and the default block
|
|
66
|
+
// hasn't been added to the editor yet.
|
|
67
|
+
window.requestAnimationFrame(() => {
|
|
68
|
+
focusElement = getFocusElement();
|
|
69
|
+
|
|
70
|
+
// Ignore if the element still doesn't exist.
|
|
71
|
+
if (focusElement) {
|
|
72
|
+
focusElement.focus();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
43
77
|
//# sourceMappingURL=utils.js.map
|