UNPKG

linear-feet

Version:

A simple package for calculating linear feet

49 lines (48 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const options_1 = require("./options"); const calculate = (skids, options) => { const concreteOptions = getConcreteOptions(options); if (!Array.isArray(skids)) { skids = [skids]; } const linearFeet = skids .map(skid => getLinearFeet(skid, concreteOptions)) .reduce((acc, curr) => acc + curr); return linearFeet; }; const getLinearFeet = (skid, options) => { let numberAccross = Math.floor(options.truckWidth / skid.width); if (options.maxSkidsAcross) { numberAccross = Math.min(numberAccross, options.maxSkidsAcross); } let linearFeet = skid.length / 12 / numberAccross; //12 inches to a foot if (isStackable(skid, options)) { const maxStacked = Math.floor(Math.min(options.truckHeight / skid.height, options.maxSkidsStackable)); linearFeet /= maxStacked; } linearFeet *= skid.quantity; return linearFeet; }; const isStackable = (skid, options) => { const isStackable = skid.stackable && (skid.height <= options.maxStackableHeight) && (skid.length <= options.maxStackableLength) && (!options.maxStackableWidth || skid.width <= options.maxStackableWidth); return isStackable; }; const getConcreteOptions = (options) => { if (!options) { return options_1.DefaultOptions; } return { truckWidth: options.truckWidth || options_1.DefaultOptions.truckWidth, maxStackableHeight: options.maxStackableHeight || options_1.DefaultOptions.maxStackableHeight, maxStackableLength: options.maxStackableLength || options_1.DefaultOptions.maxStackableLength, maxStackableWidth: options.maxStackableWidth || options_1.DefaultOptions.maxStackableWidth, maxSkidsAcross: options.maxSkidsAcross || options_1.DefaultOptions.maxSkidsAcross, maxSkidsStackable: options.maxSkidsStackable || options_1.DefaultOptions.maxSkidsStackable, truckHeight: options.truckHeight || options_1.DefaultOptions.truckHeight }; }; exports.default = calculate;