JSFiddle - React, Tailwind, and code Playground
by Tyler Brown
JavaScript
const pricing = (() => {
const absMin = 8_125;
const pricePoints = [
{cap: 100, price: 3_015},
{cap: 150, price: 4_266},
{cap: 200, price: 5_474},
{cap: 250, price: 6_558},
{cap: 300, price: 7_467},
{cap: 350, price: 8_260},
{cap: 400, price: 8_968},
{cap: 450, price: 9_599},
{cap: 500, price: 10_145},
{cap: 600, price: 11_472},
{cap: 700, price: 12_376},
{cap: 800, price: 13_264},
{cap: 900, price: 13_905},
{cap: 1_000, price: 14_680},
{cap: 1_250, price: 16_125},
{cap: 1_500, price: 17_175},
{cap: 1_750, price: 18_638},
{cap: 2_000, price: 20_100},
{cap: 2_500, price: 23_200},
{cap: 3_000, price: 26_340},
{cap: 3_500, price: 29_120},
{cap: 4_000, price: 31_200},
{cap: 4_500, price: 34_515},
{cap: 5_000, price: 37_650},
{cap: 5_500, price: 40_590},
{cap: 6_000, price: 43_440},
{cap: 6_500, price: 46_020},
{cap: 7_000, price: 48_580},
{cap: 8_000, price: 54_400},
{cap: 9_000, price: 60_030},
{cap: 10_000, price: 65_300},
{cap: 15_000, price: 85_500},
{cap: 20_000, price: 93_000},
];
const percents = {
intl: 0.10,
vol: (empCount) => (empCount > 300) ? 0.3 : 0.3,
volNoMatch: 0.80,
groups: 0.25,
analytics: 0.20,
sso: (empCount) => (empCount > 300) ? 0.10 : 0.05,
payroll: 0.20,
};
const getPrice = (empCount=0, {match=false, intl=false, vol=false, groups=false, analytics=false, sso=false, payroll=false, madness=false} = {}) => {
if (empCount > 10000) return null;
const pricePoint = pricePoints.find(mp => mp.cap >= empCount);
if (!pricePoint) return null;
const basePrice = pricePoint.price;
const priceFromPercent = (percentage) => Math.round(basePrice * percentage);
const hasMatch = !!(match || intl);
const...