fix: ui: Make sure that you can scroll between matching transactions in
TransactionScreen. (#1607) Make sure that the previous register screen is updated whenever we scroll in TransactionScreen.
This commit is contained in:
parent
70dab8eccd
commit
5f53da87e0
@ -5,10 +5,8 @@
|
|||||||
{-# LANGUAGE TupleSections #-}
|
{-# LANGUAGE TupleSections #-}
|
||||||
|
|
||||||
module Hledger.UI.TransactionScreen
|
module Hledger.UI.TransactionScreen
|
||||||
(transactionScreen
|
( transactionScreen
|
||||||
,rsSelect
|
) where
|
||||||
)
|
|
||||||
where
|
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.IO.Class (liftIO)
|
import Control.Monad.IO.Class (liftIO)
|
||||||
@ -133,9 +131,7 @@ tsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec@ReportSpec{
|
|||||||
tsDraw _ = error "draw function called with wrong screen type, should not happen" -- PARTIAL:
|
tsDraw _ = error "draw function called with wrong screen type, should not happen" -- PARTIAL:
|
||||||
|
|
||||||
tsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
tsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||||
tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
tsHandle ui@UIState{aScreen=TransactionScreen{tsTransaction=(i,t), tsTransactions=nts}
|
||||||
,tsTransactions=nts
|
|
||||||
}
|
|
||||||
,aopts=UIOpts{cliopts_=copts}
|
,aopts=UIOpts{cliopts_=copts}
|
||||||
,ajournal=j
|
,ajournal=j
|
||||||
,aMode=mode
|
,aMode=mode
|
||||||
@ -181,28 +177,25 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
|||||||
-- EvKey (KChar 'E') [] -> continue $ regenerateScreens j d $ stToggleEmpty ui
|
-- EvKey (KChar 'E') [] -> continue $ regenerateScreens j d $ stToggleEmpty ui
|
||||||
-- EvKey (KChar 'C') [] -> continue $ regenerateScreens j d $ stToggleCleared ui
|
-- EvKey (KChar 'C') [] -> continue $ regenerateScreens j d $ stToggleCleared ui
|
||||||
-- EvKey (KChar 'R') [] -> continue $ regenerateScreens j d $ stToggleReal ui
|
-- EvKey (KChar 'R') [] -> continue $ regenerateScreens j d $ stToggleReal ui
|
||||||
VtyEvent (EvKey (KChar 'B') []) ->
|
VtyEvent (EvKey (KChar 'B') []) -> continue . regenerateScreens j d $ toggleCost ui
|
||||||
continue $
|
VtyEvent (EvKey (KChar 'V') []) -> continue . regenerateScreens j d $ toggleValue ui
|
||||||
regenerateScreens j d $
|
|
||||||
toggleCost ui
|
|
||||||
VtyEvent (EvKey (KChar 'V') []) ->
|
|
||||||
continue $
|
|
||||||
regenerateScreens j d $
|
|
||||||
toggleValue ui
|
|
||||||
|
|
||||||
VtyEvent e | e `elem` moveUpEvents -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(iprev,tprev)}}
|
VtyEvent e | e `elem` moveUpEvents -> continue $ tsSelect iprev tprev ui
|
||||||
VtyEvent e | e `elem` moveDownEvents -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(inext,tnext)}}
|
VtyEvent e | e `elem` moveDownEvents -> continue $ tsSelect inext tnext ui
|
||||||
VtyEvent e | e `elem` moveLeftEvents -> continue ui''
|
VtyEvent e | e `elem` moveLeftEvents -> continue . popScreen $ tsSelect i t ui -- Probably not necessary to tsSelect here, but it's safe.
|
||||||
where
|
|
||||||
ui'@UIState{aScreen=scr} = popScreen ui
|
|
||||||
ui'' = ui'{aScreen=rsSelect (fromIntegral i) scr}
|
|
||||||
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> redraw ui
|
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> redraw ui
|
||||||
VtyEvent (EvKey (KChar 'z') [MCtrl]) -> suspend ui
|
VtyEvent (EvKey (KChar 'z') [MCtrl]) -> suspend ui
|
||||||
_ -> continue ui
|
_ -> continue ui
|
||||||
|
|
||||||
tsHandle _ _ = error "event handler called with wrong screen type, should not happen" -- PARTIAL:
|
tsHandle _ _ = error "event handler called with wrong screen type, should not happen" -- PARTIAL:
|
||||||
|
|
||||||
|
-- | Select a new transaction and update the previous register screen
|
||||||
|
tsSelect i t ui@UIState{aScreen=s@TransactionScreen{}} = case aPrevScreens ui of
|
||||||
|
x:xs -> ui'{aPrevScreens=rsSelect i x : xs}
|
||||||
|
[] -> ui'
|
||||||
|
where ui' = ui{aScreen=s{tsTransaction=(i,t)}}
|
||||||
|
tsSelect _ _ ui = ui
|
||||||
|
|
||||||
-- | Select the nth item on the register screen.
|
-- | Select the nth item on the register screen.
|
||||||
rsSelect i scr@RegisterScreen{..} = scr{rsList=l'}
|
rsSelect i scr@RegisterScreen{..} = scr{rsList=listMoveTo (fromInteger $ i-1) rsList}
|
||||||
where l' = listMoveTo (i-1) rsList
|
|
||||||
rsSelect _ scr = scr
|
rsSelect _ scr = scr
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user