Move scroll container to wrap lyrics only

This commit is contained in:
jeffvli 2023-06-05 02:57:20 -07:00 committed by Jeff
parent 3f78c3f420
commit a1a113d3c6
2 changed files with 33 additions and 34 deletions

View file

@ -1,13 +1,40 @@
import { Center, Group } from '@mantine/core'; import { Center, Group } from '@mantine/core';
import { ErrorBoundary } from 'react-error-boundary'; import { ErrorBoundary } from 'react-error-boundary';
import { RiInformationFill } from 'react-icons/ri'; import { RiInformationFill } from 'react-icons/ri';
import styled from 'styled-components';
import { useSongLyrics } from './queries/lyric-query'; import { useSongLyrics } from './queries/lyric-query';
import { SynchronizedLyrics } from './synchronized-lyrics'; import { SynchronizedLyrics } from './synchronized-lyrics';
import { Spinner, TextTitle } from '/@/renderer/components'; import { ScrollArea, Spinner, TextTitle } from '/@/renderer/components';
import { ErrorFallback } from '/@/renderer/features/action-required'; import { ErrorFallback } from '/@/renderer/features/action-required';
import { UnsynchronizedLyrics } from '/@/renderer/features/lyrics/unsynchronized-lyrics'; import { UnsynchronizedLyrics } from '/@/renderer/features/lyrics/unsynchronized-lyrics';
import { getServerById, useCurrentSong } from '/@/renderer/store'; import { getServerById, useCurrentSong } from '/@/renderer/store';
const LyricsScrollContainer = styled(ScrollArea)`
z-index: 1;
text-align: center;
transform: translateY(-2rem);
mask-image: linear-gradient(
180deg,
transparent 5%,
rgba(0, 0, 0, 100%) 20%,
rgba(0, 0, 0, 100%) 85%,
transparent 95%
);
&.mantine-ScrollArea-root {
height: 100%;
}
& .mantine-ScrollArea-viewport {
height: 100% !important;
}
& .mantine-ScrollArea-viewport > div {
height: 100%;
}
`;
export const Lyrics = () => { export const Lyrics = () => {
const currentSong = useCurrentSong(); const currentSong = useCurrentSong();
const currentServer = getServerById(currentSong?.serverId); const currentServer = getServerById(currentSong?.serverId);
@ -28,7 +55,7 @@ export const Lyrics = () => {
size={25} size={25}
/> />
) : !data?.lyrics ? ( ) : !data?.lyrics ? (
<Center p="2rem"> <Center>
<Group> <Group>
<RiInformationFill size="2rem" /> <RiInformationFill size="2rem" />
<TextTitle <TextTitle
@ -40,7 +67,7 @@ export const Lyrics = () => {
</Group> </Group>
</Center> </Center>
) : ( ) : (
<> <LyricsScrollContainer>
{Array.isArray(data.lyrics) ? ( {Array.isArray(data.lyrics) ? (
<SynchronizedLyrics <SynchronizedLyrics
lyrics={data.lyrics} lyrics={data.lyrics}
@ -56,7 +83,7 @@ export const Lyrics = () => {
onRemoveLyric={() => {}} onRemoveLyric={() => {}}
/> />
)} )}
</> </LyricsScrollContainer>
)} )}
</ErrorBoundary> </ErrorBoundary>
); );

View file

@ -3,7 +3,7 @@ import { motion } from 'framer-motion';
import { HiOutlineQueueList } from 'react-icons/hi2'; import { HiOutlineQueueList } from 'react-icons/hi2';
import { RiFileMusicLine, RiFileTextLine, RiInformationFill } from 'react-icons/ri'; import { RiFileMusicLine, RiFileTextLine, RiInformationFill } from 'react-icons/ri';
import styled from 'styled-components'; import styled from 'styled-components';
import { Button, ScrollArea, TextTitle } from '/@/renderer/components'; import { Button, TextTitle } from '/@/renderer/components';
import { PlayQueue } from '/@/renderer/features/now-playing'; import { PlayQueue } from '/@/renderer/features/now-playing';
import { import {
useFullScreenPlayerStore, useFullScreenPlayerStore,
@ -27,32 +27,6 @@ const QueueContainer = styled.div`
} }
`; `;
const LyricsContainer = styled(ScrollArea)`
z-index: 1;
text-align: center;
transform: translateY(-2rem);
mask-image: linear-gradient(
180deg,
transparent 5%,
rgba(0, 0, 0, 100%) 20%,
rgba(0, 0, 0, 100%) 85%,
transparent 95%
);
&.mantine-ScrollArea-root {
height: 100%;
}
& .mantine-ScrollArea-viewport {
height: 100% !important;
}
& .mantine-ScrollArea-viewport > div {
height: 100%;
}
`;
const ActiveTabIndicator = styled(motion.div)` const ActiveTabIndicator = styled(motion.div)`
position: absolute; position: absolute;
bottom: 0; bottom: 0;
@ -140,9 +114,7 @@ export const FullScreenPlayerQueue = () => {
</Group> </Group>
</Center> </Center>
) : activeTab === 'lyrics' ? ( ) : activeTab === 'lyrics' ? (
<LyricsContainer scrollHideDelay={0}>
<Lyrics /> <Lyrics />
</LyricsContainer>
) : null} ) : null}
</Stack> </Stack>
); );