ev-product-card
Version:
Prueba de despliegue de componentes en NPM
205 lines (184 loc) • 6.97 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var React__default = _interopDefault(React);
var useProduct = _ref => {
var {
onChange,
product,
value = 0,
initialValues
} = _ref;
var [counter, setCounter] = React.useState((initialValues == null ? void 0 : initialValues.count) || value);
var isControlled = React.useRef(!!onChange);
var isMounted = React.useRef(false);
var increaseBy = value => {
if (isControlled.current) return onChange({
quantity: value,
product
});
var newValue = Math.min(Math.max(counter + value, 0), (initialValues == null ? void 0 : initialValues.maxCount) || Infinity);
setCounter(newValue);
onChange == null ? void 0 : onChange({
product,
quantity: newValue
});
};
var reset = () => {
setCounter((initialValues == null ? void 0 : initialValues.count) || value);
};
React.useEffect(() => {
if (!isMounted.current) return;
setCounter(value);
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, [value]);
return {
counter,
isMaxCountReached: !!(initialValues != null && initialValues.count) && initialValues.maxCount === counter,
increaseBy,
reset
};
};
function styleInject(css, ref) {
if ( ref === void 0 ) ref = {};
var insertAt = ref.insertAt;
if (!css || typeof document === 'undefined') { return; }
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
if (insertAt === 'top') {
if (head.firstChild) {
head.insertBefore(style, head.firstChild);
} else {
head.appendChild(style);
}
} else {
head.appendChild(style);
}
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
}
var css_248z = "\n\n.styles-module_productCard__oaIVo {\n background-color: #1E2025;\n border-radius: 15px;\n box-shadow: 0px 2px 10px rgba(0,0,0,0.15);\n color: white;\n padding-bottom: 5px;\n font-family: Arial, Helvetica, sans-serif;\n width: 250px;\n margin-right: 5px;\n margin-top: 5px;\n}\n\n.styles-module_productImg__vPsTp {\n border-radius: 15px 15px 0px 0px;\n width: 100%;\n}\n\n.styles-module_productDescription__Ariub {\n margin: 10px;\n}\n\n.styles-module_buttonsContainer__ghCDF {\n margin: 10px;\n display: flex;\n flex-direction: row;\n}\n\n.styles-module_buttonMinus__BTgTf {\n cursor: pointer;\n background-color: transparent;\n border: 1px solid white;\n border-radius: 5px 0px 0px 5px;\n color: white;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonMinus__BTgTf:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.styles-module_countLabel__S6HZ- {\n border-bottom: 1px solid white;\n border-top: 1px solid white;\n color: white;\n font-size: 16px;\n height: 25px;\n padding-top: 5px;\n text-align: center;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6 {\n cursor: pointer;\n background-color: transparent;\n border: 1px solid white;\n border-radius: 0px 5px 5px 0px;\n color: white;\n font-size: 20px;\n width: 30px;\n}\n\n.styles-module_buttonAdd__s8wd6:hover {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n\n.styles-module_disabled__k5aZm {\n border-color: grey !important;\n border-left: 1px solid white !important;\n color: grey !important;\n}";
var styles = {"productCard":"styles-module_productCard__oaIVo","productImg":"styles-module_productImg__vPsTp","productDescription":"styles-module_productDescription__Ariub","buttonsContainer":"styles-module_buttonsContainer__ghCDF","buttonMinus":"styles-module_buttonMinus__BTgTf","countLabel":"styles-module_countLabel__S6HZ-","buttonAdd":"styles-module_buttonAdd__s8wd6","disabled":"styles-module_disabled__k5aZm"};
styleInject(css_248z);
var ProductContext = /*#__PURE__*/React.createContext({});
var {
Provider
} = ProductContext;
var ProductCard = _ref => {
var {
children,
className,
initialValues,
onChange,
product,
style,
value
} = _ref;
var {
counter,
increaseBy,
isMaxCountReached,
reset
} = useProduct({
onChange,
product,
value,
initialValues
});
return React__default.createElement(Provider, {
value: {
counter,
increaseBy,
product,
maxCount: initialValues == null ? void 0 : initialValues.maxCount
}
}, React__default.createElement("div", Object.assign({
className: styles.productCard + " " + (className != null ? className : '')
}, {
style
}), children({
counter,
isMaxCountReached,
maxCount: (initialValues == null ? void 0 : initialValues.maxCount) || Infinity,
product,
increaseBy,
reset
})));
};
var ProductButtons = _ref => {
var {
className = '',
style
} = _ref;
var {
counter,
increaseBy,
maxCount = Infinity
} = React.useContext(ProductContext);
var isMaxReached = React.useCallback(() => counter >= maxCount, [counter, maxCount]);
return React__default.createElement("div", Object.assign({
className: styles.buttonsContainer + " " + className
}, {
style
}), React__default.createElement("button", {
className: styles.buttonMinus,
onClick: () => increaseBy(-1)
}, ' ', "-", ' '), React__default.createElement("div", {
className: styles.countLabel
}, " ", counter, " "), React__default.createElement("button", {
className: styles.buttonAdd + " " + (isMaxReached() ? styles.disabled : ''),
disabled: isMaxReached(),
onClick: () => increaseBy(1)
}, ' ', "+", ' '));
};
var ProductImage = _ref => {
var {
className = '',
img,
style
} = _ref;
var {
product
} = React.useContext(ProductContext);
var imgToShow = img != null ? img : product.img = '';
return React__default.createElement("img", Object.assign({
className: styles.productImg + " " + className,
src: imgToShow,
alt: "Coffee Mug"
}, {
style
}));
};
var ProductTitle = _ref => {
var {
title,
className = '',
style
} = _ref;
var {
product
} = React.useContext(ProductContext);
return React__default.createElement("span", Object.assign({
className: styles.productDescription + " " + className
}, {
style
}), title != null ? title : product.title);
};
var ProductCard$1 = /*#__PURE__*/Object.assign(ProductCard, {
Title: ProductTitle,
Image: ProductImage,
Buttons: ProductButtons
});
exports.ProductButtons = ProductButtons;
exports.ProductCard = ProductCard$1;
exports.ProductImage = ProductImage;
exports.ProductTitle = ProductTitle;
//# sourceMappingURL=ev-product-card.cjs.development.js.map