import { Combobox } from '@headlessui/react' import { LanguageIcon } from '@heroicons/react/20/solid' import { CheckIcon, ChevronUpDownIcon } from '@heroicons/react/24/outline' import { useEffect, useState } from 'react' import { useProject } from '../../context/Project/provider' import classNames from '../../utils/classNames' import getSupportedLanguages from '../../utils/getSupportedLanguages' import { ipc } from '../../wailsjs/wailsjs/go/models' type forAreaType = { shouldUpdateArea?: true, shouldUpdateDocument?: never } type forDocumentType = { shouldUpdateDocument?: true, shouldUpdateArea?: never } type Props = (forAreaType | forDocumentType) & { defaultLanguage?: ipc.Language } const LanguageSelect = (props?: Props) => { const { requestUpdateDocument, getSelectedDocument } = useProject() const [languages, setLanguages] = useState([]) const [query, setQuery] = useState('') const [selectedLanguage, setSelectedLanguage] = useState(props?.defaultLanguage) const filteredLanguages = query === '' ? languages : languages.filter(l => { return l.displayName.toLowerCase().includes(query.toLowerCase()) }) useEffect(() => { if (languages.length === 0) { getSupportedLanguages().then(response => { setLanguages(response) }) } }) useEffect(() => { if (props?.shouldUpdateDocument && selectedLanguage?.displayName) { const currentDocument = { ...getSelectedDocument() } currentDocument.defaultLanguage = selectedLanguage requestUpdateDocument(currentDocument) } }, [selectedLanguage]) return
setQuery(event.target.value)} displayValue={(language: ipc.Language) => language?.displayName} placeholder='Document Language' /> {filteredLanguages.length > 0 && ( {filteredLanguages.map((l) => ( classNames( 'relative cursor-default select-none py-2 pl-3 pr-9', active ? 'bg-indigo-600 text-white' : 'text-gray-900' )}> {({ active, selected }) => <> {l.displayName} {selected && ( )} } ))} )}
} export default LanguageSelect