Minor date cleanup
This commit is contained in:
parent
f937a72c0d
commit
7a1145f409
|
@ -19,13 +19,14 @@
|
|||
"author": "",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"antd": "^3.26.8",
|
||||
"antd": "3.17.0",
|
||||
"autoprefixer": "^9.7.4",
|
||||
"bs-ant-design-alt": "^2.0.0-alpha.32",
|
||||
"bs-moment": "^0.4.5",
|
||||
"bs-ant-design-alt": "2.0.0-alpha.31",
|
||||
"bs-moment": "0.4.4",
|
||||
"bs-reform": "9.7.1",
|
||||
"lenses-ppx": "4.0.0",
|
||||
"less": "^3.10.3",
|
||||
"moment": "^2.24.0",
|
||||
"parcel-bundler": "^1.12.4",
|
||||
"parcel-plugin-less-js-enabled": "^1.0.2",
|
||||
"postcss-cli": "^7.1.0",
|
||||
|
|
6
src/App.re
Normal file
6
src/App.re
Normal file
|
@ -0,0 +1,6 @@
|
|||
[@react.component]
|
||||
let make = () => {
|
||||
<div className="w-full max-w-screen-xl mx-auto px-6">
|
||||
<FormBuilder.ModelForm model=EAFunds.Interface.model />
|
||||
</div>;
|
||||
};
|
|
@ -2,13 +2,10 @@
|
|||
|
||||
var React = require("react");
|
||||
var ReactDOMRe = require("reason-react/src/ReactDOMRe.js");
|
||||
var Prop$ProbExample = require("./lib/Prop.bs.js");
|
||||
var EAFunds_Model$ProbExample = require("./Models/EAFunds/EAFunds_Model.bs.js");
|
||||
var App$ProbExample = require("./App.bs.js");
|
||||
|
||||
((import('./styles/index.css')));
|
||||
|
||||
ReactDOMRe.renderToElementWithId(React.createElement(Prop$ProbExample.ModelForm.make, {
|
||||
model: EAFunds_Model$ProbExample.Interface.model
|
||||
}), "app");
|
||||
ReactDOMRe.renderToElementWithId(React.createElement(App$ProbExample.make, { }), "app");
|
||||
|
||||
/* Not a pure module */
|
||||
|
|
|
@ -1,5 +1,2 @@
|
|||
[%bs.raw {|import('./styles/index.css')|}];
|
||||
ReactDOMRe.renderToElementWithId(
|
||||
<Prop.ModelForm model=EAFunds_Model.Interface.model />,
|
||||
"app",
|
||||
);
|
||||
ReactDOMRe.renderToElementWithId(<App />, "app");
|
|
@ -1,55 +0,0 @@
|
|||
type fund =
|
||||
| ANIMAL_WELFARE
|
||||
| GLOBAL_HEALTH
|
||||
| LONG_TERM_FUTURE
|
||||
| META;
|
||||
|
||||
type group =
|
||||
| Fund(fund)
|
||||
| All;
|
||||
|
||||
type output =
|
||||
| DONATIONS
|
||||
| PAYOUTS;
|
||||
|
||||
type fundWithInfo = {
|
||||
group,
|
||||
name: string,
|
||||
existingDonations: option(float),
|
||||
existingPayouts: option(float),
|
||||
};
|
||||
|
||||
let makeFundWithInfo = (name, group, existingDonations, existingPayouts) => {
|
||||
group,
|
||||
name,
|
||||
existingDonations,
|
||||
existingPayouts,
|
||||
};
|
||||
|
||||
let funds = [|
|
||||
makeFundWithInfo(
|
||||
"Animal Welfare Fund",
|
||||
Fund(ANIMAL_WELFARE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Global Health Fund",
|
||||
Fund(GLOBAL_HEALTH),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Long Term Future Fund",
|
||||
Fund(LONG_TERM_FUTURE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Meta Fund",
|
||||
Fund(ANIMAL_WELFARE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo("All", All, None, None),
|
||||
|];
|
|
@ -1,134 +0,0 @@
|
|||
open EAFunds_Data;
|
||||
|
||||
type yearlyNumericDiff = {
|
||||
meanDiff: float,
|
||||
stdDiff: float,
|
||||
};
|
||||
|
||||
module PayoutsIfAround = {
|
||||
let currentYear = 2020.;
|
||||
let firstYearStdDev = 0.2;
|
||||
let yearDiff = year => year -. 2020.0;
|
||||
|
||||
let yearlyMeanGrowthRateIfNotClosed = (group: group): yearlyNumericDiff => {
|
||||
{meanDiff: 1.1, stdDiff: 1.1};
|
||||
};
|
||||
|
||||
let calculateDifference =
|
||||
(currentValue, yearInQuestion, y: yearlyNumericDiff) => {
|
||||
let yearDiff = yearDiff(yearInQuestion);
|
||||
let meanDiff = Js.Math.pow_float(~base=y.meanDiff, ~exp=yearDiff);
|
||||
let stdDevDiff = Js.Math.pow_float(~base=y.meanDiff, ~exp=yearDiff);
|
||||
FloatCdf.normal(currentValue *. meanDiff, firstYearStdDev *. stdDevDiff);
|
||||
};
|
||||
|
||||
let rec currentValue = (group: group, output) => {
|
||||
let sum = (): float =>
|
||||
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
|
||||
| (Fund(GLOBAL_HEALTH), PAYOUTS) => 500000.0
|
||||
| (Fund(LONG_TERM_FUTURE), DONATIONS) => 600000.0
|
||||
| (Fund(LONG_TERM_FUTURE), PAYOUTS) => 120000.0
|
||||
| (Fund(META), DONATIONS) => 9300000.0
|
||||
| (Fund(META), PAYOUTS) => 830000.0
|
||||
| (All, _) => sum()
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
let go = (group: group, year: float, output: output) => {
|
||||
PayoutsIfAround.(
|
||||
Prop.Value.FloatCdf(
|
||||
calculateDifference(
|
||||
currentValue(group, output),
|
||||
year,
|
||||
yearlyMeanGrowthRateIfNotClosed(group),
|
||||
),
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
module Interface = {
|
||||
open Prop;
|
||||
|
||||
let convertChoice = (s: string) =>
|
||||
switch (s) {
|
||||
| "animal" => Fund(ANIMAL_WELFARE)
|
||||
| "globalHealth" => Fund(GLOBAL_HEALTH)
|
||||
| "longTerm" => Fund(LONG_TERM_FUTURE)
|
||||
| "meta" => Fund(META)
|
||||
| _ => All
|
||||
};
|
||||
|
||||
let convertOutput = (s: string) =>
|
||||
switch (s) {
|
||||
| "donations" => DONATIONS
|
||||
| _ => PAYOUTS
|
||||
};
|
||||
|
||||
let run = (p: Combo.t) => {
|
||||
let get = Prop.ValueMap.get(p.inputValues);
|
||||
switch (get("Fund"), get("Year"), get("Output")) {
|
||||
| (
|
||||
Some(SelectSingle(fund)),
|
||||
Some(FloatPoint(intendedYear)),
|
||||
Some(SelectSingle(output)),
|
||||
) =>
|
||||
Some(go(convertChoice(fund), intendedYear, convertOutput(output)))
|
||||
| _ => None
|
||||
};
|
||||
};
|
||||
|
||||
let model: Model.t = {
|
||||
name: "Calculate the payments and payouts of EA Funds based on existing data.",
|
||||
author: "George Harrison",
|
||||
inputTypes: [|
|
||||
TypeWithMetadata.make(
|
||||
~name="Fund",
|
||||
~type_=
|
||||
SelectSingle({
|
||||
default: Some("total"),
|
||||
options: [
|
||||
{name: "Animal Welfare Fund", id: "animal"},
|
||||
{name: "Global Health Fund", id: "globalHealth"},
|
||||
{name: "Long Term Future Fund", id: "longTerm"},
|
||||
{name: "Meta Fund", id: "longterm"},
|
||||
{name: "All", id: "all"},
|
||||
],
|
||||
}),
|
||||
(),
|
||||
),
|
||||
TypeWithMetadata.make(
|
||||
~name="Year",
|
||||
~type_=
|
||||
Year({
|
||||
default: Some(2030.0),
|
||||
min: Some(2020.0),
|
||||
max: Some(2050.0),
|
||||
}),
|
||||
(),
|
||||
),
|
||||
TypeWithMetadata.currentYear,
|
||||
TypeWithMetadata.make(
|
||||
~name="Output",
|
||||
~type_=
|
||||
SelectSingle({
|
||||
default: Some("Output"),
|
||||
options: [
|
||||
{name: "Donations", id: "donations"},
|
||||
{name: "Funding", id: "funding"},
|
||||
],
|
||||
}),
|
||||
(),
|
||||
),
|
||||
|],
|
||||
outputTypes: [||],
|
||||
run,
|
||||
};
|
||||
};
|
62
src/lib/FormBuilder.re
Normal file
62
src/lib/FormBuilder.re
Normal file
|
@ -0,0 +1,62 @@
|
|||
open Prop;
|
||||
|
||||
type formState = {
|
||||
combo: Combo.t,
|
||||
setCombo: (Combo.t => Combo.t) => unit,
|
||||
setInputValue: (Combo.t, string, option(Value.t)) => unit,
|
||||
};
|
||||
|
||||
let makeHelpers = (combo): formState => {
|
||||
let (combo, setCombo) = React.useState(() => combo);
|
||||
let setInputValue = (combo, id, newValue) =>
|
||||
setCombo(_ => Combo.updateInputValue(combo, id, newValue));
|
||||
{combo, setCombo, setInputValue};
|
||||
};
|
||||
|
||||
module ModelForm = {
|
||||
let handleChange = (handleChange, event) =>
|
||||
handleChange(ReactEvent.Form.target(event)##value);
|
||||
|
||||
[@react.component]
|
||||
let make = (~model: Model.t) => {
|
||||
let formState = makeHelpers(Combo.fromModel(model));
|
||||
<div>
|
||||
<form
|
||||
className="bg-white rounded px-8 pt-6 pb-8 mb-4 mt-6 border-gray-200 border-solid border-2">
|
||||
<h1 className="text-gray-800 text-xl font-bold">
|
||||
{model.name |> ReasonReact.string}
|
||||
</h1>
|
||||
<p> {model.description |> ReasonReact.string} </p>
|
||||
<p> {model.author |> ReasonReact.string} </p>
|
||||
{Combo.inputTypeValuePairs(formState.combo)
|
||||
|> E.A.fmap(((type_: TypeWithMetadata.t, value)) =>
|
||||
<div className="box-border">
|
||||
<label
|
||||
className="block text-gray-700 text-sm font-bold mb-2 w-32 mt-3">
|
||||
{type_.name |> ReasonReact.string}
|
||||
</label>
|
||||
<ValueForm
|
||||
key={type_.id}
|
||||
type_
|
||||
value
|
||||
onChange={newValue =>
|
||||
formState.setInputValue(
|
||||
formState.combo,
|
||||
type_.id,
|
||||
newValue,
|
||||
)
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|> ReasonReact.array}
|
||||
<div className="bg-green-100 p-2 rounded-sm mt-6 text-lg">
|
||||
{model.run(formState.combo)
|
||||
|> E.O.fmap(Value.to_string)
|
||||
|> E.O.default("")
|
||||
|> ReasonReact.string}
|
||||
</div>
|
||||
</form>
|
||||
</div>;
|
||||
};
|
||||
};
|
106
src/lib/Prop.re
106
src/lib/Prop.re
|
@ -1,6 +1,7 @@
|
|||
module Value = {
|
||||
type t =
|
||||
| SelectSingle(string)
|
||||
| DateTime(MomentRe.Moment.t)
|
||||
| FloatPoint(float)
|
||||
| FloatCdf(string);
|
||||
|
||||
|
@ -8,6 +9,7 @@ module Value = {
|
|||
switch (t) {
|
||||
| SelectSingle(r) => r
|
||||
| FloatCdf(r) => r
|
||||
| DateTime(r) => r |> MomentRe.Moment.defaultFormat
|
||||
| FloatPoint(r) => r |> Js.Float.toFixed
|
||||
};
|
||||
};
|
||||
|
@ -35,6 +37,7 @@ module Type = {
|
|||
type t =
|
||||
| SelectSingle(selectSingle)
|
||||
| FloatPoint(withDefaultMinMax(float))
|
||||
| DateTime(withDefaultMinMax(MomentRe.Moment.t))
|
||||
| Year(withDefaultMinMax(float))
|
||||
| FloatCdf;
|
||||
|
||||
|
@ -42,6 +45,7 @@ module Type = {
|
|||
switch (t) {
|
||||
| Year(r) => r.default->Belt.Option.map(p => Value.FloatPoint(p))
|
||||
| FloatPoint(r) => r.default->Belt.Option.map(p => Value.FloatPoint(p))
|
||||
| DateTime(r) => r.default->Belt.Option.map(p => Value.DateTime(p))
|
||||
| SelectSingle(r) =>
|
||||
r.default->Belt.Option.map(p => Value.SelectSingle(p))
|
||||
| FloatCdf => None
|
||||
|
@ -96,14 +100,17 @@ module TypeWithMetadata = {
|
|||
assumptionType,
|
||||
};
|
||||
|
||||
// TODO: Change default here
|
||||
let currentYear =
|
||||
make(
|
||||
~id="currentYear",
|
||||
~name="Current Year",
|
||||
~description=None,
|
||||
~type_=
|
||||
Year({default: Some(2050.), min: Some(2020.0), max: Some(2050.0)}),
|
||||
DateTime({
|
||||
default: Some(MomentRe.momentNow()),
|
||||
min: Some(MomentRe.momentNow()),
|
||||
max: Some(MomentRe.momentNow()),
|
||||
}),
|
||||
~assumptionType=ASSUMPTION,
|
||||
(),
|
||||
);
|
||||
|
@ -112,7 +119,9 @@ module TypeWithMetadata = {
|
|||
module Model = {
|
||||
type t = {
|
||||
name: string,
|
||||
description: string,
|
||||
author: string,
|
||||
version: string,
|
||||
inputTypes: array(TypeWithMetadata.t),
|
||||
outputTypes: array(TypeWithMetadata.t),
|
||||
run: combo => option(Value.t),
|
||||
|
@ -167,96 +176,3 @@ module Combo = {
|
|||
|
||||
let run = (t: t, f): ValueMap.t => f(t.inputValues);
|
||||
};
|
||||
|
||||
module ValueForm = {
|
||||
let handleChange = (handleChange, event) =>
|
||||
handleChange(ReactEvent.Form.target(event)##value);
|
||||
type onChange = option(Value.t) => unit;
|
||||
|
||||
[@react.component]
|
||||
let make =
|
||||
(
|
||||
~type_: TypeWithMetadata.t,
|
||||
~value: option(Value.t),
|
||||
~onChange: onChange,
|
||||
) => {
|
||||
switch (type_.type_, value) {
|
||||
| (Year(_), Some(FloatPoint(r))) =>
|
||||
<input
|
||||
type_="number"
|
||||
value={r |> Js.Float.toString}
|
||||
onChange={handleChange(r =>
|
||||
switch (Js.Float.fromString(r)) {
|
||||
| r => onChange(Some(Value.FloatPoint(r)))
|
||||
}
|
||||
)}
|
||||
/>
|
||||
| (FloatPoint(_), Some(FloatPoint(r))) =>
|
||||
<input
|
||||
type_="number"
|
||||
value={r |> Js.Float.toString}
|
||||
onChange={handleChange(r =>
|
||||
switch (Js.Float.fromString(r)) {
|
||||
| r => onChange(Some(Value.FloatPoint(r)))
|
||||
}
|
||||
)}
|
||||
/>
|
||||
| (Year(_), _)
|
||||
| (FloatPoint(_), _) => <input type_="number" value="" />
|
||||
| (SelectSingle(t), Some(SelectSingle(r))) =>
|
||||
<select
|
||||
defaultValue=r
|
||||
onChange={handleChange(l => onChange(Some(Value.SelectSingle(l))))}>
|
||||
{t.options
|
||||
|> E.A.of_list
|
||||
|> E.A.fmap((l: Type.selectOption) =>
|
||||
<option value={l.id} key={l.id}>
|
||||
{l.name |> ReasonReact.string}
|
||||
</option>
|
||||
)
|
||||
|> ReasonReact.array}
|
||||
</select>
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
type formState = {
|
||||
combo: Combo.t,
|
||||
setCombo: (Combo.t => Combo.t) => unit,
|
||||
setInputValue: (Combo.t, string, option(Value.t)) => unit,
|
||||
};
|
||||
|
||||
let makeHelpers = (combo): formState => {
|
||||
let (combo, setCombo) = React.useState(() => combo);
|
||||
let setInputValue = (combo, id, newValue) =>
|
||||
setCombo(_ => Combo.updateInputValue(combo, id, newValue));
|
||||
{combo, setCombo, setInputValue};
|
||||
};
|
||||
|
||||
module ModelForm = {
|
||||
let handleChange = (handleChange, event) =>
|
||||
handleChange(ReactEvent.Form.target(event)##value);
|
||||
|
||||
[@react.component]
|
||||
let make = (~model: Model.t) => {
|
||||
let formState = makeHelpers(Combo.fromModel(model));
|
||||
<div>
|
||||
{Combo.inputTypeValuePairs(formState.combo)
|
||||
|> E.A.fmap(((type_, value)) =>
|
||||
<ValueForm
|
||||
key={type_.id}
|
||||
type_
|
||||
value
|
||||
onChange={newValue =>
|
||||
formState.setInputValue(formState.combo, type_.id, newValue)
|
||||
}
|
||||
/>
|
||||
)
|
||||
|> ReasonReact.array}
|
||||
{model.run(formState.combo)
|
||||
|> E.O.fmap(Value.to_string)
|
||||
|> E.O.default("")
|
||||
|> ReasonReact.string}
|
||||
</div>;
|
||||
};
|
||||
};
|
63
src/lib/ValueForm.re
Normal file
63
src/lib/ValueForm.re
Normal file
|
@ -0,0 +1,63 @@
|
|||
open Prop;
|
||||
let handleChange = (handleChange, event) =>
|
||||
handleChange(ReactEvent.Form.target(event)##value);
|
||||
type onChange = option(Value.t) => unit;
|
||||
|
||||
[@react.component]
|
||||
let make =
|
||||
(
|
||||
~type_: TypeWithMetadata.t,
|
||||
~value: option(Value.t),
|
||||
~onChange: onChange,
|
||||
) => {
|
||||
switch (type_.type_, value) {
|
||||
| (Year(_), Some(FloatPoint(r))) =>
|
||||
<input
|
||||
className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
|
||||
type_="number"
|
||||
value={r |> Js.Float.toString}
|
||||
onChange={handleChange(r =>
|
||||
switch (Js.Float.fromString(r)) {
|
||||
| r => onChange(Some(Value.FloatPoint(r)))
|
||||
}
|
||||
)}
|
||||
/>
|
||||
| (FloatPoint(_), Some(FloatPoint(r))) =>
|
||||
<input
|
||||
className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
|
||||
type_="number"
|
||||
value={r |> Js.Float.toString}
|
||||
onChange={handleChange(r =>
|
||||
switch (Js.Float.fromString(r)) {
|
||||
| r => onChange(Some(Value.FloatPoint(r)))
|
||||
}
|
||||
)}
|
||||
/>
|
||||
| (Year(_), _)
|
||||
| (FloatPoint(_), _) => <input type_="number" value="" />
|
||||
| (SelectSingle(t), Some(SelectSingle(r))) =>
|
||||
<select
|
||||
defaultValue=r
|
||||
className="block appearance-none w-full bg-white border border-gray-400 hover:border-gray-500 px-4 py-2 pr-8 rounded shadow leading-tight focus:outline-none focus:shadow-outline"
|
||||
onChange={handleChange(l => onChange(Some(Value.SelectSingle(l))))}>
|
||||
{t.options
|
||||
|> E.A.of_list
|
||||
|> E.A.fmap((l: Type.selectOption) =>
|
||||
<option value={l.id} key={l.id}>
|
||||
{l.name |> ReasonReact.string}
|
||||
</option>
|
||||
)
|
||||
|> ReasonReact.array}
|
||||
</select>
|
||||
| (DateTime(_), Some(DateTime((d: MomentRe.Moment.t)))) =>
|
||||
<input
|
||||
type_="date"
|
||||
value={MomentRe.Moment.format("YYYY-MM-DD", d)}
|
||||
onChange={handleChange(r =>
|
||||
onChange(
|
||||
Some(Value.DateTime(MomentRe.momentWithFormat(r, "YYYY-MM-DD"))),
|
||||
)
|
||||
)}
|
||||
/>
|
||||
};
|
||||
};
|
226
src/models/EAFunds.re
Normal file
226
src/models/EAFunds.re
Normal file
|
@ -0,0 +1,226 @@
|
|||
module Data = {
|
||||
type fund =
|
||||
| ANIMAL_WELFARE
|
||||
| GLOBAL_HEALTH
|
||||
| LONG_TERM_FUTURE
|
||||
| META;
|
||||
|
||||
type group =
|
||||
| Fund(fund)
|
||||
| All;
|
||||
|
||||
type output =
|
||||
| DONATIONS
|
||||
| PAYOUTS;
|
||||
|
||||
type fundWithInfo = {
|
||||
group,
|
||||
name: string,
|
||||
existingDonations: option(float),
|
||||
existingPayouts: option(float),
|
||||
};
|
||||
|
||||
let makeFundWithInfo = (name, group, existingDonations, existingPayouts) => {
|
||||
group,
|
||||
name,
|
||||
existingDonations,
|
||||
existingPayouts,
|
||||
};
|
||||
|
||||
let funds = [|
|
||||
makeFundWithInfo(
|
||||
"Animal Welfare Fund",
|
||||
Fund(ANIMAL_WELFARE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Global Health Fund",
|
||||
Fund(GLOBAL_HEALTH),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Long Term Future Fund",
|
||||
Fund(LONG_TERM_FUTURE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo(
|
||||
"Meta Fund",
|
||||
Fund(ANIMAL_WELFARE),
|
||||
Some(4000.0),
|
||||
Some(10.0),
|
||||
),
|
||||
makeFundWithInfo("All", All, None, None),
|
||||
|];
|
||||
};
|
||||
|
||||
module Model = {
|
||||
open Data;
|
||||
let currentYear = 2020.;
|
||||
let firstYearStdDev = 0.2;
|
||||
type yearlyNumericDiff = {
|
||||
meanDiff: float,
|
||||
stdDiff: float,
|
||||
};
|
||||
|
||||
let yearlyMeanGrowthRateIfNotClosed = (group: group): yearlyNumericDiff => {
|
||||
{meanDiff: 1.1, stdDiff: 1.1};
|
||||
};
|
||||
|
||||
let calculateDifference =
|
||||
(currentValue, dateTime, currentDateTime, y: yearlyNumericDiff) => {
|
||||
let yearDiff = MomentRe.diff(dateTime, currentDateTime, `days) /. 365.;
|
||||
let meanDiff = Js.Math.pow_float(~base=y.meanDiff, ~exp=yearDiff);
|
||||
let stdDevDiff = Js.Math.pow_float(~base=y.meanDiff, ~exp=yearDiff);
|
||||
FloatCdf.normal(currentValue *. meanDiff, firstYearStdDev *. stdDevDiff);
|
||||
};
|
||||
|
||||
let rec currentValue = (group: group, output) => {
|
||||
let sum = (): float =>
|
||||
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
|
||||
| (Fund(GLOBAL_HEALTH), PAYOUTS) => 500000.0
|
||||
| (Fund(LONG_TERM_FUTURE), DONATIONS) => 600000.0
|
||||
| (Fund(LONG_TERM_FUTURE), PAYOUTS) => 120000.0
|
||||
| (Fund(META), DONATIONS) => 9300000.0
|
||||
| (Fund(META), PAYOUTS) => 830000.0
|
||||
| (All, _) => sum()
|
||||
};
|
||||
};
|
||||
let make =
|
||||
(
|
||||
group: group,
|
||||
dateTime: MomentRe.Moment.t,
|
||||
currentDateTime: MomentRe.Moment.t,
|
||||
output: output,
|
||||
) => {
|
||||
Prop.Value.FloatCdf(
|
||||
calculateDifference(
|
||||
currentValue(group, output),
|
||||
dateTime,
|
||||
currentDateTime,
|
||||
yearlyMeanGrowthRateIfNotClosed(group),
|
||||
),
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
module Interface = {
|
||||
open Data;
|
||||
let convertChoice = (s: string) =>
|
||||
switch (s) {
|
||||
| "animal" => Fund(ANIMAL_WELFARE)
|
||||
| "globalHealth" => Fund(GLOBAL_HEALTH)
|
||||
| "longTerm" => Fund(LONG_TERM_FUTURE)
|
||||
| "meta" => Fund(META)
|
||||
| _ => All
|
||||
};
|
||||
|
||||
let convertOutput = (s: string) =>
|
||||
switch (s) {
|
||||
| "donations" => DONATIONS
|
||||
| _ => PAYOUTS
|
||||
};
|
||||
|
||||
let run = (p: Prop.Combo.t) => {
|
||||
let get = Prop.ValueMap.get(p.inputValues);
|
||||
switch (
|
||||
get("Fund"),
|
||||
get("Day"),
|
||||
get(Prop.TypeWithMetadata.currentYear.id),
|
||||
get("Output"),
|
||||
) {
|
||||
| (
|
||||
Some(SelectSingle(fund)),
|
||||
Some(DateTime(intendedYear)),
|
||||
Some(DateTime(currentYear)),
|
||||
Some(SelectSingle(output)),
|
||||
) =>
|
||||
Some(
|
||||
Model.make(
|
||||
convertChoice(fund),
|
||||
intendedYear,
|
||||
currentYear,
|
||||
convertOutput(output),
|
||||
),
|
||||
)
|
||||
| _ => None
|
||||
};
|
||||
};
|
||||
|
||||
let model: Prop.Model.t =
|
||||
Prop.{
|
||||
name: "EA Funds: Donations & Payouts",
|
||||
description: "Calculate the payments and payouts of EA Funds based on existing data.",
|
||||
version: "1.0.0",
|
||||
author: "Ozzie Gooen",
|
||||
inputTypes: [|
|
||||
TypeWithMetadata.make(
|
||||
~name="Fund",
|
||||
~type_=
|
||||
SelectSingle({
|
||||
default: Some("total"),
|
||||
options: [
|
||||
{name: "Animal Welfare Fund", id: "animal"},
|
||||
{name: "Global Health Fund", id: "globalHealth"},
|
||||
{name: "Long Term Future Fund", id: "longTerm"},
|
||||
{name: "Meta Fund", id: "longterm"},
|
||||
{name: "All", id: "all"},
|
||||
],
|
||||
}),
|
||||
(),
|
||||
),
|
||||
TypeWithMetadata.make(
|
||||
~name="Day",
|
||||
~type_=
|
||||
DateTime({
|
||||
default:
|
||||
Some(
|
||||
MomentRe.Moment.add(
|
||||
~duration=MomentRe.duration(5., `years),
|
||||
MomentRe.momentNow(),
|
||||
),
|
||||
),
|
||||
min:
|
||||
Some(
|
||||
MomentRe.Moment.subtract(
|
||||
~duration=MomentRe.duration(20., `years),
|
||||
MomentRe.momentNow(),
|
||||
),
|
||||
),
|
||||
max:
|
||||
Some(
|
||||
MomentRe.Moment.add(
|
||||
~duration=MomentRe.duration(20., `years),
|
||||
MomentRe.momentNow(),
|
||||
),
|
||||
),
|
||||
}),
|
||||
(),
|
||||
),
|
||||
TypeWithMetadata.currentYear,
|
||||
TypeWithMetadata.make(
|
||||
~name="Output",
|
||||
~type_=
|
||||
SelectSingle({
|
||||
default: Some("Output"),
|
||||
options: [
|
||||
{name: "Donations", id: "donations"},
|
||||
{name: "Funding", id: "funding"},
|
||||
],
|
||||
}),
|
||||
(),
|
||||
),
|
||||
|],
|
||||
outputTypes: [||],
|
||||
run,
|
||||
};
|
||||
};
|
315
yarn.lock
315
yarn.lock
|
@ -2,13 +2,6 @@
|
|||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@ant-design/colors@^3.1.0":
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-3.2.2.tgz#5ad43d619e911f3488ebac303d606e66a8423903"
|
||||
integrity sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==
|
||||
dependencies:
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@ant-design/create-react-context@^0.2.4":
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz#f5f5a9163b4772097712837397ad30e22e79f858"
|
||||
|
@ -25,24 +18,11 @@
|
|||
ant-design-palettes "^1.1.3"
|
||||
babel-runtime "^6.26.0"
|
||||
|
||||
"@ant-design/icons-react@~2.0.1":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/icons-react/-/icons-react-2.0.1.tgz#17a2513571ab317aca2927e58cea25dd31e536fb"
|
||||
integrity sha512-r1QfoltMuruJZqdiKcbPim3d8LNsVPB733U0gZEUSxBLuqilwsW28K2rCTWSMTjmFX7Mfpf+v/wdiFe/XCqThw==
|
||||
dependencies:
|
||||
"@ant-design/colors" "^3.1.0"
|
||||
babel-runtime "^6.26.0"
|
||||
|
||||
"@ant-design/icons@~1.2.0":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-1.2.1.tgz#8e19301b1433ec67d6bbd0e892782e2ade561ff9"
|
||||
integrity sha512-gQx3nH6m1xvebOWh5xibhzVK02aoqHY7JUXUS4doAidSDRWsj5iwKC8Gq9DemDZ4T+bW6xO7jJZN1UsbvcW7Uw==
|
||||
|
||||
"@ant-design/icons@~2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a"
|
||||
integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==
|
||||
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3":
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
|
||||
|
@ -922,7 +902,7 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
|
||||
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
|
||||
|
||||
"@types/react-slick@^0.23.3", "@types/react-slick@^0.23.4":
|
||||
"@types/react-slick@^0.23.3":
|
||||
version "0.23.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-slick/-/react-slick-0.23.4.tgz#c97e2a9e7e3d1933c68593b8e82752fab1e8ce53"
|
||||
integrity sha512-vXoIy4GUfB7/YgqubR4H7RALo+pRdMYCeLgWwV3MPwl5pggTlEkFBTF19R7u+LJc85uMqC7RfsbkqPLMQ4ab+A==
|
||||
|
@ -1118,66 +1098,6 @@ antd@3.17.0:
|
|||
shallowequal "^1.1.0"
|
||||
warning "~4.0.2"
|
||||
|
||||
antd@^3.26.8:
|
||||
version "3.26.8"
|
||||
resolved "https://registry.yarnpkg.com/antd/-/antd-3.26.8.tgz#e40982c5cdb6c5c2c5f037ead27889b5f71e4ea3"
|
||||
integrity sha512-Cz9VVGXG3e2qVAfBwC9SfYGe8bhsD/fQr5tiuRWXkQGSJe4FPJEd04u+6QgBCuQ8Y36kBZr1xDiWky6dwoJvsA==
|
||||
dependencies:
|
||||
"@ant-design/create-react-context" "^0.2.4"
|
||||
"@ant-design/icons" "~2.1.1"
|
||||
"@ant-design/icons-react" "~2.0.1"
|
||||
"@types/react-slick" "^0.23.4"
|
||||
array-tree-filter "^2.1.0"
|
||||
babel-runtime "6.x"
|
||||
classnames "~2.2.6"
|
||||
copy-to-clipboard "^3.2.0"
|
||||
css-animation "^1.5.0"
|
||||
dom-closest "^0.2.0"
|
||||
enquire.js "^2.1.6"
|
||||
is-mobile "^2.1.0"
|
||||
lodash "^4.17.13"
|
||||
moment "^2.24.0"
|
||||
omit.js "^1.0.2"
|
||||
prop-types "^15.7.2"
|
||||
raf "^3.4.1"
|
||||
rc-animate "^2.10.2"
|
||||
rc-calendar "~9.15.7"
|
||||
rc-cascader "~0.17.4"
|
||||
rc-checkbox "~2.1.6"
|
||||
rc-collapse "~1.11.3"
|
||||
rc-dialog "~7.6.0"
|
||||
rc-drawer "~3.1.1"
|
||||
rc-dropdown "~2.4.1"
|
||||
rc-editor-mention "^1.1.13"
|
||||
rc-form "^2.4.10"
|
||||
rc-input-number "~4.5.0"
|
||||
rc-mentions "~0.4.0"
|
||||
rc-menu "~7.5.1"
|
||||
rc-notification "~3.3.1"
|
||||
rc-pagination "~1.20.11"
|
||||
rc-progress "~2.5.0"
|
||||
rc-rate "~2.5.0"
|
||||
rc-resize-observer "^0.1.0"
|
||||
rc-select "~9.2.0"
|
||||
rc-slider "~8.7.1"
|
||||
rc-steps "~3.5.0"
|
||||
rc-switch "~1.9.0"
|
||||
rc-table "~6.10.5"
|
||||
rc-tabs "~9.7.0"
|
||||
rc-time-picker "~3.7.1"
|
||||
rc-tooltip "~3.7.3"
|
||||
rc-tree "~2.1.0"
|
||||
rc-tree-select "~2.9.1"
|
||||
rc-trigger "^2.6.2"
|
||||
rc-upload "~2.9.1"
|
||||
rc-util "^4.16.1"
|
||||
react-lazy-load "^3.0.13"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
react-slick "~0.25.2"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
shallowequal "^1.1.0"
|
||||
warning "~4.0.3"
|
||||
|
||||
anymatch@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
||||
|
@ -1533,16 +1453,21 @@ browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.8.3, browserslist@^4.8
|
|||
electron-to-chromium "^1.3.341"
|
||||
node-releases "^1.1.47"
|
||||
|
||||
bs-ant-design-alt@^2.0.0-alpha.32:
|
||||
version "2.0.0-alpha.32"
|
||||
resolved "https://registry.yarnpkg.com/bs-ant-design-alt/-/bs-ant-design-alt-2.0.0-alpha.32.tgz#544319a084ae870bfb7514d492f8ea4aa61a3982"
|
||||
integrity sha512-FTf+SHAIbUBGT6VClbUZrd1TjNJXTdq1hMv2DSowWWJpXlVOH0NjXxUvTkL8cAwNTd6peWTaLLkdk79frI7kLA==
|
||||
bs-ant-design-alt@2.0.0-alpha.31:
|
||||
version "2.0.0-alpha.31"
|
||||
resolved "https://registry.yarnpkg.com/bs-ant-design-alt/-/bs-ant-design-alt-2.0.0-alpha.31.tgz#425003babaf47eefdc81cb392d9f224bc18c651a"
|
||||
integrity sha512-N0wmBksjgyQ4ioLi6L/gTt8852ghrmdYOBvs7onckEQ/O86eYRbKSMGL8cqMvUYJLB3IxKXSS89cssApqzGpTw==
|
||||
dependencies:
|
||||
antd "3.17.0"
|
||||
bs-moment "^0.4.4"
|
||||
re-classnames "^4.0.0"
|
||||
|
||||
bs-moment@^0.4.4, bs-moment@^0.4.5:
|
||||
bs-moment@0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/bs-moment/-/bs-moment-0.4.4.tgz#3d59767e8cd0107393c4f371e15b95bf862ceaac"
|
||||
integrity sha512-fAcofbF1bTj6fuwk4cCZ0Teod75dhXPulnNhRwx7+PTtccNMdn35SCb98JxwrprQgCvoZircIgmu8nGLsOaqaA==
|
||||
|
||||
bs-moment@^0.4.4:
|
||||
version "0.4.5"
|
||||
resolved "https://registry.yarnpkg.com/bs-moment/-/bs-moment-0.4.5.tgz#3f84fed55c2a70d25b0b6025e4e8d821fcdd4dc8"
|
||||
integrity sha512-anPYkFSof+X8EeomnP0fbQBvWFJeganwPqqARVB+fcdKYX2Uog/n3CCiFGEA+66yHbwnWZD5YFhtHCuyLMcQfQ==
|
||||
|
@ -1922,7 +1847,7 @@ copy-descriptor@^0.1.0:
|
|||
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
||||
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
||||
|
||||
copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.2.0:
|
||||
copy-to-clipboard@^3.0.8:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.2.1.tgz#b1a1137100e5665d5a96015cb579e30e90e07c44"
|
||||
integrity sha512-btru1Q6RD9wbonIvEU5EfnhIRGHLo//BGXQ1hNAD2avIs/nBZlpbOeKtv3mhoUByN4DB9Cb6/vXBymj1S43KmA==
|
||||
|
@ -3447,11 +3372,6 @@ is-html@^1.1.0:
|
|||
dependencies:
|
||||
html-tags "^1.0.0"
|
||||
|
||||
is-mobile@^2.1.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.0.tgz#72b19ab033deb0fd15a2d00a23b9b1003f8fa5d9"
|
||||
integrity sha512-K0DmUqaZqYl6M8ej536uJYAQaBkx+qWph7xl1KRBr31UiGUT0MoFWUoqnIxzXnIeolnK8bkxtKXkZNL6HfSHhQ==
|
||||
|
||||
is-number@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
||||
|
@ -4219,7 +4139,7 @@ object.values@^1.1.0:
|
|||
function-bind "^1.1.1"
|
||||
has "^1.0.3"
|
||||
|
||||
omit.js@^1.0.0, omit.js@^1.0.2:
|
||||
omit.js@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/omit.js/-/omit.js-1.0.2.tgz#91a14f0eba84066dfa015bf30e474c47f30bc858"
|
||||
integrity sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==
|
||||
|
@ -4972,7 +4892,7 @@ promise@^7.1.1:
|
|||
dependencies:
|
||||
asap "~2.0.3"
|
||||
|
||||
prop-types@15.x, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
prop-types@15.x, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||
|
@ -5099,7 +5019,7 @@ rc-align@^2.4.0, rc-align@^2.4.1:
|
|||
prop-types "^15.5.8"
|
||||
rc-util "^4.0.4"
|
||||
|
||||
rc-animate@2.x, rc-animate@^2.10.1, rc-animate@^2.10.2, rc-animate@^2.3.0, rc-animate@^2.5.4, rc-animate@^2.6.0, rc-animate@^2.8.2:
|
||||
rc-animate@2.x, rc-animate@^2.10.1, rc-animate@^2.3.0, rc-animate@^2.5.4, rc-animate@^2.6.0, rc-animate@^2.8.2:
|
||||
version "2.10.2"
|
||||
resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.10.2.tgz#217fdc76ff26cbf425a5caf87cc8a36ba4598456"
|
||||
integrity sha512-cE/A7piAzoWFSgUD69NmmMraqCeqVBa51UErod8NS3LUEqWfppSVagHfa0qHAlwPVPiIBg3emRONyny3eiH0Dg==
|
||||
|
@ -5139,20 +5059,7 @@ rc-calendar@~9.12.1:
|
|||
rc-util "^4.1.1"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-calendar@~9.15.7:
|
||||
version "9.15.9"
|
||||
resolved "https://registry.yarnpkg.com/rc-calendar/-/rc-calendar-9.15.9.tgz#7a3457ee10f27b9972a755fe6415ef352f01a97a"
|
||||
integrity sha512-XOPzJlXYmLFIcwalXmzxKZrrAMD6dEPLRVoHG3wbBpErqjE8ugnXVjm9yXgtQh3Ho3Imhmt+KO0WGLv5T4WuAA==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
classnames "2.x"
|
||||
moment "2.x"
|
||||
prop-types "^15.5.8"
|
||||
rc-trigger "^2.2.0"
|
||||
rc-util "^4.1.1"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-cascader@~0.17.0, rc-cascader@~0.17.4:
|
||||
rc-cascader@~0.17.0:
|
||||
version "0.17.5"
|
||||
resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-0.17.5.tgz#4fde91d23b7608c420263c38eee9c0687f80f7dc"
|
||||
integrity sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A==
|
||||
|
@ -5165,7 +5072,7 @@ rc-cascader@~0.17.0, rc-cascader@~0.17.4:
|
|||
shallow-equal "^1.0.0"
|
||||
warning "^4.0.1"
|
||||
|
||||
rc-checkbox@~2.1.5, rc-checkbox@~2.1.6:
|
||||
rc-checkbox@~2.1.5:
|
||||
version "2.1.8"
|
||||
resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.1.8.tgz#eedd9ef9c2f3af5b3b8e5cde5254aa89ad1a880a"
|
||||
integrity sha512-6qOgh0/by0nVNASx6LZnhRTy17Etcgav+IrI7kL9V9kcDZ/g7K14JFlqrtJ3NjDq/Kyn+BPI1st1XvbkhfaJeg==
|
||||
|
@ -5175,7 +5082,7 @@ rc-checkbox@~2.1.5, rc-checkbox@~2.1.6:
|
|||
prop-types "15.x"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-collapse@~1.11.1, rc-collapse@~1.11.3:
|
||||
rc-collapse@~1.11.1:
|
||||
version "1.11.8"
|
||||
resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-1.11.8.tgz#66a40089d469519e9424009ab1c927e214041d80"
|
||||
integrity sha512-8EhfPyScTYljkbRuIoHniSwZagD5UPpZ3CToYgoNYWC85L2qCbPYF7+OaC713FOrIkp6NbfNqXsITNxmDAmxog==
|
||||
|
@ -5197,15 +5104,6 @@ rc-dialog@~7.3.0:
|
|||
rc-animate "2.x"
|
||||
rc-util "^4.4.0"
|
||||
|
||||
rc-dialog@~7.6.0:
|
||||
version "7.6.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-7.6.0.tgz#6467b75f5b60038129bf2e1b003b264281949c09"
|
||||
integrity sha512-N48vBPW8I53WycFHI4KXhuTUkB4mx+hixq1a9tcFMLoE7EhkAjbHvs0vGg+Bh/uFg5V00jmZBgQOIEbhcNal/A==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
rc-animate "2.x"
|
||||
rc-util "^4.16.1"
|
||||
|
||||
rc-drawer@~1.8.0:
|
||||
version "1.8.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-1.8.3.tgz#5d477e254419569f1d54b097c4161921b73238b8"
|
||||
|
@ -5216,15 +5114,6 @@ rc-drawer@~1.8.0:
|
|||
prop-types "^15.5.0"
|
||||
rc-util "^4.5.1"
|
||||
|
||||
rc-drawer@~3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.1.3.tgz#cbcb04d4c07f0b66f2ece11d847f4a1bd80ea0b7"
|
||||
integrity sha512-2z+RdxmzXyZde/1OhVMfDR1e/GBswFeWSZ7FS3Fdd0qhgVdpV1wSzILzzxRaT481ItB5hOV+e8pZT07vdJE8kg==
|
||||
dependencies:
|
||||
classnames "^2.2.6"
|
||||
rc-util "^4.16.1"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-dropdown@~2.4.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-2.4.1.tgz#aaef6eb3a5152cdd9982895c2a78d9b5f046cdec"
|
||||
|
@ -5249,7 +5138,7 @@ rc-editor-core@~0.8.3:
|
|||
prop-types "^15.5.8"
|
||||
setimmediate "^1.0.5"
|
||||
|
||||
rc-editor-mention@^1.1.13, rc-editor-mention@^1.1.7:
|
||||
rc-editor-mention@^1.1.7:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/rc-editor-mention/-/rc-editor-mention-1.1.13.tgz#9f1cab1065f86b01523840321790c2ab12ac5e8b"
|
||||
integrity sha512-3AOmGir91Fi2ogfRRaXLtqlNuIwQpvla7oUnGHS1+3eo7b+fUp5IlKcagqtwUBB5oDNofoySXkLBxzWvSYNp/Q==
|
||||
|
@ -5263,7 +5152,7 @@ rc-editor-mention@^1.1.13, rc-editor-mention@^1.1.7:
|
|||
rc-animate "^2.3.0"
|
||||
rc-editor-core "~0.8.3"
|
||||
|
||||
rc-form@^2.4.0, rc-form@^2.4.10:
|
||||
rc-form@^2.4.0:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.4.11.tgz#61ee3ae579259684ae30f2c48f55f0f23a5d3d08"
|
||||
integrity sha512-8BL+FNlFLTOY/A5X6tU35GQJLSIpsmqpwn/tFAYQTczXc4dMJ33ggtH248Cum8+LS0jLTsJKG2L4Qp+1CkY+sA==
|
||||
|
@ -5297,30 +5186,7 @@ rc-input-number@~4.4.0:
|
|||
rc-util "^4.5.1"
|
||||
rmc-feedback "^2.0.0"
|
||||
|
||||
rc-input-number@~4.5.0:
|
||||
version "4.5.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-4.5.3.tgz#ed497c727658e870d3f2a5e5a750d1ee71089f43"
|
||||
integrity sha512-jBwxX5KDkp2nHOaEoMQ1mZBwWpmmGUuHXF/qralpmN+wDp8rlB6Xvr9d7AHgmzGZhbWIMyLeq6ET6HDDCCjvAA==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
classnames "^2.2.0"
|
||||
prop-types "^15.5.7"
|
||||
rc-util "^4.5.1"
|
||||
rmc-feedback "^2.0.0"
|
||||
|
||||
rc-mentions@~0.4.0:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-0.4.2.tgz#c18ab701efb9e4b75b3851a0c0d2dd698640e246"
|
||||
integrity sha512-DTZurQzacLXOfVuiHydGzqkq7cFMHXF18l2jZ9PhWUn2cqvOSY3W4osN0Pq29AOMOBpcxdZCzgc7Lb0r/bgkDw==
|
||||
dependencies:
|
||||
"@ant-design/create-react-context" "^0.2.4"
|
||||
classnames "^2.2.6"
|
||||
rc-menu "^7.4.22"
|
||||
rc-trigger "^2.6.2"
|
||||
rc-util "^4.6.0"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-menu@^7.3.0, rc-menu@^7.4.22, rc-menu@~7.5.1:
|
||||
rc-menu@^7.3.0:
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-7.5.5.tgz#78cdc817d86fc353a1430b864d3d96c7489600ca"
|
||||
integrity sha512-4YJXJgrpUGEA1rMftXN7bDhrV5rPB8oBJoHqT+GVXtIWCanfQxEnM3fmhHQhatL59JoAFMZhJaNzhJIk4FUWCQ==
|
||||
|
@ -5349,7 +5215,7 @@ rc-menu@~7.4.12:
|
|||
rc-util "^4.13.0"
|
||||
resize-observer-polyfill "^1.5.0"
|
||||
|
||||
rc-notification@~3.3.0, rc-notification@~3.3.1:
|
||||
rc-notification@~3.3.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-3.3.1.tgz#0baa3e70f8d40ab015ce8fa78c260c490fc7beb4"
|
||||
integrity sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==
|
||||
|
@ -5369,16 +5235,6 @@ rc-pagination@~1.17.7:
|
|||
prop-types "^15.5.7"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-pagination@~1.20.11:
|
||||
version "1.20.13"
|
||||
resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.20.13.tgz#aca9dc020e475f77c5335659f7fe5d7cca2f2592"
|
||||
integrity sha512-oocyyzx0pye957e3iARFg377hafdUc3oC13faGgmopGX/A8rn7tXCdOwVIJthhI6dHVfAcFLgnYQAlcpGXh+Uw==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
classnames "^2.2.6"
|
||||
prop-types "^15.5.7"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-progress@~2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.3.0.tgz#cfbd07ff9026c450100980de209a92650e24f313"
|
||||
|
@ -5387,14 +5243,6 @@ rc-progress@~2.3.0:
|
|||
babel-runtime "6.x"
|
||||
prop-types "^15.5.8"
|
||||
|
||||
rc-progress@~2.5.0:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-2.5.2.tgz#ab01ba4e5d2fa36fc9f6f058b10b720e7315560c"
|
||||
integrity sha512-ajI+MJkbBz9zYDuE9GQsY5gsyqPF7HFioZEDZ9Fmc+ebNZoiSeSJsTJImPFCg0dW/5WiRGUy2F69SX1aPtSJgA==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
prop-types "^15.5.8"
|
||||
|
||||
rc-rate@~2.5.0:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.5.1.tgz#55fc5fd23ea9dcc72250b9a889803479f4842961"
|
||||
|
@ -5405,15 +5253,6 @@ rc-rate@~2.5.0:
|
|||
rc-util "^4.3.0"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-resize-observer@^0.1.0:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-0.1.3.tgz#097191f9c3ab186ed907b553ba6ef565df11c249"
|
||||
integrity sha512-uzOQEwx83xdQSFOkOAM7x7GHIQKYnrDV4dWxtCxyG1BS1pkfJ4EvDeMfsvAJHSYkQXVBu+sgRHGbRtLG3qiuUg==
|
||||
dependencies:
|
||||
classnames "^2.2.1"
|
||||
rc-util "^4.13.0"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
|
||||
rc-select@~9.1.0:
|
||||
version "9.1.5"
|
||||
resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-9.1.5.tgz#6811dd5f984e876cd6baa4767aaf6c152a4a1004"
|
||||
|
@ -5432,24 +5271,6 @@ rc-select@~9.1.0:
|
|||
react-lifecycles-compat "^3.0.2"
|
||||
warning "^4.0.2"
|
||||
|
||||
rc-select@~9.2.0:
|
||||
version "9.2.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-9.2.3.tgz#64340e2d6ef64e8bc3cfc6f468ffd28625589ac2"
|
||||
integrity sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==
|
||||
dependencies:
|
||||
babel-runtime "^6.23.0"
|
||||
classnames "2.x"
|
||||
component-classes "1.x"
|
||||
dom-scroll-into-view "1.x"
|
||||
prop-types "^15.5.8"
|
||||
raf "^3.4.0"
|
||||
rc-animate "2.x"
|
||||
rc-menu "^7.3.0"
|
||||
rc-trigger "^2.5.4"
|
||||
rc-util "^4.0.4"
|
||||
react-lifecycles-compat "^3.0.2"
|
||||
warning "^4.0.2"
|
||||
|
||||
rc-slider@~8.6.5:
|
||||
version "8.6.13"
|
||||
resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.6.13.tgz#88a8150c2dda6709f3f119135de11fba80af765b"
|
||||
|
@ -5463,20 +5284,6 @@ rc-slider@~8.6.5:
|
|||
shallowequal "^1.0.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-slider@~8.7.1:
|
||||
version "8.7.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42"
|
||||
integrity sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
classnames "^2.2.5"
|
||||
prop-types "^15.5.4"
|
||||
rc-tooltip "^3.7.0"
|
||||
rc-util "^4.0.4"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
shallowequal "^1.1.0"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-steps@~3.3.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-3.3.1.tgz#4877e2897331e3bfdb6b789e88aea78f4f15f732"
|
||||
|
@ -5487,16 +5294,6 @@ rc-steps@~3.3.0:
|
|||
lodash "^4.17.5"
|
||||
prop-types "^15.5.7"
|
||||
|
||||
rc-steps@~3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-3.5.0.tgz#36b2a7f1f49907b0d90363884b18623caf9fb600"
|
||||
integrity sha512-2Vkkrpa7PZbg7qPsqTNzVDov4u78cmxofjjnIHiGB9+9rqKS8oTLPzbW2uiWDr3Lk+yGwh8rbpGO1E6VAgBCOg==
|
||||
dependencies:
|
||||
babel-runtime "^6.23.0"
|
||||
classnames "^2.2.3"
|
||||
lodash "^4.17.5"
|
||||
prop-types "^15.5.7"
|
||||
|
||||
rc-switch@~1.9.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-1.9.0.tgz#ab2b878f2713c681358a453391976c9b95b290f7"
|
||||
|
@ -5506,20 +5303,6 @@ rc-switch@~1.9.0:
|
|||
prop-types "^15.5.6"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-table@~6.10.5:
|
||||
version "6.10.11"
|
||||
resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.10.11.tgz#fffe9c1b56de49f04d75bab3e28458e8c7a22f33"
|
||||
integrity sha512-YcTlpO4RKlcM7Mio2FjcUOqRUyGU4edtOBG4x5kwZNHwZdfBm7m6VQuyQ/i6qec5S67EP86wiFbmKU54Z2HtFQ==
|
||||
dependencies:
|
||||
classnames "^2.2.5"
|
||||
component-classes "^1.2.6"
|
||||
lodash "^4.17.5"
|
||||
mini-store "^2.0.0"
|
||||
prop-types "^15.5.8"
|
||||
rc-util "^4.13.0"
|
||||
react-lifecycles-compat "^3.0.2"
|
||||
shallowequal "^1.0.2"
|
||||
|
||||
rc-table@~6.5.0:
|
||||
version "6.5.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.5.1.tgz#b05ef79127e24b353083f8399dedaa9cbfbd16a2"
|
||||
|
@ -5553,23 +5336,6 @@ rc-tabs@~9.6.0:
|
|||
resize-observer-polyfill "^1.5.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-tabs@~9.7.0:
|
||||
version "9.7.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-9.7.0.tgz#ae09695bef5963d6e64e7bc10521c76dfdd8448b"
|
||||
integrity sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ==
|
||||
dependencies:
|
||||
"@ant-design/create-react-context" "^0.2.4"
|
||||
babel-runtime "6.x"
|
||||
classnames "2.x"
|
||||
lodash "^4.17.5"
|
||||
prop-types "15.x"
|
||||
raf "^3.4.1"
|
||||
rc-hammerjs "~0.6.0"
|
||||
rc-util "^4.0.4"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
resize-observer-polyfill "^1.5.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-time-picker@~3.6.1:
|
||||
version "3.6.6"
|
||||
resolved "https://registry.yarnpkg.com/rc-time-picker/-/rc-time-picker-3.6.6.tgz#343390ad1a3a06b49848c266d8311b3c572ca0d1"
|
||||
|
@ -5581,18 +5347,6 @@ rc-time-picker@~3.6.1:
|
|||
raf "^3.4.1"
|
||||
rc-trigger "^2.2.0"
|
||||
|
||||
rc-time-picker@~3.7.1:
|
||||
version "3.7.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-time-picker/-/rc-time-picker-3.7.3.tgz#65a8de904093250ae9c82b02a4905e0f995e23e2"
|
||||
integrity sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==
|
||||
dependencies:
|
||||
classnames "2.x"
|
||||
moment "2.x"
|
||||
prop-types "^15.5.8"
|
||||
raf "^3.4.1"
|
||||
rc-trigger "^2.2.0"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
rc-tooltip@^3.7.0, rc-tooltip@~3.7.3:
|
||||
version "3.7.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.7.3.tgz#280aec6afcaa44e8dff0480fbaff9e87fc00aecc"
|
||||
|
@ -5668,17 +5422,7 @@ rc-upload@~2.6.0:
|
|||
prop-types "^15.5.7"
|
||||
warning "4.x"
|
||||
|
||||
rc-upload@~2.9.1:
|
||||
version "2.9.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-2.9.4.tgz#8e34a73a468d7907fe31982c38100e4593857d32"
|
||||
integrity sha512-WXt0HGxXyzLrPV6iec/96Rbl/6dyrAW8pKuY6wwD7yFYwfU5bjgKjv7vC8KNMJ6wzitFrZjnoiogNL3dF9dj3Q==
|
||||
dependencies:
|
||||
babel-runtime "6.x"
|
||||
classnames "^2.2.5"
|
||||
prop-types "^15.5.7"
|
||||
warning "4.x"
|
||||
|
||||
rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.15.7, rc-util@^4.16.1, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1, rc-util@^4.6.0:
|
||||
rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.15.7, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1:
|
||||
version "4.19.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.19.0.tgz#f3b5e3a02cc0a667d127784068e1236c095dbcbf"
|
||||
integrity sha512-mptALlLwpeczS3nrv83DbwJNeupolbuvlIEjcvimSiWI8NUBjpF0HgG3kWp1RymiuiRCNm9yhaXqDz0a99dpgQ==
|
||||
|
@ -5735,17 +5479,6 @@ react-slick@~0.24.0:
|
|||
lodash.debounce "^4.0.8"
|
||||
resize-observer-polyfill "^1.5.0"
|
||||
|
||||
react-slick@~0.25.2:
|
||||
version "0.25.2"
|
||||
resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.25.2.tgz#56331b67d47d8bcfe2dceb6acab1c8fd5bd1f6bc"
|
||||
integrity sha512-8MNH/NFX/R7zF6W/w+FS5VXNyDusF+XDW1OU0SzODEU7wqYB+ZTGAiNJ++zVNAVqCAHdyCybScaUB+FCZOmBBw==
|
||||
dependencies:
|
||||
classnames "^2.2.5"
|
||||
enquire.js "^2.1.6"
|
||||
json2mq "^0.2.0"
|
||||
lodash.debounce "^4.0.8"
|
||||
resize-observer-polyfill "^1.5.0"
|
||||
|
||||
react@>=16.8.1, react@^16.8.1:
|
||||
version "16.12.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
|
||||
|
@ -6910,7 +6643,7 @@ w3c-xmlserializer@^1.1.2:
|
|||
webidl-conversions "^4.0.2"
|
||||
xml-name-validator "^3.0.0"
|
||||
|
||||
warning@4.x, warning@^4.0.1, warning@^4.0.2, warning@^4.0.3, warning@~4.0.2, warning@~4.0.3:
|
||||
warning@4.x, warning@^4.0.1, warning@^4.0.2, warning@^4.0.3, warning@~4.0.2:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
|
||||
|
|
Loading…
Reference in New Issue
Block a user