packages feed

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

{-# 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
  -- artists
  execAlgebra (ArtistListPage limit offset env vv r next) =
    next =<< artistListPage' limit offset env vv r
  execAlgebra (ArtistDetailPage env vv r next) = do
    let maybeArtist = fmap head . nonEmpty . Map.elems $ r ^. #artists
    next =<< maybe (errorPage' env vv Nothing Nothing) (artistDetailPage' env vv) maybeArtist
  execAlgebra (ArtistCreatePage env vv next) =
    next =<< artistCreatePage' env vv
  execAlgebra (ArtistEditPage env vv artist next) =
    next =<< artistEditPage' env vv artist
  -- genres
  execAlgebra (GenreListPage limit offset env vv r next) =
    next =<< genreListPage' limit offset env vv r
  execAlgebra (GenreDetailPage env vv r next) = do
    let maybeGenre = fmap head . nonEmpty . Map.elems $ r ^. #genres
    next =<< maybe (errorPage' env vv Nothing Nothing) (genreDetailPage' env vv) maybeGenre
  execAlgebra (GenreCreatePage env vv next) =
    next =<< genreCreatePage' env vv
  execAlgebra (GenreEditPage env vv genre next) =
    next =<< genreEditPage' env vv genre
  -- songs
  execAlgebra (SongListPage limit offset env vv r next) =
    next =<< songListPage' limit offset env vv r
  execAlgebra (SongDetailPage env vv r next) = do
    let maybeSong = fmap head . nonEmpty . Map.elems $ r ^. #songs
    next =<< maybe (errorPage' env vv Nothing Nothing) (songDetailPage' env vv) maybeSong
  execAlgebra (SongCreatePage env vv next) =
    next =<< songCreatePage' env vv
  execAlgebra (SongEditPage env vv song next) =
    next =<< songEditPage' env vv song
  execAlgebra (ErrorPage env vv maybeCode maybeMessage next) =
    next =<< errorPage' env vv maybeCode maybeMessage
  execAlgebra (LoginPage env vv next) =
    next =<< loginPage' env vv
  execAlgebra (RequestPasswordResetPage env vv next) =
    next =<< requestPasswordResetPage' env vv
  execAlgebra (DoPasswordResetPage env vv t next) =
    next =<< doPasswordResetPage' env vv t
  execAlgebra (InviteUsersPage env vv next) =
    next =<< inviteUserPage' env vv