From 62bf9c266a294cb7d2cb1c4c74a1b2ae717a8319 Mon Sep 17 00:00:00 2001 From: benazeer-ben Date: Mon, 10 Feb 2025 17:00:54 +0530 Subject: [PATCH 1/2] Transform page list to list --- packages/block-library/src/page-list/edit.js | 59 ++++++++++++++++++- packages/block-library/src/page-list/index.js | 3 +- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/packages/block-library/src/page-list/edit.js b/packages/block-library/src/page-list/edit.js index 458b8075749e5d..21ad463de8178e 100644 --- a/packages/block-library/src/page-list/edit.js +++ b/packages/block-library/src/page-list/edit.js @@ -27,8 +27,8 @@ import { } from '@wordpress/components'; import { __, sprintf } from '@wordpress/i18n'; import { useMemo, useState, useEffect, useCallback } from '@wordpress/element'; -import { useEntityRecords } from '@wordpress/core-data'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useEntityRecords, store as coreStore } from '@wordpress/core-data'; +import { useSelect, useDispatch, select } from '@wordpress/data'; /** * Internal dependencies @@ -258,6 +258,7 @@ export default function PageListEdit( { hasDraggedChild, isChildOfNavigation, } = useSelect( + // eslint-disable-next-line no-shadow ( select ) => { const { getBlockParentsByBlockName, @@ -406,3 +407,57 @@ export default function PageListEdit( { ); } +export const transforms = { + to: [ + { + type: 'block', + blocks: [ 'core/list' ], + transform: () => { + const pages = select( coreStore ).getEntityRecords( + 'postType', + 'page', + { + per_page: -1, + status: 'publish', + } + ); + + if ( ! pages || pages.length === 0 ) { + return createBlock( 'core/list', { + ordered: false, + } ); + } + + const createListItems = ( parentId = 0 ) => { + return pages + .filter( ( page ) => page.parent === parentId ) + .map( ( page ) => { + const childItems = createListItems( page.id ); + const listItem = createBlock( 'core/list-item', { + content: `${ page.title.rendered }`, + } ); + if ( childItems.length > 0 ) { + const subList = createBlock( + 'core/list', + {}, + childItems + ); + listItem.innerBlocks = [ subList ]; + } + return listItem; + } ); + }; + + const innerBlocks = createListItems(); + + return createBlock( + 'core/list', + { + ordered: false, + }, + innerBlocks + ); + }, + }, + ], +}; diff --git a/packages/block-library/src/page-list/index.js b/packages/block-library/src/page-list/index.js index 4a128e7da58a8d..76628fd3228f52 100644 --- a/packages/block-library/src/page-list/index.js +++ b/packages/block-library/src/page-list/index.js @@ -8,7 +8,7 @@ import { pages } from '@wordpress/icons'; */ import initBlock from '../utils/init-block'; import metadata from './block.json'; -import edit from './edit.js'; +import edit, { transforms } from './edit.js'; const { name } = metadata; @@ -18,6 +18,7 @@ export const settings = { icon: pages, example: {}, edit, + transforms, }; export const init = () => initBlock( { name, metadata, settings } ); From 71196065523db5757c6148af8ce6159f9415a01c Mon Sep 17 00:00:00 2001 From: benazeer-ben Date: Tue, 11 Feb 2025 17:26:12 +0530 Subject: [PATCH 2/2] Feedback changes --- packages/block-library/src/page-list/edit.js | 59 +-------------- packages/block-library/src/page-list/index.js | 3 +- .../block-library/src/page-list/transforms.js | 71 +++++++++++++++++++ 3 files changed, 75 insertions(+), 58 deletions(-) create mode 100644 packages/block-library/src/page-list/transforms.js diff --git a/packages/block-library/src/page-list/edit.js b/packages/block-library/src/page-list/edit.js index 21ad463de8178e..458b8075749e5d 100644 --- a/packages/block-library/src/page-list/edit.js +++ b/packages/block-library/src/page-list/edit.js @@ -27,8 +27,8 @@ import { } from '@wordpress/components'; import { __, sprintf } from '@wordpress/i18n'; import { useMemo, useState, useEffect, useCallback } from '@wordpress/element'; -import { useEntityRecords, store as coreStore } from '@wordpress/core-data'; -import { useSelect, useDispatch, select } from '@wordpress/data'; +import { useEntityRecords } from '@wordpress/core-data'; +import { useSelect, useDispatch } from '@wordpress/data'; /** * Internal dependencies @@ -258,7 +258,6 @@ export default function PageListEdit( { hasDraggedChild, isChildOfNavigation, } = useSelect( - // eslint-disable-next-line no-shadow ( select ) => { const { getBlockParentsByBlockName, @@ -407,57 +406,3 @@ export default function PageListEdit( { ); } -export const transforms = { - to: [ - { - type: 'block', - blocks: [ 'core/list' ], - transform: () => { - const pages = select( coreStore ).getEntityRecords( - 'postType', - 'page', - { - per_page: -1, - status: 'publish', - } - ); - - if ( ! pages || pages.length === 0 ) { - return createBlock( 'core/list', { - ordered: false, - } ); - } - - const createListItems = ( parentId = 0 ) => { - return pages - .filter( ( page ) => page.parent === parentId ) - .map( ( page ) => { - const childItems = createListItems( page.id ); - const listItem = createBlock( 'core/list-item', { - content: `${ page.title.rendered }`, - } ); - if ( childItems.length > 0 ) { - const subList = createBlock( - 'core/list', - {}, - childItems - ); - listItem.innerBlocks = [ subList ]; - } - return listItem; - } ); - }; - - const innerBlocks = createListItems(); - - return createBlock( - 'core/list', - { - ordered: false, - }, - innerBlocks - ); - }, - }, - ], -}; diff --git a/packages/block-library/src/page-list/index.js b/packages/block-library/src/page-list/index.js index 76628fd3228f52..9ee01cd14d1b7d 100644 --- a/packages/block-library/src/page-list/index.js +++ b/packages/block-library/src/page-list/index.js @@ -8,7 +8,8 @@ import { pages } from '@wordpress/icons'; */ import initBlock from '../utils/init-block'; import metadata from './block.json'; -import edit, { transforms } from './edit.js'; +import transforms from './transforms.js'; +import edit from './edit.js'; const { name } = metadata; diff --git a/packages/block-library/src/page-list/transforms.js b/packages/block-library/src/page-list/transforms.js new file mode 100644 index 00000000000000..2bef13c674830a --- /dev/null +++ b/packages/block-library/src/page-list/transforms.js @@ -0,0 +1,71 @@ +/** + * WordPress dependencies + */ +import { createBlock } from '@wordpress/blocks'; +import { store as coreStore } from '@wordpress/core-data'; +import { select } from '@wordpress/data'; +const transforms = { + to: [ + { + type: 'block', + blocks: [ 'core/list' ], + transform: ( attributes ) => { + const { style, fontFamily } = attributes; + const pages = select( coreStore ).getEntityRecords( + 'postType', + 'page', + { + per_page: 100, + status: 'publish', + orderBy: 'menu_order', + order: 'asc', + _fields: [ + 'id', + 'link', + 'parent', + 'title', + 'menu_order', + ], + } + ); + + if ( ! pages || pages.length === 0 ) { + return createBlock( 'core/list', {} ); + } + + const createListItems = ( parentId = 0 ) => { + return pages + .filter( ( page ) => page.parent === parentId ) + .map( ( page ) => { + const childItems = createListItems( page.id ); + const listItem = createBlock( 'core/list-item', { + content: `${ page.title.rendered }`, + } ); + if ( childItems.length > 0 ) { + const subList = createBlock( + 'core/list', + {}, + childItems + ); + listItem.innerBlocks = [ subList ]; + } + return listItem; + } ); + }; + + const innerBlocks = createListItems(); + + return createBlock( + 'core/list', + { + style, + fontFamily, + }, + innerBlocks + ); + }, + }, + ], +}; + +export default transforms;