From b39828bb0272e73609cb8960353c5587afbac89b Mon Sep 17 00:00:00 2001 From: myl7 Date: Wed, 1 Jun 2022 19:26:04 +0800 Subject: [PATCH] refactor state management and misc things of custom video sub menu --- components/CustomVideoSubMenu.tsx | 91 +++++++++++++++++++------------ 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/components/CustomVideoSubMenu.tsx b/components/CustomVideoSubMenu.tsx index 57ab7d2af4..7f3e87d19e 100644 --- a/components/CustomVideoSubMenu.tsx +++ b/components/CustomVideoSubMenu.tsx @@ -3,35 +3,53 @@ import { useTranslation } from 'next-i18next' import { Dialog, Transition } from '@headlessui/react' import { DownloadButton } from './DownloadBtnGtoup' -function TrackContainer({ track, title }: { track: Plyr.Track; title: string }) { +function TrackContainer({ + track, + index, + setTracks, + title, +}: { + track: Plyr.Track + index: number + setTracks: Dispatch> + title: string +}) { const { t } = useTranslation() + const setTrack = (value: Plyr.Track) => + setTracks(tracks => { + tracks[index] = value + return [...tracks] + }) return ( - <> -
- {/*
*/} -

{title}

+
+

{title}

+
+

{t('Subtitle label')}

+ + setTrack({ + ...track, + label: value.target.value, + }) + } + />
-

{t('Subtitle label')}

+

{t('Subtitle source')}

{ - track.label = value.target.value - }} + defaultValue={track.src} + onChange={value => + setTrack({ + ...track, + src: value.target.value, + }) + } /> -
-

{t('Subtitle source')}

- { - track.src = value.target.value - }} - /> -
- +
) } @@ -50,18 +68,17 @@ export default function CustomVideoSubMenu({ const closeMenu = () => setMenuOpen(false) - const [modedTracks, setModedTracks] = useState(JSON.parse(JSON.stringify(tracks))) + const initTracks = () => JSON.parse(JSON.stringify(tracks)) + const [pendingTracks, setPendingTracks] = useState(initTracks()) useEffect(() => { - if (menuOpen) setModedTracks(JSON.parse(JSON.stringify(tracks))) + if (menuOpen) { + setPendingTracks(initTracks()) + } }, [tracks, menuOpen]) return ( - +
- {t('Customise subtitle tracks of the media player.')}{' '} + {t('Customise subtitle tracks of the media player.')}
- {modedTracks.map((track, index) => ( - + {pendingTracks.map((track, index) => ( + ))}
{ - setModedTracks([ - ...modedTracks, + setPendingTracks([ + ...pendingTracks, { label: '', src: '', @@ -120,7 +143,7 @@ export default function CustomVideoSubMenu({ /> { - setTracks(modedTracks) + setTracks(pendingTracks) closeMenu() }} btnColor="blue"