Add skeleton of project overview HTML.
[?]
Jan 27, 2021, 4:15 AM
Z5KNL332YCRMHKU3NG7YWNLUCNHKSLXBZ3O22FSS47MNVXU2FDLACDependencies
- [2]
NAFJ6RB3Minor module reorg. - [3]
B4MTB6UOPersist project across pages. - [4]
QH4UB73NFormat with purty. - [5]
QAC2QJ32Add project overview page to client. - [*]
QU5FW67RAdd project selection to time tracker.
Change contents
- edit in client/src/Aftok/Api/Project.purs at line 12
import Data.Map as M - replacement in client/src/Aftok/Api/Project.purs at line 15
import Data.Time.Duration (Hours)import Data.Time.Duration (Hours, Days) - replacement in client/src/Aftok/Api/Project.purs at line 17
import Data.UUID (UUID, parseUUID)import Data.UUID (parseUUID) - replacement in client/src/Aftok/Api/Project.purs at line 25
( UserId( UserId(..) - replacement in client/src/Aftok/Api/Project.purs at line 37
, initiator :: UUID, initiator :: UserId - edit in client/src/Aftok/Api/Project.purs at line 44
data DepreciationFn= LinearDepreciation { undep :: Days, dep :: Days } - edit in client/src/Aftok/Api/Project.purs at line 48
newtype ProjectUserData' date= ProjectUserData'{ userName :: String, joinedOn :: date, totalContribution :: Hours, currentPayoutRatio :: Rational}newtype ProjectDetail' date= ProjectDetail'{ project :: Project' date, depreciation :: DepreciationFn, contributors :: M.Map UserId (ProjectUserData' date)}type ProjectDetail = ProjectDetail' DateTime - replacement in client/src/Aftok/Api/Project.purs at line 77
initiator <- note "Failed to decode initiator UUID" $ parseUUID initiatorStrinitiator <- UserId <$> (note "Failed to decode initiator UUID" $ parseUUID initiatorStr) - replacement in client/src/Aftok/Overview.purs at line 9
---- - replacement in client/src/Aftok/Overview.purs at line 18
-- import Data.Map as Mimport Data.Map as M - edit in client/src/Aftok/Overview.purs at line 20
import Data.Unfoldable (fromMaybe) - edit in client/src/Aftok/Overview.purs at line 23
-- import Data.Time.Duration (Milliseconds(..), Hours(..), Days(..)) - replacement in client/src/Aftok/Overview.purs at line 45
-- import Aftok.Api.Overview-- ( OverviewError,-- import Aftok.Api.Overview-- ( OverviewError, - replacement in client/src/Aftok/Overview.purs at line 48
-- Interval(..),-- TimeInterval,-- Interval(..),-- TimeInterval, - replacement in client/src/Aftok/Overview.purs at line 51
-- TimeSpan,-- TimeSpan, - replacement in client/src/Aftok/Overview.purs at line 58
import Aftok.Api.Project (Project, ProjectEvent(..), Member')import Aftok.Api.Project(Project, Project'(..), ProjectEvent(..), Member', ProjectDetail, ProjectDetail'(..), DepreciationFn(..), ProjectUserData'(..)) - edit in client/src/Aftok/Overview.purs at line 69
, projectDetail :: Maybe ProjectDetail - edit in client/src/Aftok/Overview.purs at line 116
, projectDetail: Nothing - replacement in client/src/Aftok/Overview.purs at line 124[3.10644]→[3.10644:10977](∅→∅),[3.10977]→[2.6693:6742](∅→∅),[2.6742]→[3.11027:11047](∅→∅),[3.11027]→[3.11027:11047](∅→∅),[3.11047]→[2.6743:6870](∅→∅),[2.6870]→[3.11181:11321](∅→∅),[3.11181]→[3.11181:11321](∅→∅)
[ P.classes (ClassName <$> [ "container", "pt-6" ]) ][ HH.h1[ P.classes (ClassName <$> [ "mb-0", "font-weight-bold", "text-center" ]) ][ HH.text "Project Overview" ], HH.p[ P.classes (ClassName <$> [ "col-md-5", "text-muted", "text-center", "mx-auto" ]) ][ HH.text "Your project details" ], HH.div_[ HH.slot _projectList unit (ProjectList.component system pcaps) st.selectedProject (Just <<< ProjectSelected) ], HH.div[ P.classes (ClassName <$> if isNothing st.selectedProject then [ "collapse" ] else []) ][][ P.classes (ClassName <$> [ "container", "pt-6" ]) ][ HH.h1[ P.classes (ClassName <$> [ "mb-0", "font-weight-bold", "text-center" ]) ][ HH.text "Project Overview" ], HH.p[ P.classes (ClassName <$> [ "col-md-5", "text-muted", "text-center", "mx-auto" ]) ][ HH.text "Your project details" ], HH.div_[ HH.slot _projectList unit (ProjectList.component system pcaps) st.selectedProject (Just <<< ProjectSelected) ], HH.div[ P.classes (ClassName <$> if isNothing st.selectedProject then [ "collapse" ] else []) ](fromMaybe $ projectDetail <$> st.projectDetail)]]projectDetail :: ProjectDetail -> H.ComponentHTML OverviewAction Slots mprojectDetail (ProjectDetail' detail) = dolet (Project' project) = detail.projectHH.div[ P.classes (ClassName <$> [ "container-fluid" ]) ][ HH.section[ P.id_ "projectOverview", P.classes (ClassName <$> ["pt-3"]) ][ HH.div-- header[ P.classes (ClassName <$> ["row", "pt-3", "font-weight-bold" ]) ][ colmd2 Nothing, colmd2 (Just "Project Name"), colmd2 (Just "Undepreciated Period"), colmd2 (Just "Depreciation Duration"), colmd2 (Just "Originator"), colmd2 (Just "Origination Date") - edit in client/src/Aftok/Overview.purs at line 156
, HH.div[ P.classes (ClassName <$> ["row", "pt-3", "font-weight-bold" ]) ]([ colmd2 Nothing, colmd2 (Just project.projectName)] <>depreciationCols detail.depreciation <>[ colmd2 ((\(ProjectUserData' p) -> p.userName) <$> M.lookup project.initiator detail.contributors), colmd2 (Just $ show project.inceptionDate)])]]depreciationCols :: DepreciationFn -> Array (H.ComponentHTML OverviewAction Slots m)depreciationCols = case _ ofLinearDepreciation obj ->[ colmd2 (Just $ show obj.undep <> " days"), colmd2 (Just $ show obj.dep <> " days") - edit in client/src/Aftok/Overview.purs at line 172
colmd2 :: Maybe String -> H.ComponentHTML OverviewAction Slots mcolmd2 xs = HH.div [ P.classes (ClassName <$> ["col-md-2"]) ] (fromMaybe $ HH.text <$> xs)-- <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>-- </section>-- <!-- Map payouts -->-- <div class="row font-weight-bold">-- <div class="col-md-2">-- </div>-- <div class="col-md-4">-- Payments-- </div>-- <div class="col-md-6">---- </div>-- </div>-- <div class="row">-- <div class="col-md-2">-- </div>-- <div class="col-md-2">-- Oct 20 2020-- </div>-- <div class="col-md-2">-- 100 zec-- </div>-- <div class="col-md-2">-- Acme PaidUsRight-- </div>-- <div class="col-md-4">-- </div>-- </div>-- <!-- map payout creditTos-->-- <div class="row pt-3">-- <div class="col-md-4">-- </div>-- <div class="col-md-2">-- Freuline Fred-- </div>-- <div class="col-md-2">-- 2.4 zec-- </div>-- <div class="col-md-2">-- 2.4 %-- </div>-- <div class="col-md-2">-- </div>-- </div>-- <div class="row pt-3">-- <div class="col-md-4">-- </div>-- <div class="col-md-2">-- Goobie Works A Lot-- </div>-- <div class="col-md-2">-- 50 zec-- </div>-- <div class="col-md-2">-- 50 %-- </div>-- <div class="col-md-2">-- </div>-- </div> <div class="row pt-3">-- <div class="col-md-4">-- </div>-- <div class="col-md-2">-- Average Fella-- </div>-- <div class="col-md-2">-- 25 zec-- </div>-- <div class="col-md-2">-- 25 %-- </div>-- <div class="col-md-2">-- </div>-- </div> <div class="row pt-3">-- <div class="col-md-4">-- </div>-- <div class="col-md-2">-- Cool Kid-- </div>-- <div class="col-md-2">-- 24.6 zec-- </div>-- <div class="col-md-2">-- 24.6 %-- </div>-- <div class="col-md-2">-- </div>-- </div>---- </section>------ <!-- New Project form-->-- <section id="addProject">---- <div class="row pt-3">-- <div class="col-md-4">-- <span class="float-right">Project Name</span>-- </div>-- <div class="col-md-4">-- <input type="text" id="projectName" name="projectName" />-- </div>-- </div>---- <div class="row pt-3">-- <div class="col-md-4">-- <span class="float-right">Undepreciated Period ( Months )</span>-- </div>-- <div class="col-md-4">-- <input type="text" id="undepreciatedPeriod" name="undepreciatedPeriod" />-- </div>-- </div>---- <div class="row pt-3">-- <div class="col-md-4">-- <span class="float-right">Depreciation Duration ( Months )</span>-- </div>-- <div class="col-md-4">-- <input type="text" id="depreciationDuration" name="depreciationDuration" />-- </div>-- </div>---- <div class="row pt-3 pb-3">-- <div class="col-md-2">-- </div>-- <div class="col-md-10">-- <button class="btn btn-sm btn-primary lift ml-auto">Add Project</button>-- </div>-- </div>---- </section> - replacement in client/src/Aftok/Overview.purs at line 398
apiCapability =apiCapability = - replacement in client/src/Aftok/Overview.purs at line 403
mockCapability =mockCapability = - edit in client/src/Aftok/Types.purs at line 85[2.8270][7.7643]
derive instance userIdOrd :: Ord UserId