From 6af2e242f809f145f4647c39f7a0c88180186a1c Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sun, 22 May 2022 22:11:28 -0400 Subject: [PATCH] Simple better format for Duration toString --- .../src/components/SquiggleChart.tsx | 2 +- .../squiggle-lang/src/rescript/Utility/E.res | 22 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/components/src/components/SquiggleChart.tsx b/packages/components/src/components/SquiggleChart.tsx index fe79a018..50fcebb3 100644 --- a/packages/components/src/components/SquiggleChart.tsx +++ b/packages/components/src/components/SquiggleChart.tsx @@ -195,7 +195,7 @@ const SquiggleItem: React.FC = ({ {expression.value.toDateString()} ); - case "timeDuration":{ + case "timeDuration": { return ( diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index 38967979..6a66e497 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -849,23 +849,27 @@ module Duration = { let toHours = (t: t): float => t /. hour let toDays = (t: t): float => t /. day let toYears = (t: t): float => t /. year + let toString = (t: t): string => { + let shouldPluralize = f => f != 1.0 + let display = (f: float, s: string) => + `${Float.with3DigitsPrecision(f)} ${s}${shouldPluralize(f) ? "s" : ""}` if t >= year { - Float.with3DigitsPrecision(t /. year) ++ " years" + display(t /. year, "year") } else if t >= day { - Float.with3DigitsPrecision(t /. day) ++ " days" + display(t /. day, "day") } else if t >= hour { - Float.with3DigitsPrecision(t /. hour) ++ " hours" + display(t /. hour, "hour") } else if t >= minute { - Float.with3DigitsPrecision(t /. minute) ++ " minutes" + display(t /. minute, "minute") } else { Float.toFixed(t) ++ "ms" } } - let add = (t1, t2): t => t1 +. t2 - let subtract = (t1, t2): t => t1 -. t2 - let multiply = (t1, t2): t => t1 *. t2 - let divide = (t1, t2): t => t1 /. t2 + let add = (t1: t, t2: t): t => t1 +. t2 + let subtract = (t1: t, t2: t): t => t1 -. t2 + let multiply = (t1: t, t2: t): t => t1 *. t2 + let divide = (t1: t, t2: t): t => t1 /. t2 } module Date = { @@ -899,7 +903,7 @@ module Date = { } } let makeFromYear = (year: float): result => { - let floor = year -> Js.Math.floor_float + let floor = year->Js.Math.floor_float makeWithYearInt(Belt.Float.toInt(floor))->R2.fmap(earlyDate => { let diff = year -. floor earlyDate->addDuration(diff *. Duration.year)