Skip to content

Commit

Permalink
wip avoid returning a new array each time for clientIdsTree
Browse files Browse the repository at this point in the history
  • Loading branch information
gwwar committed Aug 19, 2021
1 parent bdf4a7d commit 685c224
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 46 deletions.
48 changes: 30 additions & 18 deletions packages/block-editor/src/components/list-view/block.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,35 @@ export default function ListViewBlock( {
const cellRef = useRef( null );
const [ isHovered, setIsHovered ] = useState( false );
const { clientId } = block;
const { blockParents } = useSelect(
( select ) => {
const { getBlockParents } = select( blockEditorStore );
const {
__experimentalFeatures: withExperimentalFeatures,
__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,
isTreeGridMounted,
animate,
draggingId,
setDraggingId,
collapse,
expand,
} = useListViewContext();

const { blockParents, dropContainer, dropSibling } = useSelect(
( select ) => {
const { getBlockParents, canInsertBlocks } = select(
blockEditorStore
);
return {
blockParents: getBlockParents( clientId ),
dropContainer:
draggingId &&
draggingId !== clientId &&
canInsertBlocks( [ draggingId ], clientId ),
dropSibling:
draggingId &&
draggingId !== clientId &&
canInsertBlocks( [ draggingId ], parentId ),
};
},
[ clientId ]
[ clientId, draggingId ]
);

const {
Expand All @@ -76,28 +96,20 @@ export default function ListViewBlock( {
'block-editor-list-view-block__mover-cell',
{ 'is-visible': isHovered }
);
const {
__experimentalFeatures: withExperimentalFeatures,
__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,
isTreeGridMounted,
animate,
draggingId,
setDraggingId,
collapse,
expand,
} = useListViewContext();

//TODO: handle block delete
useEffect( () => {
setPosition( listPosition, {
...{
clientId,
dropContainer: block?.dropContainer ?? false,
dropSibling: block?.dropSibling ?? false,
dropContainer,
dropSibling,
parentId,
},
} );
}, [ listPosition, draggingId ] );
return () => {
setPosition( listPosition, undefined );
};
}, [ listPosition, draggingId, dropContainer, dropSibling ] );

const listViewBlockSettingsClassName = classnames(
'block-editor-list-view-block__menu-cell',
Expand Down
3 changes: 1 addition & 2 deletions packages/block-editor/src/components/list-view/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,7 @@ export default function ListView( {
const { clientIdsTree, selectedClientIds } = useListViewClientIds(
blocks,
showOnlyCurrentHierarchy,
__experimentalPersistentListViewFeatures,
draggingId
__experimentalPersistentListViewFeatures
);
const [ tree, setTree ] = useState( clientIdsTree );
const { selectBlock, moveBlocksToPosition } = useDispatch(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ const useListViewSelectedClientIds = (
const useListViewClientIdsTree = (
blocks,
selectedClientIds,
showOnlyCurrentHierarchy,
draggingId
showOnlyCurrentHierarchy
) =>
useSelect(
( select ) => {
Expand All @@ -50,14 +49,14 @@ const useListViewClientIdsTree = (
const isSingleBlockSelected =
selectedClientIds && ! Array.isArray( selectedClientIds );
if ( ! showOnlyCurrentHierarchy || ! isSingleBlockSelected ) {
return __unstableGetClientIdsTree( '', draggingId );
return __unstableGetClientIdsTree();
}

const rootBlock = __unstableGetClientIdWithClientIdsTree(
getBlockHierarchyRootClientId( selectedClientIds )
);
if ( ! rootBlock ) {
return __unstableGetClientIdsTree( '', draggingId );
return __unstableGetClientIdsTree();
}

const hasHierarchy =
Expand All @@ -67,25 +66,23 @@ const useListViewClientIdsTree = (
return [ rootBlock ];
}

return __unstableGetClientIdsTree( '', draggingId );
return __unstableGetClientIdsTree();
},
[ blocks, selectedClientIds, showOnlyCurrentHierarchy, draggingId ]
[ blocks, selectedClientIds, showOnlyCurrentHierarchy ]
);

export default function useListViewClientIds(
blocks,
showOnlyCurrentHierarchy,
__experimentalPersistentListViewFeatures,
draggingId
__experimentalPersistentListViewFeatures
) {
const selectedClientIds = useListViewSelectedClientIds(
__experimentalPersistentListViewFeatures
);
const clientIdsTree = useListViewClientIdsTree(
blocks,
selectedClientIds,
showOnlyCurrentHierarchy,
draggingId
showOnlyCurrentHierarchy
);
return { clientIdsTree, selectedClientIds };
}
22 changes: 6 additions & 16 deletions packages/block-editor/src/store/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,15 +266,11 @@ export const __unstableGetBlockTree = createSelector(
* @return {Object} Client IDs of the post blocks.
*/
export const __unstableGetClientIdWithClientIdsTree = createSelector(
( state, clientId, draggingId = false, dropSibling = false ) => ( {
( state, clientId ) => ( {
clientId,
...( draggingId && {
dropContainer: canInsertBlocks( state, [ draggingId ], clientId ),
dropSibling,
} ),
innerBlocks: __unstableGetClientIdsTree( state, clientId, draggingId ),
innerBlocks: __unstableGetClientIdsTree( state, clientId ),
} ),
( state, draggingId ) => [ state.blocks.order, draggingId ]
( state ) => [ state.blocks.order ]
);

/**
Expand All @@ -288,17 +284,11 @@ export const __unstableGetClientIdWithClientIdsTree = createSelector(
* @return {Object[]} Client IDs of the post blocks.
*/
export const __unstableGetClientIdsTree = createSelector(
( state, rootClientId = '', draggingId = false ) =>
( state, rootClientId = '' ) =>
map( getBlockOrder( state, rootClientId ), ( clientId ) =>
__unstableGetClientIdWithClientIdsTree(
state,
clientId,
draggingId,
draggingId &&
canInsertBlocks( state, [ draggingId ], rootClientId )
)
__unstableGetClientIdWithClientIdsTree( state, clientId )
),
( state, draggingId ) => [ state.blocks.order, draggingId ]
( state ) => [ state.blocks.order ]
);

/**
Expand Down

0 comments on commit 685c224

Please sign in to comment.