{-# LANGUAGE ApplicativeDo #-} module Handler.Common ( inventoryListing , itemForm , InventoryState(..) , FormState(..) ) where import Import import Data.Unique import qualified Data.Text as Text (pack) import Control.Lens import Handler.Common.Types dayFormat :: Day -> String dayFormat = formatTime defaultTimeLocale "%e. %b %y" itemForm :: Maybe Item -- ^ Update existing item or insert new? -> Html -> MForm Handler (FormResult Item, Widget) itemForm proto identView = do today <- utctDay <$> liftIO getCurrentTime (kindRes, kindView) <- mreq textField "" $ itemKind <$> proto (boughtRes, boughtWidget) <- dayForm (maybe (Just $ Just today) Just $ fmap itemBought proto) "Unknown" (expiresRes, expiresWidget) <- dayForm (fmap itemExpires proto) "Never" (openedRes, openedWidget) <- dayForm (fmap itemOpened proto) "Never" let itemRes = do itemKind <- kindRes itemBought <- boughtRes itemExpires <- expiresRes itemOpened <- openedRes return Item{ itemNormKind = normalizeKind itemKind, ..} return . (itemRes, ) $ [whamlet| $newline never #{identView}