Skip to content

Commit 57e7c38

Browse files
committed
Only add the clear_button plugin to TomSelect if the form element is not required
we need to add our own `required` attr here, as symfony does not always render the `required` form view variable see: https://github.com/symfony/symfony/blob/b1b77f366d42a58c1cd0879c605b997d05279d01/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig\#L59-L61
1 parent 4ae2f72 commit 57e7c38

File tree

5 files changed

+25
-2
lines changed

5 files changed

+25
-2
lines changed

src/Autocomplete/assets/dist/controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ class default_1 extends Controller {
219219
_default_1_instances = new WeakSet(), _default_1_getCommonConfig = function _default_1_getCommonConfig() {
220220
const plugins = {};
221221
const isMultiple = !this.selectElement || this.selectElement.multiple;
222-
if (!this.formElement.disabled && !isMultiple) {
222+
if (!this.formElement.required && !this.formElement.disabled && !isMultiple) {
223223
plugins.clear_button = { title: '' };
224224
}
225225
if (isMultiple) {

src/Autocomplete/assets/src/controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export default class extends Controller {
120120

121121
// multiple values excepted if this is NOT A select (i.e. input) or a multiple select
122122
const isMultiple = !this.selectElement || this.selectElement.multiple;
123-
if (!this.formElement.disabled && !isMultiple) {
123+
if (!this.formElement.required && !this.formElement.disabled && !isMultiple) {
124124
plugins.clear_button = { title: '' };
125125
}
126126

src/Autocomplete/src/Form/AutocompleteChoiceTypeExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ public function finishView(FormView $view, FormInterface $form, array $options):
5454

5555
$attr = $view->vars['attr'] ?? [];
5656

57+
if ($form->getConfig()->getType()->getInnerType() instanceof ChoiceType) {
58+
$attr['required'] = $view->vars['required'];
59+
}
60+
5761
$controllerName = 'symfony--ux-autocomplete--autocomplete';
5862
$attr['data-controller'] = trim(($attr['data-controller'] ?? '').' '.$controllerName);
5963

src/Autocomplete/tests/Fixtures/Form/ProductType.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
4646
'autocomplete' => true,
4747
'mapped' => false,
4848
])
49+
->add('colour', ChoiceType::class, [
50+
'choices' => [
51+
'red' => 'red',
52+
'blue' => 'blue',
53+
'green' => 'green',
54+
],
55+
'autocomplete' => true,
56+
'mapped' => false,
57+
'required' => false,
58+
])
4959
->add('tags', TextType::class, [
5060
'mapped' => false,
5161
'autocomplete' => true,

src/Autocomplete/tests/Functional/AutocompleteFormRenderingTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,19 @@ public function testFieldsRenderWithStimulusController()
3434
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-url-value', '/test/autocomplete/category_autocomplete_type?extra_options=')
3535
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-min-characters-value', '2')
3636
->assertElementAttributeContains('#product_category', 'data-symfony--ux-autocomplete--autocomplete-max-results-value', '25')
37+
->assertElementAttributeContains('#product_category', 'required', 'required')
3738

3839
->assertElementAttributeContains('#product_portionSize', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
40+
->assertElementAttributeContains('#product_portionSize', 'required', 'required')
41+
42+
->assertElementAttributeContains('#product_colour', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
43+
// not implemented in zenstruck/browser
44+
// ->elementAttributeNotExists('#product_colour', 'required')
45+
->assertNotSeeElement('#product_colour[required]')
46+
3947
->assertElementAttributeContains('#product_tags', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
4048
->assertElementAttributeContains('#product_tags', 'data-symfony--ux-autocomplete--autocomplete-tom-select-options-value', 'createOnBlur')
49+
->assertElementAttributeContains('#product_tags', 'required', 'required')
4150
;
4251
}
4352

0 commit comments

Comments
 (0)