Skip to content

Commit d9a9bb4

Browse files
[Grid][Export] Allow exporting only current page
1 parent 5b4dfaf commit d9a9bb4

File tree

6 files changed

+40
-12
lines changed

6 files changed

+40
-12
lines changed

src/Controller/ExportAction.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ public function __invoke(Request $request, string $grid): Response
4040
$form = $this->formFactory->create($this->exportForm);
4141
$form->handleRequest($request);
4242

43-
$format = $form->getData()['format'];
44-
$resourceClass = $form->getData()['resourceClass'];
43+
$data = $form->getData();
44+
$format = $data['format'];
45+
$resourceClass = $data['resourceClass'];
4546

4647
$metadata = $this->metadataRegistry->getByClass($resourceClass);
4748

4849
$resourceIds = $this->resourcesIdsProvider->getResourceIds(
4950
metadata: $metadata,
50-
context: ['request' => $request],
51+
context: ['request' => $request, 'currentPage' => $data['currentPage'] ?? false],
5152
);
5253

5354
$this->commandBus->dispatch(new ExportCommand(

src/Form/Type/ExportResourceType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use Symfony\Component\Form\AbstractType;
1717
use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface;
18+
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
1819
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
1920
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
2021
use Symfony\Component\Form\FormBuilderInterface;
@@ -30,8 +31,12 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
3031
{
3132
$builder
3233
->add('format', ChoiceType::class, [
34+
'label' => 'sylius_grid_import_export.grid.form.format',
3335
'choice_loader' => $this->choiceLoader,
3436
])
37+
->add('currentPage', CheckboxType::class, [
38+
'label' => 'sylius_grid_import_export.grid.form.current_page',
39+
])
3540
->add('resourceClass', HiddenType::class)
3641
;
3742
}

src/Grid/Listener/ExportActionAdminGridListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
namespace Sylius\GridImportExport\Grid\Listener;
1515

16+
use Sylius\Bundle\GridBundle\Doctrine\ORM\Driver as ORMDriver;
1617
use Sylius\Component\Grid\Definition\Action;
1718
use Sylius\Component\Grid\Definition\ActionGroup;
1819
use Sylius\Component\Grid\Event\GridDefinitionConverterEvent;
19-
use Sylius\Bundle\GridBundle\Doctrine\ORM\Driver as ORMDriver;
2020
use Sylius\GridImportExport\Grid\Checker\ExportableCheckerInterface;
2121

2222
final readonly class ExportActionAdminGridListener

src/Provider/RequestBasedResourcesIdsProvider.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ public function getResourceIds(MetadataInterface $metadata, array $context = [])
3838
throw new ProviderException('Request is missing from the context.');
3939
}
4040

41-
return $this->doGetResourceIds($metadata, $request);
41+
return $this->doGetResourceIds($metadata, $request, $context['currentPage'] ?? false);
4242
}
4343

44-
private function doGetResourceIds(MetadataInterface $metadata, Request $request): array
44+
private function doGetResourceIds(MetadataInterface $metadata, Request $request, bool $currentPage): array
4545
{
4646
$resourceClass = $metadata->getClass('model');
4747
/** @var RepositoryInterface $repository */
@@ -64,6 +64,14 @@ private function doGetResourceIds(MetadataInterface $metadata, Request $request)
6464
}
6565

6666
$ids = [];
67+
if ($currentPage) {
68+
foreach ($paginator->getCurrentPageResults() as $item) {
69+
$ids[] = (string) $item->getId();
70+
}
71+
72+
return $ids;
73+
}
74+
6775
foreach ($paginator->autoPagingIterator() as $item) {
6876
$ids[] = (string) $item->getId();
6977
}

templates/admin/import_export/component/export_form.html.twig

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
1-
{# Rendered with \Sylius\GridImportExport\GridImportExport\Twig\Component\ExportResourceFormComponent #}
1+
{# Rendered with \Sylius\GridImportExport\Twig\Component\ExportResourceFormComponent #}
22

33
{% import '@SyliusAdmin/shared/helper/button.html.twig' as button %}
44

55
{% form_theme form '@SyliusAdmin/shared/form_theme.html.twig' %}
66

7-
{% set criteria = app.request.query.all()['criteria']|default({}) %}
7+
{% set export_parameters = {
8+
'grid': grid,
9+
'criteria': app.request.query.all()['criteria']|default({}),
10+
} %}
11+
12+
{% set page = app.request.query.get('page', null) %}
13+
{% if page is not null %}
14+
{% set export_parameters = export_parameters|merge({'page': page}) %}
15+
{% endif %}
816

917
<div class="dropdown">
10-
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
11-
{{ 'sylius_grid_import_export.ui.export'|trans }}
12-
</button>
18+
<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
19+
{{ 'sylius_grid_import_export.ui.export'|trans }}
20+
</button>
1321
<div class="dropdown-menu p-4">
14-
{{ form_start(form, {'action': path('sylius_import_export.admin.resource.export', {'grid': grid, 'criteria': criteria}), 'attr': {'novalidate': 'novalidate'}}) }}
22+
{{ form_start(form, {'action': path('sylius_import_export.admin.resource.export', export_parameters), 'attr': {'novalidate': 'novalidate'}}) }}
1523

1624
<div class="mb-3">
1725
{{ form_row(form.format) }}
26+
{{ form_row(form.currentPage) }}
1827
</div>
1928

2029
<div class="d-flex justify-content-end">

translations/messages.en.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
sylius_grid_import_export:
2+
grid:
3+
form:
4+
export: Export
5+
format: Format
6+
current_page: Current page
27
ui:
38
export: "Export"
49
import_export: "Import / export"

0 commit comments

Comments
 (0)