diff --git a/assets/controllers/dropdown.js b/assets/controllers/dropdown.js new file mode 100644 index 00000000..abbefd06 --- /dev/null +++ b/assets/controllers/dropdown.js @@ -0,0 +1,15 @@ +import {Controller} from '@hotwired/stimulus' + +export default class extends Controller { + static values = { + toggledClass: { type: String, default: 'show' }, + } + + static targets = [ + 'content', + ]; + + toggle() { + this.contentTarget.classList.toggle(this.toggledClassValue) + } +} diff --git a/assets/package.json b/assets/package.json index 36305897..afcc6e62 100755 --- a/assets/package.json +++ b/assets/package.json @@ -19,6 +19,11 @@ "main": "controllers/state.js", "fetch": "eager", "enabled": true + }, + "dropdown": { + "main": "controllers/dropdown.js", + "fetch": "eager", + "enabled": true } }, "importmap": { diff --git a/src/Action/Type/Dropdown/DropdownActionType.php b/src/Action/Type/Dropdown/DropdownActionType.php new file mode 100644 index 00000000..146365f0 --- /dev/null +++ b/src/Action/Type/Dropdown/DropdownActionType.php @@ -0,0 +1,36 @@ +getAction(); + $itemAction->setDataTable($action->getDataTable()); + + $itemActions[] = $itemAction->createView($view->parent); + } + + $view->vars['actions'] = $itemActions; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->define('actions') + ->allowedTypes(ActionBuilderInterface::class.'[]') + ->required() + ; + } +} diff --git a/src/Action/Type/Dropdown/LinkDropdownItemActionType.php b/src/Action/Type/Dropdown/LinkDropdownItemActionType.php new file mode 100644 index 00000000..ef94012c --- /dev/null +++ b/src/Action/Type/Dropdown/LinkDropdownItemActionType.php @@ -0,0 +1,16 @@ +set('kreyu_data_table.action.type.form', FormActionType::class) ->tag('kreyu_data_table.action.type') ; + + $services + ->set('kreyu_data_table.action.type.dropdown', DropdownActionType::class) + ->tag('kreyu_data_table.action.type') + ; + + $services + ->set('kreyu_data_table.action.type.link_dropdown_item', LinkDropdownItemActionType::class) + ->tag('kreyu_data_table.action.type') + ; }; diff --git a/src/Resources/views/themes/base.html.twig b/src/Resources/views/themes/base.html.twig index fafa635e..cd8796a5 100755 --- a/src/Resources/views/themes/base.html.twig +++ b/src/Resources/views/themes/base.html.twig @@ -632,6 +632,25 @@ {% endblock %} +{% block action_dropdown_control %} +
+ + +
+{% endblock %} + +{% block action_link_dropdown_item_control %} + {% set attr = { href, target }|filter(v => v != null)|merge(attr|default({})) %} + + + {% with { attr: {} } %}{{- block('action_control', theme, _context) -}}{% endwith %} + +{% endblock %} + {% block sort_arrow_none %}{% endblock %} {% block sort_arrow_asc %}↑{% endblock %} diff --git a/src/Resources/views/themes/bootstrap_5.html.twig b/src/Resources/views/themes/bootstrap_5.html.twig index 6767e24f..77b3983a 100755 --- a/src/Resources/views/themes/bootstrap_5.html.twig +++ b/src/Resources/views/themes/bootstrap_5.html.twig @@ -723,6 +723,51 @@ {% endif %} {% endblock %} +{% block action_dropdown_control %} + +{% endblock %} + +{% block action_link_dropdown_item_control %} + {% set attr = { 'class': 'dropdown-item'}|merge(attr) %} + + {% if confirmation %} + {% set attr = { + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ confirmation.identifier, + }|merge(attr) %} + {% endif %} + + {{ parent() }} +{% endblock %} + {% block sort_arrow_none %}