| 
					
				 | 
			
			
				@@ -1,17 +1,27 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 'use client' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import useSWR from 'swr' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import React, { type FC } from 'react' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useTranslation } from 'react-i18next' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useContext } from 'use-context-selector' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { usePathname } from 'next/navigation' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Panel from '@/app/components/app/configuration/base/feature-panel' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { Speaker } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ConfigContext from '@/context/debug-configuration' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { languages } from '@/utils/language' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { fetchAppVoices } from '@/service/apps' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const TextToSpeech: FC = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { t } = useTranslation() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     textToSpeechConfig, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } = useContext(ConfigContext) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const pathname = usePathname() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const matched = pathname.match(/\/app\/([^/]+)/) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const appId = (matched?.length && matched[1]) ? matched[1] : '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const language = textToSpeechConfig.language 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const voiceItems = useSWR({ appId, language }, fetchAppVoices).data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const voiceItem = voiceItems?.find(item => item.value === textToSpeechConfig.voice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <Panel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       title={ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,7 +32,7 @@ const TextToSpeech: FC = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       headerIcon={<Speaker className='w-4 h-4 text-[#7839EE]' />} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       headerRight={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <div className='text-xs text-gray-500'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          {languages.find(i => i.value === textToSpeechConfig.language)?.name} {textToSpeechConfig.voice} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          {languages.find(i => i.value === textToSpeechConfig.language)?.name} - {voiceItem?.name ?? t('appDebug.voice.defaultDisplay')} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       noBodySpacing 
			 |