'use client' import { t } from 'i18next' import { useState } from 'react' import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager' import Loading from '@/app/components/base/loading' import Tooltip from '@/app/components/base/tooltip' import { useParams, usePathname } from '@/next/navigation' import s from './style.module.css' type AudioBtnProps = { id?: string voice?: string value?: string className?: string isAudition?: boolean noCache?: boolean } type AudioState = 'initial' | 'loading' | 'playing' | 'paused' | 'ended' const AudioBtn = ({ id, voice, value, className, isAudition, }: AudioBtnProps) => { const [audioState, setAudioState] = useState('initial') const params = useParams() const pathname = usePathname() const audio_finished_call = (event: string): void => { switch (event) { case 'ended': setAudioState('ended') break case 'paused': setAudioState('ended') break case 'loaded': setAudioState('loading') break case 'play': setAudioState('playing') break case 'error': setAudioState('ended') break } } let url = '' let isPublic = false if (params.token) { url = '/text-to-audio' isPublic = true } else if (params.appId) { if (pathname.search('explore/installed') > -1) url = `/installed-apps/${params.appId}/text-to-audio` else url = `/apps/${params.appId}/text-to-audio` } const handleToggle = async () => { if (audioState === 'playing' || audioState === 'loading') { setTimeout(() => setAudioState('paused'), 1) AudioPlayerManager.getInstance().getAudioPlayer(url, isPublic, id, value, voice, audio_finished_call).pauseAudio() } else { setTimeout(() => setAudioState('loading'), 1) AudioPlayerManager.getInstance().getAudioPlayer(url, isPublic, id, value, voice, audio_finished_call).playAudio() } } const tooltipContent = { initial: t('play', { ns: 'appApi' }), ended: t('play', { ns: 'appApi' }), paused: t('pause', { ns: 'appApi' }), playing: t('playing', { ns: 'appApi' }), loading: t('loading', { ns: 'appApi' }), }[audioState] return (
) } export default AudioBtn