diff --git a/.gitignore b/.gitignore
index 08d1445..f50c428 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,8 @@
/etc/build/*
!/etc/build/.gitignore
+/etc/export/*
+!/etc/export/.gitignore
/tests/TestApplication/.env.local
/tests/TestApplication/.env.*.local
diff --git a/assets/admin/entrypoint.js b/assets/admin/entrypoint.js
index e69de29..52b428d 100644
--- a/assets/admin/entrypoint.js
+++ b/assets/admin/entrypoint.js
@@ -0,0 +1 @@
+import './js/bulk_export';
diff --git a/assets/admin/js/bulk_export.js b/assets/admin/js/bulk_export.js
new file mode 100644
index 0000000..c272477
--- /dev/null
+++ b/assets/admin/js/bulk_export.js
@@ -0,0 +1,48 @@
+function syliusBulkExport(form) {
+ const groupName = form.getAttribute('data-bulk-export');
+ const groupItems = Array.from(document.querySelectorAll(`input[data-check-all-group="${groupName}"]`));
+
+ form.addEventListener('submit', (e) => {
+ e.preventDefault();
+
+ const idsInput = form.querySelector('input[name$="[ids]"]');
+ const ids = [];
+
+ groupItems.forEach((item) => {
+ if (item.checked) {
+ ids.push(item.value);
+ }
+ });
+ idsInput.setAttribute('value', ids.join(','));
+
+ e.target.submit();
+ });
+}
+
+function passDisabledAttributeToDropdownTrigger(trigger) {
+ const observer = new MutationObserver((mutationsList) => {
+ for (const mutation of mutationsList) {
+ if (mutation.type === 'attributes' && mutation.attributeName === 'disabled') {
+ const button = mutation.target;
+
+ if (button.hasAttribute('disabled')) {
+ button.classList.add('disabled');
+ } else {
+ button.classList.remove('disabled');
+ }
+ }
+ }
+ });
+
+ const groupName = trigger.getAttribute('data-check-all');
+ const dropdownActionButtons = Array.from(document.querySelectorAll(`.dropdown-toggle[data-check-all-action="${groupName}"]`));
+
+ dropdownActionButtons.forEach(button => {
+ observer.observe(button, {'attributes': true});
+ })
+}
+
+(function () {
+ document.querySelectorAll('[data-check-all]').forEach(passDisabledAttributeToDropdownTrigger);
+ document.querySelectorAll('[data-bulk-export]').forEach(syliusBulkExport);
+}());
diff --git a/config/config/sylius_grid.yaml b/config/config/sylius_grid.yaml
index ba81fdf..566261b 100644
--- a/config/config/sylius_grid.yaml
+++ b/config/config/sylius_grid.yaml
@@ -2,6 +2,9 @@ sylius_grid:
templates:
action:
export: '@SyliusGridImportExport\admin\import_export\grid\action\export.html.twig'
+ bulk_action:
+ export: '@SyliusGridImportExport\admin\import_export\grid\bulk_action\export.html.twig'
+
grids:
sylius_grid_import_export_admin_process:
driver:
diff --git a/config/routes.yaml b/config/routes.yaml
index e5e6e4a..223b8f6 100644
--- a/config/routes.yaml
+++ b/config/routes.yaml
@@ -1,33 +1,3 @@
-sylius_import_export.admin.resource.export:
- path: /export/{grid}
- methods: [POST]
- defaults:
- _controller: sylius_import_export.controller.export_action
- _sylius:
- filterable: true
-
-sylius_grid_import_export_admin_process:
- resource: |
- alias: sylius_grid_import_export.process
- section: admin
- templates: "@SyliusAdmin\\shared\\crud"
- except: ['show', 'create', 'update']
- redirect: index
- grid: sylius_grid_import_export_admin_process
- permission: true
- vars:
- all:
- hook_prefix: 'sylius_b2b.admin.import_export.process'
- type: sylius.resource
-
-sylius_grid_import_export_admin_process_show:
- path: /import-export/processes/{id}
- methods: [ GET ]
- defaults:
- _controller: sylius_grid_import_export.controller.process::showAction
- _sylius:
- section: admin
- template: '@SyliusAdmin/shared/crud/show.html.twig'
- permission: true
- vars:
- hook_prefix: 'sylius_b2b.admin.import_export.process'
+sylius_import_export_admin:
+ resource: routes/admin.yaml
+ prefix: '%sylius_admin.path_name%'
diff --git a/config/routes/admin.yaml b/config/routes/admin.yaml
new file mode 100644
index 0000000..e5e6e4a
--- /dev/null
+++ b/config/routes/admin.yaml
@@ -0,0 +1,33 @@
+sylius_import_export.admin.resource.export:
+ path: /export/{grid}
+ methods: [POST]
+ defaults:
+ _controller: sylius_import_export.controller.export_action
+ _sylius:
+ filterable: true
+
+sylius_grid_import_export_admin_process:
+ resource: |
+ alias: sylius_grid_import_export.process
+ section: admin
+ templates: "@SyliusAdmin\\shared\\crud"
+ except: ['show', 'create', 'update']
+ redirect: index
+ grid: sylius_grid_import_export_admin_process
+ permission: true
+ vars:
+ all:
+ hook_prefix: 'sylius_b2b.admin.import_export.process'
+ type: sylius.resource
+
+sylius_grid_import_export_admin_process_show:
+ path: /import-export/processes/{id}
+ methods: [ GET ]
+ defaults:
+ _controller: sylius_grid_import_export.controller.process::showAction
+ _sylius:
+ section: admin
+ template: '@SyliusAdmin/shared/crud/show.html.twig'
+ permission: true
+ vars:
+ hook_prefix: 'sylius_b2b.admin.import_export.process'
diff --git a/config/services.xml b/config/services.xml
index c00e0a0..225a6c2 100644
--- a/config/services.xml
+++ b/config/services.xml
@@ -76,7 +76,18 @@
+
+
+
+
+ %sylius_import_export.export.form_class%
+
+
@@ -110,10 +121,10 @@
-
+
-
+