diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 2a110f8d..488c6421 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -26,6 +26,7 @@ export default class extends Controller { static values = { deleteMessage: String, prototype: String, + rowsToDelete: Number, //How many rows (including the current one) shall be deleted after the current row } static targets = ["target"]; @@ -125,7 +126,17 @@ export default class extends Controller { const del = () => { const target = event.target; //Remove the row element from the table - target.closest("tr").remove(); + const current_row = target.closest("tr"); + for(let i = this.rowsToDeleteValue; i > 1; i--) { + let nextSibling = current_row.nextElementSibling; + //Ensure that nextSibling is really a tr + if (nextSibling && nextSibling.tagName === "TR") { + nextSibling.remove(); + } + } + + //Finally delete the current row + current_row.remove(); } if(this.deleteMessageValue) { diff --git a/src/Form/AdminPages/ProjectAdminForm.php b/src/Form/AdminPages/ProjectAdminForm.php index fdf53899..4957973e 100644 --- a/src/Form/AdminPages/ProjectAdminForm.php +++ b/src/Form/AdminPages/ProjectAdminForm.php @@ -21,6 +21,7 @@ namespace App\Form\AdminPages; use App\Entity\Base\AbstractNamedDBElement; +use App\Form\ProjectSystem\ProjectBOMEntryCollectionType; use App\Form\ProjectSystem\ProjectBOMEntryType; use App\Form\Type\RichTextEditorType; use Symfony\Component\Form\Extension\Core\Type\CollectionType; @@ -41,16 +42,6 @@ class ProjectAdminForm extends BaseEntityAdminForm ], ]); - $builder->add('bom_entries', CollectionType::class, [ - 'entry_type' => ProjectBOMEntryType::class, - 'entry_options' => [ - 'label' => false, - ], - 'allow_add' => true, - 'allow_delete' => true, - 'by_reference' => false, - 'reindex_enable' => true, - 'label' => false, - ]); + $builder->add('bom_entries', ProjectBOMEntryCollectionType::class); } } \ No newline at end of file diff --git a/src/Form/ProjectSystem/ProjectBOMEntryCollectionType.php b/src/Form/ProjectSystem/ProjectBOMEntryCollectionType.php new file mode 100644 index 00000000..71c745c7 --- /dev/null +++ b/src/Form/ProjectSystem/ProjectBOMEntryCollectionType.php @@ -0,0 +1,35 @@ +setDefaults([ + 'entry_type' => ProjectBOMEntryType::class, + 'entry_options' => [ + 'label' => false, + ], + 'allow_add' => true, + 'allow_delete' => true, + 'by_reference' => false, + 'reindex_enable' => true, + 'label' => false, + ]); + } + + public function getBlockPrefix() + { + return 'project_bom_entry_collection'; + } +} \ No newline at end of file diff --git a/templates/AdminPages/DeviceAdmin.html.twig b/templates/AdminPages/DeviceAdmin.html.twig index 869b3d95..1842b0a6 100644 --- a/templates/AdminPages/DeviceAdmin.html.twig +++ b/templates/AdminPages/DeviceAdmin.html.twig @@ -23,31 +23,6 @@ {% block additional_panes %}
{% form_theme form.bom_entries with ['Form/collection_types_layout.html.twig'] %} - - {% import 'components/collection_type.macro.html.twig' as collection %} -
- - - - {# expand button #} - - - - {# Remove button #} - - - - - {% for entry in form.bom_entries %} - {{ form_widget(entry) }} - {% endfor %} - -
{% trans %}project.bom.quantity{% endtrans %}{% trans %}project.bom.part{% endtrans %}{% trans %}project.bom.name{% endtrans %}
- - -
+ {{ form_widget(form.bom_entries) }}
{% endblock %} \ No newline at end of file diff --git a/templates/Form/collection_types_layout.html.twig b/templates/Form/collection_types_layout.html.twig index ccd8bdef..72c91307 100644 --- a/templates/Form/collection_types_layout.html.twig +++ b/templates/Form/collection_types_layout.html.twig @@ -1,3 +1,32 @@ +{% block project_bom_entry_collection_widget %} + {% import 'components/collection_type.macro.html.twig' as collection %} +
+ + + + {# expand button #} + + + + {# Remove button #} + + + + + {% for entry in form %} + {{ form_widget(entry) }} + {% endfor %} + +
{% trans %}project.bom.quantity{% endtrans %}{% trans %}project.bom.part{% endtrans %}{% trans %}project.bom.name{% endtrans %}
+ + +
+ +{% endblock %} + {% block project_bom_entry_widget %} {% set target_id = 'expand_row-' ~ random() %} diff --git a/templates/components/collection_type.macro.html.twig b/templates/components/collection_type.macro.html.twig index c97a8c56..5fcc8053 100644 --- a/templates/components/collection_type.macro.html.twig +++ b/templates/components/collection_type.macro.html.twig @@ -1,12 +1,14 @@ -{% macro controller(form, deleteMessage) %} +{% macro controller(form, deleteMessage, rowsToDelete) %} {% if form.vars.prototype is defined %} {{ stimulus_controller('elements/collection_type', { 'deleteMessage': deleteMessage|trans, - 'prototype': form_widget(form.vars.prototype)|e('html_attr') + 'prototype': form_widget(form.vars.prototype)|e('html_attr'), + 'rowsToDelete': rowsToDelete, }) }} {% else %} {# If add_element is disabled/forbidden, prototype is not available #} {{ stimulus_controller('elements/collection_type', { 'deleteMessage': deleteMessage|trans, + 'rowsToDelete': rowsToDelete }) }} {% endif %} {% endmacro %}