ma-product-card-lop
Version:
Este es un ejemplo de despliegue de NPM.
54 lines (41 loc) • 1.28 kB
text/typescript
import { useEffect, useState, useRef } from 'react';
import { Product, onChangeArgs, InitialValues } from '../interfaces/interfaces';
interface useProductArgs {
product: Product;
onChange?: (args: onChangeArgs) => void;
value?: number;
initialValue?: InitialValues
}
export const useProduct = ({ onChange, product, value = 0, initialValue }: useProductArgs) => {
const [counter, setCounter] = useState<number>(initialValue?.count || value);
const isMounted = useRef(false);
const increaseBy = (value: number) => {
let newValueCount = Math.max(counter + value, 0);
if(initialValue?.maxCount){
newValueCount = Math.min(newValueCount, initialValue.maxCount);
}
setCounter(newValueCount);
/**
* la sintaxis: onChange && onChange();
* es equivalente a if(onchange) { onchange(); }
*/
onChange && onChange({
count: newValueCount,
product
});
}
const reset = () => {
setCounter(initialValue?.count || value)
}
useEffect(() => {
if(!isMounted.current) return;
setCounter(value);
}, [value]);
return {
counter,
isMaxCountReached: !!initialValue?.count && initialValue.maxCount === counter,
maxCount: initialValue?.maxCount,
increaseBy,
reset,
}
}