feishin/src/renderer/features/lyrics/unsynchronized-lyrics.tsx

74 lines
2.4 KiB
TypeScript
Raw Normal View History

2023-05-22 17:38:31 -07:00
import { useMemo } from 'react';
import styles from './unsynchronized-lyrics.module.css';
import { LyricLine } from '/@/renderer/features/lyrics/lyric-line';
import { useLyricsSettings } from '/@/renderer/store';
2025-05-20 19:23:36 -07:00
import { FullLyricsMetadata } from '/@/shared/types/domain-types';
2023-05-22 17:38:31 -07:00
2024-02-01 23:53:10 -08:00
export interface UnsynchronizedLyricsProps extends Omit<FullLyricsMetadata, 'lyrics'> {
2023-07-01 19:10:05 -07:00
lyrics: string;
translatedLyrics?: null | string;
2023-05-22 17:38:31 -07:00
}
export const UnsynchronizedLyrics = ({
2023-07-01 19:10:05 -07:00
artist,
lyrics,
name,
remote,
source,
translatedLyrics,
}: UnsynchronizedLyricsProps) => {
const settings = useLyricsSettings();
2023-07-01 19:10:05 -07:00
const lines = useMemo(() => {
return lyrics.split('\n');
}, [lyrics]);
2023-05-22 17:38:31 -07:00
const translatedLines = useMemo(() => {
return translatedLyrics ? translatedLyrics.split('\n') : [];
}, [translatedLyrics]);
2023-07-01 19:10:05 -07:00
return (
<div
className={styles.container}
style={{ gap: `${settings.gapUnsync}px` }}
>
{settings.showProvider && source && (
2023-07-01 19:10:05 -07:00
<LyricLine
alignment={settings.alignment}
2023-07-01 19:10:05 -07:00
className="lyric-credit"
fontSize={settings.fontSizeUnsync}
2023-07-01 19:10:05 -07:00
text={`Provided by ${source}`}
/>
)}
{settings.showMatch && remote && (
2023-07-01 19:10:05 -07:00
<LyricLine
alignment={settings.alignment}
2023-07-01 19:10:05 -07:00
className="lyric-credit"
fontSize={settings.fontSizeUnsync}
2023-07-01 19:10:05 -07:00
text={`"${name} by ${artist}"`}
/>
)}
{lines.map((text, idx) => (
<div key={idx}>
<LyricLine
alignment={settings.alignment}
className="lyric-line unsynchronized"
fontSize={settings.fontSizeUnsync}
id={`lyric-${idx}`}
text={text}
/>
{translatedLines[idx] && (
<LyricLine
alignment={settings.alignment}
className="lyric-line unsynchronized translation"
fontSize={settings.fontSizeUnsync * 0.8}
text={translatedLines[idx]}
/>
)}
</div>
2023-07-01 19:10:05 -07:00
))}
</div>
2023-07-01 19:10:05 -07:00
);
2023-05-22 17:38:31 -07:00
};