import { Box, Group, Overlay, Stack, Switch, Text } from '@mantine/core'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { FaDice } from 'react-icons/fa'; import { FiChevronRight } from 'react-icons/fi'; import type { Theme } from 'types'; import SettingsHeader from '../Shared/SettingsHeader'; import ThemeCard from './ThemeCard'; import ThemeModal from './ThemeModal'; function ThemesSettings() { const themesEndpoint = 'api/themes'; const backgroundsEndpoint = 'api/backgrounds'; const { data: allThemes } = useQueryAPI({ endpoint: 'api/themes', }); const { data: backgroundData, isFetched: isBackgroundFetched } = useQueryAPI({ endpoint: backgroundsEndpoint, }); const { data: themePlaylists } = useQueryAPI({ endpoint: 'api/themePlaylists', }); const { mutateAsync } = useMutationAPI(); const [opened, { open, close }] = useDisclosure(false); const [colorId, setColorId] = useState(''); const [colorValue, setColorValue] = useState('#000000'); const [backgroundList, setBackgroundList] = useState(['None']); const [selectedTheme, setSelectedTheme] = useState({}); const [pickerOpen, { open: openPicker, close: closePicker }] = useDisclosure(false); const [searchValue, setSearchValue] = useState(''); const [debouncedSearch] = useDebouncedValue(searchValue, 500); const { currentTheme, setCurrentTheme, theme, isMobile, setCurrentThemePlaylist } = useCommonHooks(); const handleOpen = (theme: Theme) => { setSelectedTheme(theme); open(); }; const handleClose = () => { close(); closePicker(); setSelectedTheme({}); }; const handleSaveTheme = () => { mutateAsync({ method: selectedTheme.id === undefined ? 'POST' : 'PATCH', endpoint: themesEndpoint, body: selectedTheme, }); close(); }; useEffect(() => { if (backgroundData && isBackgroundFetched) { setBackgroundList(['None', ...backgroundData]); } }, [backgroundData, isBackgroundFetched]); return ( ) : ( Random Theme ) } labelPosition='left' pos={'absolute'} right={isMobile ? '2rem' : '1rem'} top={isMobile ? '9.5rem' : '2rem'} checked={currentTheme === 'random'} onChange={(e) => { setCurrentTheme(e.target.checked ? 'random' : theme.name); setCurrentThemePlaylist('All'); }} color={theme.primaryColor} style={{ zIndex: 1, }} /> {allThemes ?.filter((a: Theme) => a.name.toLowerCase().includes(debouncedSearch.toLowerCase()), ) .map((cardTheme: Theme) => ( {cardTheme.name === currentTheme && ( )} ))} ); } export default ThemesSettings;