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...