UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

293 lines 12.7 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_PRODUCT_TYPE = exports.SET_ENABLE_CART_NOTIFICATIONS = exports.SET_IS_SHOPIFY_APP = exports.CLEAR_CART = exports.RECEIVE_CART = exports.RECEIVE_CURRENCY = exports.SET_CUSTOMER_VAT_INFO = exports.SET_VATS = exports.RECEIVE_ADDRESS_FIELDS = exports.RECEIVE_COUNTRIES = exports.CLEAR_CHECKOUT = exports.RECEIVE_CHECKOUT = exports.REMOVE_FROM_BASKET = exports.ADD_TO_BASKET = exports.BASKET_UPDATED = exports.SHOP_CLEAR_CACHE = exports.RECEIVE_SHOPIFY_DOMAIN_REFERENCE_URL_ID = exports.RECEIVE_COLLECTION_LIST = exports.RECEIVE_COLLECTIONS = exports.RECEIVE_COLLECTION = exports.RECEIVE_LISTINGS = exports.RECEIVE_LISTING = exports.RECEIVE_MULTIPLE_PRODUCTS = exports.RECEIVE_PRODUCT = exports.RECEIVE_PRODUCT_TYPES = exports.SET_SHOP_DEFAULTS = void 0; var get_1 = __importDefault(require("lodash/get")); var ProductTypeTree_1 = require("./ProductTypeTree"); var graphql_1 = require("../util/graphql"); var extraObjectActions_1 = require("../api/extraObjectActions"); var api_1 = require("../api"); var vat_1 = require("./vat"); exports.SET_SHOP_DEFAULTS = 'SET_SHOP_DEFAULTS'; exports.RECEIVE_PRODUCT_TYPES = 'RECEIVE_PRODUCT_TYPES'; exports.RECEIVE_PRODUCT = 'RECEIVE_PRODUCT'; exports.RECEIVE_MULTIPLE_PRODUCTS = 'RECEIVE_MULTIPLE_PRODUCTS'; exports.RECEIVE_LISTING = 'RECEIVE_LISTING'; exports.RECEIVE_LISTINGS = 'RECEIVE_LISTINGS'; exports.RECEIVE_COLLECTION = 'RECEIVE_COLLECTION'; exports.RECEIVE_COLLECTIONS = 'RECEIVE_COLLECTIONS'; exports.RECEIVE_COLLECTION_LIST = 'RECEIVE_COLLECTION_LIST'; exports.RECEIVE_SHOPIFY_DOMAIN_REFERENCE_URL_ID = 'RECEIVE_SHOPIFY_DOMAIN_REFERENCE_URL_ID'; exports.SHOP_CLEAR_CACHE = 'SHOP_CLEAR_CACHE'; exports.BASKET_UPDATED = 'BASKET_UPDATED'; exports.ADD_TO_BASKET = 'ADD_TO_BASKET'; exports.REMOVE_FROM_BASKET = 'REMOVE_FROM_BASKET'; exports.RECEIVE_CHECKOUT = 'RECEIVE_CHECKOUT'; exports.CLEAR_CHECKOUT = 'CLEAR_CHECKOUT'; exports.RECEIVE_COUNTRIES = 'RECEIVE_COUNTRIES'; exports.RECEIVE_ADDRESS_FIELDS = 'RECEIVE_ADDRESS_FIELDS'; exports.SET_VATS = 'SET_VATS'; exports.SET_CUSTOMER_VAT_INFO = 'SET_CUSTOMER_VAT_INFO'; exports.RECEIVE_CURRENCY = 'RECEIVE_CURRENCY'; exports.RECEIVE_CART = 'RECEIVE_CART'; exports.CLEAR_CART = 'CLEAR_CART'; exports.SET_IS_SHOPIFY_APP = 'SET_IS_SHOPIFY_APP'; exports.SET_ENABLE_CART_NOTIFICATIONS = 'SET_ENABLE_CART_NOTIFICATIONS'; exports.DEFAULT_PRODUCT_TYPE = ''; function shopReducer(state, action) { var _a, _b, _c, _d, _e; var _f, _g, _h; if (state === void 0) { state = { defaults: { imageMaxWidth: 1024, listingImageMaxWidth: 256, pageSize: 20 }, productTypes: [], productTypeTree: [], products: {}, productListings: {}, collections: {}, allCollections: null, basketUpdated: 0, cart: null, checkout: null, checkoutUserErrors: null, countryCodes: null, countriesByCode: {}, addressFieldsByCountryCode: {}, vats: null, currencies: {}, enableCartNotifications: false, shopifyDomainReferenceUrlId: 0, isShopifyApp: false }; } switch (action.type) { case exports.SET_SHOP_DEFAULTS: return Object.assign({}, state, { defaults: action.defaults, // Clear the cache as well productListings: {}, products: {}, productTypes: [], productTypeTree: [], collections: {}, allCollections: null, countryCodes: null, countriesByCode: {}, addressFieldsByCountryCode: {}, enableCartNotifications: false, shopifyDomainReferenceUrlId: 0, isShopifyApp: false }); case exports.RECEIVE_PRODUCT_TYPES: { var edges = (0, get_1.default)(action, 'json.productTypes.edges', []); var productTypes = edges.map(function (e) { return e.node; }); return Object.assign({}, state, { productTypes: productTypes, productTypeTree: (0, ProductTypeTree_1.buildProductTypeTree)(edges) }); } case exports.RECEIVE_PRODUCT: { var product = (0, get_1.default)(action, 'json.product'); if (product) { var products = Object.assign({}, state.products, (_a = {}, _a[product.handle] = product, _a)); return Object.assign({}, state, { products: products }); } break; } case exports.RECEIVE_MULTIPLE_PRODUCTS: { var receivedProducts = (0, get_1.default)(action, 'json.products'); if (receivedProducts) { var products = Object.assign({}, state.products, receivedProducts); return Object.assign({}, state, { products: products }); } break; } case exports.RECEIVE_LISTING: { var receivedProducts = action.json.products; var listing_1 = { hasNextPage: receivedProducts.pageInfo.hasNextPage, hasPreviousPage: receivedProducts.pageInfo.hasPreviousPage, nextCursor: (0, graphql_1.getNextCursor)(receivedProducts), previousCursor: (0, graphql_1.getPreviousCursor)(receivedProducts), selection: action.request, products: [] }; receivedProducts.edges.forEach(function (n) { listing_1.products.push(n.node); }); var productListings = Object.assign({}, state.productListings, (_b = {}, _b[action.key] = listing_1, _b)); return Object.assign({}, state, { productListings: productListings }); } case exports.RECEIVE_LISTINGS: { var listings = {}; for (var _i = 0, _j = Object.keys(action.listings); _i < _j.length; _i++) { var key = _j[_i]; var _k = action.listings[key], listing = _k.listing, request = _k.request; var l = { hasNextPage: listing.pageInfo.hasNextPage, hasPreviousPage: listing.pageInfo.hasPreviousPage, nextCursor: (0, graphql_1.getNextCursor)(listing), previousCursor: (0, graphql_1.getPreviousCursor)(listing), selection: request, products: (0, graphql_1.mapGraphQLList)(listing, function (e) { return e; }) }; listings[key] = l; } return Object.assign({}, state, { productListings: Object.assign({}, state.productListings, listings) }); } case exports.RECEIVE_COLLECTION: { var collection = action.json.collection; var handle = action.request.handle; return Object.assign({}, state, { collections: Object.assign({}, state.collections, (_c = {}, _c[handle] = collection, _c)) }); } case exports.RECEIVE_COLLECTIONS: { return Object.assign({}, state, { collections: Object.assign({}, state.collections, action.collections) }); } case exports.RECEIVE_COLLECTION_LIST: { var allCollections_1 = []; (0, graphql_1.forEachGraphQLList)(action.collections, function (item) { allCollections_1.push(item); }); return Object.assign({}, state, { allCollections: allCollections_1 }); } case exports.RECEIVE_SHOPIFY_DOMAIN_REFERENCE_URL_ID: { return Object.assign({}, state, { shopifyDomainReferenceUrlId: action.shopifyDomainReferenceUrlId }); } case exports.SHOP_CLEAR_CACHE: return Object.assign({}, state, { productListings: {}, products: {}, productTypes: [], productTypeTree: [], collections: {}, allCollections: null, countryCodes: null, countriesByCode: {}, addressFieldsByCountryCode: {} }); case exports.BASKET_UPDATED: case exports.ADD_TO_BASKET: case exports.REMOVE_FROM_BASKET: return Object.assign({}, state, { basketUpdated: Date.now() }); case exports.RECEIVE_CART: { return Object.assign({}, state, { cart: action.cart }); } case exports.CLEAR_CART: { return Object.assign({}, state, { cart: null }); } case exports.RECEIVE_CHECKOUT: { return Object.assign({}, state, { checkout: action.checkout, checkoutUserErrors: action.checkoutUserErrors }); } case exports.CLEAR_CHECKOUT: return Object.assign({}, state, { checkout: null }); case exports.RECEIVE_COUNTRIES: { var countryCodes_1 = []; var countriesByCode_1 = {}; action.countries.forEach(function (c) { countryCodes_1.push(c.code); countriesByCode_1[c.code] = c; }); return Object.assign({}, state, { countryCodes: countryCodes_1, countriesByCode: countriesByCode_1 }); } case exports.RECEIVE_ADDRESS_FIELDS: { var addressFieldsByCountryCode = Object.assign({}, state.addressFieldsByCountryCode, (_d = {}, _d[action.countryCode] = action.addressFields, _d)); return Object.assign({}, state, { addressFieldsByCountryCode: addressFieldsByCountryCode }); } case exports.SET_VATS: { return Object.assign({}, state, { vats: Object.assign({}, state.vats, action.vats) }); } case exports.SET_CUSTOMER_VAT_INFO: return Object.assign({}, state, { vats: Object.assign({}, state.vats || {}, { customerCountryCode: action.customerCountryCode || ((_f = state.vats) === null || _f === void 0 ? void 0 : _f.customerCountryCode), customerTradeRegion: action.customerTradeRegion || ((_g = state.vats) === null || _g === void 0 ? void 0 : _g.customerTradeRegion), customerType: action.customerType || ((_h = state.vats) === null || _h === void 0 ? void 0 : _h.customerType) }) }); case exports.RECEIVE_CURRENCY: return Object.assign({}, state, { currencies: __assign(__assign({}, state.currencies), (_e = {}, _e[action.currency.code] = action.currency, _e)) }); case exports.SET_IS_SHOPIFY_APP: return Object.assign({}, state, { isShopifyApp: action.shopifyApp || false }); case exports.SET_ENABLE_CART_NOTIFICATIONS: return Object.assign({}, state, { enableCartNotifications: action.enableCartNotifications || false }); } return state; } exports.default = shopReducer; var PRODUCT_REFERENCE_HANDLER = { key: 'products', context: 'shop', onExtraObjectsReceived: function (objects, dispatch) { var products = objects; var json = (0, api_1.newXcapJsonResult)('success', { products: products }); dispatch({ type: exports.RECEIVE_MULTIPLE_PRODUCTS, json: json }); } }; // If this reducer is used, register its reference handler (0, extraObjectActions_1.registerExtraObjectHandler)(PRODUCT_REFERENCE_HANDLER); //# sourceMappingURL=shopReducer.js.map