'use client' import React, { useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { DocumentTextIcon, LanguageIcon, LinkIcon, MagnifyingGlassMinusIcon, MagnifyingGlassPlusIcon, SquaresPlusIcon } from '@heroicons/react/24/outline' import { useProject } from '../../../context/Project/provider' import { entities } from '../../../wailsjs/wailsjs/go/models' import LanguageSelect from '../../utils/LanguageSelect' import ToolToggleButton from './ToolToggleButton' import processImageArea from '../../../useCases/processImageArea' import { pushNotification } from '../../../redux/features/notifications/notificationQueueSlice' import { RootState } from '../../../redux/store' import { maxScale, scaleStep, setAreAreasVisible, setAreLinkAreaContextsVisible, setAreProcessedWordsVisible, setAreTranslatedWordsVisible, setScale } from '../../../redux/features/stage/stageSlice' const ToolingOverlay = () => { const dispatch = useDispatch() const { scale, areAreasVisible, areLinkAreaContextsVisible, areProcessedWordsVisible, areTranslatedWordsVisible, } = useSelector((state: RootState) => state.stage) const { getSelectedDocument, selectedAreaId, requestUpdateArea, requestUpdateDocument, updateDocuments } = useProject() const selectedDocument = getSelectedDocument() const [selectedArea, setSelectedArea] = useState() useEffect(() => { setSelectedArea(selectedDocument?.areas.find(a => a.id == selectedAreaId)) }, [selectedAreaId, selectedDocument, selectedArea]) const handleAreaProcessLanguageSelect = async (selectedLanguage: entities.Language) => { if (!selectedArea) return let successfullyUpdatedLanguageOnArea = false try { successfullyUpdatedLanguageOnArea = await requestUpdateArea({ ...selectedArea, ...{ language: selectedLanguage } }) } catch (err) { dispatch(pushNotification({ message: 'Error updating area language', level: 'error' })) return } const selectedDocumentId = getSelectedDocument()?.id if (!successfullyUpdatedLanguageOnArea || !selectedDocumentId) { dispatch(pushNotification({ message: 'Did not successfully update area language', level: 'warning' })) return } try { await processImageArea(selectedDocumentId, selectedArea.id) await updateDocuments() dispatch(pushNotification({ message: 'Finished processing area', level: 'info' })) } catch (err) { dispatch(pushNotification({ message: 'Error processing area', level: 'error' })) } } const handleDocumentProcessLanguageSelect = async (selectedLanguage: entities.Language) => { if (!selectedDocument) return const currentDocument = selectedDocument currentDocument.defaultLanguage = selectedLanguage await requestUpdateDocument(currentDocument) await updateDocuments() } const renderLanguageSelect = () => { const defaultLanguage = selectedArea?.language.displayName ? selectedArea?.language : selectedDocument?.defaultLanguage const onSelect = selectedArea ? handleAreaProcessLanguageSelect : handleDocumentProcessLanguageSelect return } return <> {/* Top buttons */}

{selectedArea?.name ? `${selectedDocument?.name} / ${selectedArea?.name}` : selectedDocument?.name }

{ renderLanguageSelect() } {/* */}
{ dispatch(setScale(e.currentTarget.valueAsNumber)) }} />
{/* Right Buttons */}
{areAreasVisible ? <> dispatch(setAreLinkAreaContextsVisible(!areLinkAreaContextsVisible))} /> dispatch(setAreTranslatedWordsVisible(!areTranslatedWordsVisible))} /> dispatch(setAreProcessedWordsVisible(!areProcessedWordsVisible))} /> : <> } dispatch(setAreAreasVisible(!areAreasVisible))} />
} export default ToolingOverlay