terms: block install on terms list fetch failure (retry UI)
Reviewer caught that v0.3.4 was bypassing the agreement step entirely on network/server errors, letting users install without ever seeing terms. Now only the explicit empty-list response (terms:[]) skips the step. Network errors, 404s, and IPC failures render an error page with Back/Retry buttons; no next button is exposed. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -141,7 +141,8 @@ function renderStep1() {
|
||||
}
|
||||
|
||||
// 약관 동의 페이지: 1단계 직후, 2단계 설치 진입 전에 노출.
|
||||
// v0.3.4~ : 사이트의 visibility 토글에 따라 표시할 약관이 결정된다. 목록이 비면 단계를 건너뛴다.
|
||||
// v0.3.4~ : 사이트의 visibility 토글에 따라 표시할 약관이 결정된다. 명시적으로 빈 목록(terms:[])
|
||||
// 정상 응답일 때만 단계를 건너뛰고, 네트워크/서버 오류는 차단 후 다시 시도 UI를 보여준다.
|
||||
function renderAgreement() {
|
||||
setActiveStep(1)
|
||||
clearPage()
|
||||
@@ -153,7 +154,7 @@ function renderAgreement() {
|
||||
|
||||
api.getTermsList().then(function (res) {
|
||||
if (!res || !res.ok) {
|
||||
renderStep2()
|
||||
showAgreementError((res && res.message) || 'unknown')
|
||||
return
|
||||
}
|
||||
var terms = (res.terms || []).map(function (t) {
|
||||
@@ -165,11 +166,29 @@ function renderAgreement() {
|
||||
}
|
||||
clearPage()
|
||||
renderAgreementWithKinds(terms)
|
||||
}).catch(function () {
|
||||
renderStep2()
|
||||
}).catch(function (err) {
|
||||
showAgreementError(err && err.message ? err.message : 'unknown')
|
||||
})
|
||||
}
|
||||
|
||||
// 약관 목록을 못 받아왔을 때: 사용자에게 오류 + 다시 시도 옵션. 동의 없이 설치 단계로
|
||||
// 자동 진입하지 않도록 next 버튼을 두지 않는다.
|
||||
function showAgreementError(message) {
|
||||
clearPage()
|
||||
var section = document.createElement('section')
|
||||
section.className = 'page'
|
||||
section.innerHTML =
|
||||
'<h2>' + escapeHtml(tt('agreement.heading')) + '</h2>' +
|
||||
'<p class="formMessage error">' + escapeHtml(tt('agreement.listLoadFailed', { message: message })) + '</p>' +
|
||||
'<div class="actionRow">' +
|
||||
'<button class="secondaryBtn" id="back">' + escapeHtml(tt('common.back')) + '</button>' +
|
||||
'<button class="primaryBtn" id="retry">' + escapeHtml(tt('agreement.retry')) + '</button>' +
|
||||
'</div>'
|
||||
pageHost.appendChild(section)
|
||||
section.querySelector('#back').addEventListener('click', renderStep1)
|
||||
section.querySelector('#retry').addEventListener('click', renderAgreement)
|
||||
}
|
||||
|
||||
function renderAgreementWithKinds(KINDS) {
|
||||
var section = document.createElement('section')
|
||||
section.className = 'page'
|
||||
|
||||
Reference in New Issue
Block a user