import { Grid, Card, Title, Text, Button, Divider, Group, TextInput, Select, Switch, MultiSelect, Alert, LoadingOverlay, } from '@mantine/core'; import { useEffect, useState } from 'react'; import { runtimeConfig } from '../config'; import { IconInfoCircle } from '@tabler/icons-react'; import { ConsentBannerScreen } from './Consent/ConsentBannerScreen'; export function SettingsPanel() { const [domainId, setDomainId] = useState(''); const [gtmId, setGtmId] = useState(''); const [gtmEnabled, setGtmEnabled] = useState(false); const [language, setLanguage] = useState('en'); const [loading, setLoading] = useState(true); const [autoBlockCookies, setAutoBlockCookies] = useState(false); const [cookiePreference, setCookiePreference] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const [successMessage, setSuccessMessage] = useState(''); const [serverCountry, setServerCountry] = useState('in'); const [languagesAvailable, setLanguagesAvailable] = useState< Record >({ en: 'English', ar: 'Arabic', bg: 'Bulgarian', zh: 'Chinese', cs: 'Czech', da: 'Danish', nl: 'Dutch', fi: 'Finnish', fr: 'French', de: 'German', el: 'Greek', he: 'Hebrew', hi: 'Hindi', hu: 'Hungarian', id: 'Indonesian', it: 'Italian', ja: 'Japanese', ko: 'Korean', ms: 'Malay', no: 'Norwegian', pl: 'Polish', pt: 'Portuguese', ro: 'Romanian', ru: 'Russian', es: 'Spanish', sv: 'Swedish', th: 'Thai', tr: 'Turkish', uk: 'Ukrainian', vi: 'Vietnamese' }); useEffect(() => { try { setLoading(true); runtimeConfig .apiFetch({ path: '/cookiex/v1/settings', }) .then((res: any) => { setDomainId(res.domainId); setGtmId(res.gtmId); setGtmEnabled(res.gtmEnabled); setAutoBlockCookies(res.autoBlockCookies); setLanguage(res.language); setCookiePreference(res.cookiePreference); setServerCountry(res.serverCountry); setLanguagesAvailable(res.languagesAvailable); }); setLoading(false); } catch (error) { console.error('Failed to fetch settings:', error); setLoading(false); } }, []); const validateInputs = () => { setErrorMessage(''); if (!domainId) { setErrorMessage('Please enter a valid UUID for the domain ID.'); return false; } if (gtmEnabled) { if (!gtmId) { setErrorMessage('GTM ID cannot be empty when GTM is enabled.'); return false; } if (cookiePreference.length === 0) { setErrorMessage( 'Please select at least one cookie preference when GTM is enabled.' ); return false; } } if (!language) { setErrorMessage('Please select a primary language.'); return false; } setErrorMessage(''); return true; }; const updateSettings = async () => { if (!validateInputs()) { return; } const options = { path: '/cookiex/v1/save-settings', method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ language, autoBlockCookies, gtmEnabled, gtmId, cookiePreference, }), }; try { const response: any = await runtimeConfig.apiFetch(options); setSuccessMessage(response); } catch (error: any) { if ('code' in error && error.code === 'invalid_nonce') { setErrorMessage('Security check failed.'); } else { setErrorMessage('Could not save settings'); } } }; return ( <> {loading && ( )} {errorMessage && ( } mb={10} > {errorMessage} )} {successMessage && ( } mb={10} > {successMessage} )} {/* General Settings */} General Settings Connect domain ID (UUID) setDomainId(e.currentTarget.value) } placeholder="E.g. 123e4567-e89b-12d3-a456-426614174000" /> Auto Block Cookies setAutoBlockCookies( event.currentTarget.checked ) } size="sm" /> Language