-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Try/refactor insertion #65282
Try/refactor insertion #65282
Conversation
This reverts commit df849a9.
… related actions and selectors
Size Change: -182 B (-0.01%) Total Size: 1.78 MB
ℹ️ View Unchanged
|
…nd add getNextInsertionPoint
_destinationIndex = insertionPoint.insertionIndex; | ||
} else if ( clientId ) { | ||
// Insert after a specific client ID. | ||
_destinationIndex = getBlockIndex( clientId ); | ||
} else if ( ! isAppender && selectedBlockClientId ) { | ||
_destinationRootClientId = getBlockRootClientId( | ||
selectedBlockClientId | ||
); | ||
_destinationIndex = getBlockIndex( selectedBlockClientId ) + 1; | ||
} else { | ||
// Insert at the end of the list. | ||
_destinationIndex = getBlockOrder( | ||
_destinationRootClientId | ||
).length; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I should leave all of this in and address it in a follow-up to refactor further.
export const getNextInsertionPoint = createRegistrySelector( ( select ) => | ||
createSelector( | ||
( state ) => { | ||
let rootClientId, index; | ||
|
||
const { | ||
insertionPoint, | ||
selection: { selectionEnd }, | ||
} = state; | ||
if ( insertionPoint !== null ) { | ||
return insertionPoint; | ||
} | ||
|
||
const { clientId } = selectionEnd; | ||
const sectionRootClientId = unlock( | ||
select( STORE_NAME ) | ||
).getSectionRootClientId( state, clientId ); | ||
|
||
if ( clientId ) { | ||
rootClientId = | ||
getBlockRootClientId( state, clientId ) || undefined; | ||
index = getBlockIndex( state, selectionEnd.clientId ) + 1; | ||
} else if ( sectionRootClientId ) { | ||
index = getBlockOrder( state, sectionRootClientId ).length; | ||
} else { | ||
index = getBlockOrder( state ).length; | ||
} | ||
|
||
return { rootClientId, index }; | ||
}, | ||
( state ) => [ | ||
state.insertionPoint, | ||
state.selection.selectionEnd.clientId, | ||
state.blocks.parents, | ||
state.blocks.order, | ||
] | ||
) | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is only used in one spot, so I think we should remove it. I think it could be useful in the future though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also think that if we had it available, it would have been used. May be worth going through and seeing how much it would simplify things.
We should set the insertion point when clicking an inline + rather than waiting until Browse All. That would remove the need for a lot of code in the inline inserter. |
There's a lot happening within the inserter select well before we seemingly need any of it. How much of this do we need to constantly fire? Can't we delay checking it until we've clicked the toggle?
a0f66e9
to
24a2aec
Compare
Exploring #65290
What?
Rework Block Insertion API for clarity and performance.
Why?
How?
Testing Instructions
Testing Instructions for Keyboard
Screenshots or screencast