import { useAtomValue } from 'jotai/utils';
import React from 'react';
import { Pressable, StatusBar, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
import FastImage from 'react-native-fast-image';
import TrackPlayer, { State } from 'react-native-track-player';
import { currentQueueNameAtom, currentTrackAtom, playerStateAtom } from '../state/trackplayer';
import text from '../styles/text';
import CoverArt from './common/CoverArt';
import ImageGradientBackground from './common/ImageGradientBackground';
const NowPlayingHeader = () => {
const queueName = useAtomValue(currentQueueNameAtom);
return (
{queueName || 'Nothing playing...'}
);
};
const headerStyles = StyleSheet.create({
container: {
height: 58,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
// backgroundColor: 'green',
},
icons: {
height: 22,
width: 22,
margin: 17,
},
queueName: {
...text.paragraph,
},
});
const SongCoverArt = () => {
const track = useAtomValue(currentTrackAtom);
const layout = useWindowDimensions();
const size = layout.width - layout.width / 7;
return (
}
height={size}
width={size}
coverArtUri={track?.artwork as string}
/>
);
};
const coverArtStyles = StyleSheet.create({
container: {
width: '100%',
alignItems: 'center',
marginTop: 10,
},
});
const SongInfo = () => {
const track = useAtomValue(currentTrackAtom);
return (
{track?.title}
{track?.artist}
);
};
const infoStyles = StyleSheet.create({
container: {
width: '100%',
alignItems: 'center',
marginTop: 20,
paddingHorizontal: 20,
},
title: {
...text.songListTitle,
fontSize: 22,
textAlign: 'center',
},
artist: {
...text.songListSubtitle,
fontSize: 14,
textAlign: 'center',
},
});
const PlayerControls = () => {
const state = useAtomValue(playerStateAtom);
let playPauseIcon: number;
let playPauseStyle: any;
let playPauseAction: () => void;
switch (state) {
case State.Playing:
case State.Buffering:
case State.Connecting:
playPauseIcon = require('../../res/pause_circle-fill.png');
playPauseStyle = controlsStyles.enabled;
playPauseAction = () => TrackPlayer.pause();
break;
case State.Paused:
playPauseIcon = require('../../res/play_circle-fill.png');
playPauseStyle = controlsStyles.enabled;
playPauseAction = () => TrackPlayer.play();
break;
default:
playPauseIcon = require('../../res/play_circle-fill.png');
playPauseStyle = controlsStyles.disabled;
playPauseAction = () => {};
break;
}
return (
);
};
const controlsStyles = StyleSheet.create({
container: {
width: '100%',
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
marginTop: 40,
},
skip: {
height: 40,
width: 40,
marginHorizontal: 18,
},
play: {
height: 90,
width: 90,
},
enabled: {
opacity: 1,
},
disabled: {
opacity: 0.35,
},
});
const NowPlayingLayout = () => {
const track = useAtomValue(currentTrackAtom);
return (
);
};
export default NowPlayingLayout;