import { useTextTicker } from '@gfazioli/mantine-text-animate'; import { ActionIcon, type ComboboxItem, Group, Menu, Select, Stack, Text, Tooltip, } from '@mantine/core'; import { useCommonHooks, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { FaDice } from 'react-icons/fa'; import { FiShuffle } from 'react-icons/fi'; import { actionIconClasses, selectClasses, stackClasses, textClasses, toolTipClasses, } from 'styles'; import type { Theme, ThemePlaylist } from 'types'; function ThemingCard() { const { data: themePlaylistData } = useQueryAPI({ endpoint: 'api/themePlaylists', }); const { data: allThemeData, isFetched: allThemeDataIsFetched } = useQueryAPI({ endpoint: 'api/themes', }); const [allThemes, setAllThemes] = useState([]); useEffect(() => { if (allThemeData && allThemeDataIsFetched) { setAllThemes(allThemeData); } }, [allThemeData, allThemeDataIsFetched]); const { isMobile, currentTheme, setCurrentTheme, setThemeName, handleThemeChange, theme, currentThemePlaylist, setCurrentThemePlaylist, } = useCommonHooks(); const [current, setCurrent] = useState(theme.name); const { text, isAnimating, start, stop } = useTextTicker({ initialText: 'target', value: theme.name, delay: 0, speed: 1, easing: 'ease-in-out', animate: current !== theme.name, }); useEffect(() => { if (theme.name === current) { setCurrent(theme.name); stop(); } else { start(); } }, [theme]); return ( Themes Current theme: {text} { const themeList = JSON.parse( themePlaylistData?.find( (t: ThemePlaylist) => t?.name === currentThemePlaylist, )?.themeList ?? '[]', ); if (themeList.length > 0) { const filteredThemes = allThemes.filter((t: Theme) => themeList.includes(t.id), ); handleThemeChange(filteredThemes, false); } else if (currentThemePlaylist === 'All') { handleThemeChange(allThemes, true); } else if (currentThemePlaylist === 'Backgrounds') { handleThemeChange( allThemes.filter( (a: any) => !a.backgroundImage.toLowerCase().includes('none'), ), false, ); } else if (currentThemePlaylist === 'No Backgrounds') { handleThemeChange( allThemes.filter((a: any) => a.backgroundImage.toLowerCase().includes('none'), ), false, ); } }} >