import { useRef } from 'react'; import { DecryptedAudioFile, deleteFile, ProcessState } from './fileListingSlice'; import { useAppDispatch } from '~/hooks'; import { AnimationDefinition } from 'framer-motion'; import { FileError } from './FileError'; import classNames from 'classnames'; interface FileRowProps { id: string; file: DecryptedAudioFile; } export function FileRow({ id, file }: FileRowProps) { // const { isOpen, onClose } = useDisclosure({ defaultIsOpen: true }); const dispatch = useAppDispatch(); const isDecrypted = file.state === ProcessState.COMPLETE; const metadata = file.metadata; const nameWithoutExt = file.fileName.replace(/\.[a-z\d]{3,6}$/, ''); const decryptedName = nameWithoutExt + '.' + file.ext; const audioPlayerRef = useRef(null); const _onCollapseAnimationComplete = (definition: AnimationDefinition) => { if (definition === 'exit') { dispatch(deleteFile({ id })); } }; return (

{metadata?.name ?? nameWithoutExt}

{file.state === ProcessState.ERROR && } {isDecrypted && (
下载
); }