bugfix e ottimizzazione. ddok non veniva salvato

my-submodulepoetico
Guido Longoni 2023-07-06 22:25:54 +02:00
parent bb6a45e560
commit 0dbe8f2b6d
1 changed files with 65 additions and 49 deletions

View File

@ -5,6 +5,61 @@
$.fn.djangoAdminSelect2 = function() { $.fn.djangoAdminSelect2 = function() {
$.each(this, function(i, element) { $.each(this, function(i, element) {
const select2_config = {}; const select2_config = {};
let filtered_by_fields;
let reset_on_something = false;
const reset_on_excluded = [];
const reset_on_included = [];
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
if (element.dataset.hasOwnProperty('reset_on_included')) {
reset_on_included.push(...JSON.parse(element.dataset.reset_on_included));
reset_on_something = true;
}
if (element.dataset.hasOwnProperty('filtered_by')) {
filtered_by_fields = JSON.parse(element.dataset.filtered_by);
if (element.dataset.hasOwnProperty('reset_on_excluded')) {
reset_on_excluded.push(...JSON.parse(element.dataset.reset_on_excluded));
reset_on_something = true;
}
}
if (reset_on_something) {
element.drilldown_items = {};
}
select2_config.templateResult = (item, container)=>{
let styleClass = '';
element.classList.add('drilldown');
if (item.ddok === 1) {
styleClass = 'drilldown_ok';
} else {
styleClass = 'drilldown_ko';
}
container.classList.add(styleClass);
if (reset_on_something) {
element.drilldown_items[item.id] = item;
}
if (item.hasOwnProperty('autoselect')) {
const includedOnly = element.dataset.included_only ?? false;
const dataLength = $(element).select2('data').length;
if (includedOnly || dataLength == 0) {
$(element).select2("trigger", "select", {
data: item
})
}
}
return $(`<span class="${styleClass}"></span>`).text(item.text);
}
}
select2_config.ajax = { select2_config.ajax = {
data: (params)=>{ data: (params)=>{
const {fieldName, appLabel, modelName} = element.dataset; const {fieldName, appLabel, modelName} = element.dataset;
@ -18,8 +73,12 @@
if (element.dataset.hasOwnProperty('drilldown_enabled')) { if (element.dataset.hasOwnProperty('drilldown_enabled')) {
if (reset_on_something && (params.page ?? 1) < 2) {
element.drilldown_items = {};
}
if (element.dataset.hasOwnProperty('filtered_by')) { if (element.dataset.hasOwnProperty('filtered_by')) {
const filtered_by_fields = JSON.parse(element.dataset.filtered_by)
const filtered_by_dict = {}; const filtered_by_dict = {};
let some_obj = false; let some_obj = false;
@ -47,61 +106,18 @@
} }
}; };
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
select2_config.templateResult = (item,container)=>{
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')) {
const includedOnly = element.dataset.included_only ?? false;
const dataLength = $(element).select2('data').length;
if (includedOnly || dataLength == 0) {
$(element).select2("trigger", "select", {
data: item
})
}
}
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')) {
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) { if (reset_on_something) {
$(element).on('select2:select', (ev)=>{ $(element).on('select2:select', (ev) => {
const data = $(element).select2('data'); const data = $(element).select2('data');
if (Array.isArray(data) && data.length > 0) { if (element.hasOwnProperty("drilldown_items") && Array.isArray(data) && data.length > 0) {
const ddok = data[0].ddok; const item = element.drilldown_items[data[0].id];
const ddok = item !== undefined ? item.ddok : undefined;
if (ddok !== undefined) { if (ddok !== undefined) {
all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded; let all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded;
if (all_fields_to_reset.length > 0) { if (all_fields_to_reset.length > 0) {
all_fields_to_reset.forEach((field_to_reset)=>{ all_fields_to_reset.forEach((field_to_reset)=>{