opzione reset_on_included ora attiva e funzionante
aggiustatina al codice javascriptmy-submodulepoetico
parent
3c86b3a2d2
commit
a273ea4ea2
|
|
@ -148,6 +148,9 @@ class DrillDownAutocompleteModelAdmin(admin.options.BaseModelAdmin):
|
||||||
if 'reset_on_excluded' in daf[db_field.name]:
|
if 'reset_on_excluded' in daf[db_field.name]:
|
||||||
attrs['data-reset_on_excluded'] = json.dumps(
|
attrs['data-reset_on_excluded'] = json.dumps(
|
||||||
list(daf[db_field.name]['reset_on_excluded']))
|
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(
|
kwargs["widget"] = DrillDownAutocompleteSelect(
|
||||||
db_field, self.admin_site, attrs=attrs, using=db
|
db_field, self.admin_site, attrs=attrs, using=db
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -4,89 +4,121 @@
|
||||||
|
|
||||||
$.fn.djangoAdminSelect2 = function() {
|
$.fn.djangoAdminSelect2 = function() {
|
||||||
$.each(this, function(i, element) {
|
$.each(this, function(i, element) {
|
||||||
var select2_config = {};
|
const select2_config = {};
|
||||||
select2_config.ajax = {
|
select2_config.ajax = {
|
||||||
data: (params)=>{
|
data: (params)=>{
|
||||||
var field_name = element.dataset.fieldName
|
const {fieldName, appLabel, modelName} = element.dataset;
|
||||||
var out = {
|
const out = {
|
||||||
term: params.term,
|
term: params.term,
|
||||||
page: params.page,
|
page: params.page,
|
||||||
app_label: element.dataset.appLabel,
|
app_label: appLabel,
|
||||||
model_name: element.dataset.modelName,
|
model_name: modelName,
|
||||||
field_name: field_name
|
field_name: fieldName
|
||||||
};
|
};
|
||||||
|
|
||||||
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
||||||
out.drilldown = 1;
|
out.drilldown = 1;
|
||||||
|
|
||||||
if (element.dataset.hasOwnProperty('filtered_by')) {
|
if (element.dataset.hasOwnProperty('filtered_by')) {
|
||||||
var filtered_by_fields = JSON.parse(element.dataset.filtered_by)
|
const filtered_by_fields = JSON.parse(element.dataset.filtered_by)
|
||||||
var filtered_by_dict = {};
|
const filtered_by_dict = {};
|
||||||
var some_obj = false;
|
let some_obj = false;
|
||||||
for (var i in filtered_by_fields) {
|
|
||||||
|
for (let i in filtered_by_fields) {
|
||||||
if (filtered_by_fields.hasOwnProperty(i)) {
|
if (filtered_by_fields.hasOwnProperty(i)) {
|
||||||
var filtering_field = filtered_by_fields[i];
|
const filtering_field = filtered_by_fields[i];
|
||||||
var field_id = element.dataset.select2Id;
|
const field_id = element.dataset.select2Id;
|
||||||
var filtering_field_id = field_id.slice(0, field_id.length - field_name.length) + filtering_field;
|
const filtering_field_id = `${field_id.slice(0, field_id.length - fieldName.length)}${filtering_field}`;
|
||||||
var filtering_value = document.querySelectorAll('[data-select2-id=' + filtering_field_id + '].admin-autocomplete')[0].value;
|
const filtering_value = document.querySelector(`[data-select2-id="${filtering_field_id}"].admin-autocomplete`).value;
|
||||||
|
|
||||||
if (filtering_value !== '') {
|
if (filtering_value !== '') {
|
||||||
filtered_by_dict[filtering_field] = filtering_value;
|
filtered_by_dict[filtering_field] = filtering_value;
|
||||||
some_obj = true;
|
some_obj = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (some_obj) {
|
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')) {
|
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
||||||
select2_config.templateResult = (item,container)=>{
|
select2_config.templateResult = (item,container)=>{
|
||||||
var styleClass = '';
|
let styleClass = '';
|
||||||
|
|
||||||
element.classList.add('drilldown');
|
element.classList.add('drilldown');
|
||||||
|
|
||||||
if (item.ddok === 1) {
|
if (item.ddok === 1) {
|
||||||
styleClass = 'drilldown_ok';
|
styleClass = 'drilldown_ok';
|
||||||
} else {
|
} else {
|
||||||
styleClass = 'drilldown_ko';
|
styleClass = 'drilldown_ko';
|
||||||
}
|
}
|
||||||
|
|
||||||
container.classList.add(styleClass);
|
container.classList.add(styleClass);
|
||||||
|
|
||||||
if (item.hasOwnProperty('autoselect')) {
|
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", {
|
$(element).select2("trigger", "select", {
|
||||||
data: item
|
data: item
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $('<span class="' + styleClass + '"></span>').text(item.text);
|
return $(`<span class="${styleClass}"></span>`).text(item.text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(element).select2(select2_config);
|
$(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')) {
|
if (element.dataset.hasOwnProperty('reset_on_excluded')) {
|
||||||
$(element).on('select2:select', ev=>{
|
reset_on_excluded.push(...JSON.parse(element.dataset.reset_on_excluded));
|
||||||
var data = $(element).select2('data');
|
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) {
|
if (Array.isArray(data) && data.length > 0) {
|
||||||
var ddok = data[0].ddok;
|
const ddok = data[0].ddok;
|
||||||
if (!(ddok ?? true)) {
|
|
||||||
var reset_on_excluded = JSON.parse(element.dataset.reset_on_excluded);
|
if (ddok !== undefined) {
|
||||||
for (var i in reset_on_excluded) {
|
all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded;
|
||||||
if (reset_on_excluded.hasOwnProperty(i)) {
|
|
||||||
var field_name = element.dataset.fieldName
|
if (all_fields_to_reset.length > 0) {
|
||||||
var field_to_reset = reset_on_excluded[i];
|
all_fields_to_reset.forEach((field_to_reset)=>{
|
||||||
var field_id = element.dataset.select2Id;
|
const field_name = element.dataset.fieldName;
|
||||||
var id_to_reset = field_id.slice(0, field_id.length - field_name.length) + field_to_reset;
|
const field_id = element.dataset.select2Id;
|
||||||
var element_to_reset = document.querySelectorAll('[data-select2-id=' + id_to_reset + '].admin-autocomplete')[0];
|
const id_to_reset = `${field_id.slice(0, field_id.length - field_name.length)}${field_to_reset}`;
|
||||||
$(element_to_reset).val(null).trigger("change");
|
const element_to_reset = document.querySelector(`#${id_to_reset}.admin-autocomplete`);
|
||||||
|
$(element_to_reset).val(null).trigger('change');
|
||||||
}
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue