From 751ad55d02dccffbb2ba1b65e0ca883b25156d05 Mon Sep 17 00:00:00 2001 From: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Date: Wed, 10 Sep 2025 17:49:13 -0700 Subject: [PATCH 1/3] remove all node selectors in useClickOutside --- .../features/context-menu/context-menu-provider.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/renderer/features/context-menu/context-menu-provider.tsx b/src/renderer/features/context-menu/context-menu-provider.tsx index 39732b44..6a2184d3 100644 --- a/src/renderer/features/context-menu/context-menu-provider.tsx +++ b/src/renderer/features/context-menu/context-menu-provider.tsx @@ -103,19 +103,13 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { const { t } = useTranslation(); const [opened, setOpened] = useState(false); - const [contextMenuRef, setContextMenuRef] = useState(null); - const [ratingsRef, setRatingsRef] = useState(null); const [rating, setRating] = useState(0); useEffect(() => { setRating(0); }, [opened]); - const clickOutsideRef = useClickOutside( - () => setOpened(false), - ['mousedown', 'touchstart'], - [contextMenuRef, ratingsRef], - ); + const clickOutsideRef = useClickOutside(() => setOpened(false), ['mousedown', 'touchstart']); const viewport = useViewportSize(); const server = useCurrentServer(); @@ -882,7 +876,7 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { leftIcon: , onClick: () => {}, rightIcon: ( - + { handleUpdateRating(e); @@ -950,7 +944,7 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { {opened && ( - + {ctx.menuItems?.map((item) => { return ( From dc03a432fe35fa5f8858e598711c7334c90da5b7 Mon Sep 17 00:00:00 2001 From: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Date: Wed, 10 Sep 2025 20:20:56 -0700 Subject: [PATCH 2/3] add initial rating when a single item is provided in context menu --- .../context-menu/context-menu-provider.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/renderer/features/context-menu/context-menu-provider.tsx b/src/renderer/features/context-menu/context-menu-provider.tsx index 6a2184d3..476b9da6 100644 --- a/src/renderer/features/context-menu/context-menu-provider.tsx +++ b/src/renderer/features/context-menu/context-menu-provider.tsx @@ -103,12 +103,6 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { const { t } = useTranslation(); const [opened, setOpened] = useState(false); - const [rating, setRating] = useState(0); - - useEffect(() => { - setRating(0); - }, [opened]); - const clickOutsideRef = useClickOutside(() => setOpened(false), ['mousedown', 'touchstart']); const viewport = useViewportSize(); @@ -126,6 +120,16 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { yPos: 0, }); + const [rating, setRating] = useState(0); + + useEffect(() => { + if (opened && ctx.data.length === 1) { + setRating(ctx.data[0].userRating ?? 0); + } else { + setRating(0); + } + }, [ctx.data, opened]); + const handlePlayQueueAdd = usePlayQueueAdd(); const navigate = useNavigate(); From ab8c3ad0ec9f47403f5f6fbdd826d59100cb9ca7 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 10 Sep 2025 20:32:34 -0700 Subject: [PATCH 3/3] handle initial rating for multiple items in context menu --- .../features/context-menu/context-menu-provider.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/renderer/features/context-menu/context-menu-provider.tsx b/src/renderer/features/context-menu/context-menu-provider.tsx index 476b9da6..29723e11 100644 --- a/src/renderer/features/context-menu/context-menu-provider.tsx +++ b/src/renderer/features/context-menu/context-menu-provider.tsx @@ -123,8 +123,16 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { const [rating, setRating] = useState(0); useEffect(() => { - if (opened && ctx.data.length === 1) { - setRating(ctx.data[0].userRating ?? 0); + if (opened && ctx.data.length > 0) { + if (ctx.data.length === 1) { + setRating(ctx.data[0].userRating ?? 0); + } else { + const firstRating = ctx.data[0].userRating ?? 0; + const allSameRating = ctx.data.every( + (item) => (item.userRating ?? 0) === firstRating, + ); + setRating(allSameRating ? firstRating : 0); + } } else { setRating(0); }