/
GEOSHEV
/
StudLab
Обзор
Документация
Войти
/
GEOSHEV
/
StudLab
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/components/hooks/useVolumeControl.tsx
68 строк
2 KB
George
Обновил: Линтер по всем файлам
21 мар 2025, 14:25
21 мар 2025, 14:25
2b503d4
Код
Авторство
О чём код?
import { useState, useEffect } from 'react'; import { useReservoirs } from '../../context/useReservoirs'; export const useVolumeControl = () => { const { selectedReservoir, updateReservoir } = useReservoirs(); const [isEditingVolume, setIsEditingVolume] = useState(false); const [isPercentageMode, setIsPercentageMode] = useState(false); const [tempVolume, setTempVolume] = useState(0); const maxCapacity = selectedReservoir?.capacity || 1; useEffect(() => { if (selectedReservoir) { setTempVolume(selectedReservoir.volume); } }, [selectedReservoir]); const handleModeChange = (isPercent: boolean) => { setIsPercentageMode(isPercent); if (selectedReservoir) { setTempVolume( isPercent ? (selectedReservoir.volume / maxCapacity) * 100 : selectedReservoir.volume, ); } }; const handleVolumeChange = (value: number) => { if (!isNaN(value)) { setTempVolume(value); } }; const handleConfirmVolume = async () => { if (selectedReservoir) { const updatedVolume = isPercentageMode ? (tempVolume / 100) * maxCapacity : tempVolume; updateReservoir(selectedReservoir.id, { ...selectedReservoir, volume: updatedVolume, }); } setIsEditingVolume(false); }; const handleCancelEdit = () => { if (selectedReservoir) { setTempVolume( isPercentageMode ? (selectedReservoir.volume / maxCapacity) * 100 : selectedReservoir.volume, ); } setIsEditingVolume(false); }; return { isEditingVolume, isPercentageMode, tempVolume, setIsEditingVolume, handleModeChange, handleVolumeChange, handleConfirmVolume, handleCancelEdit, }; };