Repository URL to install this package:
|
Version:
9.0.35-framework ▾
|
"use strict";
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
t[p[i]] = s[p[i]];
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
const exotic_1 = require("exotic");
// import { autofixSafe as autofix } from 'exotic-core'
const identifier_1 = require("@skava/identifier");
const composition_1 = require("composition");
// import {reshape} from 'deps'
// import {schema, remap} from 'server/endpoints/catalog'
// const camelKeys = ['categoryIds', 'additionalInfo', 'productFilter', 'selectedFilters']
// const transform = data => {
// return reshape
// .setSchema(schema)
// .setRemap(remap)
// .remapKeys(camelKeys)
// .transformn(data)
// }
// @curry2
const clientSideSorting = {
isProductSorted: false,
sortedValue: '',
};
const toAdditional = response => {
const { array } = composition_1.getTyped(response);
// random stupid Type
const info = array('properties.iteminfo.additionalinfo');
// specifications
const additionalproperties = array('properties.iteminfo.additionalproperties');
const stateAdditionalProperties = array('properties.state.additionalproperties');
return [...info, ...additionalproperties, ...stateAdditionalProperties];
};
const fromValueToAlwaysUniq = value => {
value.identifier = value.name + identifier_1.uuid();
return value;
};
const fromLabel = name => {
let label = name;
if (name === 'Friendly Color') {
label = 'Color';
}
return label;
};
const appendCurrencyCode = value => {
value.name = '$' + value.name;
return value;
};
const fromFacetToAlwaysUniq = facet => {
let values = '';
// should be value
const oldvalues = facet.values.map(fromValueToAlwaysUniq);
// const identifier = facet.identifier || name + uuid()
if (facet.name === 'salePrice') {
values = oldvalues.map(appendCurrencyCode);
}
else {
values = oldvalues;
}
if (facet.name === 'Color') {
return undefined;
}
const name = fromLabel(facet.name);
// @todo careful to ensure selected identifier isn't the same as the name
// if (name === 'Friendly Color') {
// name = 'Color'
// }
return { name, values };
};
const isValidProduct = (product = {}) => {
const { image, name, identifier } = product;
const isValid = exotic_1.isSafe(image && name && identifier);
return isValid;
};
const getPriceValue = properties => {
const { array } = composition_1.getTyped(properties);
const prices = array('properties.buyinfo.pricing.prices');
const sortPrice = prices.find(item => {
if (item.type.toLowerCase() === 'sale') {
return item;
}
return exotic_1.toNumber(sortPrice.value);
});
};
const sortSkus = skus => {
if (clientSideSorting.isProductSorted) {
const isAscendingSort = clientSideSorting.sortedValue.includes('Price|asc');
skus.sort(function (item1, item2) {
const item1Price = getPriceValue(item1);
const item2Price = getPriceValue(item2);
if (isAscendingSort) {
return parseFloat(item1Price) - item2Price;
}
else {
return parseFloat(item2Price) - item1Price;
}
});
return skus;
}
else {
return skus;
}
};
const toProductChildren = (children = {}) => {
const { array } = composition_1.getTyped(children);
const { skus } = children, remainingData = __rest(children, ["skus"]);
const validSkus = array('skus').filter(isValidProduct);
const sortedSkus = sortSkus(validSkus);
return Object.assign({ skus: sortedSkus }, remainingData);
};
const toProduct = product => {
const validProduct = isValidProduct(product) ? product : {};
const { array } = composition_1.getTyped(validProduct);
const { children } = validProduct, remainingData = __rest(validProduct, ["children"]);
return Object.assign({}, remainingData, { children: toProductChildren(children), specifications: array('properties.iteminfo.specifications'), additional: toAdditional(product) });
};
exports.toProduct = toProduct;
exports.transformProduct = toProduct;
const transformCatalogResponse = response => {
const { array, string, number } = composition_1.getTyped(response);
// TODO - remove this once price is rendered in call
const facetValue = array('facets')
.map(fromFacetToAlwaysUniq)
.filter(exotic_1.isSafe);
// facetValue.push({
// name: 'Price',
// values: [
// {
// identifier: '0-50',
// name: '0-50',
// count: '15',
// },
// {
// identifier: '50-100',
// name: '50-100',
// count: '15',
// },
// {
// identifier: '100-150',
// name: '100-150',
// count: '4',
// },
// {
// identifier: '200-350',
// name: '200-250',
// count: '15',
// },
// ],
// })
const catalogResponse = {
identifier: string('identifier'),
// navtype: string('navtype'),
image: string('image'),
name: string('name'),
link: string('link'),
additional: toAdditional(response),
// useless
// additionalInfo: getArray('properties.iteminfo.additionalinfo'),
categoryIds: array('properties.iteminfo.categoryids').reverse(),
/**
* @todo - could take refine out of the response here
*/
productFilter: {
facets: facetValue,
selectedFilters: array('properties.state.selectedFacets'),
},
productSort: {
options: array('properties.state.sorting.0.options'),
sortedBy: string('properties.state.sorting.0.selectedname') || 'Relevance',
},
// .map(remapProduct), @see /products
products: array('children.products').map(toProduct),
productCount: number('properties.state.productcount'),
searchterm: string('properties.state.searchterm'),
};
return catalogResponse;
};
// @todo hack till API fixes sort SKREACT-4968
const checkIsProductSorted = dynamicParams => {
const { sort } = dynamicParams;
const sortValue = sort;
if (exotic_1.isSafe(sort) && !exotic_1.isEmpty(sort)) {
clientSideSorting.isProductSorted = true;
clientSideSorting.sortedValue = sortValue;
}
};
const transformCatalog = (response, dynamicParams) => {
checkIsProductSorted(dynamicParams);
const data = transformCatalogResponse(response);
const isSortedItem = false;
// return autofix(data)
return data;
};
exports.transformCatalog = transformCatalog;
const toTabProductItem = product => {
const url = `/product/${product.identifier}`;
return Object.assign({}, product, { url });
};
/**
* basically reformatted plp
* with {meta, values} as {title url viewall products}
*/
const transformCatalogTab = (response, id, tabName, attribute) => {
const { children: { products }, name, link, image, } = response;
const url = '/category/' + id;
const meta = {
title: tabName || name || 'unknown',
url,
image,
// @todo this would be parent categories?
viewAll: url,
qa: attribute,
};
const oneThing = Object.assign({}, meta, { meta, values: products.map(toTabProductItem) });
return oneThing;
};
exports.transformCatalogTab = transformCatalogTab;
exports.default = transformCatalog;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBocWwtbW9kdWxlcy9jYXRhbG9nL3N0cmVhbS9lbmRwb2ludHMvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9FO0FBQ3BFLHVEQUF1RDtBQUN2RCxrREFBd0M7QUFDeEMsNkNBQXNDO0FBQ3RDLCtCQUErQjtBQUMvQix5REFBeUQ7QUFDekQsMEZBQTBGO0FBQzFGLDhCQUE4QjtBQUM5QixtQkFBbUI7QUFDbkIseUJBQXlCO0FBQ3pCLHVCQUF1QjtBQUN2Qiw0QkFBNEI7QUFDNUIsd0JBQXdCO0FBQ3hCLElBQUk7QUFDSixVQUFVO0FBRVYsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixlQUFlLEVBQUUsS0FBSztJQUN0QixXQUFXLEVBQUUsRUFBRTtDQUNoQixDQUFBO0FBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUU7SUFDOUIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLHNCQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEMscUJBQXFCO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFBO0lBQ3hELGlCQUFpQjtJQUNqQixNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO0lBQzlFLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUNyQyx1Q0FBdUMsQ0FDeEMsQ0FBQTtJQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLG9CQUFvQixFQUFFLEdBQUcseUJBQXlCLENBQUMsQ0FBQTtBQUN6RSxDQUFDLENBQUE7QUFFRCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxFQUFFO0lBQ3BDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxpQkFBSSxFQUFFLENBQUE7SUFDdEMsT0FBTyxL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