fix(synced-lyrics): fix nullable

This commit is contained in:
JellyBrick
2025-07-01 23:31:42 +09:00
parent be92e6c6f7
commit 38b2bb64fc

View File

@ -1,20 +1,17 @@
import { import {
createEffect, createEffect,
createMemo,
createSignal, createSignal,
onCleanup, onCleanup,
onMount, onMount,
Show, Show,
untrack, untrack,
} from 'solid-js'; } from 'solid-js';
import { VirtualizerHandle, VList } from 'virtua/solid'; import { type VirtualizerHandle, VList } from 'virtua/solid';
import { LyricsPicker } from './components/LyricsPicker'; import { LyricsPicker } from './components/LyricsPicker';
import { selectors } from './utils'; import { selectors } from './utils';
import type { LineLyrics, SyncedLyricsPluginConfig } from '../types';
import { currentLyrics } from '../providers';
import { import {
ErrorDisplay, ErrorDisplay,
LoadingKaomoji, LoadingKaomoji,
@ -23,6 +20,10 @@ import {
PlainLyrics, PlainLyrics,
} from './components'; } from './components';
import { currentLyrics } from '../providers';
import type { LineLyrics, SyncedLyricsPluginConfig } from '../types';
export const [isVisible, setIsVisible] = createSignal<boolean>(false); export const [isVisible, setIsVisible] = createSignal<boolean>(false);
export const [config, setConfig] = export const [config, setConfig] =
createSignal<SyncedLyricsPluginConfig | null>(null); createSignal<SyncedLyricsPluginConfig | null>(null);
@ -156,7 +157,7 @@ export const LyricsRenderer = () => {
const { top } = tab.getBoundingClientRect(); const { top } = tab.getBoundingClientRect();
const { clientHeight: height } = stickyRef()!; const { clientHeight: height } = stickyRef()!;
const scrollOffset = scroller()!.scrollOffset; const scrollOffset = scroller()?.scrollOffset ?? -1;
const isInView = scrollOffset <= height; const isInView = scrollOffset <= height;
const isMouseOver = mouseCoord - top - 5 <= height; const isMouseOver = mouseCoord - top - 5 <= height;
@ -173,7 +174,7 @@ export const LyricsRenderer = () => {
}; };
onMount(() => { onMount(() => {
const vList = document.querySelector<HTMLElement>(`.synced-lyrics-vlist`); const vList = document.querySelector<HTMLElement>('.synced-lyrics-vlist');
tab.addEventListener('mousemove', mousemoveListener); tab.addEventListener('mousemove', mousemoveListener);
vList?.addEventListener('scroll', mousemoveListener); vList?.addEventListener('scroll', mousemoveListener);
@ -209,7 +210,7 @@ export const LyricsRenderer = () => {
} }
if (data?.lines) { if (data?.lines) {
return data.lines!.map((line) => ({ return data.lines.map((line) => ({
kind: 'SyncedLine' as const, kind: 'SyncedLine' as const,
line, line,
})); }));
@ -234,7 +235,7 @@ export const LyricsRenderer = () => {
const time = currentTime(); const time = currentTime();
const data = currentLyrics()?.data; const data = currentLyrics()?.data;
if (!data || !data.lines) return setStatuses([]), void 0; if (!data || !data.lines) return setStatuses([]);
const previous = untrack(statuses); const previous = untrack(statuses);
const current = data.lines.map((line) => { const current = data.lines.map((line) => {
@ -243,10 +244,11 @@ export const LyricsRenderer = () => {
return 'current'; return 'current';
}); });
if (previous.length !== current.length) return setStatuses(current), void 0; if (previous.length !== current.length) return setStatuses(current);
if (previous.every((status, idx) => status === current[idx])) return; if (previous.every((status, idx) => status === current[idx])) return;
setStatuses(current); setStatuses(current);
return;
}); });
const [currentIndex, setCurrentIndex] = createSignal(0); const [currentIndex, setCurrentIndex] = createSignal(0);