packages feed

clckwrks-0.13.0: Clckwrks/Admin/EditFeedConfig.hs

{-# LANGUAGE RecordWildCards #-}
{-# OPTIONS_GHC -F -pgmFtrhsx #-}
module Clckwrks.Admin.EditFeedConfig where

import Clckwrks
import Clckwrks.Admin.Template  (template)
import Clckwrks.Page.Acid       (GetFeedConfig(..), SetFeedConfig(..))
import Data.Text                (Text, pack)
import Text.Reform
import Text.Reform.Happstack
import Text.Reform.HSP.Text

editFeedConfig :: ClckURL -> Clck ClckURL Response
editFeedConfig here =
    do feedConfig <- query $ GetFeedConfig
       action <- showURL here
       template "edit feed config" () $
                  <%>
                   <% reform (form action) "ep" updateFeedConfig Nothing (feedConfigForm feedConfig) %>
                  </%>
    where
      updateFeedConfig :: FeedConfig -> Clck ClckURL Response
      updateFeedConfig fc =
          do update (SetFeedConfig fc)
             seeOtherURL (Admin Console)

feedConfigForm :: FeedConfig -> ClckForm ClckURL FeedConfig
feedConfigForm fc@FeedConfig{..} =
    fieldset $
     ol $
      ((,) <$> (li $ label "Feed Title:")          ++> (li $ inputText feedTitle)
           <*> (li $ label "Default Author Name:") ++> (li $ inputText feedAuthorName)
           <* inputSubmit (pack "update")
      )
     `transformEither` toFeedConfig
    where
      toFeedConfig :: (Text, Text) -> Either ClckFormError FeedConfig
      toFeedConfig (ttl, athr) =
              Right $ fc { feedTitle      = ttl
                         , feedAuthorName = athr
                         }