From df8d7b34347e1cb0b74555196707ed577203d5c1 Mon Sep 17 00:00:00 2001 From: brookewp Date: Thu, 27 Feb 2025 12:51:32 -0800 Subject: [PATCH] Add title type Signed-off-by: brookewp --- docs/extending/query-output_schema.md | 1 + example/rest-api/art-institute/art-institute.php | 4 ++-- inc/Editor/BlockPatterns/BlockPatterns.php | 6 +++++- inc/Integrations/SalesforceD2C/SalesforceD2CIntegration.php | 4 ++-- inc/Integrations/Shopify/ShopifyIntegration.php | 4 ++-- inc/Sanitization/Sanitizer.php | 3 +++ inc/Validation/ConfigSchemas.php | 1 + .../remote-data-container/components/item-list/ItemList.tsx | 2 +- src/blocks/remote-data-container/config/constants.ts | 1 + tests/inc/Validation/ValidatorTest.php | 1 + 10 files changed, 19 insertions(+), 8 deletions(-) diff --git a/docs/extending/query-output_schema.md b/docs/extending/query-output_schema.md index d236caa31..e95d2007c 100644 --- a/docs/extending/query-output_schema.md +++ b/docs/extending/query-output_schema.md @@ -16,6 +16,7 @@ Unless your API returns a single value, `type` will be constructed of an associa - `null` - `number` - `string` +- `title` - `url` - `uuid` diff --git a/example/rest-api/art-institute/art-institute.php b/example/rest-api/art-institute/art-institute.php index d7e333ca1..8603d6db9 100644 --- a/example/rest-api/art-institute/art-institute.php +++ b/example/rest-api/art-institute/art-institute.php @@ -71,7 +71,7 @@ function register_aic_block(): void { ], 'title' => [ 'name' => 'Title', - 'type' => 'string', + 'type' => 'title', 'path' => '$.title', ], 'image_id' => [ @@ -136,7 +136,7 @@ function register_aic_block(): void { ], 'title' => [ 'name' => 'Title', - 'type' => 'string', + 'type' => 'title', 'path' => '$.title', ], 'image_url' => [ diff --git a/inc/Editor/BlockPatterns/BlockPatterns.php b/inc/Editor/BlockPatterns/BlockPatterns.php index aa0060868..a3102e4a9 100644 --- a/inc/Editor/BlockPatterns/BlockPatterns.php +++ b/inc/Editor/BlockPatterns/BlockPatterns.php @@ -112,12 +112,16 @@ public static function register_default_block_pattern( string $block_name, strin $bindings['heading']['content'] = [ $field, $name ]; break; } - + $bindings['paragraphs'][] = [ 'content' => [ $field, $name ], ]; break; + case 'title': + $bindings['heading']['content'] = [ $field, $name ]; + break; + case 'image_alt': $bindings['image']['alt'] = [ $field, $name ]; break; diff --git a/inc/Integrations/SalesforceD2C/SalesforceD2CIntegration.php b/inc/Integrations/SalesforceD2C/SalesforceD2CIntegration.php index d4c89d315..7ad9dd32a 100644 --- a/inc/Integrations/SalesforceD2C/SalesforceD2CIntegration.php +++ b/inc/Integrations/SalesforceD2C/SalesforceD2CIntegration.php @@ -75,7 +75,7 @@ private static function get_queries( SalesforceD2CDataSource $data_source ): arr 'name' => [ 'name' => 'Name', 'path' => '$.name', - 'type' => 'string', + 'type' => 'title', ], 'sku' => [ 'name' => 'SKU', @@ -134,7 +134,7 @@ private static function get_queries( SalesforceD2CDataSource $data_source ): arr 'name' => [ 'name' => 'Name', 'path' => '$.name', - 'type' => 'string', + 'type' => 'title', ], 'image_url' => [ 'name' => 'Image URL', diff --git a/inc/Integrations/Shopify/ShopifyIntegration.php b/inc/Integrations/Shopify/ShopifyIntegration.php index 52cd75afe..c55649cbd 100644 --- a/inc/Integrations/Shopify/ShopifyIntegration.php +++ b/inc/Integrations/Shopify/ShopifyIntegration.php @@ -69,7 +69,7 @@ public static function get_queries( ShopifyDataSource $data_source ): array { 'title' => [ 'name' => 'Title', 'path' => '$.data.product.title', - 'type' => 'string', + 'type' => 'title', ], 'variant_id' => [ 'name' => 'Variant ID', @@ -109,7 +109,7 @@ public static function get_queries( ShopifyDataSource $data_source ): array { 'title' => [ 'name' => 'Product title', 'path' => '$.node.title', - 'type' => 'string', + 'type' => 'title', ], ], ], diff --git a/inc/Sanitization/Sanitizer.php b/inc/Sanitization/Sanitizer.php index 8bb6193da..afb57a51a 100644 --- a/inc/Sanitization/Sanitizer.php +++ b/inc/Sanitization/Sanitizer.php @@ -119,6 +119,9 @@ public static function sanitize_primitive_type( string $type_name, mixed $value case 'string': return sanitize_text_field( strval( $value ) ); + case 'title': + return sanitize_text_field( strval( $value ) ); + case 'button_text': case 'html': case 'id': diff --git a/inc/Validation/ConfigSchemas.php b/inc/Validation/ConfigSchemas.php index 2f570c748..778add598 100644 --- a/inc/Validation/ConfigSchemas.php +++ b/inc/Validation/ConfigSchemas.php @@ -275,6 +275,7 @@ private static function generate_http_query_config_schema(): array { 'image_alt', 'image_url', 'markdown', + 'title', // 'json_path' is omitted since it likely has no user utility. 'url', 'uuid', diff --git a/src/blocks/remote-data-container/components/item-list/ItemList.tsx b/src/blocks/remote-data-container/components/item-list/ItemList.tsx index fe95a7ccd..773cef05b 100644 --- a/src/blocks/remote-data-container/components/item-list/ItemList.tsx +++ b/src/blocks/remote-data-container/components/item-list/ItemList.tsx @@ -85,7 +85,7 @@ export function ItemList( props: ItemListProps ) { // Find title field from availableBindings by checking type const titleField = Object.entries( availableBindings ).find( - ( [ _, binding ] ) => binding.type === 'string' && binding.name.toLowerCase() === 'title' + ( [ _, binding ] ) => binding.type === 'title' )?.[ 0 ]; // Find media field from availableBindings by checking type diff --git a/src/blocks/remote-data-container/config/constants.ts b/src/blocks/remote-data-container/config/constants.ts index 4b77256e2..da3f65b04 100644 --- a/src/blocks/remote-data-container/config/constants.ts +++ b/src/blocks/remote-data-container/config/constants.ts @@ -33,4 +33,5 @@ export const TEXT_FIELD_TYPES = [ 'markdown', 'number', 'string', + 'title', ]; diff --git a/tests/inc/Validation/ValidatorTest.php b/tests/inc/Validation/ValidatorTest.php index 798b5d8f9..517b38eb9 100644 --- a/tests/inc/Validation/ValidatorTest.php +++ b/tests/inc/Validation/ValidatorTest.php @@ -52,6 +52,7 @@ public function testValidPrimitiveTypes(): void { 'image_url' => 'https://example.com/image.jpg', 'json_path' => '$.foo.bar', 'markdown' => '# Hello, world!', + 'title' => 'A Title', 'url' => 'https://example.com/foo', 'uuid' => '123e4567-e89b-12d3-a456-426614174000', ] ) );