diff --git a/django/static/admin/js/autocomplete.js b/django/static/admin/js/autocomplete.js index 5e6816b..db8f4ad 100644 --- a/django/static/admin/js/autocomplete.js +++ b/django/static/admin/js/autocomplete.js @@ -5,6 +5,61 @@ $.fn.djangoAdminSelect2 = function() { $.each(this, function(i, element) { 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 $(``).text(item.text); + } + } + select2_config.ajax = { data: (params)=>{ const {fieldName, appLabel, modelName} = element.dataset; @@ -18,8 +73,12 @@ if (element.dataset.hasOwnProperty('drilldown_enabled')) { + if (reset_on_something && (params.page ?? 1) < 2) { + element.drilldown_items = {}; + } + if (element.dataset.hasOwnProperty('filtered_by')) { - const filtered_by_fields = JSON.parse(element.dataset.filtered_by) + const filtered_by_dict = {}; 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 $(``).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')) { - 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)=>{ + $(element).on('select2:select', (ev) => { const data = $(element).select2('data'); - if (Array.isArray(data) && data.length > 0) { - const ddok = data[0].ddok; + if (element.hasOwnProperty("drilldown_items") && Array.isArray(data) && data.length > 0) { + const item = element.drilldown_items[data[0].id]; + const ddok = item !== undefined ? item.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) { all_fields_to_reset.forEach((field_to_reset)=>{