/
pasha.json
/
react_pro_final_project_base
Обзор
Документация
Войти
/
pasha.json
/
react_pro_final_project_base
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
finalTask
src/features/cart/model/hooks/useCount.ts
36 строк
1 KB
Pavel Nikolaev
tasks 1-5
19 ноя 2025, 17:07
19 ноя 2025, 17:07
804edd8
Код
Авторство
О чём код?
import { ChangeEvent } from 'react'; import { cartActions, cartSelectors } from '../../../../shared/store/slices/cart'; import { useDispatch } from 'react-redux'; import { useAppSelector } from '../../../../shared/store/utils'; const MIN_COUNT = 1; const MAX_COUNT = 99; export const useCount = (productId: string) => { const dispatch = useDispatch(); const products = useAppSelector(cartSelectors.getCartProducts); const product = products.find((p) => p.id === productId) as CartProduct; const { id, count, stock } = product; const handleIncrement = () => { const newCount = count + 1; const validCount = newCount > MAX_COUNT ? MAX_COUNT : newCount; dispatch(cartActions.setCartProductCount({ id, count: validCount })); }; const handleDecrement = () => { const newCount = count - 1; const validCount = newCount < MIN_COUNT ? MIN_COUNT : newCount; dispatch(cartActions.setCartProductCount({ id, count: validCount })); }; const handleSetCount = (e: ChangeEvent<HTMLInputElement>) => { const newCount = +e.target.value; const validCount = newCount > MAX_COUNT ? MAX_COUNT : newCount < MIN_COUNT ? MIN_COUNT : newCount; dispatch(cartActions.setCartProductCount({ id, count: validCount })); }; return { count, stock, handleSetCount, handleIncrement, handleDecrement }; };