fix: ui: Ensure that forecast_ argument gets restored to the startup
opts when toggling.
This commit is contained in:
parent
c07ad29a87
commit
16b4702dce
@ -28,7 +28,6 @@ import Hledger.UI.UITypes
|
|||||||
import Hledger.UI.UIState
|
import Hledger.UI.UIState
|
||||||
import Hledger.UI.UIUtils
|
import Hledger.UI.UIUtils
|
||||||
import Hledger.UI.Editor
|
import Hledger.UI.Editor
|
||||||
import Data.Foldable (asum)
|
|
||||||
|
|
||||||
errorScreen :: Screen
|
errorScreen :: Screen
|
||||||
errorScreen = ErrorScreen{
|
errorScreen = ErrorScreen{
|
||||||
@ -178,20 +177,6 @@ uiReloadJournalIfChanged copts d j ui = do
|
|||||||
UIState{aScreen=s@ErrorScreen{}} -> ui{aScreen=s{esError=err}}
|
UIState{aScreen=s@ErrorScreen{}} -> ui{aScreen=s{esError=err}}
|
||||||
_ -> screenEnter d errorScreen{esError=err} ui
|
_ -> screenEnter d errorScreen{esError=err} ui
|
||||||
|
|
||||||
-- | Ensure this CliOpts enables forecasted transactions.
|
|
||||||
-- If a forecast period was specified in the old CliOpts,
|
|
||||||
-- or in the provided UIState's startup options,
|
|
||||||
-- it is preserved.
|
|
||||||
enableForecastPreservingPeriod :: UIState -> CliOpts -> CliOpts
|
|
||||||
enableForecastPreservingPeriod ui copts@CliOpts{inputopts_=iopts} =
|
|
||||||
copts{inputopts_=iopts{forecast_=mforecast}}
|
|
||||||
where
|
|
||||||
mforecast = asum [mprovidedforecastperiod, mstartupforecastperiod, mdefaultforecastperiod]
|
|
||||||
where
|
|
||||||
mprovidedforecastperiod = forecast_ $ inputopts_ copts
|
|
||||||
mstartupforecastperiod = forecast_ $ inputopts_ $ cliopts_ $ astartupopts ui
|
|
||||||
mdefaultforecastperiod = Just nulldatespan
|
|
||||||
|
|
||||||
-- Re-check any balance assertions in the current journal, and if any
|
-- Re-check any balance assertions in the current journal, and if any
|
||||||
-- fail, enter (or update) the error screen. Or if balance assertions
|
-- fail, enter (or update) the error screen. Or if balance assertions
|
||||||
-- are disabled, do nothing.
|
-- are disabled, do nothing.
|
||||||
|
|||||||
@ -7,6 +7,7 @@ module Hledger.UI.UIState
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Brick.Widgets.Edit
|
import Brick.Widgets.Edit
|
||||||
|
import Data.Foldable (asum)
|
||||||
import Data.List ((\\), foldl', sort)
|
import Data.List ((\\), foldl', sort)
|
||||||
import Data.Semigroup (Max(..))
|
import Data.Semigroup (Max(..))
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
@ -156,11 +157,25 @@ toggleHistorical ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec
|
|||||||
-- (which are usually but not necessarily future-dated).
|
-- (which are usually but not necessarily future-dated).
|
||||||
-- In normal mode, both of these are hidden.
|
-- In normal mode, both of these are hidden.
|
||||||
toggleForecast :: Day -> UIState -> UIState
|
toggleForecast :: Day -> UIState -> UIState
|
||||||
toggleForecast d ui@UIState{aopts=UIOpts{cliopts_=CliOpts{inputopts_=iopts}}} =
|
toggleForecast _d ui@UIState{aopts=UIOpts{cliopts_=copts}} =
|
||||||
uiSetForecast ui $
|
uiSetForecast ui $
|
||||||
case forecast_ iopts of
|
case forecast_ $ inputopts_ copts of
|
||||||
Just _ -> Nothing
|
Just _ -> Nothing
|
||||||
Nothing -> forecastPeriod d iopts{forecast_=Just nulldatespan} (ajournal ui)
|
Nothing -> forecast_ . inputopts_ $ enableForecastPreservingPeriod ui copts
|
||||||
|
|
||||||
|
-- | Ensure this CliOpts enables forecasted transactions.
|
||||||
|
-- If a forecast period was specified in the old CliOpts,
|
||||||
|
-- or in the provided UIState's startup options,
|
||||||
|
-- it is preserved.
|
||||||
|
enableForecastPreservingPeriod :: UIState -> CliOpts -> CliOpts
|
||||||
|
enableForecastPreservingPeriod ui copts@CliOpts{inputopts_=iopts} =
|
||||||
|
copts{inputopts_=iopts{forecast_=mforecast}}
|
||||||
|
where
|
||||||
|
mforecast = asum [mprovidedforecastperiod, mstartupforecastperiod, mdefaultforecastperiod]
|
||||||
|
where
|
||||||
|
mprovidedforecastperiod = forecast_ $ inputopts_ copts
|
||||||
|
mstartupforecastperiod = forecast_ $ inputopts_ $ cliopts_ $ astartupopts ui
|
||||||
|
mdefaultforecastperiod = Just nulldatespan
|
||||||
|
|
||||||
-- | Helper: set forecast mode (with the given forecast period) on or off in the UI state.
|
-- | Helper: set forecast mode (with the given forecast period) on or off in the UI state.
|
||||||
uiSetForecast :: UIState -> Maybe DateSpan -> UIState
|
uiSetForecast :: UIState -> Maybe DateSpan -> UIState
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user