- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 626
fix: Deleting last block in column #2110
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
base: main
Are you sure you want to change the base?
Conversation
| The latest updates on your projects. Learn more about Vercel for GitHub. 
 | 
| @blocknote/ariakit
 @blocknote/code-block
 @blocknote/core
 @blocknote/mantine
 @blocknote/react
 @blocknote/server-util
 @blocknote/shadcn
 @blocknote/xl-ai
 @blocknote/xl-docx-exporter
 @blocknote/xl-email-exporter
 @blocknote/xl-multi-column
 @blocknote/xl-odt-exporter
 @blocknote/xl-pdf-exporter
 commit:  | 
        
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts
              
                Outdated
          
            Show resolved
            Hide resolved
        
      …olumns are removed + added more tests
| Where are we at with this @matthewlipski, am I missing the changes you made here? | 
| That's what it was. Let's merge that into this & review altogether I think | 
* Added `fixColumnList` function * Updated keyboard shortcut * Implemented PR feedback
        
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts
              
                Outdated
          
            Show resolved
            Hide resolved
        
              
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts
          
            Show resolved
            Hide resolved
        
              
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/util/fixColumnList.ts
          
            Show resolved
            Hide resolved
        
              
          
                packages/core/src/api/blockManipulation/commands/replaceBlocks/replaceBlocks.ts
              
                Outdated
          
            Show resolved
            Hide resolved
        
      | IMPORTANT NOTEThere is a known issue with this PR, in that  Screen.Recording.2025-10-31.at.16.27.16.mov | 
Summary
Currently, when there is only one block in a column, removing it via
removeBlocks/replaceBlockswon't collapse the column as it should, leading to confusing UX when deleting the block from the side menu. This behavior is also different to removing the block by hitting backspace at its start.This PR makes empty
columns, andcolumnListswith <2 children get collapsed. This happens by running the newfixColumnListfunction inremoveBlocks/replaceBlocks. The Backspace keyboard handler has also been updated to usefixColumnListwhen removing the last block in a column.Closes #1323
Fixes #2000
Rationale
The current behavior of the remove block button in the side menu is unintuitive when used on the only block in a column, and should be improved.
Changes
fixColumnListfunction.removeAndInsertBlocksand Backspace keyboard handler usefixColumnList.Impact
Since
removeAndInsertBlockscan now removecolumn/columnListnodes that it's actively traversing indoc.descendants, there's an edge case where I'm not sure what will happen.E.g. consider this structure:
columnListcolumnblockContainer1columnblockContainer2columnblockContainer3If we call
removeBlocksfor bothblockContainer2 & 3, I'm not sure this will work properly. Worth adding tests for this?EDIT: Added tests, works ok for both removing and replacing blocks 👍
Testing
See above.
Screenshots/Video
N/A
Checklist
Additional Notes