as-product-card
Version:
This is a package of test to release in NPM
53 lines (52 loc) • 1.96 kB
text/typescript
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;