fix(consent): a retry that fails again reopens the terms prompt (#311)
CI / Build & Quality Checks (pull_request) Successful in 3m16s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Successful in 19m50s
CI / Secret scan (gitleaks) (pull_request) Successful in 16s
CI / Build & Quality Checks (pull_request) Successful in 3m16s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Successful in 19m50s
CI / Secret scan (gitleaks) (pull_request) Successful in 16s
Closing the dialog via "I've accepted — retry" also deactivated its focus trap, whose onDeactivate is "Later": every close set the 10 s snooze, so a retry made before the terms were really accepted failed silently. Retry now closes without snoozing (and clears any earlier snooze). Fixes #311 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
906a034e26
commit
5ce4692a7b
@@ -44,6 +44,9 @@ export function ConsentRequiredPrompt() {
|
|||||||
const [opened, setOpened] = useState(false);
|
const [opened, setOpened] = useState(false);
|
||||||
const [blockedCount, setBlockedCount] = useState(0);
|
const [blockedCount, setBlockedCount] = useState(0);
|
||||||
const snoozedUntil = useRef(0);
|
const snoozedUntil = useRef(0);
|
||||||
|
// [Gitea #311] Closing via Retry also deactivates the focus trap; that must
|
||||||
|
// not snooze, or a retry that fails again (terms not accepted yet) is silent.
|
||||||
|
const closingForRetry = useRef(false);
|
||||||
const blocked = useRef(new Map<MatrixEvent, Room>());
|
const blocked = useRef(new Map<MatrixEvent, Room>());
|
||||||
const modalStyle = useModalStyle(440);
|
const modalStyle = useModalStyle(440);
|
||||||
const server = mx.getDomain() ?? 'Your homeserver';
|
const server = mx.getDomain() ?? 'Your homeserver';
|
||||||
@@ -74,6 +77,8 @@ export function ConsentRequiredPrompt() {
|
|||||||
}, [consentUri]);
|
}, [consentUri]);
|
||||||
|
|
||||||
const retry = useCallback(() => {
|
const retry = useCallback(() => {
|
||||||
|
closingForRetry.current = true;
|
||||||
|
snoozedUntil.current = 0;
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
setOpened(false);
|
setOpened(false);
|
||||||
const pending = Array.from(blocked.current.entries());
|
const pending = Array.from(blocked.current.entries());
|
||||||
@@ -97,7 +102,13 @@ export function ConsentRequiredPrompt() {
|
|||||||
focusTrapOptions={{
|
focusTrapOptions={{
|
||||||
initialFocus: '#consent-review',
|
initialFocus: '#consent-review',
|
||||||
fallbackFocus: '#consent-later',
|
fallbackFocus: '#consent-later',
|
||||||
onDeactivate: later,
|
onDeactivate: () => {
|
||||||
|
if (closingForRetry.current) {
|
||||||
|
closingForRetry.current = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
later();
|
||||||
|
},
|
||||||
clickOutsideDeactivates: true,
|
clickOutsideDeactivates: true,
|
||||||
escapeDeactivates: true,
|
escapeDeactivates: true,
|
||||||
}}
|
}}
|
||||||
|
|||||||
Reference in New Issue
Block a user