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) }}
|