Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"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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