diff --git a/assets/controllers/elements/structural_entity_select_controller.js b/assets/controllers/elements/structural_entity_select_controller.js index 50c931f7..4c0236e7 100644 --- a/assets/controllers/elements/structural_entity_select_controller.js +++ b/assets/controllers/elements/structural_entity_select_controller.js @@ -26,11 +26,17 @@ import {Controller} from "@hotwired/stimulus"; export default class extends Controller { _tomSelect; + _emptyMessage; + connect() { + //Extract empty message from data attribute + this._emptyMessage = this.element.getAttribute("data-empty-message") ?? ""; + let settings = { allowEmptyOption: true, selectOnTab: true, + maxOptions: null, searchField: [ {field: "text", weight : 2}, @@ -38,8 +44,8 @@ export default class extends Controller { ], render: { - item: this.renderItem, - option: this.renderOption, + item: this.renderItem.bind(this), + option: this.renderOption.bind(this), } }; @@ -47,6 +53,19 @@ export default class extends Controller { } renderItem(data, escape) { + //Render empty option as full row + if (data.value === "") { + if (this._emptyMessage) { + return '
' + escape(this._emptyMessage) + '
'; + } else { + return '
 
'; + } + } + + if (data.short) { + return '
' + escape(data.short) + '
'; + } + let name = ""; if (data.parent) { name += escape(data.parent) + " → "; @@ -59,18 +78,27 @@ export default class extends Controller { renderOption(data, escape) { //Render empty option as full row if (data.value === "") { - return '
 
'; + if (this._emptyMessage) { + return '
' + escape(this._emptyMessage) + '
'; + } else { + return '
 
'; + } } //Indent the option according to the level - const level_html = '   '.repeat(data.level); + let level_html = '   '.repeat(data.level); let filter_badge = ""; if (data.filetype_filter) { filter_badge = ' ' + escape(data.filetype_filter) + ''; } + let symbol_badge = ""; + if (data.symbol) { + symbol_badge = '' + escape(data.symbol) + ''; + } + let parent_badge = ""; if (data.parent) { parent_badge = ' ' + escape(data.parent) + ''; @@ -81,7 +109,7 @@ export default class extends Controller { image = ''; } - return '
' + level_html + escape(data.text) + image + parent_badge + filter_badge + '
'; + return '
' + level_html + escape(data.text) + image + symbol_badge + parent_badge + filter_badge + '
'; } } diff --git a/src/Form/Type/CurrencyEntityType.php b/src/Form/Type/CurrencyEntityType.php index 4059b3b4..40b563b2 100644 --- a/src/Form/Type/CurrencyEntityType.php +++ b/src/Form/Type/CurrencyEntityType.php @@ -75,6 +75,29 @@ class CurrencyEntityType extends StructuralEntityType $resolver->setDefault('short', false); } + protected function generateChoiceAttr(AbstractStructuralDBElement $choice, $key, $value, $options): array + { + $tmp = parent::generateChoiceAttr($choice, $key, $value, $options); + + if(!empty($choice->getIsoCode())) { + $symbol = Currencies::getSymbol($choice->getIsoCode()); + } else { + $symbol = null; + } + + if ($options['short']) { + $tmp['data-short'] = $symbol; + } else { + $tmp['data-short'] = $choice->getName(); + } + + $tmp += [ + 'data-symbol' => $symbol, + ]; + + return $tmp; + } + protected function getChoiceContent(AbstractStructuralDBElement $choice, $key, $value, $options): string { if(!$choice instanceof Currency) { diff --git a/src/Form/Type/StructuralEntityType.php b/src/Form/Type/StructuralEntityType.php index 1eff9ad2..b582fae9 100644 --- a/src/Form/Type/StructuralEntityType.php +++ b/src/Form/Type/StructuralEntityType.php @@ -104,7 +104,7 @@ class StructuralEntityType extends AbstractType 'data-controller' => $options['controller'], ]; if ($options['empty_message']) { - $tmp['data-empty_message'] = $options['empty_message']; + $tmp['data-empty-message'] = $options['empty_message']; } return $tmp; diff --git a/templates/Form/collection_types_layout.html.twig b/templates/Form/collection_types_layout.html.twig index 02b2090f..53311061 100644 --- a/templates/Form/collection_types_layout.html.twig +++ b/templates/Form/collection_types_layout.html.twig @@ -66,7 +66,7 @@
{{ form_widget(form.price) }} - {{ form_widget(form.priceCurrency, {'attr': {'class': 'selectpicker', 'data-controller': 'elements--selectpicker'}}) }} + {{ form_widget(form.priceCurrency) }}
{{ form_errors(form.price) }} {{ form_errors(form.priceCurrency) }} diff --git a/templates/Parts/edit/edit_form_styles.html.twig b/templates/Parts/edit/edit_form_styles.html.twig index 2a3567c5..5d8a5f72 100644 --- a/templates/Parts/edit/edit_form_styles.html.twig +++ b/templates/Parts/edit/edit_form_styles.html.twig @@ -7,7 +7,7 @@
{{ form_widget(form.price) }} - {{ form_widget(form.currency, {'attr': {'class': 'selectpicker form-control-sm', 'data-controller': 'elements--selectpicker'}}) }} + {{ form_widget(form.currency, {'attr': {'class': 'form-control-sm'}}) }}
{{ form_errors(form.price) }} {{ form_errors(form.currency) }}