@stackend/api
Version:
JS bindings to api.stackend.com
293 lines • 12.7 kB
JavaScript
"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