Move scroll container to wrap lyrics only
This commit is contained in:
parent
3f78c3f420
commit
a1a113d3c6
2 changed files with 33 additions and 34 deletions
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
Reference in a new issue