/
GEOSHEV
/
Admin-Panel.Course-project
Обзор
Документация
Войти
/
GEOSHEV
/
Admin-Panel.Course-project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/app/_components/hooks/useVolumeControl.tsx
69 строк
2 KB
Gosha
add main menu for admin
05 май 2025, 18:36
05 май 2025, 18:36
70c62d1
Код
Авторство
О чём код?
"use client"; import { useEffect, useState } from "react"; import { useReservoirs } from "~/app/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, }; };