Skip to content

Commit

Permalink
Ensure profile data is saved whenever the dialog box is closed
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinEtchells committed Sep 10, 2024
1 parent 603a48e commit b0478d5
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 43 deletions.
72 changes: 38 additions & 34 deletions django_app/frontend/src/js/web-components/profile-overlay.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,44 +72,48 @@ class ProfileOverlay extends HTMLElement {
});
});

// Send data on dialog close
dialog.addEventListener("close", () => {
this.currentPage = 0;

/**
* Sends data to endpoint, retrying if necessary
* @param {FormData} data
* @param {number} retry
*/
const sendData = async (data, retry = 0) => {
const MAX_RETRIES = 10;
const RETRY_INTERVAL_SECONDS = 10;
const csrfToken =
/** @type {HTMLInputElement | null} */ (
this.querySelector('[name="csrfmiddlewaretoken"]')
)?.value || "";
try {
await fetch(`/update-demographics`, {
method: "POST",
headers: {
"X-CSRFToken": csrfToken,
},
body: data,
});
} catch (err) {
if (retry < MAX_RETRIES) {
window.setTimeout(() => {
sendData(data, retry + 1);
}, RETRY_INTERVAL_SECONDS * 1000);
}
}
};

// Format and send data
const formData = new FormData(this.querySelector("form") || undefined);
sendData(formData);
});

let closeButtons = this.querySelectorAll(`button[data-action="close"]`);
closeButtons.forEach((closeButton) => {
closeButton.addEventListener("click", () => {
this.currentPage = 0;
this.querySelector("dialog")?.close();

/**
* Sends data to endpoint, retrying if necessary
* @param {FormData} data
* @param {number} retry
*/
const sendData = async (data, retry = 0) => {
const MAX_RETRIES = 10;
const RETRY_INTERVAL_SECONDS = 10;
const csrfToken =
/** @type {HTMLInputElement | null} */ (
this.querySelector('[name="csrfmiddlewaretoken"]')
)?.value || "";
try {
await fetch(`/update-demographics`, {
method: "POST",
headers: {
"X-CSRFToken": csrfToken,
},
body: data,
});
} catch (err) {
if (retry < MAX_RETRIES) {
window.setTimeout(() => {
sendData(data, retry + 1);
}, RETRY_INTERVAL_SECONDS * 1000);
}
}
};

// Format and send data
const formData = new FormData(this.querySelector("form") || undefined);
sendData(formData);
});
});
}
Expand Down
4 changes: 2 additions & 2 deletions django_app/redbox_app/redbox_core/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ class Meta:
widgets: ClassVar[Mapping[str, forms.Widget]] = {
"name": forms.TextInput(attrs={"class": "govuk-input govuk-!-width-one-half"}),
"ai_experience": forms.RadioSelect(attrs={"class": "govuk-radios__item"}),
"info_about_user": forms.Textarea(attrs={"class": "govuk-textarea govuk-!-width-one-half"}),
"redbox_response_preferences": forms.Textarea(attrs={"class": "govuk-textarea govuk-!-width-one-half"}),
"info_about_user": forms.Textarea(attrs={"class": "govuk-textarea govuk-!-width-one-half", "rows": "5"}),
"redbox_response_preferences": forms.Textarea(attrs={"class": "govuk-textarea govuk-!-width-one-half", "rows": "5"}),
}
8 changes: 1 addition & 7 deletions django_app/redbox_app/templates/macros/profile-overlay.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,8 @@ <h2 id="profile-overlay-title">Redbox can give better responses if you tell it a
<legend class="profile-label">Which level best describes your experience with Generative AI tools?</legend>
<div class="profile__radio-container-inner">

{# TO DO: Pull these in from the model #}
{% set experience_levels = ["Curious Newcomer", "Cautious Explorer", "Enthusiastic Experimenter", "Experienced Navigator", "AI Alchemist"] %}
{% set selected_level = user.ai_experience %}
{% if not selected_level %}
{% set selected_level = experience_levels[0] %}
{% endif %}

{% for level in experience_levels %}
{% for level in user.AIExperienceLevel %}
<div>
<input class="profile__radio" type="radio" id="profile-experience-1" name="ai_experience" value="{{ level }}" required {% if level == selected_level %}checked{% endif %} />
<label class="profile__radio-card" for="profile-experience-1">{{ level }}</label>
Expand Down

0 comments on commit b0478d5

Please sign in to comment.