@tony_ojeda/products-pack 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/dist/index.cjs.js +125 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +120 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/types/components/ProductButtons.d.ts +5 -0
- package/dist/types/components/ProductCard.d.ts +13 -0
- package/dist/types/components/ProductImage.d.ts +6 -0
- package/dist/types/components/ProductTitle.d.ts +7 -0
- package/dist/types/components/index.d.ts +6 -0
- package/dist/types/hooks/useProduct.d.ts +15 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interfaces/interfaces.d.ts +41 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Do Products Pack
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## Example
|
|
5
|
+
|
|
6
|
+
```tsx
|
|
7
|
+
<ProductCard
|
|
8
|
+
key={product.id}
|
|
9
|
+
product={product}
|
|
10
|
+
className="bg-dark text-white"
|
|
11
|
+
initialValues={{
|
|
12
|
+
count: 6,
|
|
13
|
+
// maxCount: 10,
|
|
14
|
+
}}
|
|
15
|
+
>
|
|
16
|
+
{({ reset, count, isMaxCountReached, maxCount, increaseBy }) => (
|
|
17
|
+
<>
|
|
18
|
+
<ProductImage
|
|
19
|
+
className="custom-image"
|
|
20
|
+
style={{ boxShadow: '10px 10px 10px rgba(0,0,0,0.2)' }}
|
|
21
|
+
/>
|
|
22
|
+
<ProductTitle className="text-bold" />
|
|
23
|
+
<ProductButtons className="custom-buttons" />
|
|
24
|
+
|
|
25
|
+
<button onClick={reset}>Reset</button>
|
|
26
|
+
<button onClick={() => increaseBy(-2)}> -2 </button>
|
|
27
|
+
{!isMaxCountReached && (
|
|
28
|
+
<button onClick={() => increaseBy(+2)}> +2 </button>
|
|
29
|
+
)}
|
|
30
|
+
|
|
31
|
+
<span>
|
|
32
|
+
{count} - {maxCount}
|
|
33
|
+
</span>
|
|
34
|
+
</>
|
|
35
|
+
)}
|
|
36
|
+
</ProductCard>
|
|
37
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
const useProduct = ({ onChange, product, value = 0, initialValues }) => {
|
|
7
|
+
const [counter, setCounter] = react.useState((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
|
|
8
|
+
const isMounted = react.useRef(false);
|
|
9
|
+
const increaseBy = (value) => {
|
|
10
|
+
let newValue = Math.max(counter + value, 0);
|
|
11
|
+
if (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) {
|
|
12
|
+
newValue = Math.min(newValue, initialValues.maxCount);
|
|
13
|
+
}
|
|
14
|
+
setCounter(newValue);
|
|
15
|
+
onChange && onChange({ count: newValue, product });
|
|
16
|
+
};
|
|
17
|
+
const reset = () => {
|
|
18
|
+
setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
|
|
19
|
+
};
|
|
20
|
+
react.useEffect(() => {
|
|
21
|
+
if (!isMounted.current)
|
|
22
|
+
return;
|
|
23
|
+
setCounter(value);
|
|
24
|
+
}, [value]);
|
|
25
|
+
react.useEffect(() => {
|
|
26
|
+
isMounted.current = true;
|
|
27
|
+
}, []);
|
|
28
|
+
return {
|
|
29
|
+
counter,
|
|
30
|
+
isMaxCountReached: !!(initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) && initialValues.maxCount === counter,
|
|
31
|
+
maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
|
|
32
|
+
increaseBy,
|
|
33
|
+
reset
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function styleInject(css, ref) {
|
|
38
|
+
if ( ref === void 0 ) ref = {};
|
|
39
|
+
var insertAt = ref.insertAt;
|
|
40
|
+
|
|
41
|
+
if (typeof document === 'undefined') { return; }
|
|
42
|
+
|
|
43
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
44
|
+
var style = document.createElement('style');
|
|
45
|
+
style.type = 'text/css';
|
|
46
|
+
|
|
47
|
+
if (insertAt === 'top') {
|
|
48
|
+
if (head.firstChild) {
|
|
49
|
+
head.insertBefore(style, head.firstChild);
|
|
50
|
+
} else {
|
|
51
|
+
head.appendChild(style);
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
head.appendChild(style);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (style.styleSheet) {
|
|
58
|
+
style.styleSheet.cssText = css;
|
|
59
|
+
} else {
|
|
60
|
+
style.appendChild(document.createTextNode(css));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
var css_248z = "\n\n.styles-module_productCard__oaIVo {\n background-color: white;\n border-radius: 15px;\n color: black;\n padding-bottom: 5px;\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 black;\n border-radius: 5px 0px 0px 5px;\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 black;\n border-top: 1px solid black;\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 black;\n border-radius: 0px 5px 5px 0px;\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}";
|
|
65
|
+
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"};
|
|
66
|
+
styleInject(css_248z);
|
|
67
|
+
|
|
68
|
+
const ProductContext = react.createContext({});
|
|
69
|
+
const { Provider } = ProductContext;
|
|
70
|
+
const ProductCard$1 = ({ children, product, className, style, onChange, value, initialValues, }) => {
|
|
71
|
+
const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
|
|
72
|
+
return (jsxRuntime.jsx(Provider, { value: {
|
|
73
|
+
counter,
|
|
74
|
+
increaseBy,
|
|
75
|
+
maxCount,
|
|
76
|
+
product,
|
|
77
|
+
}, children: jsxRuntime.jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: children({
|
|
78
|
+
count: counter,
|
|
79
|
+
isMaxCountReached,
|
|
80
|
+
maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
|
|
81
|
+
product,
|
|
82
|
+
increaseBy,
|
|
83
|
+
reset,
|
|
84
|
+
}) }) }));
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const ProductButtons = ({ className, style }) => {
|
|
88
|
+
const { increaseBy, counter, maxCount } = react.useContext(ProductContext);
|
|
89
|
+
const isMaxReached = react.useCallback(() => !!maxCount && counter === maxCount, [counter, maxCount]);
|
|
90
|
+
return (jsxRuntime.jsxs("div", { className: `${styles.buttonsContainer} ${className}`, style: style, children: [jsxRuntime.jsxs("button", { className: styles.buttonMinus, onClick: () => increaseBy(-1), children: [' ', "-", ' '] }), jsxRuntime.jsxs("div", { className: styles.countLabel, children: [" ", counter, " "] }), jsxRuntime.jsxs("button", { className: `${styles.buttonAdd} ${isMaxReached() && styles.disabled} `, onClick: () => increaseBy(1), children: [' ', "+", ' '] })] }));
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
var noImage = "data:image/jpeg;base64,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";
|
|
94
|
+
|
|
95
|
+
const ProductImage = ({ img, className, style }) => {
|
|
96
|
+
const { product } = react.useContext(ProductContext);
|
|
97
|
+
let imgToShow;
|
|
98
|
+
if (img) {
|
|
99
|
+
imgToShow = img;
|
|
100
|
+
}
|
|
101
|
+
else if (product.img) {
|
|
102
|
+
imgToShow = product.img;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
imgToShow = noImage;
|
|
106
|
+
}
|
|
107
|
+
return (jsxRuntime.jsx("img", { className: `${styles.productImg} ${className}`, src: imgToShow, style: style, alt: "Product" }));
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const ProductTitle = ({ title, className, style }) => {
|
|
111
|
+
const { product } = react.useContext(ProductContext);
|
|
112
|
+
return (jsxRuntime.jsx("span", { className: `${styles.productDescription} ${className}`, style: style, children: title ? title : product.title }));
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const ProductCard = Object.assign(ProductCard$1, {
|
|
116
|
+
Title: ProductTitle,
|
|
117
|
+
Image: ProductImage,
|
|
118
|
+
Buttons: ProductButtons,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
exports.ProductButtons = ProductButtons;
|
|
122
|
+
exports.ProductCard = ProductCard;
|
|
123
|
+
exports.ProductImage = ProductImage;
|
|
124
|
+
exports.ProductTitle = ProductTitle;
|
|
125
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/hooks/useProduct.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/ProductCard.tsx","../src/components/ProductButtons.tsx","../src/assets/no-image.jpg","../src/components/ProductImage.tsx","../src/components/ProductTitle.tsx","../src/components/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\n\n\ninterface useProductArgs {\n product: Product;\n onChange?: ( args: onChangeArgs ) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\n\nexport const useProduct = ({ onChange, product, value = 0, initialValues }: useProductArgs) => {\n\n const [ counter, setCounter ] = useState<number>( initialValues?.count || value );\n const isMounted = useRef(false);\n\n const increaseBy = ( value: number ) => {\n \n let newValue = Math.max( counter + value, 0 )\n if ( initialValues?.maxCount ) {\n newValue = Math.min( newValue, initialValues.maxCount )\n }\n \n setCounter( newValue );\n onChange && onChange({ count: newValue, product });\n }\n\n const reset = () => {\n setCounter(initialValues?.count || value )\n }\n\n useEffect(() => {\n if ( !isMounted.current ) return;\n setCounter( value );\n }, [ value ])\n\n useEffect(() => {\n isMounted.current = true;\n }, [])\n\n return {\n counter,\n isMaxCountReached: !!initialValues?.count && initialValues.maxCount === counter,\n maxCount: initialValues?.maxCount,\n \n increaseBy,\n reset\n\n }\n\n}","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, type JSX } from 'react';\n\nimport { useProduct } from '../hooks/useProduct';\nimport {\n ProductContextProps,\n Product,\n onChangeArgs,\n InitialValues,\n ProductCardHandlers,\n} from '../interfaces/interfaces';\n\nimport styles from '../styles/styles.module.css';\n\nexport const ProductContext = createContext({} as ProductContextProps);\nconst { Provider } = ProductContext;\n\nexport interface Props {\n product: Product;\n // children?: React.ReactElement | React.ReactElement[];\n children: (args: ProductCardHandlers) => JSX.Element;\n className?: string;\n style?: React.CSSProperties;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\nexport const ProductCard = ({\n children,\n product,\n className,\n style,\n onChange,\n value,\n initialValues,\n}: Props) => {\n const { counter, increaseBy, maxCount, isMaxCountReached, reset } =\n useProduct({ onChange, product, value, initialValues });\n\n return (\n <Provider\n value={{\n counter,\n increaseBy,\n maxCount,\n product,\n }}\n >\n <div className={`${styles.productCard} ${className}`} style={style}>\n {children({\n count: counter,\n isMaxCountReached,\n maxCount: initialValues?.maxCount,\n product,\n\n increaseBy,\n reset,\n })}\n </div>\n </Provider>\n );\n};\n","import { useCallback, useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\n\nexport interface Props {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductButtons = ({ className, style }: Props) => {\n const { increaseBy, counter, maxCount } = useContext(ProductContext);\n\n const isMaxReached = useCallback(\n () => !!maxCount && counter === maxCount,\n [counter, maxCount]\n );\n\n return (\n <div className={`${styles.buttonsContainer} ${className}`} style={style}>\n <button className={styles.buttonMinus} onClick={() => increaseBy(-1)}>\n {' '}\n -{' '}\n </button>\n\n <div className={styles.countLabel}> {counter} </div>\n\n <button\n className={`${styles.buttonAdd} ${isMaxReached() && styles.disabled} `}\n onClick={() => increaseBy(+1)}\n >\n {' '}\n +{' '}\n </button>\n </div>\n );\n};\n","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\nimport noImage from '../assets/no-image.jpg';\n\nexport interface Props {\n img?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductImage = ({ img, className, style }: Props) => {\n const { product } = useContext(ProductContext);\n let imgToShow: string;\n\n if (img) {\n imgToShow = img;\n } else if (product.img) {\n imgToShow = product.img;\n } else {\n imgToShow = noImage;\n }\n\n return (\n <img\n className={`${styles.productImg} ${className}`}\n src={imgToShow}\n style={style}\n alt=\"Product\"\n />\n );\n};\n","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\n\nexport interface Props {\n className?: string;\n title?: string;\n activeClass?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductTitle = ({ title, className, style }: Props) => {\n const { product } = useContext(ProductContext);\n\n return (\n <span className={`${styles.productDescription} ${className}`} style={style}>\n {title ? title : product.title}\n </span>\n );\n};\n","import { ProductCard as ProductCardHOC } from './ProductCard';\nimport { ProductCardHOCProps } from '../interfaces/interfaces';\n\nimport { ProductButtons } from './ProductButtons';\nimport { ProductImage } from './ProductImage';\nimport { ProductTitle } from './ProductTitle';\n\nexport { ProductButtons } from './ProductButtons';\nexport { ProductImage } from './ProductImage';\nexport { ProductTitle } from './ProductTitle';\n\nexport const ProductCard: ProductCardHOCProps = Object.assign(ProductCardHOC, {\n Title: ProductTitle,\n Image: ProductImage,\n Buttons: ProductButtons,\n});\n\nexport default ProductCard;\n"],"names":["useState","useRef","useEffect","createContext","ProductCard","_jsx","useContext","useCallback","_jsxs","ProductCardHOC"],"mappings":"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","x_google_ignoreList":[1]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useEffect, createContext, useContext, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
const useProduct = ({ onChange, product, value = 0, initialValues }) => {
|
|
5
|
+
const [counter, setCounter] = useState((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
|
|
6
|
+
const isMounted = useRef(false);
|
|
7
|
+
const increaseBy = (value) => {
|
|
8
|
+
let newValue = Math.max(counter + value, 0);
|
|
9
|
+
if (initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount) {
|
|
10
|
+
newValue = Math.min(newValue, initialValues.maxCount);
|
|
11
|
+
}
|
|
12
|
+
setCounter(newValue);
|
|
13
|
+
onChange && onChange({ count: newValue, product });
|
|
14
|
+
};
|
|
15
|
+
const reset = () => {
|
|
16
|
+
setCounter((initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) || value);
|
|
17
|
+
};
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!isMounted.current)
|
|
20
|
+
return;
|
|
21
|
+
setCounter(value);
|
|
22
|
+
}, [value]);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
isMounted.current = true;
|
|
25
|
+
}, []);
|
|
26
|
+
return {
|
|
27
|
+
counter,
|
|
28
|
+
isMaxCountReached: !!(initialValues === null || initialValues === void 0 ? void 0 : initialValues.count) && initialValues.maxCount === counter,
|
|
29
|
+
maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
|
|
30
|
+
increaseBy,
|
|
31
|
+
reset
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function styleInject(css, ref) {
|
|
36
|
+
if ( ref === void 0 ) ref = {};
|
|
37
|
+
var insertAt = ref.insertAt;
|
|
38
|
+
|
|
39
|
+
if (typeof document === 'undefined') { return; }
|
|
40
|
+
|
|
41
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
42
|
+
var style = document.createElement('style');
|
|
43
|
+
style.type = 'text/css';
|
|
44
|
+
|
|
45
|
+
if (insertAt === 'top') {
|
|
46
|
+
if (head.firstChild) {
|
|
47
|
+
head.insertBefore(style, head.firstChild);
|
|
48
|
+
} else {
|
|
49
|
+
head.appendChild(style);
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
head.appendChild(style);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (style.styleSheet) {
|
|
56
|
+
style.styleSheet.cssText = css;
|
|
57
|
+
} else {
|
|
58
|
+
style.appendChild(document.createTextNode(css));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
var css_248z = "\n\n.styles-module_productCard__oaIVo {\n background-color: white;\n border-radius: 15px;\n color: black;\n padding-bottom: 5px;\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 black;\n border-radius: 5px 0px 0px 5px;\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 black;\n border-top: 1px solid black;\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 black;\n border-radius: 0px 5px 5px 0px;\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}";
|
|
63
|
+
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"};
|
|
64
|
+
styleInject(css_248z);
|
|
65
|
+
|
|
66
|
+
const ProductContext = createContext({});
|
|
67
|
+
const { Provider } = ProductContext;
|
|
68
|
+
const ProductCard$1 = ({ children, product, className, style, onChange, value, initialValues, }) => {
|
|
69
|
+
const { counter, increaseBy, maxCount, isMaxCountReached, reset } = useProduct({ onChange, product, value, initialValues });
|
|
70
|
+
return (jsx(Provider, { value: {
|
|
71
|
+
counter,
|
|
72
|
+
increaseBy,
|
|
73
|
+
maxCount,
|
|
74
|
+
product,
|
|
75
|
+
}, children: jsx("div", { className: `${styles.productCard} ${className}`, style: style, children: children({
|
|
76
|
+
count: counter,
|
|
77
|
+
isMaxCountReached,
|
|
78
|
+
maxCount: initialValues === null || initialValues === void 0 ? void 0 : initialValues.maxCount,
|
|
79
|
+
product,
|
|
80
|
+
increaseBy,
|
|
81
|
+
reset,
|
|
82
|
+
}) }) }));
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const ProductButtons = ({ className, style }) => {
|
|
86
|
+
const { increaseBy, counter, maxCount } = useContext(ProductContext);
|
|
87
|
+
const isMaxReached = useCallback(() => !!maxCount && counter === maxCount, [counter, maxCount]);
|
|
88
|
+
return (jsxs("div", { className: `${styles.buttonsContainer} ${className}`, style: style, children: [jsxs("button", { className: styles.buttonMinus, onClick: () => increaseBy(-1), children: [' ', "-", ' '] }), jsxs("div", { className: styles.countLabel, children: [" ", counter, " "] }), jsxs("button", { className: `${styles.buttonAdd} ${isMaxReached() && styles.disabled} `, onClick: () => increaseBy(1), children: [' ', "+", ' '] })] }));
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
var noImage = "data:image/jpeg;base64,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";
|
|
92
|
+
|
|
93
|
+
const ProductImage = ({ img, className, style }) => {
|
|
94
|
+
const { product } = useContext(ProductContext);
|
|
95
|
+
let imgToShow;
|
|
96
|
+
if (img) {
|
|
97
|
+
imgToShow = img;
|
|
98
|
+
}
|
|
99
|
+
else if (product.img) {
|
|
100
|
+
imgToShow = product.img;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
imgToShow = noImage;
|
|
104
|
+
}
|
|
105
|
+
return (jsx("img", { className: `${styles.productImg} ${className}`, src: imgToShow, style: style, alt: "Product" }));
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const ProductTitle = ({ title, className, style }) => {
|
|
109
|
+
const { product } = useContext(ProductContext);
|
|
110
|
+
return (jsx("span", { className: `${styles.productDescription} ${className}`, style: style, children: title ? title : product.title }));
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const ProductCard = Object.assign(ProductCard$1, {
|
|
114
|
+
Title: ProductTitle,
|
|
115
|
+
Image: ProductImage,
|
|
116
|
+
Buttons: ProductButtons,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
export { ProductButtons, ProductCard, ProductImage, ProductTitle };
|
|
120
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/hooks/useProduct.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/ProductCard.tsx","../src/components/ProductButtons.tsx","../src/assets/no-image.jpg","../src/components/ProductImage.tsx","../src/components/ProductTitle.tsx","../src/components/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';\n\n\ninterface useProductArgs {\n product: Product;\n onChange?: ( args: onChangeArgs ) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\n\nexport const useProduct = ({ onChange, product, value = 0, initialValues }: useProductArgs) => {\n\n const [ counter, setCounter ] = useState<number>( initialValues?.count || value );\n const isMounted = useRef(false);\n\n const increaseBy = ( value: number ) => {\n \n let newValue = Math.max( counter + value, 0 )\n if ( initialValues?.maxCount ) {\n newValue = Math.min( newValue, initialValues.maxCount )\n }\n \n setCounter( newValue );\n onChange && onChange({ count: newValue, product });\n }\n\n const reset = () => {\n setCounter(initialValues?.count || value )\n }\n\n useEffect(() => {\n if ( !isMounted.current ) return;\n setCounter( value );\n }, [ value ])\n\n useEffect(() => {\n isMounted.current = true;\n }, [])\n\n return {\n counter,\n isMaxCountReached: !!initialValues?.count && initialValues.maxCount === counter,\n maxCount: initialValues?.maxCount,\n \n increaseBy,\n reset\n\n }\n\n}","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, type JSX } from 'react';\n\nimport { useProduct } from '../hooks/useProduct';\nimport {\n ProductContextProps,\n Product,\n onChangeArgs,\n InitialValues,\n ProductCardHandlers,\n} from '../interfaces/interfaces';\n\nimport styles from '../styles/styles.module.css';\n\nexport const ProductContext = createContext({} as ProductContextProps);\nconst { Provider } = ProductContext;\n\nexport interface Props {\n product: Product;\n // children?: React.ReactElement | React.ReactElement[];\n children: (args: ProductCardHandlers) => JSX.Element;\n className?: string;\n style?: React.CSSProperties;\n onChange?: (args: onChangeArgs) => void;\n value?: number;\n initialValues?: InitialValues;\n}\n\nexport const ProductCard = ({\n children,\n product,\n className,\n style,\n onChange,\n value,\n initialValues,\n}: Props) => {\n const { counter, increaseBy, maxCount, isMaxCountReached, reset } =\n useProduct({ onChange, product, value, initialValues });\n\n return (\n <Provider\n value={{\n counter,\n increaseBy,\n maxCount,\n product,\n }}\n >\n <div className={`${styles.productCard} ${className}`} style={style}>\n {children({\n count: counter,\n isMaxCountReached,\n maxCount: initialValues?.maxCount,\n product,\n\n increaseBy,\n reset,\n })}\n </div>\n </Provider>\n );\n};\n","import { useCallback, useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\n\nexport interface Props {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductButtons = ({ className, style }: Props) => {\n const { increaseBy, counter, maxCount } = useContext(ProductContext);\n\n const isMaxReached = useCallback(\n () => !!maxCount && counter === maxCount,\n [counter, maxCount]\n );\n\n return (\n <div className={`${styles.buttonsContainer} ${className}`} style={style}>\n <button className={styles.buttonMinus} onClick={() => increaseBy(-1)}>\n {' '}\n -{' '}\n </button>\n\n <div className={styles.countLabel}> {counter} </div>\n\n <button\n className={`${styles.buttonAdd} ${isMaxReached() && styles.disabled} `}\n onClick={() => increaseBy(+1)}\n >\n {' '}\n +{' '}\n </button>\n </div>\n );\n};\n","export default \"data:image/jpeg;base64,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\"","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\nimport noImage from '../assets/no-image.jpg';\n\nexport interface Props {\n img?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductImage = ({ img, className, style }: Props) => {\n const { product } = useContext(ProductContext);\n let imgToShow: string;\n\n if (img) {\n imgToShow = img;\n } else if (product.img) {\n imgToShow = product.img;\n } else {\n imgToShow = noImage;\n }\n\n return (\n <img\n className={`${styles.productImg} ${className}`}\n src={imgToShow}\n style={style}\n alt=\"Product\"\n />\n );\n};\n","import { useContext } from 'react';\nimport { ProductContext } from './ProductCard';\n\nimport styles from '../styles/styles.module.css';\n\nexport interface Props {\n className?: string;\n title?: string;\n activeClass?: string;\n style?: React.CSSProperties;\n}\n\nexport const ProductTitle = ({ title, className, style }: Props) => {\n const { product } = useContext(ProductContext);\n\n return (\n <span className={`${styles.productDescription} ${className}`} style={style}>\n {title ? title : product.title}\n </span>\n );\n};\n","import { ProductCard as ProductCardHOC } from './ProductCard';\nimport { ProductCardHOCProps } from '../interfaces/interfaces';\n\nimport { ProductButtons } from './ProductButtons';\nimport { ProductImage } from './ProductImage';\nimport { ProductTitle } from './ProductTitle';\n\nexport { ProductButtons } from './ProductButtons';\nexport { ProductImage } from './ProductImage';\nexport { ProductTitle } from './ProductTitle';\n\nexport const ProductCard: ProductCardHOCProps = Object.assign(ProductCardHOC, {\n Title: ProductTitle,\n Image: ProductImage,\n Buttons: ProductButtons,\n});\n\nexport default ProductCard;\n"],"names":["ProductCard","_jsx","_jsxs","ProductCardHOC"],"mappings":"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","x_google_ignoreList":[1]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type JSX } from 'react';
|
|
2
|
+
import { ProductContextProps, Product, onChangeArgs, InitialValues, ProductCardHandlers } from '../interfaces/interfaces';
|
|
3
|
+
export declare const ProductContext: import("react").Context<ProductContextProps>;
|
|
4
|
+
export interface Props {
|
|
5
|
+
product: Product;
|
|
6
|
+
children: (args: ProductCardHandlers) => JSX.Element;
|
|
7
|
+
className?: string;
|
|
8
|
+
style?: React.CSSProperties;
|
|
9
|
+
onChange?: (args: onChangeArgs) => void;
|
|
10
|
+
value?: number;
|
|
11
|
+
initialValues?: InitialValues;
|
|
12
|
+
}
|
|
13
|
+
export declare const ProductCard: ({ children, product, className, style, onChange, value, initialValues, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ProductCardHOCProps } from '../interfaces/interfaces';
|
|
2
|
+
export { ProductButtons } from './ProductButtons';
|
|
3
|
+
export { ProductImage } from './ProductImage';
|
|
4
|
+
export { ProductTitle } from './ProductTitle';
|
|
5
|
+
export declare const ProductCard: ProductCardHOCProps;
|
|
6
|
+
export default ProductCard;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { onChangeArgs, Product, InitialValues } from '../interfaces/interfaces';
|
|
2
|
+
interface useProductArgs {
|
|
3
|
+
product: Product;
|
|
4
|
+
onChange?: (args: onChangeArgs) => void;
|
|
5
|
+
value?: number;
|
|
6
|
+
initialValues?: InitialValues;
|
|
7
|
+
}
|
|
8
|
+
export declare const useProduct: ({ onChange, product, value, initialValues }: useProductArgs) => {
|
|
9
|
+
counter: number;
|
|
10
|
+
isMaxCountReached: boolean;
|
|
11
|
+
maxCount: number | undefined;
|
|
12
|
+
increaseBy: (value: number) => void;
|
|
13
|
+
reset: () => void;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './components';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { JSX } from 'react';
|
|
2
|
+
import { Props as ProductButtonsProps } from '../components/ProductButtons';
|
|
3
|
+
import { Props as ProductCardProps } from '../components/ProductCard';
|
|
4
|
+
import { Props as ProductImageProps } from '../components/ProductImage';
|
|
5
|
+
import { Props as ProductTitleProps } from '../components/ProductTitle';
|
|
6
|
+
export interface Product {
|
|
7
|
+
id: string;
|
|
8
|
+
img?: string;
|
|
9
|
+
title: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ProductContextProps {
|
|
12
|
+
counter: number;
|
|
13
|
+
maxCount?: number;
|
|
14
|
+
product: Product;
|
|
15
|
+
increaseBy: (value: number) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface ProductCardHOCProps {
|
|
18
|
+
({ children, product }: ProductCardProps): JSX.Element;
|
|
19
|
+
Buttons: (Props: ProductButtonsProps) => JSX.Element;
|
|
20
|
+
Image: (Props: ProductImageProps) => JSX.Element;
|
|
21
|
+
Title: (Props: ProductTitleProps) => JSX.Element;
|
|
22
|
+
}
|
|
23
|
+
export interface onChangeArgs {
|
|
24
|
+
product: Product;
|
|
25
|
+
count: number;
|
|
26
|
+
}
|
|
27
|
+
export interface ProductInCart extends Product {
|
|
28
|
+
count: number;
|
|
29
|
+
}
|
|
30
|
+
export interface InitialValues {
|
|
31
|
+
count?: number;
|
|
32
|
+
maxCount?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface ProductCardHandlers {
|
|
35
|
+
count: number;
|
|
36
|
+
isMaxCountReached: boolean;
|
|
37
|
+
maxCount?: number;
|
|
38
|
+
product: Product;
|
|
39
|
+
increaseBy: (value: number) => void;
|
|
40
|
+
reset: () => void;
|
|
41
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tony_ojeda/products-pack",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Mi librería de componentes React",
|
|
5
|
+
"main": "dist/index.cjs.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/types/index.d.ts",
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "vitest run",
|
|
11
|
+
"test:watch": "vitest watch",
|
|
12
|
+
"build": "npm run test && rollup -c rollup.config.mjs"
|
|
13
|
+
},
|
|
14
|
+
"peerDependencies": {
|
|
15
|
+
"react": ">=17.0.0",
|
|
16
|
+
"react-dom": ">=17.0.0"
|
|
17
|
+
},
|
|
18
|
+
"keywords": ["tony", "ojeda", "react"],
|
|
19
|
+
"author": "Tony Ojeda",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"type": "commonjs",
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
24
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
25
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
26
|
+
"@rollup/plugin-url": "^8.0.2",
|
|
27
|
+
"@types/react": "^19.2.14",
|
|
28
|
+
"@types/react-dom": "^19.2.3",
|
|
29
|
+
"jsdom": "^29.0.2",
|
|
30
|
+
"react": "^19.2.5",
|
|
31
|
+
"react-dom": "^19.2.5",
|
|
32
|
+
"rollup": "^4.60.2",
|
|
33
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
34
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
35
|
+
"tslib": "^2.8.1",
|
|
36
|
+
"typescript": "^6.0.3",
|
|
37
|
+
"vitest": "^4.1.5"
|
|
38
|
+
}
|
|
39
|
+
}
|