Skip to content

Commit

Permalink
[fix] Optimized fetching default templates for an organization
Browse files Browse the repository at this point in the history
Instead of creating a dict of URLs for all organization,
substitute organization_id in URL Schema.
  • Loading branch information
pandafy authored and nemesifier committed Apr 8, 2021
1 parent 18fc208 commit 3bd640c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 23 deletions.
19 changes: 7 additions & 12 deletions openwisp_controller/config/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,17 +467,6 @@ def _get_preview_instance(self, request):
c.device.hardware_id = request.POST.get('hardware_id')
return c

def _get_default_template_urls(self):
"""
returns URLs to get default templates
used in change_form.html template
"""
organizations = Organization.active.all()
urls = {}
for org in organizations:
urls[str(org.pk)] = reverse('admin:get_default_templates', args=[org.pk])
return json.dumps(urls)

def get_urls(self):
return [
url(
Expand All @@ -494,7 +483,13 @@ def get_urls(self):

def get_extra_context(self, pk=None):
ctx = super().get_extra_context(pk)
ctx.update({'default_template_urls': self._get_default_template_urls()})
ctx.update(
{
'default_template_url': reverse(
'admin:get_default_templates', args=['org_id']
)
}
)
return ctx

def add_view(self, request, form_url='', extra_context=None):
Expand Down
18 changes: 9 additions & 9 deletions openwisp_controller/config/static/config/js/default_templates.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
'use strict';
django.jQuery(function ($) {
var firstRun = true,
addChangeEventToBackend = function (urls) {
addChangeEventToBackend = function (urlSchema) {
$('#id_config-0-backend').change(function () {
setTimeout(function () {
// ensures getDefaultTemplates execute only after other
// onChange event handlers attached this field has been
// executed.
getDefaultTemplates(urls);
getDefaultTemplates(urlSchema);
});
});
},
Expand All @@ -18,15 +18,15 @@ django.jQuery(function ($) {
window.updateContext();
}
},
getDefaultTemplates = function (urls) {
getDefaultTemplates = function (urlSchema) {
var orgID = $('#id_organization').val(),
backend = $('#id_config-0-backend').val();
// proceed only if an organization and a backend have been selected
if (orgID.length === 0 || backend.length === 0) {
unCheckInputs();
return;
}
var url = urls[orgID],
var url = urlSchema.replace('org_id', orgID),
isNew = $('#id_config-0-id').length == 0;
// if device is not new, do not execute on page load
if (!isNew && firstRun) {
Expand All @@ -46,20 +46,20 @@ django.jQuery(function ($) {
});
});
},
bindDefaultTemplateLoading = function (urls) {
bindDefaultTemplateLoading = function (urlSchema) {
var backendField = $('#id_config-0-backend');
$('#id_organization').change(function () {
if ($('#id_config-0-backend').length > 0) {
getDefaultTemplates(urls);
getDefaultTemplates(urlSchema);
}
});
if (backendField.length > 0) {
addChangeEventToBackend(urls);
addChangeEventToBackend(urlSchema);
} else {
$('#config-group > fieldset.module').ready(function () {
$('div.add-row > a').click(function () {
addChangeEventToBackend(urls);
getDefaultTemplates(urls);
addChangeEventToBackend(urlSchema);
getDefaultTemplates(urlSchema);
});
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@
{% endfor %}
</script>
{% endif %}
{% if default_template_urls %}
{% if default_template_url %}
<script>
// enable default templates - do not remove this comment
(function ($) {
$(document).ready( function () {
window.bindDefaultTemplateLoading({{ default_template_urls| safe }});
window.bindDefaultTemplateLoading("{{ default_template_url }}");
})
}) (django.jQuery);
</script>
Expand Down

0 comments on commit 3bd640c

Please sign in to comment.