From cde5be1bbbc18d5d6026a9ed927d539a95ebb8ba Mon Sep 17 00:00:00 2001 From: Silberengel Date: Mon, 30 Mar 2026 14:46:24 +0200 Subject: [PATCH] bug-fixes --- src/components/LiveActivitiesStrip.tsx | 16 ++++- src/components/NormalFeed/index.tsx | 20 +++++- src/components/NoteList/index.tsx | 93 +++++++++++++++++--------- src/components/Relay/index.tsx | 1 + src/pages/primary/SpellsPage/index.tsx | 4 +- 5 files changed, 95 insertions(+), 39 deletions(-) diff --git a/src/components/LiveActivitiesStrip.tsx b/src/components/LiveActivitiesStrip.tsx index c27f2f59..47f6d9f1 100644 --- a/src/components/LiveActivitiesStrip.tsx +++ b/src/components/LiveActivitiesStrip.tsx @@ -3,7 +3,7 @@ import { cn } from '@/lib/utils' import { useLiveActivitiesOptional } from '@/providers/LiveActivitiesProvider' import { useUserPreferences } from '@/providers/UserPreferencesProvider' import { ExternalLink } from 'lucide-react' -import { useEffect, useState } from 'react' +import { useEffect, useLayoutEffect, useState } from 'react' import { useTranslation } from 'react-i18next' type TPlacement = 'sidebar' | 'mobile' @@ -37,11 +37,21 @@ export default function LiveActivitiesStrip({ placement }: { placement: TPlaceme return () => window.clearInterval(id) }, [items.length, reduceMotion]) + useLayoutEffect(() => { + if (items.length === 0) return + setSlide((s) => Math.min(s, items.length - 1)) + }, [items.length]) + if (!showLiveActivitiesBanner || items.length === 0) { return null } - const current = items[slide]! + // `items` can shrink without a new array identity; `slide` may then be out of range until effects run. + const displayIndex = Math.min(slide, items.length - 1) + const current = items[displayIndex] + if (!current) { + return null + } return (
{ e.preventDefault() diff --git a/src/components/NormalFeed/index.tsx b/src/components/NormalFeed/index.tsx index 0290c832..66a80154 100644 --- a/src/components/NormalFeed/index.tsx +++ b/src/components/NormalFeed/index.tsx @@ -28,10 +28,20 @@ const NormalFeed = forwardRef