1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 12:26:40 +07:00

moved Audio to useRef

This commit is contained in:
Fedor Katurov 2022-01-13 10:39:37 +07:00
parent 367ba0cc4d
commit de999a0f1f
2 changed files with 21 additions and 11 deletions

View file

@ -1,4 +1,12 @@
import React, { createContext, FC, useCallback, useContext, useEffect, useState } from 'react'; import React, {
createContext,
FC,
useCallback,
useContext,
useEffect,
useRef,
useState,
} from 'react';
import { IFile } from '~/types'; import { IFile } from '~/types';
import { getURL } from '~/utils/dom'; import { getURL } from '~/utils/dom';
import { path } from 'ramda'; import { path } from 'ramda';
@ -33,9 +41,8 @@ const PlayerContext = createContext<AudioPlayerProps>({
toPercent: () => {}, toPercent: () => {},
}); });
const audio = new Audio();
export const AudioPlayerProvider: FC = ({ children }) => { export const AudioPlayerProvider: FC = ({ children }) => {
const audio = useRef(new Audio()).current;
const [status, setStatus] = useState(PlayerState.UNSET); const [status, setStatus] = useState(PlayerState.UNSET);
const [file, setFile] = useState<IFile | undefined>(); const [file, setFile] = useState<IFile | undefined>();
const [progress, setProgress] = useState<PlayerProgress>({ progress: 0, current: 0, total: 0 }); const [progress, setProgress] = useState<PlayerProgress>({ progress: 0, current: 0, total: 0 });
@ -48,17 +55,20 @@ export const AudioPlayerProvider: FC = ({ children }) => {
audio.dispatchEvent(new CustomEvent('stop')); audio.dispatchEvent(new CustomEvent('stop'));
setFile(undefined); setFile(undefined);
setStatus(PlayerState.UNSET); setStatus(PlayerState.UNSET);
}, [setFile]); }, [audio, setFile]);
const toTime = useCallback((time: number) => { const toTime = useCallback(
audio.currentTime = time; (time: number) => {
}, []); audio.currentTime = time;
},
[audio]
);
const toPercent = useCallback( const toPercent = useCallback(
(percent: number) => { (percent: number) => {
audio.currentTime = (progress.total * percent) / 100; audio.currentTime = (progress.total * percent) / 100;
}, },
[progress] [progress, audio]
); );
/** handles progress update */ /** handles progress update */
@ -90,12 +100,12 @@ export const AudioPlayerProvider: FC = ({ children }) => {
audio.removeEventListener('pause', onPause); audio.removeEventListener('pause', onPause);
audio.removeEventListener('playing', onPlay); audio.removeEventListener('playing', onPlay);
}; };
}, []); }, [audio]);
/** update audio src */ /** update audio src */
useEffect(() => { useEffect(() => {
audio.src = file ? getURL(file) : ''; audio.src = file ? getURL(file) : '';
}, [file]); }, [file, audio]);
const metadata: IFile['metadata'] = path(['metadata'], file); const metadata: IFile['metadata'] = path(['metadata'], file);
const title = const title =

View file

@ -14,7 +14,7 @@
"strict": true, "strict": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"module": "esnext", "module": "commonjs",
"moduleResolution": "node", "moduleResolution": "node",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,