UNPKG

as-product-card

Version:
53 lines (52 loc) 1.96 kB
import { useEffect, useRef, useState } from 'react'; import { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces'; interface useProductArgs { product:Product, onChange?:(args:onChangeArgs) =>void, value?:number, initialValues?:InitialValues } const setMaxArticles = (maxCount:number, counterArticle:number)=>{ let isMax; counterArticle >= maxCount ? isMax=true : isMax=false; return isMax; } const useProduct = ({onChange,product,value = 0, initialValues}: useProductArgs) =>{ const [counterArticle, setCouterArticle] = useState<number>(initialValues?.count || value); const isMounted = useRef(false); let currentCounterArticle = 0; const increaseBy = (evt:any)=>{ if ((counterArticle <= 1) && evt.target.name === "button-subtract") return setCouterArticle(0); if (evt.target.name === "button-subtract") { currentCounterArticle = counterArticle - parseInt(evt.target.value); setCouterArticle(currentCounterArticle); }else{ currentCounterArticle = counterArticle + parseInt(evt.target.value); const maxArticle = initialValues?.maxCount || 0; const isSetMaxArticle = setMaxArticles(maxArticle, currentCounterArticle); maxArticle !== 0 ? isSetMaxArticle ? setCouterArticle(maxArticle) : setCouterArticle(currentCounterArticle) : setCouterArticle(currentCounterArticle) } onChange && onChange({count:currentCounterArticle,product}); } const reset =()=>{ setCouterArticle(initialValues?.count || value); } useEffect(()=>{ if (!isMounted.current) return; setCouterArticle(value); },[value]); useEffect(()=>{ isMounted.current = true; },[]); return{ counterArticle, isMaxCountReached:setMaxArticles(initialValues?.maxCount || 0,counterArticle), maxCount:initialValues?.maxCount, increaseBy, reset } } export default useProduct;