diff --git a/packages/block-editor/src/components/block-actions/index.js b/packages/block-editor/src/components/block-actions/index.js index d9ca4acf5d1cd2..dcf14cd6a2d832 100644 --- a/packages/block-editor/src/components/block-actions/index.js +++ b/packages/block-editor/src/components/block-actions/index.js @@ -6,7 +6,7 @@ import { castArray, first, last, every } from 'lodash'; /** * WordPress dependencies */ -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { hasBlockSupport, switchToBlockType, @@ -30,8 +30,8 @@ export default function BlockActions( { getBlocksByClientId, canMoveBlocks, canRemoveBlocks, - } = useSelect( blockEditorStore ); - const { getDefaultBlockName, getGroupingBlockName } = useSelect( + } = useSelectors( blockEditorStore ); + const { getDefaultBlockName, getGroupingBlockName } = useSelectors( blocksStore ); diff --git a/packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js b/packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js index 4e9ffa45725003..c3b28f6a9b17c6 100644 --- a/packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js +++ b/packages/block-editor/src/components/block-list/use-block-props/use-focus-handler.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect, useDispatch } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; /** @@ -16,7 +16,7 @@ import { store as blockEditorStore } from '../../../store'; * @param {string} clientId Block client ID. */ export function useFocusHandler( clientId ) { - const { isBlockSelected } = useSelect( blockEditorStore ); + const { isBlockSelected } = useSelectors( blockEditorStore ); const { selectBlock, selectionChange } = useDispatch( blockEditorStore ); return useRefEffect( diff --git a/packages/block-editor/src/components/block-list/use-block-props/use-multi-selection.js b/packages/block-editor/src/components/block-list/use-block-props/use-multi-selection.js new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js b/packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js index 7289751f515ae1..eb0edbb9937da3 100644 --- a/packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js +++ b/packages/block-editor/src/components/block-list/use-block-props/use-nav-mode-exit.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect, useDispatch } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; /** @@ -15,7 +15,9 @@ import { store as blockEditorStore } from '../../../store'; * @param {string} clientId Block client ID. */ export function useNavModeExit( clientId ) { - const { isNavigationMode, isBlockSelected } = useSelect( blockEditorStore ); + const { isNavigationMode, isBlockSelected } = useSelectors( + blockEditorStore + ); const { setNavigationMode, selectBlock } = useDispatch( blockEditorStore ); return useRefEffect( ( node ) => { diff --git a/packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js b/packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js index 8f3d5a5ec39539..56fa28d2ffd7b4 100644 --- a/packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +++ b/packages/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js @@ -3,7 +3,7 @@ */ import { isTextField } from '@wordpress/dom'; import { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; /** @@ -24,7 +24,7 @@ export function useEventHandlers( clientId ) { ( select ) => select( blockEditorStore ).isBlockSelected( clientId ), [ clientId ] ); - const { getBlockRootClientId, getBlockIndex } = useSelect( + const { getBlockRootClientId, getBlockIndex } = useSelectors( blockEditorStore ); const { insertDefaultBlock, removeBlock } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/block-list/use-in-between-inserter.js b/packages/block-editor/src/components/block-list/use-in-between-inserter.js index ad90940a0e657a..3e20488d391afe 100644 --- a/packages/block-editor/src/components/block-list/use-in-between-inserter.js +++ b/packages/block-editor/src/components/block-list/use-in-between-inserter.js @@ -3,7 +3,7 @@ */ import { useRefEffect } from '@wordpress/compose'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { useContext } from '@wordpress/element'; /** @@ -26,7 +26,7 @@ export function useInBetweenInserter() { isMultiSelecting, getSelectedBlockClientIds, getTemplateLock, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { showInsertionPoint, hideInsertionPoint } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/block-selection-clearer/index.js b/packages/block-editor/src/components/block-selection-clearer/index.js index acdb6669bff886..39611a866fed32 100644 --- a/packages/block-editor/src/components/block-selection-clearer/index.js +++ b/packages/block-editor/src/components/block-selection-clearer/index.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect, useDispatch } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; /** @@ -17,7 +17,7 @@ import { store as blockEditorStore } from '../../store'; * @return {import('react').RefCallback} Ref callback. */ export function useBlockSelectionClearer() { - const { hasSelectedBlock, hasMultiSelection } = useSelect( + const { hasSelectedBlock, hasMultiSelection } = useSelectors( blockEditorStore ); const { clearSelectedBlock } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/block-tools/block-selection-button.js b/packages/block-editor/src/components/block-tools/block-selection-button.js index 73805544c7f7af..fded602279fa56 100644 --- a/packages/block-editor/src/components/block-tools/block-selection-button.js +++ b/packages/block-editor/src/components/block-tools/block-selection-button.js @@ -8,7 +8,7 @@ import classnames from 'classnames'; */ import { dragHandle } from '@wordpress/icons'; import { Button, Flex, FlexItem } from '@wordpress/components'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { useEffect, useRef } from '@wordpress/element'; import { BACKSPACE, @@ -101,7 +101,7 @@ function BlockSelectionButton( { clientId, rootClientId, blockElement } ) { getPreviousBlockClientId, getNextBlockClientId, isNavigationMode, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { selectBlock, clearSelectedBlock, diff --git a/packages/block-editor/src/components/block-tools/index.js b/packages/block-editor/src/components/block-tools/index.js index d581a43dae4a8f..941afb1206ba28 100644 --- a/packages/block-editor/src/components/block-tools/index.js +++ b/packages/block-editor/src/components/block-tools/index.js @@ -6,7 +6,7 @@ import { first, last } from 'lodash'; /** * WordPress dependencies */ -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { useViewportMatch } from '@wordpress/compose'; import { Popover } from '@wordpress/components'; import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts'; @@ -40,7 +40,7 @@ export default function BlockTools( { [] ); const isMatch = useShortcutEventMatch(); - const { getSelectedBlockClientIds, getBlockRootClientId } = useSelect( + const { getSelectedBlockClientIds, getBlockRootClientId } = useSelectors( blockEditorStore ); const { diff --git a/packages/block-editor/src/components/copy-handler/index.js b/packages/block-editor/src/components/copy-handler/index.js index 5ae3e3b13c8bd7..80c9fb3d5b682e 100644 --- a/packages/block-editor/src/components/copy-handler/index.js +++ b/packages/block-editor/src/components/copy-handler/index.js @@ -11,7 +11,7 @@ import { documentHasSelection, documentHasUncollapsedSelection, } from '@wordpress/dom'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { __, _n, sprintf } from '@wordpress/i18n'; import { store as noticesStore } from '@wordpress/notices'; import { useRefEffect } from '@wordpress/compose'; @@ -23,8 +23,8 @@ import { getPasteEventData } from '../../utils/pasting'; import { store as blockEditorStore } from '../../store'; export function useNotifyCopy() { - const { getBlockName } = useSelect( blockEditorStore ); - const { getBlockType } = useSelect( blocksStore ); + const { getBlockName } = useSelectors( blockEditorStore ); + const { getBlockType } = useSelectors( blocksStore ); const { createSuccessNotice } = useDispatch( noticesStore ); return useCallback( ( eventType, selectedBlockClientIds ) => { @@ -78,7 +78,7 @@ export function useClipboardHandler() { getSelectedBlockClientIds, hasMultiSelection, getSettings, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { flashBlock, removeBlocks, replaceBlocks } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js b/packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js index de9d3fa9b5849b..db26ed45f57abd 100644 --- a/packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js +++ b/packages/block-editor/src/components/inner-blocks/use-inner-block-template-sync.js @@ -7,7 +7,7 @@ import { isEqual } from 'lodash'; * WordPress dependencies */ import { useRef, useLayoutEffect } from '@wordpress/element'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { synchronizeBlocksWithTemplate } from '@wordpress/blocks'; /** @@ -40,7 +40,7 @@ export default function useInnerBlockTemplateSync( templateLock, templateInsertUpdatesSelection ) { - const { getSelectedBlocksInitialCaretPosition } = useSelect( + const { getSelectedBlocksInitialCaretPosition } = useSelectors( blockEditorStore ); const { replaceInnerBlocks } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/inserter/hooks/use-clipboard-block.native.js b/packages/block-editor/src/components/inserter/hooks/use-clipboard-block.native.js index 7b0d78feb335c9..68198d371c8779 100644 --- a/packages/block-editor/src/components/inserter/hooks/use-clipboard-block.native.js +++ b/packages/block-editor/src/components/inserter/hooks/use-clipboard-block.native.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; import { rawHandler, store as blocksStore } from '@wordpress/blocks'; import { getClipboard } from '@wordpress/components'; @@ -11,8 +11,8 @@ import { getClipboard } from '@wordpress/components'; import { store as blockEditorStore } from '../../../store'; export default function useClipboardBlock( destinationRootClientId ) { - const { canInsertBlockType } = useSelect( blockEditorStore ); - const { getBlockType } = useSelect( blocksStore ); + const { canInsertBlockType } = useSelectors( blockEditorStore ); + const { getBlockType } = useSelectors( blocksStore ); const clipboard = getClipboard(); const clipboardBlock = rawHandler( { HTML: clipboard } )[ 0 ]; diff --git a/packages/block-editor/src/components/inserter/hooks/use-insertion-point.js b/packages/block-editor/src/components/inserter/hooks/use-insertion-point.js index dd2cc30db9056d..19f227c0ef1e88 100644 --- a/packages/block-editor/src/components/inserter/hooks/use-insertion-point.js +++ b/packages/block-editor/src/components/inserter/hooks/use-insertion-point.js @@ -6,7 +6,7 @@ import { castArray } from 'lodash'; /** * WordPress dependencies */ -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelect, useSelectors } from '@wordpress/data'; import { isUnmodifiedDefaultBlock } from '@wordpress/blocks'; import { _n, sprintf } from '@wordpress/i18n'; import { speak } from '@wordpress/a11y'; @@ -45,7 +45,7 @@ function useInsertionPoint( { onSelect, shouldFocusBlock = true, } ) { - const { getSelectedBlock } = useSelect( blockEditorStore ); + const { getSelectedBlock } = useSelectors( blockEditorStore ); const { destinationRootClientId, destinationIndex } = useSelect( ( select ) => { const { diff --git a/packages/block-editor/src/components/inserter/menu.native.js b/packages/block-editor/src/components/inserter/menu.native.js index 17c3176eb64d5a..8cb1076fbe5b76 100644 --- a/packages/block-editor/src/components/inserter/menu.native.js +++ b/packages/block-editor/src/components/inserter/menu.native.js @@ -7,7 +7,7 @@ import { AccessibilityInfo, TouchableHighlight, Platform } from 'react-native'; * WordPress dependencies */ import { useEffect, useState, useCallback } from '@wordpress/element'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { createBlock } from '@wordpress/blocks'; import { BottomSheet, @@ -80,7 +80,7 @@ function InserterMenu( { } ); - const { getBlockOrder, getBlockCount } = useSelect( blockEditorStore ); + const { getBlockOrder, getBlockCount } = useSelectors( blockEditorStore ); useEffect( () => { // Show/Hide insertion point on Mount/Dismount diff --git a/packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js b/packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js index d582548b5d64ef..83e56b61162159 100644 --- a/packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js +++ b/packages/block-editor/src/components/inspector-controls/block-support-tools-panel.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { __experimentalToolsPanel as ToolsPanel } from '@wordpress/components'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { useCallback } from '@wordpress/element'; /** @@ -18,7 +18,7 @@ export default function BlockSupportToolsPanel( { children, group, label } ) { getMultiSelectedBlockClientIds, getSelectedBlockClientId, hasMultiSelection, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const panelId = getSelectedBlockClientId(); const resetAll = useCallback( diff --git a/packages/block-editor/src/components/list-view/use-block-selection.js b/packages/block-editor/src/components/list-view/use-block-selection.js index 2edcd3ed8bad3d..a303a30ac066f7 100644 --- a/packages/block-editor/src/components/list-view/use-block-selection.js +++ b/packages/block-editor/src/components/list-view/use-block-selection.js @@ -8,7 +8,7 @@ import { difference } from 'lodash'; */ import { speak } from '@wordpress/a11y'; import { __, sprintf } from '@wordpress/i18n'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { useCallback } from '@wordpress/element'; import { UP, DOWN, HOME, END } from '@wordpress/keycodes'; import { store as blocksStore } from '@wordpress/blocks'; @@ -31,9 +31,9 @@ export default function useBlockSelection() { getSelectedBlockClientIds, hasMultiSelection, hasSelectedBlock, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); - const { getBlockType } = useSelect( blocksStore ); + const { getBlockType } = useSelectors( blocksStore ); const updateBlockSelection = useCallback( async ( event, clientId, destinationClientId ) => { diff --git a/packages/block-editor/src/components/list-view/use-list-view-drop-zone.js b/packages/block-editor/src/components/list-view/use-list-view-drop-zone.js index 6a0baa21d09b3f..0aabc980b2162c 100644 --- a/packages/block-editor/src/components/list-view/use-list-view-drop-zone.js +++ b/packages/block-editor/src/components/list-view/use-list-view-drop-zone.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; import { useState, useCallback } from '@wordpress/element'; import { useThrottle, @@ -201,7 +201,7 @@ export default function useListViewDropZone() { getBlockCount, getDraggedBlockClientIds, canInsertBlocks, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const [ target, setTarget ] = useState(); const { rootClientId: targetRootClientId, blockIndex: targetBlockIndex } = target || {}; diff --git a/packages/block-editor/src/components/rich-text/use-caret-in-format.js b/packages/block-editor/src/components/rich-text/use-caret-in-format.js index f5ad69f39713b7..920159889d3f9f 100644 --- a/packages/block-editor/src/components/rich-text/use-caret-in-format.js +++ b/packages/block-editor/src/components/rich-text/use-caret-in-format.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { useEffect } from '@wordpress/element'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; /** * Internal dependencies @@ -12,7 +12,7 @@ import { store as blockEditorStore } from '../../store'; export function useCaretInFormat( { value } ) { const hasActiveFormats = value.activeFormats && !! value.activeFormats.length; - const { isCaretWithinFormattedText } = useSelect( blockEditorStore ); + const { isCaretWithinFormattedText } = useSelectors( blockEditorStore ); const { enterFormattedText, exitFormattedText } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/rich-text/use-undo-automatic-change.js b/packages/block-editor/src/components/rich-text/use-undo-automatic-change.js index 890746cec74a35..3719310e71d608 100644 --- a/packages/block-editor/src/components/rich-text/use-undo-automatic-change.js +++ b/packages/block-editor/src/components/rich-text/use-undo-automatic-change.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; import { BACKSPACE, DELETE, ESCAPE } from '@wordpress/keycodes'; @@ -11,7 +11,9 @@ import { BACKSPACE, DELETE, ESCAPE } from '@wordpress/keycodes'; import { store as blockEditorStore } from '../../store'; export function useUndoAutomaticChange() { - const { didAutomaticChange, getSettings } = useSelect( blockEditorStore ); + const { didAutomaticChange, getSettings } = useSelectors( + blockEditorStore + ); return useRefEffect( ( element ) => { function onKeyDown( event ) { const { keyCode } = event; diff --git a/packages/block-editor/src/components/use-block-drop-zone/index.js b/packages/block-editor/src/components/use-block-drop-zone/index.js index f9edab72733537..a0c10e0480e491 100644 --- a/packages/block-editor/src/components/use-block-drop-zone/index.js +++ b/packages/block-editor/src/components/use-block-drop-zone/index.js @@ -1,7 +1,7 @@ /** * WordPress dependencies */ -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelect, useSelectors } from '@wordpress/data'; import { useCallback, useState } from '@wordpress/element'; import { useThrottle, @@ -100,7 +100,7 @@ export default function useBlockDropZone( { [ targetRootClientId ] ); - const { getBlockListSettings } = useSelect( blockEditorStore ); + const { getBlockListSettings } = useSelectors( blockEditorStore ); const { showInsertionPoint, hideInsertionPoint } = useDispatch( blockEditorStore ); diff --git a/packages/block-editor/src/components/use-on-block-drop/index.js b/packages/block-editor/src/components/use-on-block-drop/index.js index 76dbb119912a73..6446bd74db7613 100644 --- a/packages/block-editor/src/components/use-on-block-drop/index.js +++ b/packages/block-editor/src/components/use-on-block-drop/index.js @@ -7,7 +7,7 @@ import { getBlockTransforms, pasteHandler, } from '@wordpress/blocks'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelect, useSelectors } from '@wordpress/data'; import { getFilesFromDataTransfer } from '@wordpress/dom'; /** @@ -221,7 +221,7 @@ export default function useOnBlockDrop( targetRootClientId, targetBlockIndex ) { canInsertBlockType, getBlockIndex, getClientIdsOfDescendants, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { insertBlocks, moveBlocksToPosition, diff --git a/packages/block-editor/src/components/writing-flow/use-arrow-nav.js b/packages/block-editor/src/components/writing-flow/use-arrow-nav.js index d02233650c392f..7efbda3bfaeebb 100644 --- a/packages/block-editor/src/components/writing-flow/use-arrow-nav.js +++ b/packages/block-editor/src/components/writing-flow/use-arrow-nav.js @@ -16,7 +16,7 @@ import { isRTL, } from '@wordpress/dom'; import { UP, DOWN, LEFT, RIGHT } from '@wordpress/keycodes'; -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; import { useRefEffect } from '@wordpress/compose'; /** @@ -125,7 +125,7 @@ export default function useArrowNav() { getNextBlockClientId, getSettings, hasMultiSelection, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); return useRefEffect( ( node ) => { // Here a DOMRect is stored while moving the caret vertically so // vertical position of the start position can be restored. This is to diff --git a/packages/block-editor/src/components/writing-flow/use-select-all.js b/packages/block-editor/src/components/writing-flow/use-select-all.js index 20c295912a7f7c..90539bcea00b32 100644 --- a/packages/block-editor/src/components/writing-flow/use-select-all.js +++ b/packages/block-editor/src/components/writing-flow/use-select-all.js @@ -7,7 +7,7 @@ import { first, last } from 'lodash'; * WordPress dependencies */ import { isEntirelySelected } from '@wordpress/dom'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useDispatch, useSelectors } from '@wordpress/data'; import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts'; import { useRefEffect } from '@wordpress/compose'; @@ -21,7 +21,7 @@ export default function useSelectAll() { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { multiSelect } = useDispatch( blockEditorStore ); const isMatch = useShortcutEventMatch(); diff --git a/packages/block-editor/src/components/writing-flow/use-tab-nav.js b/packages/block-editor/src/components/writing-flow/use-tab-nav.js index 61697a4c0d2beb..21a6e5bf60a5f6 100644 --- a/packages/block-editor/src/components/writing-flow/use-tab-nav.js +++ b/packages/block-editor/src/components/writing-flow/use-tab-nav.js @@ -3,7 +3,7 @@ */ import { focus, isFormElement } from '@wordpress/dom'; import { TAB, ESCAPE } from '@wordpress/keycodes'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { useRefEffect, useMergeRefs } from '@wordpress/compose'; import { useRef } from '@wordpress/element'; @@ -21,7 +21,7 @@ export default function useTabNav() { hasMultiSelection, getSelectedBlockClientId, getBlockCount, - } = useSelect( blockEditorStore ); + } = useSelectors( blockEditorStore ); const { setNavigationMode } = useDispatch( blockEditorStore ); const isNavigationMode = useSelect( ( select ) => select( blockEditorStore ).isNavigationMode(), diff --git a/packages/block-library/src/buttons/edit.native.js b/packages/block-library/src/buttons/edit.native.js index fe6186f1278b8f..9352097899f6e3 100644 --- a/packages/block-library/src/buttons/edit.native.js +++ b/packages/block-library/src/buttons/edit.native.js @@ -15,7 +15,7 @@ import { } from '@wordpress/block-editor'; import { createBlock, getBlockSupport } from '@wordpress/blocks'; import { useResizeObserver } from '@wordpress/compose'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useDispatch, useSelect, useSelectors } from '@wordpress/data'; import { useState, useEffect, useRef, useCallback } from '@wordpress/element'; import { alignmentHelpers } from '@wordpress/components'; @@ -79,7 +79,7 @@ export default function ButtonsEdit( { return preferredStyleVariations?.value?.[ buttonBlockName ]; }, [] ); - const { getBlockOrder } = useSelect( blockEditorStore ); + const { getBlockOrder } = useSelectors( blockEditorStore ); const { insertBlock, removeBlock, selectBlock } = useDispatch( blockEditorStore ); diff --git a/packages/block-library/src/embed/embed-preview.native.js b/packages/block-library/src/embed/embed-preview.native.js index bb8df663baf281..d67fa70332badd 100644 --- a/packages/block-library/src/embed/embed-preview.native.js +++ b/packages/block-library/src/embed/embed-preview.native.js @@ -16,7 +16,7 @@ import { import { __, sprintf } from '@wordpress/i18n'; import { memo, useState } from '@wordpress/element'; import { SandBox } from '@wordpress/components'; -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; /** * Internal dependencies @@ -43,7 +43,7 @@ const EmbedPreview = ( { isDefaultEmbedInfo, } ) => { const [ isCaptionSelected, setIsCaptionSelected ] = useState( false ); - const { locale } = useSelect( blockEditorStore ).getSettings(); + const { locale } = useSelectors( blockEditorStore ).getSettings(); const wrapperStyle = styles[ 'embed-preview__wrapper' ]; const wrapperAlignStyle = diff --git a/packages/block-library/src/freeform/edit.js b/packages/block-library/src/freeform/edit.js index 4530fbec0a59bd..4799f5b61801b2 100644 --- a/packages/block-library/src/freeform/edit.js +++ b/packages/block-library/src/freeform/edit.js @@ -11,7 +11,7 @@ import { useBlockProps, store as blockEditorStore, } from '@wordpress/block-editor'; -import { useSelect } from '@wordpress/data'; +import { useSelectors } from '@wordpress/data'; import { ToolbarGroup } from '@wordpress/components'; import { useEffect, useRef } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; @@ -46,7 +46,7 @@ export default function ClassicEdit( { setAttributes, onReplace, } ) { - const { getMultiSelectedBlockClientIds } = useSelect( blockEditorStore ); + const { getMultiSelectedBlockClientIds } = useSelectors( blockEditorStore ); const didMount = useRef( false ); useEffect( () => { diff --git a/packages/block-library/src/image/image.js b/packages/block-library/src/image/image.js index 0fa472afca503c..cc4ace88f8e4ca 100644 --- a/packages/block-library/src/image/image.js +++ b/packages/block-library/src/image/image.js @@ -17,7 +17,7 @@ import { ToolbarButton, } from '@wordpress/components'; import { useViewportMatch, usePrevious } from '@wordpress/compose'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useSelect, useDispatch, useSelectors } from '@wordpress/data'; import { BlockControls, InspectorControls, @@ -85,7 +85,7 @@ export default function Image( { const captionRef = useRef(); const prevUrl = usePrevious( url ); const { allowResize = true } = context; - const { getBlock } = useSelect( blockEditorStore ); + const { getBlock } = useSelectors( blockEditorStore ); const { image, multiImageSelection } = useSelect( ( select ) => { diff --git a/packages/customize-widgets/src/components/customize-widgets/use-clear-selected-block.js b/packages/customize-widgets/src/components/customize-widgets/use-clear-selected-block.js index cf9d263fb18b38..db5c45973799f8 100644 --- a/packages/customize-widgets/src/components/customize-widgets/use-clear-selected-block.js +++ b/packages/customize-widgets/src/components/customize-widgets/use-clear-selected-block.js @@ -2,7 +2,7 @@ * WordPress dependencies */ import { useEffect } from '@wordpress/element'; -import { useDispatch, useSelect } from '@wordpress/data'; +import { useSelectors, useDispatch } from '@wordpress/data'; import { store as blockEditorStore } from '@wordpress/block-editor'; /** @@ -22,7 +22,7 @@ import { store as blockEditorStore } from '@wordpress/block-editor'; * @param {Object} popoverRef The ref object of the popover node container. */ export default function useClearSelectedBlock( sidebarControl, popoverRef ) { - const { hasSelectedBlock, hasMultiSelection } = useSelect( + const { hasSelectedBlock, hasMultiSelection } = useSelectors( blockEditorStore ); const { clearSelectedBlock } = useDispatch( blockEditorStore ); diff --git a/packages/data/README.md b/packages/data/README.md index 2e3e07a13ecc1b..71f741e995336d 100644 --- a/packages/data/README.md +++ b/packages/data/README.md @@ -800,7 +800,8 @@ doesn't change and other props are passed in that do change, the price will not change because the dependency is just the currency. When data is only used in an event callback, the data should not be retrieved -on render, so it may be useful to get the selectors function instead. +on render, so you need to use useSelectors instead. For backwards compatibility +only, this function still supports getting the selectors by passing a store. **Don't use `useSelect` this way when calling the selectors in the render function because your component won't re-render on a data change.** @@ -820,12 +821,24 @@ function Paste( { children } ) { _Parameters_ -- _mapSelect_ `Function|StoreDescriptor|string`: Function called on every state change. The returned value is exposed to the component implementing this hook. The function receives the `registry.select` method on the first argument and the `registry` on the second argument. When a store key is passed, all selectors for the store will be returned. This is only meant for usage of these selectors in event callbacks, not for data needed to create the element tree. +- _mapSelect_ `Function|StoreDescriptor|string`: Function called on every state change. The returned value is exposed to the component implementing this hook. The function receives the `registry.select` method on the first argument and the `registry` on the second argument. (deprecated) When a store key is passed, all selectors for the store will be returned. This is only meant for usage of these selectors in event callbacks, not for data needed to create the element tree. - _deps_ `Array`: If provided, this memoizes the mapSelect so the same `mapSelect` is invoked on every state change unless the dependencies change. _Returns_ -- `Function`: A custom react hook. +- `any`: The current map output or a store's selectors. + +### useSelectors + +Retrieve the controls of a store, so that it can be used to get data in event callbacks. + +_Parameters_ + +- _storeName_ `string`: Key of the store to get controls for. **Don't use `useSelect` for calling the selectors in the render function because your component won't re-render on a data change. You need to use useSelect in that case.** `js import { useSelect } from '@wordpress/data'; function Paste( { children } ) { const { getSettings } = useSelect( 'my-shop' ); function onPaste() { // Do something with the settings. const settings = getSettings(); } return