11import { useCallback , useState } from "react" ;
22
33import type { ICaptcha } from "@/components/Captcha/index" ;
4+ import { extractTokenValue } from "@/utils/helpers/tokenUtils" ;
45
5- export const useCaptcha = (
6- captchaConfig ?: ICaptcha ,
7- label ?: string ,
8- theme ?: "light" | "dark" | "auto"
9- ) => {
6+ export const useCaptcha = ( captchaConfig ?: ICaptcha , label ?: string ) => {
107 const isCaptchaEnabled = ! ! captchaConfig && ! ! captchaConfig . provider ;
118
129 const [ isValid , setIsValid ] = useState < boolean > ( ! isCaptchaEnabled ) ;
@@ -15,6 +12,16 @@ export const useCaptcha = (
1512 undefined
1613 ) ;
1714
15+ const getCaptchaTheme = ( ) : "light" | "dark" | "auto" => {
16+ const allowedThemes = [ "light" , "dark" , "auto" ] as const ;
17+ const rawTheme = extractTokenValue ( "--ul-theme-captcha-widget" ) ;
18+
19+ const isValidTheme = ( theme : unknown ) : theme is "light" | "dark" | "auto" =>
20+ allowedThemes . includes ( theme as "light" | "dark" | "auto" ) ;
21+
22+ return isValidTheme ( rawTheme ) ? rawTheme : "auto" ;
23+ } ;
24+
1825 const handleValidationChange = useCallback (
1926 ( valid : boolean , val ?: string , err ?: string ) => {
2027 setIsValid ( valid ) ;
@@ -30,7 +37,7 @@ export const useCaptcha = (
3037 label,
3138 onValidationChange : handleValidationChange ,
3239 error : internalError ,
33- theme : theme ,
40+ theme : getCaptchaTheme ( ) ,
3441 } ,
3542 captchaValue : value ,
3643 isCaptchaSolved : isValid ,
0 commit comments