diff --git a/shared/static/shared/js/vue-formulate-helper.js b/shared/static/shared/js/vue-formulate-helper.js index bef4160bec19decc1a56582299e1f507116459ea..8a7d8d66a49ae26ac769db8aaab57284d9338910 100644 --- a/shared/static/shared/js/vue-formulate-helper.js +++ b/shared/static/shared/js/vue-formulate-helper.js @@ -1,21 +1,30 @@ -VueFormulate - Vue.use(VueFormulate, { plugins: [VueFormulateI18n.cs.default], locale: "cs", }); +const errorDataKey = "mailtrainerror"; const errorMessage = ["Vyskytla se chyba při zpracování požadavku, omlouváme se"]; Vue.options.data ||= {}; -Vue.options.data.mailtrainerrors ||= []; +Vue.options.data.mailtrainerrors ||= () => []; Vue.options.methods ||= {}; Vue.options.methods.mailtrainsubmit = async function (data) { + $(this.$el).data(errorDataKey, ""); + Vue.options.data.mailtrainerrors = () => []; $("[data-success]", this.$el).hide(); + const csrftoken = $("[name='csrfmiddlewaretoken']", this.$el).val(); const headers = new Headers(); headers.append('X-CSRFToken', csrftoken); + const createError = () => { + $(this.$el).data(errorDataKey, errorMessage); + Vue.options.data.mailtrainerrors = function() { + return $(this.$el).data(errorDataKey) || []; + }; + }; + try { const response = await fetch("/newsletter/", { method: "POST", @@ -24,11 +33,11 @@ Vue.options.methods.mailtrainsubmit = async function (data) { credentials: "include", }); if (response.status >= 400) { - Vue.options.data.mailtrainerrors = errorMessage; + createError(); } else { $("[data-success]", this.$el).show(); } } catch { - Vue.options.data.mailtrainerrors = errorMessage; + createError(); } }; diff --git a/shared/templates/shared/blocks/newsletter_subscription_block.html b/shared/templates/shared/blocks/newsletter_subscription_block.html index 993795841024045d223934b5b471719214b7fb5d..3c09d7259fa9fb754fe4add57f49f31d608d80a9 100644 --- a/shared/templates/shared/blocks/newsletter_subscription_block.html +++ b/shared/templates/shared/blocks/newsletter_subscription_block.html @@ -22,7 +22,7 @@ </ul> </div> <div class="flex flex-col items-start"> - <formulate-form @submit="mailtrainsubmit" #default="{ isLoading }" :form-errors="mailtrainerrors"> + <formulate-form name="newsletter" @submit="mailtrainsubmit" #default="{ isLoading }" :form-errors="mailtrainerrors()"> <formulate-errors></formulate-errors> {% csrf_token %} <formulate-input diff --git a/shared/utils.py b/shared/utils.py index dc03063ee17284b9f196b7995fa1e2debe3c7f0b..989cf258d6449a6d62d5684f90815004727d78ea 100644 --- a/shared/utils.py +++ b/shared/utils.py @@ -72,7 +72,7 @@ def subscribe_to_newsletter_ajax(request): client_response = HttpResponse() if request.method == "POST": body = json.loads(request.body) - response = subscribe_to_newsletter(body["EMAIL"], body["LIST_ID"]) + response = subscribe_to_newsletter(body["email"], body["list_id"]) if "error" in response.json(): client_response.status_code = 500 else: