storenest-commerce
Version:
Complete e-commerce SDK for Storenest platform with React components, multi-language support, secure checkout, and enterprise-grade security
95 lines (94 loc) • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useProducts = useProducts;
exports.useProductDetail = useProductDetail;
const react_1 = require("react");
const product_1 = require("../product");
function useProducts() {
const [products, setProducts] = (0, react_1.useState)([]);
const [total, setTotal] = (0, react_1.useState)(0);
const [page, setPage] = (0, react_1.useState)(1);
const [limit, setLimit] = (0, react_1.useState)(20);
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
const [error, setError] = (0, react_1.useState)(null);
const loadProducts = (0, react_1.useCallback)(async (pageNum = 1, limitNum = 20) => {
setIsLoading(true);
setError(null);
try {
const result = await (0, product_1.getProducts)(pageNum, limitNum);
setProducts(result.data);
setTotal(result.total);
setPage(result.page);
setLimit(result.limit);
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to load products';
setError(errorMessage);
}
finally {
setIsLoading(false);
}
}, []);
const loadProductsByCategory = (0, react_1.useCallback)(async (categorySlug, pageNum = 1, limitNum = 20) => {
setIsLoading(true);
setError(null);
try {
const result = await (0, product_1.getProductsByCategorySlug)(categorySlug, pageNum, limitNum);
setProducts(result.data);
setTotal(result.total);
setPage(result.page);
setLimit(result.limit);
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to load products by category';
setError(errorMessage);
}
finally {
setIsLoading(false);
}
}, []);
// Load products on mount
(0, react_1.useEffect)(() => {
loadProducts();
}, [loadProducts]);
const hasNextPage = page * limit < total;
const hasPreviousPage = page > 1;
return {
products,
total,
page,
limit,
isLoading,
error,
loadProducts,
loadProductsByCategory,
hasNextPage,
hasPreviousPage,
};
}
function useProductDetail() {
const [product, setProduct] = (0, react_1.useState)(null);
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
const [error, setError] = (0, react_1.useState)(null);
const loadProduct = (0, react_1.useCallback)(async (productId) => {
setIsLoading(true);
setError(null);
try {
const productData = await (0, product_1.getProductById)(productId);
setProduct(productData);
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to load product';
setError(errorMessage);
}
finally {
setIsLoading(false);
}
}, []);
return {
product,
isLoading,
error,
loadProduct,
};
}