diff --git a/src/hooks/useCommonHooks.ts b/src/hooks/useCommonHooks.ts index 181e953..e4f5ee9 100644 --- a/src/hooks/useCommonHooks.ts +++ b/src/hooks/useCommonHooks.ts @@ -58,14 +58,14 @@ export function useCommonHooks() { if (enabled.length === 0) { setTheme(themes[0]); save && setThemeName(themes[0].name); - } else if (currentThemePlaylist !== 'All') { - const index = Math.floor(Math.random() * themes.length); - setTheme(themes[index]); - save && setThemeName(themes[index].name); - } else { + } else if (currentThemePlaylist === 'All') { const index = Math.floor(Math.random() * enabled.length); setTheme(enabled[index]); save && setThemeName(enabled[index].name); + } else { + const index = Math.floor(Math.random() * themes.length); + setTheme(themes[index]); + save && setThemeName(themes[index].name); } }; diff --git a/src/pages/settings/components/ThemeCard.tsx b/src/pages/settings/components/ThemeCard.tsx index d23754e..4cf8b91 100644 --- a/src/pages/settings/components/ThemeCard.tsx +++ b/src/pages/settings/components/ThemeCard.tsx @@ -1,5 +1,5 @@ import { ActionIcon, Box, Button, Group, Overlay, Stack, Text } from '@mantine/core'; -import { useCommonHooks } from 'hooks'; +import { useCommonHooks, useQueryAPI } from 'hooks'; import { useState } from 'react'; import { FiEdit, FiShuffle, FiTrash, FiX } from 'react-icons/fi'; import { actionIconClasses } from 'styles'; @@ -11,10 +11,19 @@ function ThemeCard({ createTheme, allThemes, }: any) { + const { data: themePlaylists, isFetched: isThemePlaylistsFetched } = useQueryAPI({ + endpoint: 'api/themePlaylists', + }); const [hover, setHover] = useState(false); const [shiftEdit, setShiftEdit] = useState(0); const [shiftShuffle, setShiftShuffle] = useState(0); - const { handleThemeChange, currentTheme, setCurrentTheme, theme } = useCommonHooks(); + const { + handleThemeChange, + currentTheme, + setCurrentTheme, + theme, + currentThemePlaylist, + } = useCommonHooks(); return ( { - handleThemeChange(allThemes, false); + const themeList = JSON.parse( + themePlaylists.find((t: any) => t.name === currentThemePlaylist) + .themeList, + ); + const filteredThemes = allThemes.filter((t: any) => + themeList.includes(t.id), + ); + handleThemeChange(filteredThemes, false); }} style={{ fontSize: '2em', diff --git a/src/pages/settings/components/ThemePlaylistCard.tsx b/src/pages/settings/components/ThemePlaylistCard.tsx index 5d7aecf..b72b9b9 100644 --- a/src/pages/settings/components/ThemePlaylistCard.tsx +++ b/src/pages/settings/components/ThemePlaylistCard.tsx @@ -20,7 +20,7 @@ function ThemePlaylistCard({ allThemes, }: any) { const [hover, setHover] = useState(false); - const { currentThemePlaylist, setCurrentThemePlaylist, theme } = useCommonHooks(); + const { setThemeName, setCurrentThemePlaylist, theme } = useCommonHooks(); const syncableLists = ['All', 'Backgrounds', 'No Backgrounds']; const themeList = JSON.parse( cardPlaylist.themeList.name === 'Time of Day' ? '[]' : cardPlaylist.themeList, @@ -92,7 +92,9 @@ function ThemePlaylistCard({ name: 'Backgrounds', themeList: JSON.stringify( allThemes - .filter((theme: any) => theme.backgroundImage !== 'none') + .filter( + (theme: any) => theme.backgroundImage.toLowerCase() !== 'none', + ) .map((theme: any) => theme.id), ), }, @@ -107,7 +109,9 @@ function ThemePlaylistCard({ name: 'No Backgrounds', themeList: JSON.stringify( allThemes - .filter((theme: any) => theme.backgroundImage === 'none') + .filter( + (theme: any) => theme.backgroundImage.toLowerCase() === 'none', + ) .map((theme: any) => theme.id), ), }, @@ -174,6 +178,7 @@ function ThemePlaylistCard({ }} onClick={() => { setCurrentThemePlaylist(cardPlaylist.name); + setThemeName('random'); }} > {hover && } diff --git a/src/pages/settings/components/ThemePlaylists.tsx b/src/pages/settings/components/ThemePlaylists.tsx index d71ace8..db32286 100644 --- a/src/pages/settings/components/ThemePlaylists.tsx +++ b/src/pages/settings/components/ThemePlaylists.tsx @@ -3,7 +3,7 @@ import { useDisclosure } from '@mantine/hooks'; import { modals } from '@mantine/modals'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useState } from 'react'; -import { FiPlus } from 'react-icons/fi'; +import { FiChevronRight, FiPlus } from 'react-icons/fi'; import { buttonClasses, textClasses } from 'styles'; import ThemePlaylistCard from './ThemePlaylistCard'; import ThemePlaylistModal from './ThemePlaylistModal'; @@ -19,7 +19,7 @@ function ThemePlaylists() { const { mutateAsync: deletePlaylist } = useMutationAPI(); const [opened, { open, close }] = useDisclosure(false); const [selectedPlaylist, setSelectedPlaylist] = useState({}); - const { currentThemePlaylist, setCurrentThemePlaylist } = useCommonHooks(); + const { currentThemePlaylist, setCurrentThemePlaylist, theme } = useCommonHooks(); const handleOpen = (playlist: any) => { setSelectedPlaylist(playlist); @@ -94,6 +94,23 @@ function ThemePlaylists() { {themePlaylists?.map((cardPlaylist: any) => { return ( + {cardPlaylist.name === currentThemePlaylist && ( + + )} (['None']); const [selectedTheme, setSelectedTheme] = useState({}); const [pickerOpen, { open: openPicker, close: closePicker }] = useDisclosure(false); - const { currentTheme, setCurrentTheme, theme } = useCommonHooks(); + const { currentTheme, setCurrentTheme, theme, setCurrentThemePlaylist } = + useCommonHooks(); const handleOpen = (theme: any) => { setSelectedTheme(theme); @@ -115,6 +116,7 @@ function ThemesSettings() { checked={currentTheme === 'random'} onChange={(e) => { setCurrentTheme(e.target.checked ? 'random' : theme.name); + setCurrentThemePlaylist('All'); }} color={theme.primaryColor} />