{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} module Hledger.Web.Widget.AddForm ( addForm , addModal ) where import Control.Monad.State.Strict (evalStateT) import Data.Bifunctor (first) import Data.List (dropWhileEnd, nub, sort, unfoldr) import Data.Maybe (isJust) import Data.Semigroup ((<>)) import Data.Text (Text) import qualified Data.Text as T import Data.Time (Day) import Text.Blaze.Internal (Markup, preEscapedString) import Text.JSON import Text.Megaparsec (eof, errorBundlePretty, runParser) import Yesod import Hledger import Hledger.Web.Settings (widgetFile) addModal :: ( MonadWidget m , r ~ Route (HandlerSite m) #if MIN_VERSION_yesod(1,6,0) , m ~ WidgetFor (HandlerSite m) #else , m ~ WidgetT (HandlerSite m) IO #endif , RenderMessage (HandlerSite m) FormMessage ) => r -> Journal -> Day -> m () addModal addR j today = do (addView, addEnctype) <- generateFormPost (addForm j today) [whamlet|