dev: ui: lens: Add classy lens instances for UIOpts and UIState.

This commit is contained in:
Stephen Morgan 2021-08-26 22:59:11 +10:00 committed by Simon Michael
parent 09a2449f4f
commit f471258a48
2 changed files with 39 additions and 3 deletions

View File

@ -103,3 +103,21 @@ getHledgerUIOpts = do
let args' = replaceNumericFlags args
let cmdargopts = either usageError id $ process uimode args'
rawOptsToUIOpts cmdargopts
instance HasCliOpts UIOpts where
cliOpts f uiopts = (\x -> uiopts{cliopts_=x}) <$> f (cliopts_ uiopts)
instance HasInputOpts UIOpts where
inputOpts = cliOpts.inputOpts
instance HasBalancingOpts UIOpts where
balancingOpts = cliOpts.balancingOpts
instance HasReportSpec UIOpts where
reportSpec = cliOpts.reportSpec
instance HasReportOptsNoUpdate UIOpts where
reportOptsNoUpdate = cliOpts.reportOptsNoUpdate
instance HasReportOpts UIOpts where
reportOpts = cliOpts.reportOpts

View File

@ -48,6 +48,7 @@ import Text.Show.Functions ()
-- import the Show instance for functions. Warning, this also re-exports it
import Hledger
import Hledger.Cli (HasCliOpts(..))
import Hledger.UI.UIOptions
-- | hledger-ui's application state. This holds one or more stateful screens.
@ -160,7 +161,24 @@ type NumberedTransaction = (Integer, Transaction)
-- mempty = list "" V.empty 1 -- XXX problem in 0.7, every list requires a unique Name
-- mappend l1 l2 = l1 & listElementsL .~ (l1^.listElementsL <> l2^.listElementsL)
concat <$> mapM makeLenses [
''Screen
]
makeLenses ''Screen
uioptslens f ui = (\x -> ui{aopts=x}) <$> f (aopts ui)
instance HasCliOpts UIState where
cliOpts = uioptslens.cliOpts
instance HasInputOpts UIState where
inputOpts = uioptslens.inputOpts
instance HasBalancingOpts UIState where
balancingOpts = uioptslens.balancingOpts
instance HasReportSpec UIState where
reportSpec = uioptslens.reportSpec
instance HasReportOptsNoUpdate UIState where
reportOptsNoUpdate = uioptslens.reportOptsNoUpdate
instance HasReportOpts UIState where
reportOpts = uioptslens.reportOpts