Skip to content

Commit 4c30cab

Browse files
committed
Do not change the dropdownParent of tomselect if it is inside a modal
This ensures that it is properly displayed. Fixes issue #1073
1 parent 1c8ca6c commit 4c30cab

File tree

7 files changed

+41
-8
lines changed

7 files changed

+41
-8
lines changed

assets/controllers/elements/attachment_autocomplete_controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ export default class extends Controller {
3434

3535
connect() {
3636

37+
let dropdownParent = "body";
38+
if (this.element.closest('.modal')) {
39+
dropdownParent = null
40+
}
41+
3742
let settings = {
3843
persistent: false,
3944
create: true,
@@ -42,7 +47,7 @@ export default class extends Controller {
4247
selectOnTab: true,
4348
//This a an ugly solution to disable the delimiter parsing of the TomSelect plugin
4449
delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING',
45-
dropdownParent: 'body',
50+
dropdownParent: dropdownParent,
4651
render: {
4752
item: (data, escape) => {
4853
return '<span>' + escape(data.label) + '</span>';

assets/controllers/elements/part_select_controller.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,19 @@ export default class extends Controller {
1010

1111
connect() {
1212

13+
//Check if tomselect is inside an modal and do not attach the dropdown to body in that case (as it breaks the modal)
14+
let dropdownParent = "body";
15+
if (this.element.closest('.modal')) {
16+
dropdownParent = null
17+
}
18+
1319
let settings = {
1420
allowEmptyOption: true,
1521
plugins: ['dropdown_input'],
1622
searchField: ["name", "description", "category", "footprint"],
1723
valueField: "id",
1824
labelField: "name",
19-
dropdownParent: 'body',
25+
dropdownParent: dropdownParent,
2026
preload: "focus",
2127
render: {
2228
item: (data, escape) => {

assets/controllers/elements/select_controller.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,17 @@ export default class extends Controller {
3838
this._emptyMessage = this.element.getAttribute('title');
3939
}
4040

41+
let dropdownParent = "body";
42+
if (this.element.closest('.modal')) {
43+
dropdownParent = null
44+
}
4145

4246
let settings = {
4347
plugins: ["clear_button"],
4448
allowEmptyOption: true,
4549
selectOnTab: true,
4650
maxOptions: null,
47-
dropdownParent: 'body',
51+
dropdownParent: dropdownParent,
4852

4953
render: {
5054
item: this.renderItem.bind(this),

assets/controllers/elements/select_multiple_controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,15 @@ export default class extends Controller {
2626
_tomSelect;
2727

2828
connect() {
29+
let dropdownParent = "body";
30+
if (this.element.closest('.modal')) {
31+
dropdownParent = null
32+
}
33+
2934
this._tomSelect = new TomSelect(this.element, {
3035
maxItems: 1000,
3136
allowEmptyOption: true,
32-
dropdownParent: 'body',
37+
dropdownParent: dropdownParent,
3338
plugins: ['remove_button'],
3439
});
3540
}

assets/controllers/elements/static_file_autocomplete_controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ export default class extends Controller {
4040

4141
connect() {
4242

43+
let dropdownParent = "body";
44+
if (this.element.closest('.modal')) {
45+
dropdownParent = null
46+
}
47+
4348
let settings = {
4449
persistent: false,
4550
create: true,
@@ -50,7 +55,7 @@ export default class extends Controller {
5055
valueField: 'text',
5156
searchField: 'text',
5257
orderField: 'text',
53-
dropdownParent: 'body',
58+
dropdownParent: dropdownParent,
5459

5560
//This a an ugly solution to disable the delimiter parsing of the TomSelect plugin
5661
delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING',

assets/controllers/elements/structural_entity_select_controller.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ export default class extends Controller {
4040
const allowAdd = this.element.getAttribute("data-allow-add") === "true";
4141
const addHint = this.element.getAttribute("data-add-hint") ?? "";
4242

43-
43+
let dropdownParent = "body";
44+
if (this.element.closest('.modal')) {
45+
dropdownParent = null
46+
}
4447

4548

4649
let settings = {
@@ -54,7 +57,7 @@ export default class extends Controller {
5457
maxItems: 1,
5558
delimiter: "$$VERY_LONG_DELIMITER_THAT_SHOULD_NEVER_APPEAR$$",
5659
splitOn: null,
57-
dropdownParent: 'body',
60+
dropdownParent: dropdownParent,
5861

5962
searchField: [
6063
{field: "text", weight : 2},

assets/controllers/elements/tagsinput_controller.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ export default class extends Controller {
3333
_tomSelect;
3434

3535
connect() {
36+
let dropdownParent = "body";
37+
if (this.element.closest('.modal')) {
38+
dropdownParent = null
39+
}
40+
3641
let settings = {
3742
plugins: {
3843
remove_button:{},
@@ -43,7 +48,7 @@ export default class extends Controller {
4348
selectOnTab: true,
4449
createOnBlur: true,
4550
create: true,
46-
dropdownParent: 'body',
51+
dropdownParent: dropdownParent,
4752
};
4853

4954
if(this.element.dataset.autocomplete) {

0 commit comments

Comments
 (0)