From 5d3dc1acb8305b228fd52fa73c79877265bd5e0b Mon Sep 17 00:00:00 2001 From: Deepak Kumar Date: Thu, 2 May 2024 17:54:50 +0530 Subject: [PATCH 1/3] WP-70 unequal rowspan and colspan cell merging --- src/blocks/table-column/toolbar.tsx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/blocks/table-column/toolbar.tsx b/src/blocks/table-column/toolbar.tsx index 3caaa4a..5365a74 100644 --- a/src/blocks/table-column/toolbar.tsx +++ b/src/blocks/table-column/toolbar.tsx @@ -550,6 +550,15 @@ export default function Toolbar( { const mergeIntoColspan: number = parseInt( mergeIntoAttributes?.colSpan ?? 1 ); const mergeFromColspan: number = parseInt( mergeFromAttributes?.colSpan ?? 1 ); + // Get rowspans. + const mergeIntoRowspan: number = parseInt( mergeIntoAttributes?.rowSpan ?? 1 ); + const mergeFromRowspan: number = parseInt( mergeFromAttributes?.rowSpan ?? 1 ); + + // Invalid merge. + if ( mergeIntoRowspan !== mergeFromRowspan ) { + return; + } + // Update colspan. updateBlockAttributes( toColumn.clientId, { colSpan: mergeIntoColspan + mergeFromColspan } ); @@ -577,6 +586,15 @@ export default function Toolbar( { const mergeIntoRowspan: number = parseInt( mergeIntoAttributes?.rowSpan ?? 1 ); const mergeFromRowspan: number = parseInt( mergeFromAttributes?.rowSpan ?? 1 ); + // Get colspans. + const mergeIntoColspan: number = parseInt( mergeIntoAttributes?.colSpan ?? 1 ); + const mergeFromColspan: number = parseInt( mergeFromAttributes?.colSpan ?? 1 ); + + // Invalid merge. + if ( mergeIntoColspan !== mergeFromColspan ) { + return; + } + // Update rowspan. updateBlockAttributes( toColumn.clientId, { rowSpan: mergeIntoRowspan + mergeFromRowspan } ); From d005f841b42bca3f36aa478a8dc4ad0c60ded04c Mon Sep 17 00:00:00 2001 From: Deepak Kumar Date: Thu, 2 May 2024 18:24:16 +0530 Subject: [PATCH 2/3] WP-70 avoid merging thead/tfoot cells with tbody --- src/blocks/table-column/toolbar.tsx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/blocks/table-column/toolbar.tsx b/src/blocks/table-column/toolbar.tsx index 5365a74..26654c1 100644 --- a/src/blocks/table-column/toolbar.tsx +++ b/src/blocks/table-column/toolbar.tsx @@ -307,6 +307,12 @@ export default function Toolbar( { return false; } + // Avoid merging thead/tfoot column with tbody column. + const currentRowContainerBlockAttributes = getBlockAttributes( currentRowContainerBlock.clientId ); + if ( currentRowContainerBlockAttributes?.type !== rowContainerBlock?.attributes?.type ) { + return false; + } + return currentRowContainerBlock.innerBlocks.some( ( rowBlock, index ): boolean => { // Get current row. const rowNumber: number = index + 1; @@ -369,6 +375,12 @@ export default function Toolbar( { return false; } + // Avoid merging thead/tfoot column with tbody column. + const currentRowContainerBlockAttributes = getBlockAttributes( currentRowContainerBlock.clientId ); + if ( currentRowContainerBlockAttributes?.type !== rowContainerBlock?.attributes?.type ) { + return false; + } + return currentRowContainerBlock.innerBlocks.some( ( rowBlock, index ): boolean => { // Get current row. const rowNumber: number = index + 1; @@ -435,6 +447,12 @@ export default function Toolbar( { return false; } + // Avoid merging thead/tfoot row with tbody row. + const currentRowContainerBlockAttributes = getBlockAttributes( currentRowContainerBlock.clientId ); + if ( currentRowContainerBlockAttributes?.type !== rowContainerBlock?.attributes?.type ) { + return false; + } + return currentRowContainerBlock.innerBlocks.some( ( rowBlock, rowIndex ): boolean => { // Get current row. const rowNumber: number = rowIndex + 1; @@ -497,6 +515,12 @@ export default function Toolbar( { return false; } + // Avoid merging thead/tfoot row with tbody row. + const currentRowContainerBlockAttributes = getBlockAttributes( currentRowContainerBlock.clientId ); + if ( currentRowContainerBlockAttributes?.type !== rowContainerBlock?.attributes?.type ) { + return false; + } + return currentRowContainerBlock.innerBlocks.some( ( rowBlock, rowIndex ): boolean => { // Get current row. const rowNumber: number = rowIndex + 1; From fe5e0914c2fbcf234ed3cbfdacb8f81849ccef03 Mon Sep 17 00:00:00 2001 From: Deepak Kumar Date: Fri, 3 May 2024 00:46:54 +0530 Subject: [PATCH 3/3] WP-70 fix eslint issues --- src/blocks/table-column/toolbar.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/blocks/table-column/toolbar.tsx b/src/blocks/table-column/toolbar.tsx index 26654c1..84c3c7c 100644 --- a/src/blocks/table-column/toolbar.tsx +++ b/src/blocks/table-column/toolbar.tsx @@ -571,8 +571,6 @@ export default function Toolbar( { // Get colspans. const mergeIntoAttributes = getBlockAttributes( toColumn.clientId ); const mergeFromAttributes = getBlockAttributes( fromColumn.clientId ); - const mergeIntoColspan: number = parseInt( mergeIntoAttributes?.colSpan ?? 1 ); - const mergeFromColspan: number = parseInt( mergeFromAttributes?.colSpan ?? 1 ); // Get rowspans. const mergeIntoRowspan: number = parseInt( mergeIntoAttributes?.rowSpan ?? 1 ); @@ -583,6 +581,9 @@ export default function Toolbar( { return; } + const mergeIntoColspan: number = parseInt( mergeIntoAttributes?.colSpan ?? 1 ); + const mergeFromColspan: number = parseInt( mergeFromAttributes?.colSpan ?? 1 ); + // Update colspan. updateBlockAttributes( toColumn.clientId, { colSpan: mergeIntoColspan + mergeFromColspan } ); @@ -607,8 +608,6 @@ export default function Toolbar( { // Get rowspans. const mergeIntoAttributes = getBlockAttributes( toColumn.clientId ); const mergeFromAttributes = getBlockAttributes( fromColumn.clientId ); - const mergeIntoRowspan: number = parseInt( mergeIntoAttributes?.rowSpan ?? 1 ); - const mergeFromRowspan: number = parseInt( mergeFromAttributes?.rowSpan ?? 1 ); // Get colspans. const mergeIntoColspan: number = parseInt( mergeIntoAttributes?.colSpan ?? 1 ); @@ -619,6 +618,9 @@ export default function Toolbar( { return; } + const mergeIntoRowspan: number = parseInt( mergeIntoAttributes?.rowSpan ?? 1 ); + const mergeFromRowspan: number = parseInt( mergeFromAttributes?.rowSpan ?? 1 ); + // Update rowspan. updateBlockAttributes( toColumn.clientId, { rowSpan: mergeIntoRowspan + mergeFromRowspan } );