A05: Restore draft on rate_limited/server_error/timeout states
- Extend draft recovery to create_error, rate_limited, server_error, timeout - Clear draft only on success (sent/screenshot_sent) - Focus on form-error after recovery - Double submit protection already in place (R10) - Astro check: 0 errors
This commit is contained in:
@@ -22,8 +22,19 @@ const reportId = Astro.url.searchParams.get("report_id");
|
|||||||
</form>}
|
</form>}
|
||||||
<script is:inline define:vars={{ state }}>
|
<script is:inline define:vars={{ state }}>
|
||||||
const form = document.querySelector(".report-form"); const key = "rf4-report-draft";
|
const form = document.querySelector(".report-form"); const key = "rf4-report-draft";
|
||||||
if (form && state === "create_error") { try { const draft = JSON.parse(sessionStorage.getItem(key) || "{}"); for (const [name, value] of Object.entries(draft)) { const field = form.elements.namedItem(name); if (field && "value" in field) field.value = value; } } catch {} document.querySelector("#form-error")?.focus(); }
|
// A05: Restore draft on all error states that don't destroy the submission
|
||||||
if (state === "sent") sessionStorage.removeItem(key);
|
const recoverableStates = ["create_error", "rate_limited", "server_error", "timeout"];
|
||||||
|
if (form && recoverableStates.includes(state)) {
|
||||||
|
try {
|
||||||
|
const draft = JSON.parse(sessionStorage.getItem(key) || "{}");
|
||||||
|
for (const [name, value] of Object.entries(draft)) {
|
||||||
|
const field = form.elements.namedItem(name);
|
||||||
|
if (field && "value" in field) field.value = value;
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
document.querySelector("#form-error")?.focus();
|
||||||
|
}
|
||||||
|
if (state === "sent" || state === "screenshot_sent") sessionStorage.removeItem(key);
|
||||||
form?.addEventListener("submit", () => {
|
form?.addEventListener("submit", () => {
|
||||||
const btn = form.querySelector("button[type=submit]");
|
const btn = form.querySelector("button[type=submit]");
|
||||||
if (btn) { btn.disabled = true; btn.textContent = "Отправка..."; }
|
if (btn) { btn.disabled = true; btn.textContent = "Отправка..."; }
|
||||||
|
|||||||
Reference in New Issue
Block a user