linear-feet
Version:
A simple package for calculating linear feet
49 lines (48 loc) • 2.15 kB
JavaScript
;
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;