diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index 854c5ebed..a7e59fa34 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -30,7 +30,9 @@ def get_cable_form(a_type, b_type): attrs[f'{cable_end}_terminations'] = DynamicModelMultipleChoiceField( queryset=term_cls.objects.all(), label=term_cls._meta.verbose_name.title(), - disabled_indicator='_occupied', + option_attrs={ + 'disabled': '_occupied', + }, query_params={ 'device_id': f'$termination_{cable_end}_device', 'kind': 'physical', # Exclude virtual interfaces @@ -52,7 +54,9 @@ def get_cable_form(a_type, b_type): attrs[f'{cable_end}_terminations'] = DynamicModelMultipleChoiceField( queryset=term_cls.objects.all(), label=_('Power Feed'), - disabled_indicator='_occupied', + option_attrs={ + 'disabled': '_occupied', + }, query_params={ 'power_panel_id': f'$termination_{cable_end}_powerpanel', } @@ -72,7 +76,9 @@ def get_cable_form(a_type, b_type): attrs[f'{cable_end}_terminations'] = DynamicModelMultipleChoiceField( queryset=term_cls.objects.all(), label=_('Side'), - disabled_indicator='_occupied', + option_attrs={ + 'disabled': '_occupied', + }, query_params={ 'circuit_id': f'$termination_{cable_end}_circuit', } diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index fdb5f1d5a..50840c580 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -426,7 +426,7 @@ class DeviceForm(TenancyForm, NetBoxModelForm): widget=APISelect( api_url='/api/dcim/racks/{{rack}}/elevation/', attrs={ - 'disabled-indicator': 'device', + 'ts-disabled-field': 'device', 'data-dynamic-params': '[{"fieldName":"face","queryParam":"face"}]' }, ) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 74efd8d8a..377984e07 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 87126f95c..958e00566 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/src/select/classes/dynamicTomSelect.ts b/netbox/project-static/src/select/classes/dynamicTomSelect.ts index 3e821c4b8..96677f580 100644 --- a/netbox/project-static/src/select/classes/dynamicTomSelect.ts +++ b/netbox/project-static/src/select/classes/dynamicTomSelect.ts @@ -34,6 +34,7 @@ export class DynamicTomSelect extends TomSelect { // Override any field names set as widget attributes this.valueField = this.input.getAttribute('ts-value-field') || this.settings.valueField; this.labelField = this.input.getAttribute('ts-label-field') || this.settings.labelField; + this.disabledField = this.input.getAttribute('ts-disabled-field') || this.settings.disabledField; this.parentField = this.input.getAttribute('ts-parent-field') || null; this.depthField = this.input.getAttribute('ts-depth-field') || '_depth'; this.descriptionField = this.input.getAttribute('ts-description-field') || 'description'; @@ -155,6 +156,9 @@ export class DynamicTomSelect extends TomSelect { let parent: Dict = data[this.parentField] as Dict; option['parent'] = parent[this.labelField]; } + if (data[this.disabledField]) { + option['disabled'] = data[this.disabledField]; + } return option } diff --git a/netbox/project-static/src/select/dynamic.ts b/netbox/project-static/src/select/dynamic.ts index 187093d4f..d0233ab20 100644 --- a/netbox/project-static/src/select/dynamic.ts +++ b/netbox/project-static/src/select/dynamic.ts @@ -49,10 +49,6 @@ export function initDynamicSelects(): void { // Disable local search (search is performed on the backend) searchField: [], - // Reference the disabled-indicator attr on the