import React, { Component } from 'react';
import TrackPlayer from 'react-native-track-player';
import styled from 'styled-components/native';
import { Text } from 'react-native';
import Slider from '@react-native-community/slider';
const NumberBar = styled.View`
flex-direction: row;
justify-content: space-between;
width: 100%;
padding: 20px 0;
`;
function getSeconds(seconds: number): string {
return Math.floor(seconds % 60).toString().padStart(2, '0');
}
function getMinutes(seconds: number): number {
return Math.floor(seconds / 60);
}
interface State {
position: number;
duration: number;
gesture?: number;
}
export default class ProgressBar extends Component<{}, State> {
state: State = {
position: 0,
duration: 0,
}
timer: number = 0;
componentDidMount() {
this.timer = setInterval(this.updateProgress, 500);
}
componentWillUnmount() {
clearInterval(this.timer);
}
updateProgress = async () => {
const [position, duration] = await Promise.all([
TrackPlayer.getPosition(),
TrackPlayer.getDuration(),
]);
this.setState({ position, duration });
}
handleGesture = async (gesture: number) => {
// Set relative translation in state
this.setState({ gesture });
}
handleEndOfGesture = (position: number) => {
// Calculate and set the new position
TrackPlayer.seekTo(position);
this.setState({ gesture: undefined, position });
}
render() {
const { position, duration, gesture } = this.state;
return (
<>
{getMinutes(gesture || position)}:{getSeconds(gesture || position)}
{getMinutes(duration)}:{getSeconds(duration)}
>
);
}
}