mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-24 20:36:40 +07:00
moved Audio to useRef
This commit is contained in:
parent
367ba0cc4d
commit
de999a0f1f
2 changed files with 21 additions and 11 deletions
|
@ -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(
|
||||||
|
(time: number) => {
|
||||||
audio.currentTime = time;
|
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 =
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue