UNPKG

@spartacus/core

Version:

Spartacus - the core framework

34 lines 6.12 kB
/** * Helper logic to resolve best matching Applicable * * Finding best match is a two step process: * 1. Find all matching applicables * - all applicables for which hasMatch(...matchParams) will return true * - all applicables without hasMatch method (implicit always match) * 2. Find the applicable with highest priority * - applicable with highest getPriority(...priorityParams) will win * - applicable without getPriority method is treated as Priority.NORMAL or 0 * - applicables with the same priority are sorted by order of providers, the applicable that was provided later wins * * @param applicables - array or applicable-like instances * @param matchParams - array of parameters passed for hasMatch calls * @param priorityParams - array of parameters passed for getPriority calls */ export function resolveApplicable(applicables, matchParams = [], priorityParams = []) { const matchedApplicables = (applicables !== null && applicables !== void 0 ? applicables : []).filter((applicable) => !applicable.hasMatch || applicable.hasMatch(...matchParams)); if (matchedApplicables.length < 2) { return matchedApplicables[0]; } let lastPriority = -Infinity; return matchedApplicables.reduce((acc, curr) => { const currPriority = curr.getPriority ? curr.getPriority(...priorityParams) : 0 /* NORMAL */; if (lastPriority > currPriority) { return acc; } lastPriority = currPriority; return curr; }, undefined); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3V0aWwvYXBwbGljYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixXQUFnQixFQUNoQixjQUFxQixFQUFFLEVBQ3ZCLGlCQUF3QixFQUFFO0lBRTFCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ25ELENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUM1RSxDQUFDO0lBRUYsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUI7SUFFRCxJQUFJLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUM3QixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM3QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVztZQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxDQUFDLGVBQWdCLENBQUM7UUFDcEIsSUFBSSxZQUFZLEdBQUcsWUFBWSxFQUFFO1lBQy9CLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZW51bSBQcmlvcml0eSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIGZhbGxiYWNrLCB3aGVuIHRoZXJlIGlzIG5vIG90aGVyIG1hdGNoZXNcbiAgICovXG4gIEZBTExCQUNLID0gLTUwLFxuICAvKipcbiAgICogVXNlZCBtYWlubHkgaW4gbGlicmFyaWVzLCBlYXN5IG92ZXJyaWRhYmxlXG4gICAqL1xuICBMT1cgPSAtMTAsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHByaW9yaXR5XG4gICAqL1xuICBOT1JNQUwgPSAwLFxuICAvKipcbiAgICogSGlnaCBwcmlvcml0eSBmb3IgbWF0Y2hlcyB0aGF0IHNob3VsZCB0YWtlIHByZWNlZGVuY2VcbiAgICovXG4gIEhJR0ggPSAxMCxcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgaW1wbGVtZW50aW5nIGFwcGxpY2FibGVzIGluIGEgY29uc2lzdGVudCB3YXlcbiAqXG4gKiBBcHBsaWNhYmxlcyBhcmUgbWFpbmx5IHVzZWQgdG8gZmluZCBiZXN0IG1hdGNoaW5nIG9uZSBmcm9tIG11bHRpIHByb3ZpZGVkXG4gKiBjbGFzc2VzLCBsaWtlIGhhbmRsZXJzLCByZXNvbHZlcnMsIGV0Yy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhYmxlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhcHBsaWNhYmxlIGNhbiBiZSB1c2VkIHRvIGhhbmRsZSBzcGVjaWZpZWQgY29uZGl0aW9uXG4gICAqL1xuICBoYXNNYXRjaD8oLi4ucGFyYW1zKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmV0dXJucyBwcmlvcml0eSBvciBzY29yZSBmb3Igc3BlY2lmaWVkIGFwcGxpY2FibGUuXG4gICAqXG4gICAqIElmIG11bHRpcGxlIGFwcGxpY2FibGVzIGNhbiBiZSBhcHBsaWVkIHRvIHNwZWNpZmllZCBjb25kaXRpb24sIHRoZSBvbmVcbiAgICogd2l0aCBoaWdoZXN0IHByaW9yaXR5IG9yIHNjb3JlIHdpbnMuXG4gICAqL1xuICBnZXRQcmlvcml0eT8oLi4ucGFyYW1zKTogUHJpb3JpdHkgfCBudW1iZXI7XG59XG5cbi8qKlxuICogSGVscGVyIGxvZ2ljIHRvIHJlc29sdmUgYmVzdCBtYXRjaGluZyBBcHBsaWNhYmxlXG4gKlxuICogRmluZGluZyBiZXN0IG1hdGNoIGlzIGEgdHdvIHN0ZXAgcHJvY2VzczpcbiAqIDEuIEZpbmQgYWxsIG1hdGNoaW5nIGFwcGxpY2FibGVzXG4gKiAgICAtIGFsbCBhcHBsaWNhYmxlcyBmb3Igd2hpY2ggaGFzTWF0Y2goLi4ubWF0Y2hQYXJhbXMpIHdpbGwgcmV0dXJuIHRydWVcbiAqICAgIC0gYWxsIGFwcGxpY2FibGVzIHdpdGhvdXQgaGFzTWF0Y2ggbWV0aG9kIChpbXBsaWNpdCBhbHdheXMgbWF0Y2gpXG4gKiAyLiBGaW5kIHRoZSBhcHBsaWNhYmxlIHdpdGggaGlnaGVzdCBwcmlvcml0eVxuICogICAgLSBhcHBsaWNhYmxlIHdpdGggaGlnaGVzdCBnZXRQcmlvcml0eSguLi5wcmlvcml0eVBhcmFtcykgd2lsbCB3aW5cbiAqICAgIC0gYXBwbGljYWJsZSB3aXRob3V0IGdldFByaW9yaXR5IG1ldGhvZCBpcyB0cmVhdGVkIGFzIFByaW9yaXR5Lk5PUk1BTCBvciAwXG4gKiAgICAtIGFwcGxpY2FibGVzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkgYXJlIHNvcnRlZCBieSBvcmRlciBvZiBwcm92aWRlcnMsIHRoZSBhcHBsaWNhYmxlIHRoYXQgd2FzIHByb3ZpZGVkIGxhdGVyIHdpbnNcbiAqXG4gKiBAcGFyYW0gYXBwbGljYWJsZXMgLSBhcnJheSBvciBhcHBsaWNhYmxlLWxpa2UgaW5zdGFuY2VzXG4gKiBAcGFyYW0gbWF0Y2hQYXJhbXMgLSBhcnJheSBvZiBwYXJhbWV0ZXJzIHBhc3NlZCBmb3IgaGFzTWF0Y2ggY2FsbHNcbiAqIEBwYXJhbSBwcmlvcml0eVBhcmFtcyAtIGFycmF5IG9mIHBhcmFtZXRlcnMgcGFzc2VkIGZvciBnZXRQcmlvcml0eSBjYWxsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFwcGxpY2FibGU8VCBleHRlbmRzIEFwcGxpY2FibGU+KFxuICBhcHBsaWNhYmxlczogVFtdLFxuICBtYXRjaFBhcmFtczogYW55W10gPSBbXSxcbiAgcHJpb3JpdHlQYXJhbXM6IGFueVtdID0gW11cbik6IFQgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaGVkQXBwbGljYWJsZXMgPSAoYXBwbGljYWJsZXMgPz8gW10pLmZpbHRlcihcbiAgICAoYXBwbGljYWJsZSkgPT4gIWFwcGxpY2FibGUuaGFzTWF0Y2ggfHwgYXBwbGljYWJsZS5oYXNNYXRjaCguLi5tYXRjaFBhcmFtcylcbiAgKTtcblxuICBpZiAobWF0Y2hlZEFwcGxpY2FibGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gbWF0Y2hlZEFwcGxpY2FibGVzWzBdO1xuICB9XG5cbiAgbGV0IGxhc3RQcmlvcml0eSA9IC1JbmZpbml0eTtcbiAgcmV0dXJuIG1hdGNoZWRBcHBsaWNhYmxlcy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgIGNvbnN0IGN1cnJQcmlvcml0eSA9IGN1cnIuZ2V0UHJpb3JpdHlcbiAgICAgID8gY3Vyci5nZXRQcmlvcml0eSguLi5wcmlvcml0eVBhcmFtcylcbiAgICAgIDogUHJpb3JpdHkuTk9STUFMO1xuICAgIGlmIChsYXN0UHJpb3JpdHkgPiBjdXJyUHJpb3JpdHkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGxhc3RQcmlvcml0eSA9IGN1cnJQcmlvcml0eTtcbiAgICByZXR1cm4gY3VycjtcbiAgfSwgdW5kZWZpbmVkKTtcbn1cbiJdfQ==