Fix state maintenance of the project list.

[?]
Feb 14, 2021, 6:30 PM
WCPNYBNQNXEHDMPXMDKLU34TJ6JL2WBMVWQJZQ6HMG6QUDCRPACQC

Dependencies

  • [2] YHSVVVYW Add project creation modal.
  • [3] QAC2QJ32 Add project overview page to client.
  • [4] BPIQKEXE gussify
  • [5] RV7ZIULZ Update overview to have access to the real project detail capability.
  • [6] NJNMO72S Add zcash.com submodule and update client to modern halogen.
  • [7] IR75ZMX3 Return actual events for interval ends, not just timestamps.
  • [8] B4MTB6UO Persist project across pages.
  • [9] U7YAT2ZK Add error reporting to signup form.
  • [10] QH4UB73N Format with purty.
  • [11] GLQSD33Y Use mock capability for overview init.
  • [12] VTZT2ILU Wire up billing navigation.
  • [13] V54JCKJX Payment request creation.
  • [14] RSF6UAJK Break out api module for timeline.
  • [15] PPW6ROC5 Render project data
  • [16] KET5QGQP Add billable list (in-progress)
  • [17] XGMFJUER Fix the broken modals.
  • [18] AKM2VYBL Fix errors with project ID persistence.
  • [19] Z5KNL332 Add skeleton of project overview HTML.
  • [20] 46PUXHTY Implement project invitations.
  • [21] QMEYU4MW Add display for prior intervals.
  • [22] SAESJLLY Initial experiments in hash routing.
  • [23] 4GOBY5NQ WIP on modals.
  • [24] NAFJ6RB3 Minor module reorg.
  • [25] T2DN23M7 Factor out billing create component.
  • [26] KKJSBWO6 Add createPaymentRequestHandler
  • [27] ZHV75AEN basic cleanup
  • [28] JXG3FCXY Upgrade ps + halogen versions.
  • [29] QU5FW67R Add project selection to time tracker.
  • [30] OUR4PAOT Use local dates for display of intervals.
  • [31] J6S23MDG Use server timestamps for interval start and end.
  • [32] ZIG57EE6 Fix project selection, end log end on project switch.
  • [33] ANDJ6GEY Add billing component skeleton.
  • [34] 7TQPQW3N Begin adding parsing for project detail.
  • [*] WRPIYG3E Use project listing functionality to check for whether we have a cookie.
  • [*] RB2ETNIF Add skeletal PureScript client project.

Change contents

  • edit in client/src/Aftok/Billing.purs at line 6
    [3.2912][3.2912:2939]()
    import Data.Foldable (all)
  • replacement in client/src/Aftok/Billing.purs at line 46
    [3.3994][2.1004:1034]()
    | ProjectSelected ProjectId
    [3.3994]
    [3.15071]
    | ProjectSelected (Maybe ProjectId)
  • replacement in client/src/Aftok/Billing.purs at line 85
    [3.4836][3.4836:4872]()
    { handleAction = eval
    [3.4836]
    [3.4872]
    { handleAction = handleAction
  • edit in client/src/Aftok/Billing.purs at line 87
    [3.4917]
    [3.4917]
    , receive = Just <<< ProjectSelected
  • replacement in client/src/Aftok/Billing.purs at line 116
    [3.5905][3.5905:5988]()
    (Just <<< (\(ProjectList.ProjectChange p) -> ProjectSelected p))
    [3.5905]
    [3.5988]
    (Just <<< (\(ProjectList.ProjectChange p) -> ProjectSelected (Just p)))
  • replacement in client/src/Aftok/Billing.purs at line 195
    [3.3966][2.1310:1407](),[2.1407][3.6396:6415](),[3.6396][3.6396:6415]()
    eval :: BillingAction -> H.HalogenM BillingState BillingAction Slots ProjectList.Output m Unit
    eval action = do
    [3.3966]
    [3.6415]
    handleAction :: BillingAction -> H.HalogenM BillingState BillingAction Slots ProjectList.Output m Unit
    handleAction action = do
  • replacement in client/src/Aftok/Billing.purs at line 202
    [3.6797][2.1504:1536]()
    ProjectSelected pid -> do
    [3.6797]
    [2.1536]
    ProjectSelected pidMay -> do
  • replacement in client/src/Aftok/Billing.purs at line 204
    [2.1585][2.1585:1765]()
    refreshBillables pid
    when (all (_ /= pid) currentPid) $ do
    H.raise (ProjectList.ProjectChange pid)
    H.modify_ (_ { selectedProject = Just pid })
    [2.1585]
    [3.15967]
    traverse_ refreshBillables pidMay
    when (currentPid /= pidMay)
    $ traverse_ projectSelected pidMay
  • edit in client/src/Aftok/Billing.purs at line 219
    [3.4184]
    [2.1862]
    projectSelected pid = do
    H.modify_ (_ { selectedProject = Just pid })
    H.raise (ProjectList.ProjectChange pid)
  • edit in client/src/Aftok/Overview.purs at line 11
    [3.650][3.4:31](),[3.679][3.4:31]()
    import Data.Foldable (all)
  • replacement in client/src/Aftok/Overview.purs at line 53
    [3.2345][2.2114:2144]()
    | ProjectSelected ProjectId
    [3.2345]
    [2.2144]
    | ProjectSelected (Maybe ProjectId)
  • replacement in client/src/Aftok/Overview.purs at line 90
    [3.10238][3.10238:10274]()
    { handleAction = eval
    [3.10238]
    [3.10274]
    { handleAction = handleAction
    , receive = Just <<< ProjectSelected
  • replacement in client/src/Aftok/Overview.purs at line 120
    [3.4210][3.4210:4293]()
    (Just <<< (\(ProjectList.ProjectChange p) -> ProjectSelected p))
    [3.4210]
    [2.2549]
    (Just <<< (\(ProjectList.ProjectChange p) -> ProjectSelected (Just p)))
  • replacement in client/src/Aftok/Overview.purs at line 127
    [2.2749][2.2749:2828]()
    (Just <<< (\(Create.ProjectCreated p) -> ProjectSelected p))
    [2.2749]
    [3.4293]
    (Just <<< (\(Create.ProjectCreated p) -> ProjectSelected (Just p)))
  • replacement in client/src/Aftok/Overview.purs at line 240
    [3.651][2.3498:3598](),[2.3598][3.11425:11444](),[3.5275][3.11425:11444](),[3.11425][3.11425:11444]()
    eval :: OverviewAction -> H.HalogenM OverviewState OverviewAction Slots ProjectList.Output m Unit
    eval action = do
    [3.651]
    [3.11444]
    handleAction :: OverviewAction -> H.HalogenM OverviewState OverviewAction Slots ProjectList.Output m Unit
    handleAction action = do
  • replacement in client/src/Aftok/Overview.purs at line 250
    [3.19701][2.3788:3820]()
    ProjectSelected pid -> do
    [3.19701]
    [3.11573]
    ProjectSelected pidMay -> do
  • replacement in client/src/Aftok/Overview.purs at line 252
    [3.11626][2.3821:3866](),[2.3866][3.11715:11730](),[3.11715][3.11715:11730](),[3.11730][2.3867:4015]()
    when (all (_ /= pid) currentProject)
    $ do
    H.raise (ProjectList.ProjectChange pid)
    H.modify_ (_ { selectedProject = Just pid })
    setProjectDetail pid
    [3.11626]
    [3.4104]
    when (currentProject /= pidMay)
    $ traverse_ projectSelected pidMay
    where
    projectSelected pid = do
    H.modify_ (_ { selectedProject = Just pid })
    setProjectDetail pid
    H.raise (ProjectList.ProjectChange pid)
  • edit in client/src/Aftok/ProjectList.purs at line 72
    [2.4651]
    [3.12558]
    , receive = Just <<< Initialize
  • replacement in client/src/Aftok/ProjectList.purs at line 120
    [3.13873][3.13873:13938](),[3.13938][2.5337:5431]()
    lift <<< console.log $ "Selected project index " <> show i
    traverse_ (\p -> H.raise $ ProjectChange (unwrap p).projectId) (index projects (i - 1))
    [3.13873]
    [3.1840]
    traverse_ projectSelected (index projects (i - 1))
    where
    projectSelected p = do
    let pid = (unwrap p).projectId
    H.modify_ (_ { selectedPid = Just pid })
    H.raise $ ProjectChange pid
  • replacement in client/src/Aftok/Timeline.purs at line 15
    [3.957][3.6575:6610]()
    import Data.Foldable (any, length)
    [3.6574]
    [3.1077]
    import Data.Foldable (length)
  • edit in client/src/Aftok/Timeline.purs at line 23
    [3.695][3.1210:1266](),[3.1210][3.1210:1266]()
    -- import Text.Format as F -- (format, zeroFill, width)
  • replacement in client/src/Aftok/Timeline.purs at line 101
    [3.302073][2.13420:13450]()
    | ProjectSelected ProjectId
    [3.302073]
    [3.302073]
    | ProjectSelected (Maybe ProjectId)
  • replacement in client/src/Aftok/Timeline.purs at line 137
    [3.27158][3.27158:27194]()
    { handleAction = eval
    [3.27158]
    [3.27194]
    { handleAction = handleAction
  • edit in client/src/Aftok/Timeline.purs at line 139
    [3.27239]
    [3.27239]
    , receive = Just <<< ProjectSelected
  • replacement in client/src/Aftok/Timeline.purs at line 169
    [3.19414][2.13561:13648]()
    (Just <<< (\(ProjectList.ProjectChange pid) -> ProjectSelected pid))
    [3.19414]
    [3.6314]
    (Just <<< (\(ProjectList.ProjectChange pid) -> ProjectSelected (Just pid)))
  • replacement in client/src/Aftok/Timeline.purs at line 193
    [3.4813][2.13649:13749](),[3.6430][3.29204:29223](),[2.13749][3.29204:29223](),[3.29204][3.29204:29223]()
    eval :: TimelineAction -> H.HalogenM TimelineState TimelineAction Slots ProjectList.Output m Unit
    eval action = do
    [3.4813]
    [3.29223]
    handleAction :: TimelineAction -> H.HalogenM TimelineState TimelineAction Slots ProjectList.Output m Unit
    handleAction action = do
  • replacement in client/src/Aftok/Timeline.purs at line 200
    [3.29408][2.13750:13782]()
    ProjectSelected pid -> do
    [3.29408]
    [3.29438]
    ProjectSelected pidMay -> do
  • replacement in client/src/Aftok/Timeline.purs at line 203
    [3.29541][3.29541:29602](),[3.29602][2.13783:13966]()
    -- End any active intervals when switching projects.
    when (oldActive && any (_ /= pid) currentProject)
    $ (traverse_ logEnd currentProject)
    H.raise (ProjectList.ProjectChange pid)
    setStateForProject pid
    [3.29541]
    [3.29830]
    when (currentProject /= pidMay) $ do
    -- End any active intervals when switching projects.
    when oldActive $ traverse_ logEnd currentProject
    traverse_ projectSelected pidMay
  • edit in client/src/Aftok/Timeline.purs at line 220
    [3.30358]
    [3.1969]
    where
    projectSelected pid = do
    setStateForProject pid
    H.raise (ProjectList.ProjectChange pid)
  • replacement in client/src/Main.purs at line 198
    [3.41804][3.7513:7607]()
    ProjectAction (ProjectList.ProjectChange p) -> H.modify_ (_ { selectedProject = Just p })
    [3.41804]
    [3.2454]
    ProjectAction (ProjectList.ProjectChange p) ->
    H.modify_ (_ { selectedProject = Just p })