packages feed

wikimusic-ssr-1.0.1.6: src/WikiMusic/SSR/View/OtherHtml.hs

{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module WikiMusic.SSR.View.OtherHtml where

import Data.Text qualified as T
import Principium
import Text.Blaze.Html5 as H
import Text.Blaze.Html5.Attributes as A
import WikiMusic.SSR.View.Components.Forms
import WikiMusic.SSR.View.HtmlUtil

errorPage' :: (MonadIO m) => Env -> ViewVars -> Maybe Int -> Maybe Text -> m Html
errorPage' env vv _ maybeMessage = do
  simplePage env vv (SimplePageTitle $ (^. #titles % #songsPage) |##| (vv ^. #language)) $ section $ do
    h3 . text $ messageCauses
    let maybeDecoded = fmap maybeDecodeBase16 maybeMessage
    H.pre
      $ do
        case maybeDecoded of
          Nothing -> text "Unexpected Error!"
          Just maybeDecodedError -> either (pure $ text "Unexpected Error!") (text . T.pack . decodeUtf8) maybeDecodedError
  where
    messageCauses = T.intercalate " - " causeStrings
    causeStrings = catMaybes [Just "Error", if T.isInfixOf "504" (fromMaybe "Error ocurred!" maybeMessage) then Just "Gateway Timeout" else Nothing]

loginPage' :: (MonadIO m) => Env -> ViewVars -> m Html
loginPage' env vv = do
  simplePage env vv (SimplePageTitle $ (^. #more % #loginNav) |##| (vv ^. #language)) $ do
    section ! css' ["flex", "justify-center"] $ postForm' "/login" ["flex", "flex-col", "gap-4"] $ do
      H.div ! css' ["flex", "flex-row", "flex-wrap", "gap-8"] $ do
        requiredEmailInput "email" ((^. #forms % #email) |##| (vv ^. #language))
        requiredPasswordInput "password" ((^. #forms % #password) |##| (vv ^. #language))
      submitButton vv
    a ! css (cssLink vv) ! href "/passwords/request-reset" $ "forgot password ?"

doPasswordResetPage' :: (MonadIO m) => Env -> ViewVars -> Maybe Text -> m Html
doPasswordResetPage' env vv t = do
  simplePage env vv (SimplePageTitle "Reset password") $ do
    section $ postForm "/passwords/do-reset" $ do
      requiredEmailInput "email" "email"
      requiredPasswordInput "password" "password"
      requiredPasswordInput "passwordConfirm" "password again"
      requiredTextInput' "token" "token" t
      submitButton vv

requestPasswordResetPage' :: (MonadIO m) => Env -> ViewVars -> m Html
requestPasswordResetPage' env vv = do
  simplePage env vv (SimplePageTitle "Request password reset ?") $ do
    section $ postForm "/passwords/request-reset" $ do
      requiredEmailInput "email" "email"
      submitButton vv

inviteUserPage' :: (MonadIO m) => Env -> ViewVars -> m Html
inviteUserPage' env vv = do
  simplePage env vv (SimplePageTitle "Invite user") $ do
    section $ postForm "/users/invite" $ do
      requiredEmailInput "email" "email"
      requiredTextInput "displayName" "name"
      H.label ! for "role" $ "role"
      select ! css (cssSelect vv) ! required "" ! name "role" ! A.id "role" $ do
        option ! value "wm::demo" $ "demo user"
        option ! value "wm::lowrank" $ "average user"
        option ! value "wm::maintainer" $ "wiki maintainer"
        option ! value "wm::superuser" $ "super user"
      optionalTextArea "description" "description"
      submitButton vv