Skip to content

Commit 9335587

Browse files
committed
Fix tests, add deprecations and update CHANGELOG
1 parent fa774c6 commit 9335587

File tree

8 files changed

+46
-24
lines changed

8 files changed

+46
-24
lines changed

src/Autocomplete/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## 2.13.0
4+
5+
- Add new BaseEntityAutocompleteType
6+
37
## 2.9.0
48

59
- Add support for symfony/asset-mapper

src/Autocomplete/doc/index.rst

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Or, create the field by hand::
103103

104104
use Symfony\Bundle\SecurityBundle\Security;
105105
use Symfony\UX\Autocomplete\Form\AsEntityAutocompleteField;
106-
use Symfony\UX\Autocomplete\Form\ParentEntityAutocompleteType;
106+
use Symfony\UX\Autocomplete\Form\BaseEntityAutocompleteType;
107107

108108
#[AsEntityAutocompleteField]
109109
class FoodAutocompleteField extends AbstractType
@@ -128,15 +128,19 @@ Or, create the field by hand::
128128

129129
public function getParent(): string
130130
{
131-
return ParentEntityAutocompleteType::class;
131+
return BaseEntityAutocompleteType::class;
132132
}
133133
}
134134

135+
.. versionadded:: 2.13
136+
137+
``BaseEntityAutocompleteType`` is a new replacement for ``ParentEntityAutocompleteType``.
138+
135139
There are 3 important things:
136140

137141
#. The class needs the ``#[AsEntityAutocompleteField]`` attribute so that
138142
it's noticed by the autocomplete system.
139-
#. The ``getParent()`` method must return ``ParentEntityAutocompleteType``.
143+
#. The ``getParent()`` method must return ``BaseEntityAutocompleteType``.
140144
#. Inside ``configureOptions()``, you can configure your field using whatever
141145
normal ``EntityType`` options you need plus a few extra options (see `Form Options Reference`_).
142146

@@ -216,7 +220,7 @@ e.g. ``FoodAutocompleteField`` from above):
216220
is automatically translated using the ``AutocompleteBundle`` domain.
217221

218222
For the Ajax-powered autocomplete field classes (i.e. those whose
219-
``getParent()`` returns ``ParentEntityAutocompleteType``), in addition
223+
``getParent()`` returns ``BaseEntityAutocompleteType``), in addition
220224
to the options above, you can also pass:
221225

222226
``searchable_fields`` (default: ``null``)

src/Autocomplete/src/DependencyInjection/AutocompleteExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ private function registerFormServices(ContainerBuilder $container): void
140140

141141
$container
142142
->register('ux.autocomplete.entity_type', ParentEntityAutocompleteType::class)
143+
->setDeprecated('symfony/ux-autocomplete', '2.13', 'The "%service_id%" form type is deprecated since 2.13. Use "ux.autocomplete.base_entity_type" instead.')
143144
->setArguments([
144145
new Reference('router'),
145146
])

src/Autocomplete/src/Form/AutocompleteEntityTypeSubscriber.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
* Helps transform ParentEntityAutocompleteType into a EntityType that will not load all options.
2323
*
2424
* @internal
25+
*
26+
* @deprecated since 2.13
2527
*/
2628
final class AutocompleteEntityTypeSubscriber implements EventSubscriberInterface
2729
{

src/Autocomplete/src/Form/BaseEntityAutocompleteType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public function getParent(): string
7676
return EntityType::class;
7777
}
7878

79+
public function getBlockPrefix(): string
80+
{
81+
return 'ux_entity_autocomplete';
82+
}
83+
7984
/**
8085
* Uses the provided URL, or auto-generate from the provided alias.
8186
*/

src/Autocomplete/src/Form/ParentEntityAutocompleteType.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
/**
2525
* All form types that want to expose autocomplete functionality should use this for its getParent().
26+
*
27+
* @deprecated since 2.13, use "Symfony\UX\Autocomplete\Form\BaseEntityAutocompleteType" instead
2628
*/
2729
final class ParentEntityAutocompleteType extends AbstractType implements DataMapperInterface
2830
{
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
{# EasyAdminAutocomplete form type #}
22
{% block ux_entity_autocomplete_widget %}
3-
{{ form_widget(form.autocomplete, { attr: form.autocomplete.vars.attr|merge({ required: required }) }) }}
3+
{% if form.autocomplete is defined %}
4+
{{ form_widget(form.autocomplete, { attr: form.autocomplete.vars.attr|merge({ required: required }) }) }}
5+
{% else %}
6+
{{ form_widget(form) }}
7+
{% endif %}
48
{% endblock ux_entity_autocomplete_widget %}
59

610
{% block ux_entity_autocomplete_label %}
7-
{% set id = form.autocomplete.vars.id %}
11+
{% if form.autocomplete is defined %}
12+
{% set id = form.autocomplete.vars.id %}
13+
{% endif %}
814
{{ block('form_label') }}
9-
{% endblock ux_entity_autocomplete_label %}
15+
{% endblock ux_entity_autocomplete_label %}

src/Autocomplete/tests/Functional/AutocompleteFormRenderingTest.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ public function testFieldsRenderWithStimulusController()
3030
$this->browser()
3131
->throwExceptions()
3232
->get('/test-form')
33-
->assertElementAttributeContains('#product_category_autocomplete', 'data-controller', 'custom-autocomplete symfony--ux-autocomplete--autocomplete')
34-
->assertElementAttributeContains('#product_category_autocomplete', 'data-symfony--ux-autocomplete--autocomplete-url-value', '/test/autocomplete/category_autocomplete_type')
35-
->assertElementAttributeContains('#product_category_autocomplete', 'data-symfony--ux-autocomplete--autocomplete-min-characters-value', '2')
36-
->assertElementAttributeContains('#product_category_autocomplete', 'data-symfony--ux-autocomplete--autocomplete-max-results-value', '25')
33+
->assertElementAttributeContains('#product_category', 'data-controller', 'custom-autocomplete symfony--ux-autocomplete--autocomplete')
34+
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-url-value', '/test/autocomplete/category_autocomplete_type')
35+
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-min-characters-value', '2')
36+
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-max-results-value', '25')
3737

3838
->assertElementAttributeContains('#product_portionSize', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
3939
->assertElementAttributeContains('#product_tags', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
@@ -52,25 +52,25 @@ public function testCategoryFieldSubmitsCorrectly()
5252
->throwExceptions()
5353
->get('/test-form')
5454
// the field renders empty (but the placeholder is there)
55-
->assertElementCount('#product_category_autocomplete option', 1)
55+
->assertElementCount('#product_category option', 1)
5656
->assertNotContains('First cat')
5757

5858
->post('/test-form', [
5959
'body' => [
60-
'product' => ['category' => ['autocomplete' => $firstCat->getId()]],
60+
'product' => ['category' => (string) $firstCat->getId()],
6161
],
6262
])
6363
// the option does NOT match something returned by query_builder
6464
// so ONLY the placeholder shows up
65-
->assertElementCount('#product_category_autocomplete option', 1)
65+
->assertElementCount('#product_category option', 1)
6666
->assertNotContains('First cat')
6767
->post('/test-form', [
6868
'body' => [
69-
'product' => ['category' => ['autocomplete' => $fooCat->getId()]],
69+
'product' => ['category' => (string) $fooCat->getId()],
7070
],
7171
])
7272
// the one option + placeholder now shows up
73-
->assertElementCount('#product_category_autocomplete option', 2)
73+
->assertElementCount('#product_category option', 2)
7474
->assertContains('which CategoryAutocompleteType uses')
7575
;
7676
}
@@ -83,23 +83,21 @@ public function testProperlyLoadsChoicesWithIdValueObjects()
8383
$this->browser()
8484
->throwExceptions()
8585
->get('/test-form')
86-
->assertElementCount('#product_ingredients_autocomplete option', 0)
86+
->assertElementCount('#product_ingredients option', 0)
8787
->assertNotContains('Flour')
8888
->assertNotContains('Sugar')
8989
->post('/test-form', [
9090
'body' => [
9191
'product' => [
9292
'ingredients' => [
93-
'autocomplete' => [
94-
(string) $ingredient1->getId(),
95-
(string) $ingredient2->getId(),
96-
],
93+
(string) $ingredient1->getId(),
94+
(string) $ingredient2->getId(),
9795
],
9896
],
9997
],
10098
])
10199
// assert that selected options are not lost
102-
->assertElementCount('#product_ingredients_autocomplete option', 2)
100+
->assertElementCount('#product_ingredients option', 2)
103101
->assertContains('Flour')
104102
->assertContains('Sugar')
105103
;
@@ -110,7 +108,7 @@ public function testMultipleDoesNotFailWithoutSelectedChoices()
110108
$this->browser()
111109
->throwExceptions()
112110
->get('/test-form')
113-
->assertElementCount('#product_ingredients_autocomplete option', 0)
111+
->assertElementCount('#product_ingredients option', 0)
114112
->assertNotContains('Flour')
115113
->assertNotContains('Sugar')
116114
->post('/test-form', [
@@ -122,7 +120,7 @@ public function testMultipleDoesNotFailWithoutSelectedChoices()
122120
],
123121
],
124122
])
125-
->assertElementCount('#product_ingredients_autocomplete option', 0)
123+
->assertElementCount('#product_ingredients option', 0)
126124
;
127125
}
128126
}

0 commit comments

Comments
 (0)