diff --git a/django/contatti_app/drilldown_autocomplete.py b/django/contatti_app/drilldown_autocomplete.py
index ba3d132..82e94e1 100644
--- a/django/contatti_app/drilldown_autocomplete.py
+++ b/django/contatti_app/drilldown_autocomplete.py
@@ -148,6 +148,9 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
if 'reset_on_excluded' in daf[db_field.name]:
attrs['data-reset_on_excluded'] = json.dumps(
list(daf[db_field.name]['reset_on_excluded']))
+ if 'reset_on_included' in daf[db_field.name]:
+ attrs['data-reset_on_included'] = json.dumps(
+ list(daf[db_field.name]['reset_on_included']))
kwargs["widget"] = DrillDownAutocompleteSelect(
db_field, self.admin_site, attrs=attrs, using=db
)
diff --git a/django/static/admin/js/autocomplete.js b/django/static/admin/js/autocomplete.js
index 76b0420..4e4b18d 100644
--- a/django/static/admin/js/autocomplete.js
+++ b/django/static/admin/js/autocomplete.js
@@ -4,89 +4,121 @@
$.fn.djangoAdminSelect2 = function() {
$.each(this, function(i, element) {
- var select2_config = {};
+ const select2_config = {};
select2_config.ajax = {
data: (params)=>{
- var field_name = element.dataset.fieldName
- var out = {
+ const {fieldName, appLabel, modelName} = element.dataset;
+ const out = {
term: params.term,
page: params.page,
- app_label: element.dataset.appLabel,
- model_name: element.dataset.modelName,
- field_name: field_name
+ app_label: appLabel,
+ model_name: modelName,
+ field_name: fieldName
};
+
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
out.drilldown = 1;
+
if (element.dataset.hasOwnProperty('filtered_by')) {
- var filtered_by_fields = JSON.parse(element.dataset.filtered_by)
- var filtered_by_dict = {};
- var some_obj = false;
- for (var i in filtered_by_fields) {
+ const filtered_by_fields = JSON.parse(element.dataset.filtered_by)
+ const filtered_by_dict = {};
+ let some_obj = false;
+
+ for (let i in filtered_by_fields) {
if (filtered_by_fields.hasOwnProperty(i)) {
- var filtering_field = filtered_by_fields[i];
- var field_id = element.dataset.select2Id;
- var filtering_field_id = field_id.slice(0, field_id.length - field_name.length) + filtering_field;
- var filtering_value = document.querySelectorAll('[data-select2-id=' + filtering_field_id + '].admin-autocomplete')[0].value;
+ const filtering_field = filtered_by_fields[i];
+ const field_id = element.dataset.select2Id;
+ const filtering_field_id = `${field_id.slice(0, field_id.length - fieldName.length)}${filtering_field}`;
+ const filtering_value = document.querySelector(`[data-select2-id="${filtering_field_id}"].admin-autocomplete`).value;
+
if (filtering_value !== '') {
filtered_by_dict[filtering_field] = filtering_value;
some_obj = true;
}
}
}
+
if (some_obj) {
- out['filtered_by_dict'] = JSON.stringify(filtered_by_dict);
+ out.filtered_by_dict = JSON.stringify(filtered_by_dict);
}
}
}
- return out
+
+ return out;
}
};
+
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
select2_config.templateResult = (item,container)=>{
- var styleClass = '';
+ let styleClass = '';
element.classList.add('drilldown');
+
if (item.ddok === 1) {
styleClass = 'drilldown_ok';
} else {
styleClass = 'drilldown_ko';
}
+
container.classList.add(styleClass);
+
if (item.hasOwnProperty('autoselect')) {
- if ((element.dataset.included_only ?? false) || $(element).select2('data').length == 0) {
+ const includedOnly = element.dataset.included_only ?? false;
+ const dataLength = $(element).select2('data').length;
+
+ if (includedOnly || dataLength == 0) {
$(element).select2("trigger", "select", {
data: item
})
}
}
- return $('').text(item.text);
+ return $(``).text(item.text);
}
}
+
$(element).select2(select2_config);
+
+ const reset_on_excluded = [];
+ const reset_on_included = [];
+ let all_fields_to_reset;
+ let reset_on_something = false;
+
if (element.dataset.hasOwnProperty('reset_on_excluded')) {
- $(element).on('select2:select', ev=>{
- var data = $(element).select2('data');
+ reset_on_excluded.push(...JSON.parse(element.dataset.reset_on_excluded));
+ reset_on_something = true;
+ }
+
+ if (element.dataset.hasOwnProperty('reset_on_included')) {
+ reset_on_included.push(...JSON.parse(element.dataset.reset_on_included));
+ reset_on_something = true;
+ }
+
+ if (reset_on_something) {
+ $(element).on('select2:select', (ev)=>{
+ const data = $(element).select2('data');
+
if (Array.isArray(data) && data.length > 0) {
- var ddok = data[0].ddok;
- if (!(ddok ?? true)) {
- var reset_on_excluded = JSON.parse(element.dataset.reset_on_excluded);
- for (var i in reset_on_excluded) {
- if (reset_on_excluded.hasOwnProperty(i)) {
- var field_name = element.dataset.fieldName
- var field_to_reset = reset_on_excluded[i];
- var field_id = element.dataset.select2Id;
- var id_to_reset = field_id.slice(0, field_id.length - field_name.length) + field_to_reset;
- var element_to_reset = document.querySelectorAll('[data-select2-id=' + id_to_reset + '].admin-autocomplete')[0];
- $(element_to_reset).val(null).trigger("change");
+ const ddok = data[0].ddok;
+
+ if (ddok !== undefined) {
+ all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded;
+
+ if (all_fields_to_reset.length > 0) {
+ all_fields_to_reset.forEach((field_to_reset)=>{
+ const field_name = element.dataset.fieldName;
+ const field_id = element.dataset.select2Id;
+ const id_to_reset = `${field_id.slice(0, field_id.length - field_name.length)}${field_to_reset}`;
+ const element_to_reset = document.querySelector(`#${id_to_reset}.admin-autocomplete`);
+ $(element_to_reset).val(null).trigger('change');
}
+ );
}
}
}
}
);
}
-
});
return this;
}