'use client' import React, { useEffect, useState } from 'react' 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 { useStage } from '../context/provider' import ToolToggleButton from './ToolToggleButton' import { useNotification } from '../../../context/Notification/provider' import processImageArea from '../../../useCases/processImageArea' const ToolingOverlay = () => { const { getSelectedDocument, selectedAreaId, requestUpdateArea, requestUpdateDocument, updateDocuments } = useProject() const { addNotificationToQueue } = useNotification() const { scale, scaleStep, maxScale, setScale, isLinkAreaContextsVisible, setIsLinkAreaContextsVisible, isAreasVisible, setIsAreasVisible, isProcessedWordsVisible, setIsProcessedWordsVisible, isTranslatedWordsVisible, setIsTranslatedWordsVisible, } = useStage() 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) { addNotificationToQueue({ message: 'Error updating area language', level: 'error' }) return } const selectedDocumentId = getSelectedDocument()?.id if (!successfullyUpdatedLanguageOnArea || !selectedDocumentId) { addNotificationToQueue({ message: 'Did not successfully update area language', level: 'warning' }) return } try { await processImageArea(selectedDocumentId, selectedArea.id) await updateDocuments() addNotificationToQueue({ message: 'Finished processing area', level: 'info' }) } catch (err) { addNotificationToQueue({ 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() } {/* */}
{ setScale(e.currentTarget.valueAsNumber) }} />
{/* Right Buttons */}
{isAreasVisible ? <> setIsLinkAreaContextsVisible(!isLinkAreaContextsVisible)} /> setIsTranslatedWordsVisible(!isTranslatedWordsVisible)} /> setIsProcessedWordsVisible(!isProcessedWordsVisible)} /> : <> } setIsAreasVisible(!isAreasVisible)} />
} export default ToolingOverlay