Skip to content

Commit d9e0b2f

Browse files
committed
fixup! feat(dropzone): enable multiple file uploads
1 parent 4e75ede commit d9e0b2f

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed

src/Dropzone/Form/DropzoneType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function configureOptions(OptionsResolver $resolver)
3030
'attr' => [
3131
'placeholder' => 'Drag and drop or browse',
3232
],
33+
'multiple' => false,
3334
]);
3435
}
3536

src/Dropzone/Resources/views/form_theme.html.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
{%- set dataController = (attr['data-controller']|default('') ~ ' symfony--ux-dropzone--dropzone')|trim -%}
33
{%- set attr = attr|merge({ 'data-controller': '', class: (attr.class|default('') ~ ' dropzone-input')|trim}) -%}
44

5+
56
<div class="dropzone-container" data-controller="{{ dataController }}">
6-
<input type="file" {{ block('widget_attributes') }} data-symfony--ux-dropzone--dropzone-target="input" multiple />
7+
<input type="file" {{ block('widget_attributes') }} data-symfony--ux-dropzone--dropzone-target="input"
8+
{%- if attr.multiple -%}multiple{% endif%} />
79

810
<div class="dropzone-placeholder" data-symfony--ux-dropzone--dropzone-target="placeholder">
911
{%- if attr.placeholder is defined and attr.placeholder is not none -%}

src/Dropzone/Tests/Form/DropzoneTypeTest.php

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\UX\Dropzone\Tests;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\DependencyInjection\ContainerInterface;
1516
use Symfony\Component\Form\FormFactoryInterface;
1617
use Symfony\UX\Dropzone\Form\DropzoneType;
1718
use Symfony\UX\Dropzone\Tests\Kernel\TwigAppKernel;
@@ -24,18 +25,24 @@
2425
*/
2526
class DropzoneTypeTest extends TestCase
2627
{
27-
public function testRenderForm()
28+
private ContainerInterface $kernel;
29+
30+
public function setUp(): void
2831
{
2932
$kernel = new TwigAppKernel('test', true);
3033
$kernel->boot();
31-
$container = $kernel->getContainer()->get('test.service_container');
3234

33-
$form = $container->get(FormFactoryInterface::class)->createBuilder()
35+
$this->container = $kernel->getContainer()->get('test.service_container');
36+
}
37+
38+
public function testRenderForm()
39+
{
40+
$form = $this->container->get(FormFactoryInterface::class)->createBuilder()
3441
->add('photo', DropzoneType::class, ['attr' => ['data-controller' => 'mydropzone']])
3542
->getForm()
3643
;
3744

38-
$rendered = $container->get(Environment::class)->render('dropzone_form.html.twig', ['form' => $form->createView()]);
45+
$rendered = $this->container->get(Environment::class)->render('dropzone_form.html.twig', ['form' => $form->createView()]);
3946

4047
$this->assertSame(
4148
'<form name="form" method="post" enctype="multipart/form-data"><div id="form"><div><label for="form_photo" class="required">Photo</label><div class="dropzone-container" data-controller="mydropzone symfony--ux-dropzone--dropzone">
@@ -57,4 +64,34 @@ public function testRenderForm()
5764
str_replace(' >', '>', $rendered)
5865
);
5966
}
67+
68+
public function testRenderFormWithMultiFileUploads(): void
69+
{
70+
$form = $this->container->get(FormFactoryInterface::class)->createBuilder()
71+
->add('photo', DropzoneType::class, ['attr' => ['data-controller' => 'mydropzone'], 'multiple' => true])
72+
->getForm()
73+
;
74+
75+
$rendered = $this->container->get(Environment::class)->render('dropzone_form.html.twig', ['form' => $form->createView()]);
76+
77+
$this->assertSame(
78+
'<form name="form" method="post" enctype="multipart/form-data"><div id="form"><div><label for="form_photo" class="required">Photo</label><div class="dropzone-container" data-controller="mydropzone symfony--ux-dropzone--dropzone">
79+
<input type="file" id="form_photo" name="form[photo]" required="required" data-controller="" class="dropzone-input" data-symfony--ux-dropzone--dropzone-target="input" multiple />
80+
81+
<div class="dropzone-placeholder" data-symfony--ux-dropzone--dropzone-target="placeholder"></div>
82+
83+
<div class="dropzone-preview" data-symfony--ux-dropzone--dropzone-target="preview" style="display: none">
84+
<button class="dropzone-preview-button" type="button"
85+
data-symfony--ux-dropzone--dropzone-target="previewClearButton"></button>
86+
87+
<div class="dropzone-preview-image" style="display: none"
88+
data-symfony--ux-dropzone--dropzone-target="previewImage"></div>
89+
90+
<div data-symfony--ux-dropzone--dropzone-target="previewFilename" class="dropzone-preview-filename"></div>
91+
</div>
92+
</div></div></div></form>
93+
',
94+
str_replace(' >', '>', $rendered)
95+
);
96+
}
6097
}

0 commit comments

Comments
 (0)