| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | 
							- 'use client'
 
- import { useState } from 'react'
 
- import { t } from 'i18next'
 
- import { useParams, usePathname } from 'next/navigation'
 
- import s from './style.module.css'
 
- import Tooltip from '@/app/components/base/tooltip'
 
- import Loading from '@/app/components/base/loading'
 
- import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager'
 
- 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<AudioState>('initial')
 
-   const params = useParams()
 
-   const pathname = usePathname()
 
-   const audio_finished_call = (event: string): any => {
 
-     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('appApi.play'),
 
-     ended: t('appApi.play'),
 
-     paused: t('appApi.pause'),
 
-     playing: t('appApi.playing'),
 
-     loading: t('appApi.loading'),
 
-   }[audioState]
 
-   return (
 
-     <div className={`inline-flex items-center justify-center ${(audioState === 'loading' || audioState === 'playing') ? 'mr-1' : className}`}>
 
-       <Tooltip
 
-         popupContent={tooltipContent}
 
-       >
 
-         <button
 
-           disabled={audioState === 'loading'}
 
-           className={`box-border w-6 h-6 flex items-center justify-center cursor-pointer ${isAudition ? 'p-0.5' : 'p-0 rounded-md bg-white'}`}
 
-           onClick={handleToggle}
 
-         >
 
-           {audioState === 'loading'
 
-             ? (
 
-               <div className='w-full h-full rounded-md flex items-center justify-center'>
 
-                 <Loading />
 
-               </div>
 
-             )
 
-             : (
 
-               <div className={`w-full h-full rounded-md flex items-center justify-center ${!isAudition ? 'hover:bg-gray-50' : 'hover:bg-gray-50'}`}>
 
-                 <div className={`w-4 h-4 ${(audioState === 'playing') ? s.pauseIcon : s.playIcon}`}></div>
 
-               </div>
 
-             )}
 
-         </button>
 
-       </Tooltip>
 
-     </div>
 
-   )
 
- }
 
- export default AudioBtn
 
 
  |