Files
jellyfin-audio-player/src/screens/modals/TrackPopupMenu.tsx

60 lines
2.0 KiB
TypeScript
Raw Normal View History

import React, { useCallback } from 'react';
import Modal from 'components/Modal';
import { Text, Button } from 'react-native';
import { useNavigation, StackActions, useRoute, RouteProp } from '@react-navigation/native';
import { ModalStackParams } from 'screens/types';
import { useTypedSelector } from 'store';
import { THEME_COLOR } from 'CONSTANTS';
import { SubHeader } from 'components/Typography';
import styled from 'styled-components/native';
import usePlayTrack from 'utility/usePlayTrack';
2020-11-02 22:50:00 +01:00
import { t } from '@localisation';
type Route = RouteProp<ModalStackParams, 'TrackPopupMenu'>;
const Container = styled.View`
padding: 20px;
`;
const Buttons = styled.View`
margin-top: 20px;
flex-direction: row;
justify-content: space-around;
`;
function TrackPopupMenu() {
// Retrieve helpers
const { params: { trackId } } = useRoute<Route>();
const navigation = useNavigation();
const track = useTypedSelector((state) => state.music.tracks.entities[trackId]);
const playTrack = usePlayTrack();
// Set callback to close the modal
const closeModal = useCallback(() => {
navigation.dispatch(StackActions.popToTop());
}, [navigation]);
const handlePlayNext = useCallback(() => {
playTrack(trackId, false, false);
closeModal();
}, [playTrack, closeModal, trackId]);
const handleAddToQueue = useCallback(() => {
playTrack(trackId, false, true);
closeModal();
}, [playTrack, closeModal, trackId]);
return (
<Modal fullSize={false}>
<Container>
<SubHeader>{track?.Name}</SubHeader>
<Text>{track?.Album} - {track?.AlbumArtist}</Text>
<Buttons>
2020-11-02 22:50:00 +01:00
<Button title={t('play-next')} color={THEME_COLOR} onPress={handlePlayNext} />
<Button title={t('add-to-queue')} color={THEME_COLOR} onPress={handleAddToQueue} />
</Buttons>
</Container>
</Modal>
);
}
export default TrackPopupMenu;