fix betterActivities random open errors, fix second object pushback to (#1009)

first
This commit is contained in:
creations 2026-04-23 07:46:55 -04:00 • committed by GitHub
parent 258b7524b5
commit 4d246b5190
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 6 deletions

View file

@ -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 (
<div
@ -48,7 +48,7 @@ export function CarouselControls({ activities, currentActivity, onActivityChange
<div
key={"dot--" + index}
onClick={() => onActivityChange(activity)}
className={cl("controls-dot", currentActivity === activity && "controls-selected")} />
className={cl("controls-dot", currentActivity.id === activity.id && "controls-selected")} />
))}
</div>

View file

@ -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) => {

View file

@ -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 (
<ErrorBoundary noop>
<div style={{ display: "flex", flexDirection: "column" }}>

View file

@ -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;