diff --git a/package-lock.json b/package-lock.json index 3bb9e6d..4f3e19d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,9 @@ "@mantine/form": "^8.2.2", "@mantine/hooks": "^8.2.2", "@mantine/notifications": "^8.2.2", - "@tanstack/react-query": "^5.84.0", - "@tanstack/react-query-devtools": "^5.84.0", - "@tanstack/react-query-persist-client": "^5.84.0", + "@tanstack/react-query": "^5.84.1", + "@tanstack/react-query-devtools": "^5.84.1", + "@tanstack/react-query-persist-client": "^5.84.1", "idb-keyval": "^6.2.2", "jotai": "^2.12.5", "react": "^19.1.1", @@ -1662,9 +1662,9 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.84.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.84.0.tgz", - "integrity": "sha512-iPycFGLq5lltDE16Jf13Nx7SOvtfoopfOH/+Ahbdd+z4QqOfYu/SOkY86AVYVcKjneuqPxTm8e85lSGhwe0cog==", + "version": "5.84.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.84.1.tgz", + "integrity": "sha512-zo7EUygcWJMQfFNWDSG7CBhy8irje/XY0RDVKKV4IQJAysb+ZJkkJPcnQi+KboyGUgT+SQebRFoTqLuTtfoDLw==", "license": "MIT", "dependencies": { "@tanstack/query-core": "5.83.1" @@ -1678,9 +1678,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.84.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.84.0.tgz", - "integrity": "sha512-7SwgDOm1Waz9wKOwR8WPaN4yo6zq1UBQxGLWy/SJWZOoo2bUVRVlGPvFicuOUwQWv5VDzzNYq4GvTQnX4T3xtw==", + "version": "5.84.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.84.1.tgz", + "integrity": "sha512-nle+OQ9B3Z3EG2R3ixvaNcJ6OeqGwmAc5iMDW6Vj+emLZkWRrN3BDsrzZQu414n34lpxplnC7z1jmKuU/scHCQ==", "license": "MIT", "dependencies": { "@tanstack/query-devtools": "5.84.0" @@ -1690,14 +1690,14 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.84.0", + "@tanstack/react-query": "^5.84.1", "react": "^18 || ^19" } }, "node_modules/@tanstack/react-query-persist-client": { - "version": "5.84.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.84.0.tgz", - "integrity": "sha512-vpe2KnCkbcZmbk4SXObKxJL9BKP6IlZxBOi5Ua7oZFa8LKoECBHR+oK0YoEhtQKVaBaRbSc7G0YsuUZWct7vRQ==", + "version": "5.84.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.84.1.tgz", + "integrity": "sha512-Qpn2kg7eI+dI4AHeXmI0FYn1JVwluSESA3iJ+KJv9zZiluPhiFmzFT++j9QYwu/LHUwp4PmjqSPHkuBLiYkTRQ==", "license": "MIT", "dependencies": { "@tanstack/query-persist-client-core": "5.83.1" @@ -1707,7 +1707,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.84.0", + "@tanstack/react-query": "^5.84.1", "react": "^18 || ^19" } }, diff --git a/package.json b/package.json index e4d6b96..89253c2 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "@mantine/form": "^8.2.2", "@mantine/hooks": "^8.2.2", "@mantine/notifications": "^8.2.2", - "@tanstack/react-query": "^5.84.0", - "@tanstack/react-query-devtools": "^5.84.0", - "@tanstack/react-query-persist-client": "^5.84.0", + "@tanstack/react-query": "^5.84.1", + "@tanstack/react-query-devtools": "^5.84.1", + "@tanstack/react-query-persist-client": "^5.84.1", "idb-keyval": "^6.2.2", "jotai": "^2.12.5", "react": "^19.1.1", diff --git a/src/hooks/useAPI.tsx b/src/hooks/useAPI.tsx index 8761aab..8c92d07 100644 --- a/src/hooks/useAPI.tsx +++ b/src/hooks/useAPI.tsx @@ -130,7 +130,9 @@ export function useMutationAPI() { endpoint === 'api/bookmarkCategoryOrder' && queryClient.refetchQueries({ queryKey: ['GET', 'api/bookmarkCategories'] }); endpoint === 'api/applicationOrder' && - queryClient.refetchQueries({ queryKey: ['GET', 'api/applicationOrder'] }); + queryClient.refetchQueries({ queryKey: ['GET', 'api/applications'] }); + endpoint === 'api/applications' && + queryClient.refetchQueries({ queryKey: ['GET', 'api/enabledApplications'] }); endpoint === 'api/bookmarks' && queryClient.refetchQueries({ queryKey: ['GET', 'api/themes'] }); endpoint === 'api/providers' && @@ -145,7 +147,9 @@ export function useMutationAPI() { endpoint === 'api/bookmarkCategoryOrder' && queryClient.refetchQueries({ queryKey: ['GET', 'api/bookmarkCategories'] }); endpoint === 'api/applicationOrder' && - queryClient.refetchQueries({ queryKey: ['GET', 'api/applicationOrder'] }); + queryClient.refetchQueries({ queryKey: ['GET', 'api/applications'] }); + endpoint === 'api/applications' && + queryClient.refetchQueries({ queryKey: ['GET', 'api/enabledApplications'] }); endpoint === 'api/bookmarks' && queryClient.refetchQueries({ queryKey: ['GET', 'api/themes'] }); endpoint === 'api/providers' && diff --git a/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx b/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx index 81db37b..20fd808 100644 --- a/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx +++ b/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx @@ -1,6 +1,7 @@ import { Button, Group, Modal, Text, TextInput } from '@mantine/core'; import { useCommonHooks } from 'hooks'; import { useEffect, useState } from 'react'; +import { FaTag } from 'react-icons/fa'; import { modalClasses, textInputClasses } from 'styles'; import type { Theme, ThemePlaylist } from 'types'; import { ThemePreviewMiddleware } from '../../Themes'; @@ -55,6 +56,14 @@ export function ThemePlaylistModal({ + {selectedPlaylist?.name !== 'Time of Day' && ( + + + + {themeList.length} + + + )} Name: void; openThemeModal: () => void; + enabled?: boolean; }) { const { hovered, ref: hoverRef } = useHover(); const { ref, width } = useElementSize(); @@ -107,7 +109,7 @@ export function ThemeCard({ handleOpen={handleOpen} themePlaylists={themePlaylists} openModal={openModal} - hovered={hovered} + hovered={hovered && enabled} hoverPreview={hoverPreview} setHoverPreview={setHoverPreview} transition={transition} @@ -145,7 +147,7 @@ export function ThemeCard({ setCurrentThemePlaylist('All'); }} > - {hovered && currentTheme !== 'random' && ( + {hovered && enabled && currentTheme !== 'random' && ( void; allThemes: Theme[]; closeThemeModal: () => void; + themePlaylists: ThemePlaylist[]; }) { const themesEndpoint = 'api/themes'; const { isMobile } = useCommonHooks(); @@ -36,11 +39,22 @@ export function ThemeModal({ const [pickerOpen, { open: openPicker, close: closePicker }] = useDisclosure(false); const [duplicate, setDuplicate] = useState(false); + const [hidden, setHidden] = useState(false); + + const playlists = + themePlaylists.length > 0 + ? themePlaylists.filter((playlist: ThemePlaylist) => { + if (playlist.themeList.includes(`${selectedTheme.id}`)) { + return playlist; + } + }) + : []; const handleClose = () => { closeThemeModal(); closePicker(); setIsNew(false); + setHidden(false); setSelectedTheme({ id: undefined, name: 'default', @@ -87,7 +101,7 @@ export function ThemeModal({ keepMounted={true} > - + {!isNew && ( @@ -116,6 +130,87 @@ export function ThemeModal({ + + {playlists.length > 0 && !isMobile && ( + + )} {isNew ? ( { setPressed(true); }); - const randomTheme = { - ...allThemes[Math.floor(Math.random() * allThemes.length)], - randomEnabled: 1, - }; + const { hovered: newHover, ref: newRef } = useHover(); + const { hovered: copyHover, ref: copyRef } = useHover(); + const randomTheme = useMemo(() => { + return { + ...allThemes[Math.floor(Math.random() * allThemes.length)], + randomEnabled: 1, + }; + }, []); return ( {!duplicate ? ( @@ -40,12 +44,17 @@ export function NewThemeStarter({ {}} + enabled={false} />