import {IoIosArrowUp} from 'react-icons/all' import {useCallback} from 'react' import {useAppDispatch, useAppSelector} from '../hooks/redux' import {find, remove} from 'lodash-es' import {setCurFetched, setCurInfo, setData, setInfos, setUploadedTranscript} from '../redux/envReducer' import MoreBtn from './MoreBtn' import classNames from 'classnames' import {parseTranscript} from '../utils/bizUtil' const Header = (props: { foldCallback: () => void }) => { const {foldCallback} = props const dispatch = useAppDispatch() const infos = useAppSelector(state => state.env.infos) const curInfo = useAppSelector(state => state.env.curInfo) const fold = useAppSelector(state => state.env.fold) const uploadedTranscript = useAppSelector(state => state.env.uploadedTranscript) const envData = useAppSelector(state => state.env.envData) const upload = useCallback(() => { const input = document.createElement('input') input.type = 'file' input.accept = '.vtt,.srt' input.onchange = (e: any) => { const file = e.target.files[0] const reader = new FileReader() reader.onload = (e) => { const text = e.target?.result if (text) { const infos_ = [...(infos??[])] // const blob = new Blob([text], {type: 'text/plain'}) // const url = URL.createObjectURL(blob) // remove old if exist remove(infos_, {id: 'uploaded'}) // add new const tarInfo = {id: 'uploaded', subtitle_url: 'uploaded', lan_doc: '上传的字幕'} infos_.push(tarInfo) // set const transcript = parseTranscript(file.name, text) dispatch(setInfos(infos_)) dispatch(setCurInfo(tarInfo)) dispatch(setCurFetched(true)) dispatch(setUploadedTranscript(transcript)) dispatch(setData(transcript)) } } reader.readAsText(file) } input.click() }, [dispatch, infos]) const selectCallback = useCallback((e: any) => { if (e.target.value === 'upload') { upload() return } const tarInfo = find(infos, {subtitle_url: e.target.value}) if (curInfo?.id !== tarInfo?.id) { dispatch(setCurInfo(tarInfo)) if (tarInfo && tarInfo.subtitle_url === 'uploaded') { dispatch(setCurFetched(true)) dispatch(setData(uploadedTranscript)) } else { dispatch(setCurFetched(false)) } } }, [curInfo?.id, dispatch, infos, upload, uploadedTranscript]) const preventCallback = useCallback((e: any) => { e.stopPropagation() }, []) const onUpload = useCallback((e: any) => { e.stopPropagation() upload() }, [upload]) return