open BsReform; open Antd.Grid; module FormConfig = [%lenses type state = { guesstimatorString: string, // domainType: string, // Complete, LeftLimited(...), RightLimited(...), LeftAndRightLimited(..., ...) xPoint: float, xPoint2: float, excludingProbabilityMass: float, excludingProbabilityMass2: float, // unitType: string, // UnspecifiedDistribution, TimeDistribution(zero, unit) zero: MomentRe.Moment.t, unit: string, // sampleCount: int, outputXYPoints: int, truncateTo: int, } ]; module Form = ReForm.Make(FormConfig); let schema = Form.Validation.Schema([||]); module FieldString = { [@react.component] let make = (~field, ~label) => { E.ste}> validate()} /> } />; }; }; module FieldNumber = { [@react.component] let make = (~field, ~label) => { E.ste}> { e |> handleChange; (); }} onBlur={_ => validate()} /> } />; }; }; module FieldFloat = { [@react.component] let make = (~field, ~label) => { E.ste}> { e |> handleChange; (); }} onBlur={_ => validate()} /> } />; }; }; module Styles = { open Css; let rows = style([ selector( ">.ant-col:first-child", [paddingLeft(em(0.25)), paddingRight(em(0.125))], ), selector( ">.ant-col:last-child", [paddingLeft(em(0.125)), paddingRight(em(0.25))], ), selector( ">.ant-col:not(:first-child):not(:last-child)", [paddingLeft(em(0.125)), paddingRight(em(0.125))], ), ]); let parent = style([ selector(".ant-input-number", [width(`percent(100.))]), selector(".anticon", [verticalAlign(`zero)]), ]); let form = style([backgroundColor(hex("eee")), padding(em(1.))]); let dist = style([padding(em(1.))]); let spacer = style([marginTop(em(1.))]); }; module DemoDist = { [@react.component] let make = ( ~guesstimatorString, ~domain, ~unit, ~sampleCount, ~outputXYPoints, ~truncateTo, ) => { E.ste}>
{DistPlusIngredients.make(~guesstimatorString, ~domain, ~unit, ()) |> DistPlusIngredients.toDistPlus( ~sampleCount, ~outputXYPoints, ~truncateTo, ) |> E.O.React.fmapOrNull(distPlus => )}
; }; }; [@react.component] let make = () => { let (reloader, setRealoader) = React.useState(() => 1); let reform = Form.use( ~validationStrategy=OnDemand, ~schema, ~onSubmit=({state}) => {None}, ~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, unitType: "UnspecifiedDistribution", zero: MomentRe.momentNow(), unit: "days", sampleCount: 10000, outputXYPoints: 2000, truncateTo: 1000, }, (), ); let onSubmit = e => { e->ReactEvent.Synthetic.preventDefault; reform.submit(); }; 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.xPoint, excludingProbabilityMass: reform.state.values.excludingProbabilityMass, }) | "LeftAndRightLimited" => LeftAndRightLimited( { xPoint: reform.state.values.xPoint, excludingProbabilityMass: reform.state.values.excludingProbabilityMass, }, { xPoint: reform.state.values.xPoint2, excludingProbabilityMass: reform.state.values.excludingProbabilityMass2, }, ) | _ => Js.Exn.raiseError("domain is unknown") }; let unit = switch (reform.state.values.unitType) { | "UnspecifiedDistribution" => DistTypes.UnspecifiedDistribution | "TimeDistribution" => TimeDistribution({ zero: reform.state.values.zero, unit: reform.state.values.unit |> TimeTypes.TimeUnit.ofString, }) | _ => Js.Exn.raiseError("unit is unknown") }; 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 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.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, reloader |> string_of_int, |], ); let onRealod = _ => { setRealoader(_ => reloader + 1); };
demoDist
E.ste} extra={ }> E.ste}> e |> handleChange}> {"Complete" |> E.ste} {"Left Limited" |> E.ste} {"Right Limited" |> E.ste} {"Left And Right Limited" |> E.ste} } /> E.ste}> e |> handleChange}> {"Unspecified Distribution" |> E.ste} {"Time Distribution" |> E.ste} } /> E.ste}> { e |> handleChange; _ => (); }} /> } /> {"Update Distribution" |> E.ste}
; };