diff --git a/src/bundle/Resources/config/default_settings.yaml b/src/bundle/Resources/config/default_settings.yaml index 65aef8c..b2de900 100644 --- a/src/bundle/Resources/config/default_settings.yaml +++ b/src/bundle/Resources/config/default_settings.yaml @@ -1,4 +1,5 @@ parameters: + ibexa.graphql.schema.should.extend.ezurl: false ibexa.graphql.schema.content.field_name.override: id: id_ ibexa.graphql.schema.content.mapping.field_definition_type: diff --git a/src/bundle/Resources/config/graphql/Field.types.yaml b/src/bundle/Resources/config/graphql/Field.types.yaml index 39b96d3..f413872 100644 --- a/src/bundle/Resources/config/graphql/Field.types.yaml +++ b/src/bundle/Resources/config/graphql/Field.types.yaml @@ -266,3 +266,16 @@ SelectionFieldValue: type: "String" description: "String representation of the value" resolve: "@=value" + +UrlFieldValue: + type: object + config: + fields: + link: + type: String + description: "The link's URL" + resolve: "@=value.link" + text: + type: String + description: "The link's name or description" + resolve: "@=value.text" diff --git a/src/bundle/Resources/config/services/schema.yaml b/src/bundle/Resources/config/services/schema.yaml index 052cc0b..7b44995 100644 --- a/src/bundle/Resources/config/services/schema.yaml +++ b/src/bundle/Resources/config/services/schema.yaml @@ -49,6 +49,12 @@ services: arguments: $innerMapper: '@Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\SelectionFieldDefinitionMapper.inner' + Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\UrlFieldDefinitionMapper: + decorates: Ibexa\Contracts\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionMapper + arguments: + $innerMapper: '@Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\UrlFieldDefinitionMapper.inner' + $shouldExtendUrlInputType: '%ibexa.graphql.schema.should.extend.ezurl%' + Ibexa\GraphQL\Schema\Domain\Content\Worker\ContentType\AddItemOfTypeConnectionToGroup: ~ Ibexa\GraphQL\Schema\Domain\Content\Worker\ContentType\AddItemToGroup: ~ diff --git a/src/lib/Schema/Domain/Content/Mapper/FieldDefinition/UrlFieldDefinitionMapper.php b/src/lib/Schema/Domain/Content/Mapper/FieldDefinition/UrlFieldDefinitionMapper.php new file mode 100644 index 0000000..fb37b63 --- /dev/null +++ b/src/lib/Schema/Domain/Content/Mapper/FieldDefinition/UrlFieldDefinitionMapper.php @@ -0,0 +1,53 @@ +shouldExtendUrlInputType = $shouldExtendUrlInputType; + } + + public function mapToFieldValueType(FieldDefinition $fieldDefinition): string + { + $type = parent::mapToFieldValueType($fieldDefinition); + if (!$this->canMap($fieldDefinition)) { + return $type; + } + + if ($this->shouldExtendUrlInputType) { + $type = 'UrlFieldValue'; + } else { + @trigger_error( + 'The return type `string` for the URL field has been deprecated since version 4.6 ' . + 'and will be removed in version 5.0. To start receiving `UrlFieldInput` instead of the deprecated ' . + '`string`, set the parameter `ibexa.graphql.schema.should.extend.ezurl` to `true`.', + E_USER_DEPRECATED + ); + } + + return $type; + } + + protected function getFieldTypeIdentifier(): string + { + return self::FIELD_TYPE_IDENTIFIER; + } +}