diff --git a/package.json b/package.json
index 12536a55..5ffd925d 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"antd": "3.17.0",
"autoprefixer": "9.7.4",
"babel-jest": "25.1.0",
- "bs-ant-design-alt": "2.0.0-alpha.31",
+ "bs-ant-design-alt": "2.0.0-alpha.33",
"bs-css": "11.0.0",
"bs-moment": "0.4.4",
"bs-platform": "7.0.1",
diff --git a/src/components/DistBuilder.re b/src/components/DistBuilder.re
index a34a71b3..0041b018 100644
--- a/src/components/DistBuilder.re
+++ b/src/components/DistBuilder.re
@@ -6,21 +6,27 @@ module FormConfig = [%lenses
guesstimatorString: string,
//
domainType: string, // Complete, LeftLimited(...), RightLimited(...), LeftAndRightLimited(..., ...)
- xPoint: float,
- xPoint2: float,
- excludingProbabilityMass: float,
- excludingProbabilityMass2: float,
+ xPoint: string,
+ xPoint2: string,
+ excludingProbabilityMass: string,
+ excludingProbabilityMass2: string,
//
unitType: string, // UnspecifiedDistribution, TimeDistribution(zero, unit)
zero: MomentRe.Moment.t,
unit: string,
//
- sampleCount: int,
- outputXYPoints: int,
- truncateTo: int,
+ sampleCount: string,
+ outputXYPoints: string,
+ truncateTo: string,
}
];
+type options = {
+ sampleCount: int,
+ outputXYPoints: int,
+ truncateTo: option(int),
+};
+
module Form = ReForm.Make(FormConfig);
let schema = Form.Validation.Schema([||]);
@@ -43,47 +49,18 @@ module FieldString = {
};
};
-module FieldNumber = {
- [@react.component]
- let make = (~field, ~label, ~min=0) => {
-
- E.ste}>
- validate()}
- parser={str => {
- let a = str |> Js.Float.fromString |> int_of_float;
- a < min ? min : a;
- }}
- />
-
- }
- />;
- };
-};
-
module FieldFloat = {
[@react.component]
- let make =
- (~field, ~label, ~className=Css.style([]), ~min=0., ~precision=2) => {
+ let make = (~field, ~label, ~className=Css.style([])) => {
E.ste}>
- validate()}
className
- parser={str => {
- let a = str |> Js.Float.fromString;
- Js.Float.isNaN(a) ? min : a;
- }}
/>
}
@@ -134,27 +111,23 @@ module Styles = {
module DemoDist = {
[@react.component]
- let make =
- (
- ~guesstimatorString,
- ~domain,
- ~unit,
- ~sampleCount,
- ~outputXYPoints,
- ~truncateTo,
- ) => {
+ let make = (~guesstimatorString, ~domain, ~unit, ~options) => {
E.ste}>
-
- {DistPlusIngredients.make(~guesstimatorString, ~domain, ~unit, ())
+ {switch (domain, unit, options) {
+ | (Some(domain), Some(unit), Some(options)) =>
+ DistPlusIngredients.make(~guesstimatorString, ~domain, ~unit, ())
|> DistPlusIngredients.toDistPlus(
- ~sampleCount,
- ~outputXYPoints,
- ~truncateTo,
+ ~sampleCount=options.sampleCount,
+ ~outputXYPoints=options.outputXYPoints,
+ ~truncateTo=options.truncateTo,
)
- |> E.O.React.fmapOrNull(distPlus => )}
-
+ |> E.O.React.fmapOrNull(distPlus =>
)
+ | _ =>
+ "Nothing to show. Try to change the distribution description."
+ |> E.ste
+ }}
;
};
@@ -171,16 +144,16 @@ let make = () => {
~initialState={
guesstimatorString: "mm(5 to 20, floor(normal(20,2)), [.5, .5])",
domainType: "Complete",
- xPoint: 50.0,
- xPoint2: 60.0,
- excludingProbabilityMass2: 0.5,
- excludingProbabilityMass: 0.3,
+ xPoint: "50.0",
+ xPoint2: "60.0",
+ excludingProbabilityMass2: "0.5",
+ excludingProbabilityMass: "0.3",
unitType: "UnspecifiedDistribution",
zero: MomentRe.momentNow(),
unit: "days",
- sampleCount: 1000,
- outputXYPoints: 2000,
- truncateTo: 500,
+ sampleCount: "1000",
+ outputXYPoints: "2000",
+ truncateTo: "500",
},
(),
);
@@ -190,78 +163,98 @@ let make = () => {
reform.submit();
};
+ let xPoint = reform.state.values.xPoint |> Js.Float.fromString;
+ let xPoint2 = reform.state.values.xPoint2 |> Js.Float.fromString;
+ let excludingProbabilityMass =
+ reform.state.values.excludingProbabilityMass |> Js.Float.fromString;
+ let excludingProbabilityMass2 =
+ reform.state.values.excludingProbabilityMass2 |> Js.Float.fromString;
+
+ let zero = reform.state.values.zero;
+ let unit = reform.state.values.unit;
+
+ let domainType = reform.state.values.domainType;
+ let unitType = reform.state.values.unitType;
+
+ let guesstimatorString = reform.state.values.guesstimatorString;
+ let sampleCount = reform.state.values.sampleCount |> Js.Float.fromString;
+ let outputXYPoints =
+ reform.state.values.outputXYPoints |> Js.Float.fromString;
+ let truncateTo = reform.state.values.truncateTo |> Js.Float.fromString;
+
let domain =
- switch (reform.state.values.domainType) {
- | "Complete" => DistTypes.Complete
- | "LeftLimited" =>
- LeftLimited({
- xPoint: reform.state.values.xPoint,
- excludingProbabilityMass: reform.state.values.excludingProbabilityMass,
- })
- | "RightLimited" =>
- RightLimited({
- xPoint: reform.state.values.xPoint2,
- excludingProbabilityMass:
- reform.state.values.excludingProbabilityMass2,
- })
- | "LeftAndRightLimited" =>
- LeftAndRightLimited(
- {
- xPoint: reform.state.values.xPoint,
- excludingProbabilityMass:
- reform.state.values.excludingProbabilityMass,
- },
- {
- xPoint: reform.state.values.xPoint2,
- excludingProbabilityMass:
- reform.state.values.excludingProbabilityMass2,
- },
+ switch (domainType) {
+ | "Complete" => Some(DistTypes.Complete)
+ | "LeftLimited"
+ when
+ !Js.Float.isNaN(xPoint)
+ && !Js.Float.isNaN(excludingProbabilityMass) =>
+ Some(LeftLimited({xPoint, excludingProbabilityMass}))
+ | "RightLimited"
+ when
+ !Js.Float.isNaN(xPoint2)
+ && !Js.Float.isNaN(excludingProbabilityMass2) =>
+ Some(RightLimited({xPoint, excludingProbabilityMass}))
+ | "LeftAndRightLimited"
+ when
+ !Js.Float.isNaN(xPoint)
+ && !Js.Float.isNaN(excludingProbabilityMass)
+ && !Js.Float.isNaN(xPoint2)
+ && !Js.Float.isNaN(excludingProbabilityMass2) =>
+ Some(
+ LeftAndRightLimited(
+ {xPoint, excludingProbabilityMass},
+ {xPoint, excludingProbabilityMass},
+ ),
)
- | _ => Js.Exn.raiseError("domain is unknown")
+ | _ => None
};
let unit =
- switch (reform.state.values.unitType) {
- | "UnspecifiedDistribution" => DistTypes.UnspecifiedDistribution
+ switch (unitType) {
+ | "UnspecifiedDistribution" => Some(DistTypes.UnspecifiedDistribution)
| "TimeDistribution" =>
- TimeDistribution({
- zero: reform.state.values.zero,
- unit: reform.state.values.unit |> TimeTypes.TimeUnit.ofString,
- })
- | _ => Js.Exn.raiseError("unit is unknown")
+ Some(
+ TimeDistribution({zero, unit: unit |> TimeTypes.TimeUnit.ofString}),
+ )
+ | _ => None
};
- let guesstimatorString = reform.state.values.guesstimatorString;
- let sampleCount = reform.state.values.sampleCount;
- let outputXYPoints = reform.state.values.outputXYPoints;
- let truncateTo = reform.state.values.truncateTo |> E.O.some;
+ let options =
+ switch (sampleCount, outputXYPoints, truncateTo) {
+ | (_, _, _)
+ when
+ !Js.Float.isNaN(sampleCount)
+ && !Js.Float.isNaN(outputXYPoints)
+ && !Js.Float.isNaN(truncateTo)
+ && sampleCount > 10.
+ && outputXYPoints > 10.
+ && truncateTo > 10. =>
+ Some({
+ sampleCount: sampleCount |> int_of_float,
+ outputXYPoints: outputXYPoints |> int_of_float,
+ truncateTo: truncateTo |> int_of_float |> E.O.some,
+ })
+ | _ => None
+ };
let demoDist =
React.useMemo1(
- () => {
-
- },
+ () => ,
[|
reform.state.values.guesstimatorString,
reform.state.values.domainType,
- reform.state.values.xPoint |> string_of_float,
- reform.state.values.xPoint2 |> string_of_float,
- reform.state.values.xPoint2 |> string_of_float,
- reform.state.values.excludingProbabilityMass |> string_of_float,
- reform.state.values.excludingProbabilityMass2 |> string_of_float,
+ reform.state.values.xPoint,
+ reform.state.values.xPoint2,
+ reform.state.values.xPoint2,
+ reform.state.values.excludingProbabilityMass,
+ reform.state.values.excludingProbabilityMass2,
reform.state.values.unitType,
reform.state.values.zero |> E.M.format(E.M.format_standard),
reform.state.values.unit,
- reform.state.values.sampleCount |> string_of_int,
- reform.state.values.outputXYPoints |> string_of_int,
- reform.state.values.truncateTo |> string_of_int,
+ reform.state.values.sampleCount,
+ reform.state.values.outputXYPoints,
+ reform.state.values.truncateTo,
reloader |> string_of_int,
|],
);
@@ -445,25 +438,16 @@ let make = () => {
-
+
-
-
+