26 lines
1003 B
Haskell
26 lines
1003 B
Haskell
{-# LANGUAGE NoImplicitPrelude
|
|
, RecordWildCards
|
|
#-}
|
|
|
|
module Utils.SystemMessage where
|
|
|
|
import Import.NoFoundation
|
|
|
|
import qualified Data.List.NonEmpty as NonEmpty
|
|
import Data.List (findIndex)
|
|
|
|
import Control.Monad.Trans.Maybe (MaybeT(..))
|
|
|
|
|
|
getSystemMessage :: MonadHandler m
|
|
=> NonEmpty Lang -- ^ `appLanguages`
|
|
-> SystemMessageId
|
|
-> ReaderT SqlBackend m (Maybe (SystemMessage, Maybe SystemMessageTranslation))
|
|
getSystemMessage appLanguages smId = runMaybeT $ do
|
|
SystemMessage{..} <- MaybeT $ get smId
|
|
translations <- lift $ selectList [SystemMessageTranslationMessage ==. smId] []
|
|
let
|
|
avL = NonEmpty.sortWith (\l -> NTop $ findIndex (langMatches l) $ NonEmpty.toList appLanguages) $ systemMessageDefaultLanguage :| map (systemMessageTranslationLanguage . entityVal) translations
|
|
lang <- selectLanguage avL
|
|
return (SystemMessage{..}, find (langMatches lang . systemMessageTranslationLanguage) $ map entityVal translations)
|