@automattic/shopping-cart
Version:
A library to use the WordPress.com shopping cart.
38 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = require("react");
const shopping_cart_hook_manager_1 = require("./shopping-cart-hook-manager");
const shopping_cart_options_context_1 = tslib_1.__importDefault(require("./shopping-cart-options-context"));
const use_manager_client_1 = tslib_1.__importDefault(require("./use-manager-client"));
const use_refetch_on_focus_1 = tslib_1.__importDefault(require("./use-refetch-on-focus"));
function useShoppingCart(cartKey) {
const managerClient = (0, use_manager_client_1.default)('useShoppingCart');
const { defaultCartKey } = (0, react_1.useContext)(shopping_cart_options_context_1.default);
const finalCartKey = cartKey ?? defaultCartKey;
const manager = managerClient.forCartKey(finalCartKey);
(0, use_refetch_on_focus_1.default)(finalCartKey);
(0, react_1.useEffect)(() => {
manager.fetchInitialCart().catch(() => {
// The consumer of the cart data can display any errors returned by the
// endpoint, so we will ignore them here.
});
}, [manager]);
const isMounted = (0, react_1.useRef)(true);
(0, react_1.useEffect)(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
// Re-render when the cart changes
const [cartState, setCartState] = (0, react_1.useState)((0, shopping_cart_hook_manager_1.createUseShoppingCartState)(manager));
(0, react_1.useEffect)(() => {
return manager.subscribe(() => {
isMounted.current && setCartState((0, shopping_cart_hook_manager_1.createUseShoppingCartState)(manager));
});
}, [manager]);
return cartState;
}
exports.default = useShoppingCart;
//# sourceMappingURL=use-shopping-cart.js.map