mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-13 11:21:46 +00:00
fix(synced-lyrics): fix nullable
This commit is contained in:
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user