Simple cleanup

This commit is contained in:
Ozzie Gooen 2020-02-07 20:50:16 +00:00
parent db12e64c98
commit 8d42aaacd0
9 changed files with 121 additions and 75 deletions

View File

@ -8,7 +8,7 @@ type group =
| Fund(fund)
| All;
type parameter =
type output =
| DONATIONS
| PAYOUTS;

View File

@ -12,24 +12,64 @@ function handleChange(handleChange$1, $$event) {
return Curry._1(handleChange$1, $$event.target.value);
}
function get(state, field) {
switch (field) {
case /* Group */0 :
return state[/* group */0];
case /* Year */1 :
return state[/* year */1];
case /* Output */2 :
return state[/* output */2];
}
}
function set(state, field, value) {
switch (field) {
case /* Group */0 :
return /* record */[
/* group */value,
/* year */state[/* year */1],
/* output */state[/* output */2]
];
case /* Year */1 :
return /* record */[
/* group */state[/* group */0],
/* year */value,
/* output */state[/* output */2]
];
case /* Output */2 :
return /* record */[
/* group */state[/* group */0],
/* year */state[/* year */1],
/* output */value
];
}
}
var Form = {
get: get,
set: set
};
function EAFunds_Form(Props) {
var match = React.useState((function () {
return "Animal Welfare Fund";
return /* record */[
/* group */"Animal Welfare Fund",
/* year */2021,
/* output */"Donations"
];
}));
var setGroup = match[1];
var group = match[0];
var setForm = match[1];
var form = match[0];
var match$1 = React.useState((function () {
return 2021;
}));
var setYear = match$1[1];
var year = match$1[0];
var match$2 = React.useState((function () {
return "Donations";
}));
var setProperty = match$2[1];
var property = match$2[0];
var setProperty = match$1[1];
var property = match$1[0];
var foundGroup = Belt_Array.getBy(EAFunds_Data$ProbExample.funds, (function (r) {
return r[/* name */1] === group;
return r[/* name */1] === form[/* group */0];
}));
var foundProperty;
switch (property) {
@ -44,22 +84,25 @@ function EAFunds_Form(Props) {
}
return React.createElement(React.Fragment, undefined, React.createElement("input", {
type: "number",
value: year.toString(),
value: form[/* year */1].toString(),
onChange: (function (param) {
var r = param.target.value;
var r$1 = Number(r);
if (r$1 >= 2020.0 && r$1 <= 2050.0) {
return Curry._1(setYear, (function (param) {
return r$1;
return Curry._1(setForm, (function (param) {
return set(form, /* Year */1, r$1);
}));
} else {
return /* () */0;
}
})
}), React.createElement(Antd_Radio.Group.make, {
value: group,
value: form[/* group */0],
onChange: (function (param) {
return Curry._1(setGroup, param.target.value);
var r = param.target.value;
return Curry._1(setForm, (function (param) {
return set(form, /* Group */0, r);
}));
}),
children: $$Array.map((function (f) {
return React.createElement(Antd_Radio.make, {
@ -79,11 +122,12 @@ function EAFunds_Form(Props) {
}), React.createElement(Antd_Radio.make, {
value: "Payouts",
children: "Payouts"
})), foundGroup !== undefined && foundProperty !== undefined ? EAFunds_Model$ProbExample.run(foundGroup[/* group */0], year, foundProperty) : "");
})), foundGroup !== undefined && foundProperty !== undefined ? EAFunds_Model$ProbExample.run(foundGroup[/* group */0], form[/* year */1], foundProperty) : "");
}
var make = EAFunds_Form;
exports.handleChange = handleChange;
exports.Form = Form;
exports.make = make;
/* react Not a pure module */

View File

@ -3,12 +3,23 @@ open EAFunds_Data;
let handleChange = (handleChange, event) =>
handleChange(ReactEvent.Form.target(event)##value);
module Form = [%lenses
type state = {
group: string,
year: float,
output: string,
}
];
[@react.component]
let make = () => {
let (group, setGroup) = React.useState(() => "Animal Welfare Fund");
let (year, setYear) = React.useState(() => 2021.);
let (form, setForm) =
React.useState(() =>
{Form.group: "Animal Welfare Fund", year: 2021., output: "Donations"}
);
let (property, setProperty) = React.useState(() => "Donations");
let foundGroup = Belt.Array.getBy(EAFunds_Data.funds, r => r.name === group);
let foundGroup =
Belt.Array.getBy(EAFunds_Data.funds, r => r.name === form.group);
let foundProperty =
switch (property) {
| "Donations" => Some(DONATIONS)
@ -18,15 +29,20 @@ let make = () => {
<>
<input
type_="number"
value={year |> Js.Float.toString}
value={Form.get(form, Year) |> Js.Float.toString}
onChange={handleChange(r =>
switch (Js.Float.fromString(r)) {
| r when r >= 2020.0 && r <= 2050.0 => setYear(_ => r)
| r when r >= 2020.0 && r <= 2050.0 =>
setForm(_ => Form.set(form, Form.Year, r))
| _ => ()
}
)}
/>
<Antd.Radio.Group value=group onChange={handleChange(r => setGroup(r))}>
<Antd.Radio.Group
value={Form.get(form, Group)}
onChange={handleChange(r =>
setForm(_ => Form.set(form, Form.Group, r))
)}>
{EAFunds_Data.funds
|> Array.map(f =>
<Antd.Radio value={f.name}>
@ -46,7 +62,8 @@ let make = () => {
</Antd.Radio.Group>
{(
switch (foundGroup, foundProperty) {
| (Some(g), Some(f)) => EAFunds_Model.run(g.group, year, f)
| (Some(g), Some(f)) =>
EAFunds_Model.run(g.group, Form.get(form, Year), f)
| _ => ""
}
)

View File

@ -1,16 +1,5 @@
open BsReform;
open EAFunds_Data;
module FormConfig = [%lenses
type state = {
group: string,
year: float,
parameter: string,
}
];
module Form = ReForm.Make(FormConfig);
let handleChange = (handleChange, event) =>
handleChange(ReactEvent.Form.target(event)##value);
@ -18,6 +7,7 @@ let handleChange = (handleChange, event) =>
let make = () => {
let (year, setYear) = React.useState(() => 2021.);
<>
<h1> {"EA Funds Forecasting Model 0.1" |> ReasonReact.string} </h1>
<input
type_="number"
value={year |> Js.Float.toString}

View File

@ -20,29 +20,29 @@ function calculateDifference(currentValue, yearInQuestion, y) {
return Math$ProbExample.normal(currentValue * meanDiff, 0.2 * stdDevDiff);
}
function currentValue(group, parameter) {
function currentValue(group, output) {
if (group) {
switch (group[0]) {
case /* ANIMAL_WELFARE */0 :
if (parameter) {
if (output) {
return 2300000.0;
} else {
return 300000.0;
}
case /* GLOBAL_HEALTH */1 :
if (parameter) {
if (output) {
return 500000.0;
} else {
return 1000000.0;
}
case /* LONG_TERM_FUTURE */2 :
if (parameter) {
if (output) {
return 120000.0;
} else {
return 600000.0;
}
case /* META */3 :
if (parameter) {
if (output) {
return 830000.0;
} else {
return 9300000.0;
@ -50,7 +50,7 @@ function currentValue(group, parameter) {
}
} else {
return currentValue(/* Fund */[/* ANIMAL_WELFARE */0], parameter) + currentValue(/* Fund */[/* GLOBAL_HEALTH */1], parameter) + currentValue(/* Fund */[/* LONG_TERM_FUTURE */2], parameter) + currentValue(/* Fund */[/* META */3], parameter);
return currentValue(/* Fund */[/* ANIMAL_WELFARE */0], output) + currentValue(/* Fund */[/* GLOBAL_HEALTH */1], output) + currentValue(/* Fund */[/* LONG_TERM_FUTURE */2], output) + currentValue(/* Fund */[/* META */3], output);
}
}
@ -63,8 +63,8 @@ var PayoutsIfAround = {
currentValue: currentValue
};
function run(group, year, parameter) {
return calculateDifference(currentValue(group, parameter), year, /* record */[
function run(group, year, output) {
return calculateDifference(currentValue(group, output), year, /* record */[
/* meanDiff */1.1,
/* stdDiff */1.1
]);

View File

@ -22,13 +22,13 @@ module PayoutsIfAround = {
Math.normal(currentValue *. meanDiff, firstYearStdDev *. stdDevDiff);
};
let rec currentValue = (group: group, parameter) => {
let rec currentValue = (group: group, output) => {
let sum = (): float =>
currentValue(Fund(ANIMAL_WELFARE), parameter)
+. currentValue(Fund(GLOBAL_HEALTH), parameter)
+. currentValue(Fund(LONG_TERM_FUTURE), parameter)
+. currentValue(Fund(META), parameter);
switch (group, parameter) {
currentValue(Fund(ANIMAL_WELFARE), output)
+. currentValue(Fund(GLOBAL_HEALTH), output)
+. currentValue(Fund(LONG_TERM_FUTURE), output)
+. currentValue(Fund(META), output);
switch (group, output) {
| (Fund(ANIMAL_WELFARE), DONATIONS) => 300000.0
| (Fund(ANIMAL_WELFARE), PAYOUTS) => 2300000.0
| (Fund(GLOBAL_HEALTH), DONATIONS) => 1000000.0
@ -42,10 +42,10 @@ module PayoutsIfAround = {
};
};
let run = (group: group, year: float, parameter: parameter) => {
let run = (group: group, year: float, output: output) => {
PayoutsIfAround.(
calculateDifference(
currentValue(group, parameter),
currentValue(group, output),
year,
yearlyMeanGrowthRateIfNotClosed(group),
)
@ -56,6 +56,6 @@ module Model = {
type params = {
groups: array(fundWithInfo),
year: float,
parameters: array(parameter),
outputs: array(output),
};
};

View File

@ -1,16 +0,0 @@
'use strict';
var React = require("react");
var EAFunds_Model$ProbExample = require("./EAFunds/EAFunds_Model.bs.js");
var response = EAFunds_Model$ProbExample.run(/* Fund */[/* GLOBAL_HEALTH */1], 2029, /* DONATIONS */0);
function Funds(Props) {
return React.createElement("div", undefined, response);
}
var make = Funds;
exports.response = response;
exports.make = make;
/* response Not a pure module */

View File

@ -1,6 +0,0 @@
let response = EAFunds_Model.run(Fund(GLOBAL_HEALTH), 2029., DONATIONS);
[@react.component]
let make = () => {
<div> {React.string(response)} </div>;
};

17
src/Params.re Normal file
View File

@ -0,0 +1,17 @@
type yearAsFloat = {
min: option(float),
max: option(float),
};
type namedValue('a) = {
name: string,
value: 'a,
};
type choice('a) = list(namedValue('a));
type output =
| A
| B;
let nOutput: choice(output) = [{name: "sdfsdf", value: A}];