Render project data

[?]
Jan 27, 2021, 5:52 AM
PPW6ROC5U7FZCJCH2RX7UJ3PJYNPUMNEZ6KKO3375VFRUM4VT3VQC

Dependencies

  • [2] Z5KNL332 Add skeleton of project overview HTML.
  • [3] NJNMO72S Add zcash.com submodule and update client to modern halogen.
  • [4] J6S23MDG Use server timestamps for interval start and end.
  • [5] B4MTB6UO Persist project across pages.
  • [6] QAC2QJ32 Add project overview page to client.
  • [7] IR75ZMX3 Return actual events for interval ends, not just timestamps.
  • [8] JXG3FCXY Upgrade ps + halogen versions.
  • [9] RSF6UAJK Break out api module for timeline.
  • [10] QH4UB73N Format with purty.
  • [11] NAFJ6RB3 Minor module reorg.
  • [12] ZIG57EE6 Fix project selection, end log end on project switch.
  • [13] QMEYU4MW Add display for prior intervals.
  • [14] OUR4PAOT Use local dates for display of intervals.
  • [*] WRPIYG3E Use project listing functionality to check for whether we have a cookie.
  • [*] QU5FW67R Add project selection to time tracker.

Change contents

  • edit in client/package-lock.json at line 1574
    [3.72131]
    [3.72131]
    "big-integer": {
    "version": "1.6.48",
    "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
    "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w=="
    },
  • edit in client/package.json at line 17
    [16.345]
    [3.251]
    "big-integer": "^1.6.48",
  • edit in client/spago.dhall at line 16
    [3.17]
    [3.295116]
    , "formatters"
    , "fixed-precision"
  • edit in client/src/Aftok/Api/Project.purs at line 55
    [2.381]
    [2.381]
    type ProjectUserData = ProjectUserData' DateTime
  • replacement in client/src/Aftok/Overview.purs at line 11
    [3.414][3.414:534]()
    -- import Data.Date (Date, year, month, day)
    -- import Data.DateTime as DT
    -- import Data.DateTime (DateTime(..), date)
    [3.414]
    [3.6366]
    import Data.Enum (toEnum)
    import Data.Date (canonicalDate)
    -- import Data.Date.Component (Year(..), Month(..), Day(..))
    import Data.List as L
    import Data.DateTime (DateTime(..), date)
  • edit in client/src/Aftok/Overview.purs at line 17
    [3.6405]
    [3.613]
    import Data.Time.Duration (Hours(..), Days(..))
  • edit in client/src/Aftok/Overview.purs at line 20
    [3.679]
    [3.4]
    import Data.Fixed as F
  • edit in client/src/Aftok/Overview.purs at line 22
    [3.31]
    [2.702]
    -- import Data.Formatters.DateTime
    import Data.Rational as R
  • replacement in client/src/Aftok/Overview.purs at line 25
    [2.723][3.730:771](),[3.730][3.730:771](),[3.771][2.724:759]()
    import Data.Maybe (Maybe(..), isNothing)
    import Data.Unfoldable (fromMaybe)
    [2.723]
    [3.771]
    import Data.Maybe (Maybe(..), maybe, isNothing, fromMaybe)
    import Data.Unfoldable as U
  • replacement in client/src/Aftok/Overview.purs at line 63
    [3.2087][3.6447:6486]()
    import Aftok.Types (System, ProjectId)
    [3.2087]
    [2.873]
    import Aftok.Types (System, ProjectId, dateStr)
  • edit in client/src/Aftok/Overview.purs at line 68
    [2.1034]
    [2.1034]
    , ProjectUserData
  • replacement in client/src/Aftok/Overview.purs at line 123
    [3.10450][2.1083:1112]()
    , projectDetail: Nothing
    [3.10450]
    [3.10450]
    , projectDetail: case input of
    Nothing -> Nothing
    Just p -> Just $ ProjectDetail'
    { project: p
    , depreciation: LinearDepreciation { undep: Days 30.0, dep: Days 300.0 }
    , contributors: M.singleton (unwrap p).initiator $ ProjectUserData'
    { userName: "Joe"
    , joinedOn: DateTime (fromMaybe bottom $ canonicalDate <$> (toEnum 2021) <*> (toEnum 1) <*> (toEnum 26)) bottom
    , totalContribution: Hours 100.0
    , currentPayoutRatio: 55 R.% 100
    }
    }
  • replacement in client/src/Aftok/Overview.purs at line 154
    [2.1731][2.1731:1790]()
    (fromMaybe $ projectDetail <$> st.projectDetail)
    [2.1731]
    [2.1790]
    (U.fromMaybe $ projectDetail <$> st.projectDetail)
  • replacement in client/src/Aftok/Overview.purs at line 168
    [2.2247][2.2247:2315]()
    [ colmd2 Nothing
    , colmd2 (Just "Project Name")
    [2.2247]
    [2.2315]
    [ colmd2 (Just "Project Name")
  • replacement in client/src/Aftok/Overview.purs at line 175
    [2.2516][2.2516:2660]()
    [ P.classes (ClassName <$> ["row", "pt-3", "font-weight-bold" ]) ]
    ([ colmd2 Nothing, colmd2 (Just project.projectName)] <>
    [2.2516]
    [2.2660]
    [ P.classes (ClassName <$> ["row", "pt-3"]) ]
    ([ colmd2 (Just project.projectName) ] <>
  • replacement in client/src/Aftok/Overview.purs at line 179
    [2.2822][2.2822:2878]()
    , colmd2 (Just $ show project.inceptionDate)
    [2.2822]
    [2.2878]
    , colmd2 (Just $ dateStr (date project.inceptionDate))
  • edit in client/src/Aftok/Overview.purs at line 182
    [2.2902]
    [2.2902]
    , HH.section
    [ P.id_ "contributors" ]
    ([ HH.div
    -- header
    [ P.classes (ClassName <$> ["row", "pt-3", "font-weight-bold" ]) ]
    [ colmd2 (Just "Contributor")
    , colmd2 (Just "Joined")
    , colmd2 (Just "Contributed Hours")
    , colmd2 (Just "Current Revenue Share")
    ]
    ] <>
    (contributorCols <$> (L.toUnfoldable $ M.values detail.contributors))
    )
  • replacement in client/src/Aftok/Overview.purs at line 200
    [2.3059][2.3059:3157]()
    [ colmd2 (Just $ show obj.undep <> " days")
    , colmd2 (Just $ show obj.dep <> " days")
    [2.3059]
    [3.11322]
    [ colmd2 (Just $ show (unwrap obj.undep) <> " days")
    , colmd2 (Just $ show (unwrap obj.dep) <> " days")
    ]
    contributorCols :: ProjectUserData -> H.ComponentHTML OverviewAction Slots m
    contributorCols (ProjectUserData' pud) =
    let pct = maybe "N/A" (\f -> F.toString (f * F.fromInt 100)) (F.fromNumber (R.toNumber pud.currentPayoutRatio) :: Maybe (F.Fixed F.P10000))
    in HH.div
    [ P.classes (ClassName <$> ["row", "pt-3", "pb-2" ]) ]
    [ colmd2 (Just pud.userName)
    , colmd2 (Just $ dateStr (date pud.joinedOn))
    , colmd2 (Just $ show (unwrap pud.totalContribution))
    , colmd2 (Just $ pct <> "%")
  • replacement in client/src/Aftok/Overview.purs at line 216
    [2.3226][2.3226:3319]()
    colmd2 xs = HH.div [ P.classes (ClassName <$> ["col-md-2"]) ] (fromMaybe $ HH.text <$> xs)
    [2.3226]
    [2.3319]
    colmd2 xs = HH.div [ P.classes (ClassName <$> ["col-md-2"]) ] (U.fromMaybe $ HH.text <$> xs)
  • edit in client/src/Aftok/Overview.purs at line 218
    [2.3320][2.3320:5940]()
    -- <section id="associates">
    -- <div class="row pt-3 font-weight-bold">
    -- <div class="col-md-2">
    -- </div>
    -- <div class="col-md-2">
    -- Associate
    -- </div>
    -- <div class="col-md-2">
    -- Joined
    -- </div>
    -- <div class="col-md-2">
    -- Hrs / %
    -- </div>
    -- <div class="col-md-2">
    -- </div>
    -- </div>
    --
    -- <div class="row pt-3 pb-2 stripe">
    -- <div class="col-md-2">
    -- </div>
    -- <div class="col-md-2">
    -- Freuline Fred
    -- </div>
    -- <div class="col-md-2">
    -- Oct 2020
    -- </div>
    -- <div class="col-md-2">
    -- 24hrs / 2.4%
    -- </div>
    -- <div class="col-md-2">
    -- </div>
    -- </div>
    -- <div class="row pt-3 pb-2 stripe">
    -- <div class="col-md-2">
    -- </div>
    -- <div class="col-md-2">
    -- Goobie Works A Lot
    -- </div>
    -- <div class="col-md-2">
    -- Jan 2020
    -- </div>
    -- <div class="col-md-2">
    -- 500 / 50%
    -- </div>
    -- <div class="col-md-2">
    -- </div>
    -- </div>
    -- <div class="row pt-3 pb-2 stripe">
    -- <div class="col-md-2">
    -- </div>
    -- <div class="col-md-2">
    -- Average Fella
    -- </div>
    -- <div class="col-md-2">
    -- May 2020
    -- </div>
    -- <div class="col-md-2">
    -- 250 hrs / 25%
    -- </div>
    -- <div class="col-md-2">
    -- </div>
    -- </div>
    -- <div class="row pt-3 pb-2 stripe">
    -- <div class="col-md-2">
    -- </div>
    -- <div class="col-md-2">
    -- Cool Kid
    -- </div>
    -- <div class="col-md-2">
    -- April 2020
    -- </div>
    -- <div class="col-md-2">
    -- 226 hrs 22.6%
    -- </div>
    -- <div class="col-md-2">
    -- </div>
    -- </div>
  • replacement in client/src/Aftok/Timeline.purs at line 10
    [3.452][3.760:802](),[3.5696][3.760:802](),[3.388][3.760:802]()
    import Data.Date (Date, year, month, day)
    [3.5696]
    [3.453]
    import Data.Date (Date)
  • edit in client/src/Aftok/Timeline.purs at line 15
    [3.6574][3.929:957](),[3.427][3.929:957]()
    import Data.Enum (fromEnum)
  • edit in client/src/Aftok/Timeline.purs at line 61
    [3.7695]
    [3.7695]
    , dateStr
  • edit in client/src/Aftok/Timeline.purs at line 305
    [3.7271][3.7271:7297](),[3.7297][3.33276:33409](),[3.7436][3.3328:3329](),[3.33409][3.3328:3329](),[3.3328][3.3328:3329]()
    dateStr :: Date -> String
    dateStr d =
    (show <<< fromEnum $ year d) <> "-"
    <> (show <<< fromEnum $ month d)
    <> "-"
    <> (show <<< fromEnum $ day d)
  • replacement in client/src/Aftok/Types.purs at line 4
    [3.5590][3.7181:7205](),[3.10921][3.7181:7205]()
    import Data.Date (Date)
    [3.3258]
    [3.3437]
    import Data.Date (Date, year, month, day)
  • edit in client/src/Aftok/Types.purs at line 7
    [3.8100]
    [3.7206]
    import Data.Enum (fromEnum)
  • edit in client/src/Aftok/Types.purs at line 99
    [3.5844]
    [3.37638]
    dateStr :: Date -> String
    dateStr d =
    (show <<< fromEnum $ year d) <> "-"
    <> (show <<< fromEnum $ month d)
    <> "-"
    <> (show <<< fromEnum $ day d)