import React, { useEffect, useRef, useState } from 'react'; import './AudioAttachment.scss'; import { FileEntity } from '../../../../../../Domain/entity/FileEntity'; import ImagePlay from '../../../../../components/UI/svgs/Icons/Toggle/ImagePlay'; import Pause from '../../../../../components/UI/svgs/Icons/Toggle/Pause'; type AudioAttachmentComponentProps = { audioFile: FileEntity; }; // eslint-disable-next-line react/function-component-definition const AudioAttachment = ({ // eslint-disable-next-line @typescript-eslint/no-unused-vars audioFile, }: AudioAttachmentComponentProps) => { const [isPlaying, setIsPlaying] = useState(false); const audioRef = useRef(null); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [secondsElapsed, setSecondsElapsed] = useState(0); const handleAudioEnd = () => { setIsPlaying(false); }; // eslint-disable-next-line consistent-return useEffect(() => { const audio = audioRef.current; if (audio) { audio.addEventListener('ended', handleAudioEnd); return () => { audio.removeEventListener('ended', handleAudioEnd); }; } }, []); useEffect(() => { let intervalId: NodeJS.Timeout; if (isPlaying) { intervalId = setInterval(() => { setSecondsElapsed((prevSeconds) => prevSeconds + 1); }, 100); } return () => { clearInterval(intervalId); }; }, [isPlaying]); const playPauseHandler = () => { const audio = audioRef.current as HTMLAudioElement; if (audio) { if (isPlaying) { // eslint-disable-next-line @typescript-eslint/no-unsafe-call audio.pause(); } else { // eslint-disable-next-line @typescript-eslint/no-unsafe-call audio.play(); } setIsPlaying(!isPlaying); } else { console.error('Audio element not found'); } }; const generateUniqueNumbers = ( inputString: string, count: number, ): number[] => { const uniqueNumbers: number[] = []; for (let i = 0; i < count; i += 1) { uniqueNumbers.push(Math.abs((inputString.charCodeAt(i) % 11) + 2)); } return uniqueNumbers; }; const renderEqualizer = (uid: string) => { const divElements: JSX.Element[] = []; const nums = generateUniqueNumbers(uid, 30); for (let i = 0; i < 30; i += 1) { const divStyle = { height: `${nums[i]}px`, }; divElements.push(
, ); } return divElements; }; const renderRandomEqualizer = () => { const divElements: JSX.Element[] = []; for (let i = 0; i < 30; i += 1) { const randomHeight = Math.floor(Math.random() * 12) + 1; const divStyle = { height: `${randomHeight}px`, }; divElements.push(
, ); } return divElements; }; return (
{/* eslint-disable-next-line react/button-has-type */} {isPlaying ? ( ) : ( )}
{isPlaying ? (
{renderRandomEqualizer()}
) : (
{renderEqualizer(audioFile.uid)}
)}
); }; export default AudioAttachment;