mirror of
https://github.com/netbox-community/netbox.git
synced 2026-04-03 07:57:15 +02:00
Address review feedback on registered actions
- Sort model_keys in data-models attribute for deterministic output - Rename registered_actions field label to 'Registered actions' - Target object_types selected list via data-object-types-selected attribute instead of hardcoded DOM ID - Reduce setTimeout delay to 0ms since moveOption() is synchronous
This commit is contained in:
2
netbox/project-static/dist/netbox.js
vendored
2
netbox/project-static/dist/netbox.js
vendored
File diff suppressed because one or more lines are too long
4
netbox/project-static/dist/netbox.js.map
vendored
4
netbox/project-static/dist/netbox.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -4,7 +4,9 @@ import { getElements } from '../util';
|
||||
* Enable/disable registered action checkboxes based on selected object_types.
|
||||
*/
|
||||
export function initRegisteredActions(): void {
|
||||
const selectedList = document.getElementById('id_object_types_1') as HTMLSelectElement;
|
||||
const selectedList = document.querySelector<HTMLSelectElement>(
|
||||
'select[data-object-types-selected]',
|
||||
);
|
||||
|
||||
if (!selectedList) {
|
||||
return;
|
||||
@@ -22,7 +24,7 @@ export function initRegisteredActions(): void {
|
||||
const selectedModels = new Set<string>();
|
||||
|
||||
// Get model keys from selected options
|
||||
for (const option of Array.from(selectedList.options)) {
|
||||
for (const option of Array.from(selectedList!.options)) {
|
||||
const modelKey = option.dataset.modelKey;
|
||||
if (modelKey) {
|
||||
selectedModels.add(modelKey);
|
||||
@@ -54,7 +56,7 @@ export function initRegisteredActions(): void {
|
||||
for (const btn of getElements<HTMLButtonElement>('.move-option')) {
|
||||
btn.addEventListener('click', () => {
|
||||
// Wait for DOM update
|
||||
setTimeout(updateState, 50);
|
||||
setTimeout(updateState, 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +346,7 @@ class ObjectPermissionForm(forms.ModelForm):
|
||||
registered_actions = forms.MultipleChoiceField(
|
||||
required=False,
|
||||
widget=RegisteredActionsWidget(),
|
||||
label=_('Custom actions'),
|
||||
label=_('Registered actions'),
|
||||
)
|
||||
actions = SimpleArrayField(
|
||||
label=_('Additional actions'),
|
||||
|
||||
@@ -42,6 +42,6 @@ class RegisteredActionsWidget(forms.CheckboxSelectMultiple):
|
||||
"""
|
||||
option = super().create_option(name, value, label, selected, index, subindex=subindex, attrs=attrs)
|
||||
action_name = str(value)
|
||||
option['model_keys'] = ','.join(self._action_model_keys.get(action_name, set()))
|
||||
option['model_keys'] = ','.join(sorted(self._action_model_keys.get(action_name, set())))
|
||||
option['help_text'] = self._action_help_text.get(action_name, '')
|
||||
return option
|
||||
|
||||
@@ -216,6 +216,11 @@ class ObjectTypeAvailableOptions(ObjectTypeSelectMultiple):
|
||||
class ObjectTypeSelectedOptions(ObjectTypeSelectMultiple):
|
||||
include_selected = True
|
||||
|
||||
def get_context(self, name, value, attrs):
|
||||
context = super().get_context(name, value, attrs)
|
||||
context['widget']['attrs']['data-object-types-selected'] = True
|
||||
return context
|
||||
|
||||
|
||||
class ObjectTypeSplitMultiSelectWidget(SplitMultiSelectWidget):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user