diff --git a/app/create/page.tsx b/app/create/page.tsx index e77bc70..a7f5f29 100644 --- a/app/create/page.tsx +++ b/app/create/page.tsx @@ -59,6 +59,27 @@ export default function CreateGistPage() { const [turnstileToken, setTurnstileToken] = useState(null); const [isTurnstileReady, setIsTurnstileReady] = useState(false); + // Stable callback references to prevent Turnstile re-renders + const handleTurnstileSuccess = useCallback((token: string) => { + setTurnstileToken(token); + setIsTurnstileReady(true); + }, []); + + const handleTurnstileError = useCallback(() => { + setError( + "🛡️ Security check failed. Please refresh the page and try again." + ); + setIsTurnstileReady(false); + }, []); + + const handleTurnstileExpire = useCallback(() => { + setTurnstileToken(null); + setIsTurnstileReady(false); + setError( + "⏰ Security verification expired. Please refresh the page to continue." + ); + }, []); + const handleFilesChange = useCallback((newFiles: FileData[]) => { setFiles(newFiles); // Don't clear errors on file change - let them persist @@ -321,35 +342,6 @@ export default function CreateGistPage() { - {/* Invisible Turnstile Verification */} - {turnstileSiteKey && ( -
- { - setTurnstileToken(token); - setIsTurnstileReady(true); - }} - onError={() => { - setError( - "🛡️ Security check failed. Please refresh the page and try again." - ); - setIsTurnstileReady(false); - }} - onExpire={() => { - setTurnstileToken(null); - setIsTurnstileReady(false); - setError( - "⏰ Security verification expired. Please refresh the page to continue." - ); - }} - theme="auto" - appearance="interaction-only" - /> -
- )} - {/* Error Display */} {(error || validationMessage) && ( @@ -394,6 +386,18 @@ export default function CreateGistPage() { )} + {/* Invisible Turnstile Verification */} + {turnstileSiteKey && ( + + )} + {/* Share Dialog */} {shareUrl && ( { const mockRender = vi.fn().mockReturnValue("widget-123"); const mockReset = vi.fn(); const mockRemove = vi.fn(); + const mockExecute = vi.fn(); const mockOnSuccess = vi.fn(); const mockOnError = vi.fn(); const mockOnExpire = vi.fn(); @@ -16,6 +17,7 @@ describe("Turnstile", () => { render: mockRender, reset: mockReset, remove: mockRemove, + execute: mockExecute, }; vi.clearAllMocks();