From 923704e9cc8c276ad15f737d69596761f7b6691a Mon Sep 17 00:00:00 2001 From: im3dabasia Date: Tue, 11 Feb 2025 12:05:05 +0530 Subject: [PATCH 1/3] feat: Refactor getNodeText function into own file --- .../components/src/autocomplete/index.tsx | 30 +------------------ .../components/src/utils/get-node-text.ts | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 packages/components/src/utils/get-node-text.ts diff --git a/packages/components/src/autocomplete/index.tsx b/packages/components/src/autocomplete/index.tsx index 7a75be8eca5c84..55e81d08c9797f 100644 --- a/packages/components/src/autocomplete/index.tsx +++ b/packages/components/src/autocomplete/index.tsx @@ -40,35 +40,7 @@ import type { UseAutocompleteProps, WPCompleter, } from './types'; - -const getNodeText = ( node: React.ReactNode ): string => { - if ( node === null ) { - return ''; - } - - switch ( typeof node ) { - case 'string': - case 'number': - return node.toString(); - break; - case 'boolean': - return ''; - break; - case 'object': { - if ( node instanceof Array ) { - return node.map( getNodeText ).join( '' ); - } - if ( 'props' in node ) { - return getNodeText( node.props.children ); - } - break; - } - default: - return ''; - } - - return ''; -}; +import getNodeText from '../utils/get-node-text'; const EMPTY_FILTERED_OPTIONS: KeyedOption[] = []; diff --git a/packages/components/src/utils/get-node-text.ts b/packages/components/src/utils/get-node-text.ts new file mode 100644 index 00000000000000..9c9123b5619b63 --- /dev/null +++ b/packages/components/src/utils/get-node-text.ts @@ -0,0 +1,30 @@ +const getNodeText = ( node: React.ReactNode ): string => { + if ( node === null ) { + return ''; + } + + switch ( typeof node ) { + case 'string': + case 'number': + return node.toString(); + break; + case 'boolean': + return ''; + break; + case 'object': { + if ( node instanceof Array ) { + return node.map( getNodeText ).join( '' ); + } + if ( 'props' in node ) { + return getNodeText( node.props.children ); + } + break; + } + default: + return ''; + } + + return ''; +}; + +export default getNodeText; From a590bdb9e97df2df8ff65fb9f5eafb1252723b16 Mon Sep 17 00:00:00 2001 From: im3dabasia Date: Tue, 11 Feb 2025 12:06:30 +0530 Subject: [PATCH 2/3] feat: Add unit tests for getNodeText --- .../src/utils/test/get-node-text.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 packages/components/src/utils/test/get-node-text.js diff --git a/packages/components/src/utils/test/get-node-text.js b/packages/components/src/utils/test/get-node-text.js new file mode 100644 index 00000000000000..903b6158f74b27 --- /dev/null +++ b/packages/components/src/utils/test/get-node-text.js @@ -0,0 +1,37 @@ +/** + * Internal dependencies + */ +import getNodeText from '../get-node-text'; + +describe( 'getNodeText', () => { + it( 'should return an empty string for null', () => { + expect( getNodeText( null ) ).toBe( '' ); + } ); + + it( 'should return the string representation of a string node', () => { + expect( getNodeText( 'Hello' ) ).toBe( 'Hello' ); + } ); + + it( 'should return the string representation of a number node', () => { + expect( getNodeText( 123 ) ).toBe( '123' ); + } ); + + it( 'should return an empty string for a boolean node', () => { + expect( getNodeText( true ) ).toBe( '' ); + } ); + + it( 'should concatenate text from an array of nodes', () => { + expect( getNodeText( [ 'Hello', ' ', 'World' ] ) ).toBe( + 'Hello World' + ); + } ); + + it( 'should return text from a React element with children', () => { + const element = ( +
+ Hello World +
+ ); + expect( getNodeText( element ) ).toBe( 'Hello World' ); + } ); +} ); From 4561b000ff15479bfcfcfb3322216a1f92d5d65e Mon Sep 17 00:00:00 2001 From: im3dabasia Date: Tue, 11 Feb 2025 12:16:31 +0530 Subject: [PATCH 3/3] refactor: getNodeText function --- packages/components/src/utils/get-node-text.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/components/src/utils/get-node-text.ts b/packages/components/src/utils/get-node-text.ts index 9c9123b5619b63..eb3bc045c3a653 100644 --- a/packages/components/src/utils/get-node-text.ts +++ b/packages/components/src/utils/get-node-text.ts @@ -7,10 +7,6 @@ const getNodeText = ( node: React.ReactNode ): string => { case 'string': case 'number': return node.toString(); - break; - case 'boolean': - return ''; - break; case 'object': { if ( node instanceof Array ) { return node.map( getNodeText ).join( '' ); @@ -18,13 +14,11 @@ const getNodeText = ( node: React.ReactNode ): string => { if ( 'props' in node ) { return getNodeText( node.props.children ); } - break; + return ''; } default: return ''; } - - return ''; }; export default getNodeText;