@@ -12,26 +12,40 @@ import styles from './index.module.css'
1212import CodeLanguageSelector from '../CodeLanguageSelector' ;
1313import useDarkMode from '../../hooks/useDarkMode' ;
1414
15+ const VITE_TURNSTILE_SITEKEY = '0x4AAAAAAA_K0T_2LZ0rgUtv' ;
16+
1517const App : React . FunctionComponent = ( ) => {
1618 const { code, onChangeRightPanelMode, codeLanguage, onLanguageChange } = useContext ( CodeContext )
1719 const [ loading , setLoading ] = useState < boolean > ( false )
1820 const [ resp , setResponse ] = useState < ExecutionResponse | null > ( null )
1921 const handleExecutionRef = useRef < ( ) => Promise < void > > ( )
2022 const [ darkMode ] = useDarkMode ( )
23+ const turnstileRef = useRef < HTMLDivElement > ( null )
2124
2225 const handleExecution = async ( ) : Promise < void > => {
2326 setLoading ( true )
2427 setResponse ( null )
2528
2629 trackEvent ( )
27- setResponse ( await runCode ( code , codeLanguage ) )
30+ const turnstileToken = await new Promise < string > ( ( resolve ) => {
31+ try {
32+ ( window as any ) . turnstile . reset ( ) ;
33+ } catch ( error ) { }
34+ ( window as any ) . turnstile . execute ( turnstileRef . current , {
35+ sitekey : VITE_TURNSTILE_SITEKEY ,
36+ callback : ( token : string ) => resolve ( token ) ,
37+ 'error-callback' : ( ) => resolve ( '' ) ,
38+ } ) ;
39+ } ) ;
40+ setResponse ( await runCode ( code , codeLanguage , turnstileToken ) )
2841 setLoading ( false )
2942 onChangeRightPanelMode ( false )
3043 }
3144 handleExecutionRef . current = handleExecution
3245
3346 return (
3447 < CustomProvider theme = { darkMode ? 'dark' : 'light' } >
48+ < div ref = { turnstileRef } style = { { display : 'none' } } />
3549 < Header />
3650 < Grid fluid className = { styles . grid } >
3751 < Col xs = { 24 } md = { 12 } >
0 commit comments