now playing banner on mobile devices
This commit is contained in:
parent
b99a5ffa66
commit
473f6c2d8d
3 changed files with 89 additions and 30 deletions
|
@ -3,41 +3,63 @@ import { useLanyard } from "use-lanyard";
|
|||
import styles from "styles/Lanyard.module.sass";
|
||||
import Image from "next/image";
|
||||
import { useTheme } from 'next-themes'
|
||||
|
||||
import useWindowSize from "utils/shared/hooks/useWindowSize";
|
||||
import Icon from "./Icon";
|
||||
|
||||
const Lanyard = () => {
|
||||
const id = process.env.NEXT_DISCORD_ID || "318044130796109825";
|
||||
const lanyard = useLanyard(id).data;
|
||||
const { resolvedTheme: theme } = useTheme()
|
||||
const windowSize = useWindowSize()
|
||||
|
||||
if (!lanyard?.listening_to_spotify) return;
|
||||
|
||||
|
||||
|
||||
let artists;
|
||||
|
||||
if (lanyard.spotify.artist.split(";").length > 2) {
|
||||
artists = [
|
||||
lanyard.spotify.artist.split(";")[0],
|
||||
lanyard.spotify.artist.split(";")[1],
|
||||
].join(",");
|
||||
} else {
|
||||
artists = lanyard.spotify.artist.split(";").join(",");
|
||||
artists = lanyard.spotify.artist.split(";").join(" &");
|
||||
|
||||
}
|
||||
|
||||
|
||||
console.log("lanyard", theme)
|
||||
|
||||
return (
|
||||
<>
|
||||
<div data-theme={theme} className={[styles.container, styles.badge].join(" ")}>
|
||||
<Image
|
||||
className={styles.albumart}
|
||||
src={lanyard.spotify.album_art_url}
|
||||
width={100}
|
||||
height={100}
|
||||
/>
|
||||
<div className={styles.artist_song}>
|
||||
<p className={styles.song}>{lanyard.spotify.song}</p>
|
||||
<p className={styles.artist}>{artists}</p>
|
||||
</div>
|
||||
</div>
|
||||
{(windowSize.width <= 550 || windowSize.height <= 800) ?
|
||||
(<>
|
||||
<div data-theme={theme} className={styles.np_mobile}>
|
||||
|
||||
<div className={styles.np_text}>
|
||||
<p>
|
||||
<Icon className={styles.np_icon} icon="asterisk" />
|
||||
{lanyard.spotify.song} by {artists}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</>)
|
||||
:
|
||||
(<>
|
||||
<div data-theme={theme} className={[styles.container, styles.badge].join(" ")}>
|
||||
<Image
|
||||
className={styles.albumart}
|
||||
src={lanyard.spotify.album_art_url}
|
||||
width={100}
|
||||
height={100}
|
||||
/>
|
||||
<div className={styles.artist_song}>
|
||||
<p className={styles.song}>{lanyard.spotify.song}</p>
|
||||
<p className={styles.artist}>{artists}</p>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
@import "./_variables"
|
||||
|
||||
|
||||
.container
|
||||
position: absolute
|
||||
bottom: 0
|
||||
|
@ -15,7 +14,6 @@
|
|||
background: $background-light-lanyard
|
||||
color: $text-light-lanyard
|
||||
|
||||
|
||||
.albumart
|
||||
border-radius: 20px
|
||||
padding: 10px !important
|
||||
|
@ -28,20 +26,20 @@
|
|||
font-size: .8rem
|
||||
|
||||
.badge:after
|
||||
content: ''
|
||||
position: absolute
|
||||
top: -5px
|
||||
right: -5px
|
||||
font-size: .7em
|
||||
background: #8cff96b4
|
||||
color: white
|
||||
width: 18px
|
||||
height: 18px
|
||||
text-align: center
|
||||
line-height: 18px
|
||||
border-radius: 50%
|
||||
content: ''
|
||||
position: absolute
|
||||
top: -5px
|
||||
right: -5px
|
||||
font-size: .7em
|
||||
background: #8cff96b4
|
||||
color: white
|
||||
width: 18px
|
||||
height: 18px
|
||||
text-align: center
|
||||
line-height: 18px
|
||||
border-radius: 50%
|
||||
// box-shadow: 0 0 1px #333
|
||||
animation: pulse 4s linear infinite alternate
|
||||
animation: pulse 4s linear infinite alternate
|
||||
|
||||
@keyframes pulse
|
||||
0%
|
||||
|
@ -57,3 +55,27 @@
|
|||
|
||||
100%
|
||||
background-color: #222
|
||||
|
||||
.np_mobile
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
width: 100%
|
||||
text-align: center
|
||||
background: $background-dark-lanyard
|
||||
color: $text-dark-lanyard
|
||||
&[data-theme="light"]
|
||||
background: $background-light-lanyard
|
||||
color: $text-light-lanyard
|
||||
|
||||
.np_icon
|
||||
align-content: center
|
||||
translate: trans
|
||||
transform-origin: center center
|
||||
animation: load 5s infinite cubic-bezier(0.81,-0.73, 0.32, 1.28)
|
||||
|
||||
@keyframes load
|
||||
0%
|
||||
rotate: 0deg
|
||||
100%
|
||||
rotate: 360deg
|
||||
|
|
15
utils/shared/hooks/useWindowSize.ts
Normal file
15
utils/shared/hooks/useWindowSize.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { useLayoutEffect, useState } from "react";
|
||||
|
||||
const useWindowSize = () => {
|
||||
const [windowSize, setWindowSize] = useState({ width: 0, height: 0 })
|
||||
const handleSize = () => setWindowSize({ width: window.innerWidth, height: window.innerHeight })
|
||||
useLayoutEffect(() => {
|
||||
handleSize()
|
||||
window.addEventListener("resize", handleSize);
|
||||
return () => window.removeEventListener("resize", handleSize);
|
||||
}, [])
|
||||
return windowSize
|
||||
}
|
||||
|
||||
|
||||
export default useWindowSize
|
Loading…
Add table
Reference in a new issue