From 4d246b5190f4ebba5502d24d208249e654ff94fa Mon Sep 17 00:00:00 2001 From: creations Date: Thu, 23 Apr 2026 07:46:55 -0400 Subject: [PATCH] fix betterActivities random open errors, fix second object pushback to (#1009) first --- .../betterActivities/components/CarouselControls.tsx | 4 ++-- .../betterActivities/patch-helpers/activityList.tsx | 4 +++- .../betterActivities/patch-helpers/popout.tsx | 9 +++++++-- src/equicordplugins/betterActivities/utils.tsx | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/equicordplugins/betterActivities/components/CarouselControls.tsx b/src/equicordplugins/betterActivities/components/CarouselControls.tsx index b4188d83e..18e614525 100644 --- a/src/equicordplugins/betterActivities/components/CarouselControls.tsx +++ b/src/equicordplugins/betterActivities/components/CarouselControls.tsx @@ -11,7 +11,7 @@ import { cl } from "../utils"; import { Caret } from "./Caret"; export function CarouselControls({ activities, currentActivity, onActivityChange }: CarouselControlsProps) { - const currentIndex = activities.indexOf(currentActivity); + const currentIndex = activities.findIndex(a => a.id === currentActivity.id); return (
onActivityChange(activity)} - className={cl("controls-dot", currentActivity === activity && "controls-selected")} /> + className={cl("controls-dot", currentActivity.id === activity.id && "controls-selected")} /> ))}
diff --git a/src/equicordplugins/betterActivities/patch-helpers/activityList.tsx b/src/equicordplugins/betterActivities/patch-helpers/activityList.tsx index aad18d8d8..bb63e80d3 100644 --- a/src/equicordplugins/betterActivities/patch-helpers/activityList.tsx +++ b/src/equicordplugins/betterActivities/patch-helpers/activityList.tsx @@ -5,6 +5,7 @@ */ import ErrorBoundary from "@components/ErrorBoundary"; +import { Activity } from "@vencord/discord-types"; import { findComponentByCodeLazy } from "@webpack"; import { React, Tooltip } from "@webpack/common"; import { JSX } from "react"; @@ -18,11 +19,12 @@ import { cl, getApplicationIcons } from "../utils"; // Discord no longer shows an icon here by default but we use the one from the popout now here const DefaultActivityIcon = findComponentByCodeLazy("M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm6.81 7c-.54 0-1 .26-1.23.61A1 1 0 0 1 8.92 8.5 3.49 3.49 0 0 1 11.82 7c1.81 0 3.43 1.38 3.43 3.25 0 1.45-.98 2.61-2.27 3.06a1 1 0 0 1-1.96.37l-.19-1a1 1 0 0 1 .98-1.18c.87 0 1.44-.63 1.44-1.25S12.68 9 11.81 9ZM13 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm7-10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM18.5 20a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM7 18.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM5.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"); -export function patchActivityList({ activities, user, hideTooltip }: ActivityListProps): JSX.Element | null { +export function patchActivityList({ activities: rawActivities, user, hideTooltip }: ActivityListProps): JSX.Element | null { const icons: ActivityListIcon[] = []; if (user.bot || settings.store.hideTooltip && hideTooltip) return null; + const activities = rawActivities.filter((a): a is Activity => a != null); const applicationIcons = getApplicationIcons(activities); if (applicationIcons.length) { const compareImageSource = (a: ApplicationIcon, b: ApplicationIcon) => { diff --git a/src/equicordplugins/betterActivities/patch-helpers/popout.tsx b/src/equicordplugins/betterActivities/patch-helpers/popout.tsx index 54a2e9bae..dc8c29daf 100644 --- a/src/equicordplugins/betterActivities/patch-helpers/popout.tsx +++ b/src/equicordplugins/betterActivities/patch-helpers/popout.tsx @@ -24,7 +24,7 @@ export function showAllActivitiesComponent({ activity, user, ...props }: Readonl const activities = useStateFromStores( [PresenceStore], - () => PresenceStore.getActivities(user.id).filter((activity: Activity) => activity.type !== 4) + () => PresenceStore.getActivities(user.id).filter((activity: Activity) => activity != null && activity.type !== 4) ); useEffect(() => { @@ -33,8 +33,12 @@ export function showAllActivitiesComponent({ activity, user, ...props }: Readonl return; } - if (!currentActivity || !activities.includes(currentActivity)) + const existing = currentActivity && activities.find(a => a.id === currentActivity.id); + if (!existing) { setCurrentActivity(activities[0]); + } else if (existing !== currentActivity) { + setCurrentActivity(existing); + } }, [activities]); // we use these for other activities, it would be better to somehow get the corresponding activity props @@ -47,6 +51,7 @@ export function showAllActivitiesComponent({ activity, user, ...props }: Readonl if (!activities.length) return null; if (settings.store.allActivitiesStyle === "carousel") { + if (!currentActivity) return null; return (
diff --git a/src/equicordplugins/betterActivities/utils.tsx b/src/equicordplugins/betterActivities/utils.tsx index e01ca488b..61fb0bf58 100644 --- a/src/equicordplugins/betterActivities/utils.tsx +++ b/src/equicordplugins/betterActivities/utils.tsx @@ -40,7 +40,7 @@ export function getActivityApplication(activity: Activity | null) { export function getApplicationIcons(activities: Activity[], preferSmall = false): ApplicationIcon[] { const applicationIcons: ApplicationIcon[] = []; - const applications = activities.filter(activity => activity.application_id || activity.platform || activity?.id?.startsWith("spotify:")); + const applications = activities.filter(activity => activity != null && (activity.application_id || activity.platform || activity.id?.startsWith("spotify:"))); for (const activity of applications) { const { assets, application_id, platform, id } = activity;