{-# LANGUAGE OverloadedLabels #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module WikiMusic.SSR.View.Html () where
import Data.Map qualified as Map
import Principium
import WikiMusic.SSR.Free.View
import WikiMusic.SSR.View.ArtistHtml
import WikiMusic.SSR.View.GenreHtml
import WikiMusic.SSR.View.OtherHtml
import WikiMusic.SSR.View.SongHtml
instance Exec View where
execAlgebra :: forall a. View (IO a) -> IO a
execAlgebra (ArtistListPage Limit
limit Offset
offset Env
env ViewVars
vv GetArtistsQueryResponse
r Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Limit
-> Offset -> Env -> ViewVars -> GetArtistsQueryResponse -> IO Html
forall (m :: * -> *).
MonadIO m =>
Limit
-> Offset -> Env -> ViewVars -> GetArtistsQueryResponse -> m Html
artistListPage' Limit
limit Offset
offset Env
env ViewVars
vv GetArtistsQueryResponse
r
execAlgebra (ArtistDetailPage Env
env ViewVars
vv GetArtistsQueryResponse
r Html -> IO a
next) = do
let maybeArtist :: Maybe Artist
maybeArtist = (NonEmpty Artist -> Artist)
-> Maybe (NonEmpty Artist) -> Maybe Artist
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NonEmpty Artist -> Artist
forall (f :: * -> *) a. IsNonEmpty f a a "head" => f a -> a
head (Maybe (NonEmpty Artist) -> Maybe Artist)
-> (Map UUID Artist -> Maybe (NonEmpty Artist))
-> Map UUID Artist
-> Maybe Artist
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Artist] -> Maybe (NonEmpty Artist)
forall a. [a] -> Maybe (NonEmpty a)
nonEmpty ([Artist] -> Maybe (NonEmpty Artist))
-> (Map UUID Artist -> [Artist])
-> Map UUID Artist
-> Maybe (NonEmpty Artist)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map UUID Artist -> [Artist]
forall k a. Map k a -> [a]
Map.elems (Map UUID Artist -> Maybe Artist)
-> Map UUID Artist -> Maybe Artist
forall a b. (a -> b) -> a -> b
$ GetArtistsQueryResponse
r GetArtistsQueryResponse
-> Optic' A_Lens NoIx GetArtistsQueryResponse (Map UUID Artist)
-> Map UUID Artist
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx GetArtistsQueryResponse (Map UUID Artist)
#artists
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO Html -> (Artist -> IO Html) -> Maybe Artist -> IO Html
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Env -> ViewVars -> Maybe Int -> Maybe Text -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Maybe Int -> Maybe Text -> m Html
errorPage' Env
env ViewVars
vv Maybe Int
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing) (Env -> ViewVars -> Artist -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Artist -> m Html
artistDetailPage' Env
env ViewVars
vv) Maybe Artist
maybeArtist
execAlgebra (ArtistCreatePage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
artistCreatePage' Env
env ViewVars
vv
execAlgebra (ArtistEditPage Env
env ViewVars
vv Artist
artist Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> Artist -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Artist -> m Html
artistEditPage' Env
env ViewVars
vv Artist
artist
execAlgebra (GenreListPage Limit
limit Offset
offset Env
env ViewVars
vv GetGenresQueryResponse
r Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Limit
-> Offset -> Env -> ViewVars -> GetGenresQueryResponse -> IO Html
forall (m :: * -> *).
MonadIO m =>
Limit
-> Offset -> Env -> ViewVars -> GetGenresQueryResponse -> m Html
genreListPage' Limit
limit Offset
offset Env
env ViewVars
vv GetGenresQueryResponse
r
execAlgebra (GenreDetailPage Env
env ViewVars
vv GetGenresQueryResponse
r Html -> IO a
next) = do
let maybeGenre :: Maybe Genre
maybeGenre = (NonEmpty Genre -> Genre) -> Maybe (NonEmpty Genre) -> Maybe Genre
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NonEmpty Genre -> Genre
forall (f :: * -> *) a. IsNonEmpty f a a "head" => f a -> a
head (Maybe (NonEmpty Genre) -> Maybe Genre)
-> (Map UUID Genre -> Maybe (NonEmpty Genre))
-> Map UUID Genre
-> Maybe Genre
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Genre] -> Maybe (NonEmpty Genre)
forall a. [a] -> Maybe (NonEmpty a)
nonEmpty ([Genre] -> Maybe (NonEmpty Genre))
-> (Map UUID Genre -> [Genre])
-> Map UUID Genre
-> Maybe (NonEmpty Genre)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map UUID Genre -> [Genre]
forall k a. Map k a -> [a]
Map.elems (Map UUID Genre -> Maybe Genre) -> Map UUID Genre -> Maybe Genre
forall a b. (a -> b) -> a -> b
$ GetGenresQueryResponse
r GetGenresQueryResponse
-> Optic' A_Lens NoIx GetGenresQueryResponse (Map UUID Genre)
-> Map UUID Genre
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx GetGenresQueryResponse (Map UUID Genre)
#genres
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO Html -> (Genre -> IO Html) -> Maybe Genre -> IO Html
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Env -> ViewVars -> Maybe Int -> Maybe Text -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Maybe Int -> Maybe Text -> m Html
errorPage' Env
env ViewVars
vv Maybe Int
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing) (Env -> ViewVars -> Genre -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Genre -> m Html
genreDetailPage' Env
env ViewVars
vv) Maybe Genre
maybeGenre
execAlgebra (GenreCreatePage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
genreCreatePage' Env
env ViewVars
vv
execAlgebra (GenreEditPage Env
env ViewVars
vv Genre
genre Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> Genre -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Genre -> m Html
genreEditPage' Env
env ViewVars
vv Genre
genre
execAlgebra (SongListPage Limit
limit Offset
offset Env
env ViewVars
vv GetSongsQueryResponse
r Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Limit
-> Offset -> Env -> ViewVars -> GetSongsQueryResponse -> IO Html
forall (m :: * -> *).
MonadIO m =>
Limit
-> Offset -> Env -> ViewVars -> GetSongsQueryResponse -> m Html
songListPage' Limit
limit Offset
offset Env
env ViewVars
vv GetSongsQueryResponse
r
execAlgebra (SongDetailPage Env
env ViewVars
vv GetSongsQueryResponse
r Html -> IO a
next) = do
let maybeSong :: Maybe Song
maybeSong = (NonEmpty Song -> Song) -> Maybe (NonEmpty Song) -> Maybe Song
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NonEmpty Song -> Song
forall (f :: * -> *) a. IsNonEmpty f a a "head" => f a -> a
head (Maybe (NonEmpty Song) -> Maybe Song)
-> (Map UUID Song -> Maybe (NonEmpty Song))
-> Map UUID Song
-> Maybe Song
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Song] -> Maybe (NonEmpty Song)
forall a. [a] -> Maybe (NonEmpty a)
nonEmpty ([Song] -> Maybe (NonEmpty Song))
-> (Map UUID Song -> [Song])
-> Map UUID Song
-> Maybe (NonEmpty Song)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map UUID Song -> [Song]
forall k a. Map k a -> [a]
Map.elems (Map UUID Song -> Maybe Song) -> Map UUID Song -> Maybe Song
forall a b. (a -> b) -> a -> b
$ GetSongsQueryResponse
r GetSongsQueryResponse
-> Optic' A_Lens NoIx GetSongsQueryResponse (Map UUID Song)
-> Map UUID Song
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx GetSongsQueryResponse (Map UUID Song)
#songs
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO Html -> (Song -> IO Html) -> Maybe Song -> IO Html
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Env -> ViewVars -> Maybe Int -> Maybe Text -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Maybe Int -> Maybe Text -> m Html
errorPage' Env
env ViewVars
vv Maybe Int
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing) (Env -> ViewVars -> Song -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Song -> m Html
songDetailPage' Env
env ViewVars
vv) Maybe Song
maybeSong
execAlgebra (SongCreatePage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
songCreatePage' Env
env ViewVars
vv
execAlgebra (SongEditPage Env
env ViewVars
vv Song
song Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> Song -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Song -> m Html
songEditPage' Env
env ViewVars
vv Song
song
execAlgebra (ErrorPage Env
env ViewVars
vv Maybe Int
maybeCode Maybe Text
maybeMessage Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> Maybe Int -> Maybe Text -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Maybe Int -> Maybe Text -> m Html
errorPage' Env
env ViewVars
vv Maybe Int
maybeCode Maybe Text
maybeMessage
execAlgebra (LoginPage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
loginPage' Env
env ViewVars
vv
execAlgebra (RequestPasswordResetPage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
requestPasswordResetPage' Env
env ViewVars
vv
execAlgebra (DoPasswordResetPage Env
env ViewVars
vv Maybe Text
t Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> Maybe Text -> IO Html
forall (m :: * -> *).
MonadIO m =>
Env -> ViewVars -> Maybe Text -> m Html
doPasswordResetPage' Env
env ViewVars
vv Maybe Text
t
execAlgebra (InviteUsersPage Env
env ViewVars
vv Html -> IO a
next) =
Html -> IO a
next (Html -> IO a) -> IO Html -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> ViewVars -> IO Html
forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html
inviteUserPage' Env
env ViewVars
vv