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.UIUtils | ||||
| import Hledger.UI.Editor | ||||
| import Data.Foldable (asum) | ||||
| 
 | ||||
| errorScreen :: Screen | ||||
| errorScreen = ErrorScreen{ | ||||
| @ -178,20 +177,6 @@ uiReloadJournalIfChanged copts d j ui = do | ||||
|         UIState{aScreen=s@ErrorScreen{}} -> ui{aScreen=s{esError=err}} | ||||
|         _                                -> 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 | ||||
| -- fail, enter (or update) the error screen. Or if balance assertions | ||||
| -- are disabled, do nothing. | ||||
|  | ||||
| @ -7,6 +7,7 @@ module Hledger.UI.UIState | ||||
| where | ||||
| 
 | ||||
| import Brick.Widgets.Edit | ||||
| import Data.Foldable (asum) | ||||
| import Data.List ((\\), foldl', sort) | ||||
| import Data.Semigroup (Max(..)) | ||||
| 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). | ||||
| -- In normal mode, both of these are hidden. | ||||
| toggleForecast :: Day -> UIState -> UIState | ||||
| toggleForecast d ui@UIState{aopts=UIOpts{cliopts_=CliOpts{inputopts_=iopts}}} = | ||||
| toggleForecast _d ui@UIState{aopts=UIOpts{cliopts_=copts}} = | ||||
|   uiSetForecast ui $ | ||||
|     case forecast_ iopts of | ||||
|     case forecast_ $ inputopts_ copts of | ||||
|       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. | ||||
| uiSetForecast :: UIState -> Maybe DateSpan -> UIState | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user