{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module WikiMusic.SSR.View.ArtistHtml ( artistListPage', artistDetailPage', artistCreatePage', artistEditPage', ) where import Data.Map qualified as Map import Data.Text qualified as T import Principium import Text.Blaze.Html5 as H hiding (map) import Text.Blaze.Html5.Attributes as A import WikiMusic.Interaction.Model.Artist import WikiMusic.SSR.View.Components.Forms import WikiMusic.SSR.View.Components.Other import WikiMusic.SSR.View.HtmlUtil artistListPage' :: (MonadIO m) => Limit -> Offset -> Env -> ViewVars -> GetArtistsQueryResponse -> m Html artistListPage' :: forall (m :: * -> *). MonadIO m => Limit -> Offset -> Env -> ViewVars -> GetArtistsQueryResponse -> m Html artistListPage' Limit limit Offset offset Env env ViewVars vv GetArtistsQueryResponse xs = Env -> ViewVars -> SimplePageTitle -> Html -> m Html forall (m :: * -> *). MonadIO m => Env -> ViewVars -> SimplePageTitle -> Html -> m Html simplePage Env env ViewVars vv (Text -> SimplePageTitle SimplePageTitle (Text -> SimplePageTitle) -> Text -> SimplePageTitle forall a b. (a -> b) -> a -> b $ (ApplicationDictionary -> Optic' A_Lens NoIx ApplicationDictionary DictTerm -> DictTerm forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic A_Lens NoIx ApplicationDictionary ApplicationDictionary Titles Titles #titles Optic A_Lens NoIx ApplicationDictionary ApplicationDictionary Titles Titles -> Optic A_Lens NoIx Titles Titles DictTerm DictTerm -> Optic' A_Lens NoIx ApplicationDictionary DictTerm forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a b. (JoinKinds k l m, AppendIndices is js ks) => Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b % Optic A_Lens NoIx Titles Titles DictTerm DictTerm #artistsPage) (ApplicationDictionary -> DictTerm) -> Language -> Text |##| (ViewVars vv ViewVars -> Optic' A_Lens NoIx ViewVars Language -> Language forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx ViewVars Language #language)) (Html -> m Html) -> Html -> m Html forall a b. (a -> b) -> a -> b $ do Html -> Html section (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! [Text] -> Attribute css' [Text "flex", Text "flex-row", Text "flex-wrap", Text "gap-4", Text "justify-center", Text "align-center", Text "items-center"] (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Html -> Html searchForm Text "/artists/search" (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Html searchInput Text "searchInput" Html submitButtonNoText Html -> Html section (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Html -> Html H.a (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! AttributeValue -> Attribute href AttributeValue "/artists/create" (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ Html -> Html button (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ Html -> Html H.small Html "+ new artist" ViewVars -> SortOrder -> Text -> Text -> Html mkSortingForm ViewVars vv (ViewVars vv ViewVars -> Optic' A_Lens NoIx ViewVars SortOrder -> SortOrder forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx ViewVars SortOrder #artistSorting) Text "/user-preferences/artist-sorting" Text "artist-sorting" Html -> Html section (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! Set Text -> Attribute css Set Text cssCenteredCardGrid (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ (Artist -> Html) -> [Artist] -> Html forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => (a -> m b) -> t a -> m () mapM_ (ViewVars -> Text -> Artist -> Html forall {k1} {k2} {k3} {k4} {k5} {k6} {k7} {k8} {a1} {k9} {l1} {l2} {s1} {u} {v} {k10} {s2} {k11} {a2}. (Is k1 A_Getter, Is k2 A_Getter, Is k3 A_Getter, Is k4 A_Getter, Is k5 A_Getter, Is k6 A_Getter, Is k7 A_Getter, Is k8 A_Getter, Show a1, JoinKinds k9 l1 k3, JoinKinds k9 l2 k2, LabelOptic "identifier" k4 s1 s1 UUID UUID, LabelOptic "displayName" k7 s1 s1 Text Text, LabelOptic "isLike" l1 u v Bool Bool, LabelOptic "artworks" k6 s1 s1 (Map k10 s2) (Map k10 s2), LabelOptic "opinions" k8 s1 s1 (Map k11 a2) (Map k11 a2), LabelOptic "viewCount" k1 s1 s1 a1 a1, LabelOptic "artwork" k5 s2 s2 Artwork Artwork, LabelOptic "opinion" k9 a2 a2 u v, LabelOptic "isDislike" l2 u v Bool Bool) => ViewVars -> Text -> s1 -> Html simpleEntityCard ViewVars vv Text "artists") [Artist] sortedXs Html -> Html section (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! [Text] -> Attribute css' [Text "flex", Text "flex-row", Text "flex-wrap", Text "gap-4", Text "justify-center", Text "align-center", Text "items-center", Text "my-6"] (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do ViewVars -> Limit -> Offset -> Int -> Html maybePrevPaginationButton ViewVars vv Limit limit Offset offset (Map UUID Artist -> Int forall a. Map UUID a -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length (GetArtistsQueryResponse xs 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)) ViewVars -> Limit -> Offset -> Int -> Html maybeNextPaginationButton ViewVars vv Limit limit Offset offset (Map UUID Artist -> Int forall a. Map UUID a -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length (GetArtistsQueryResponse xs 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)) where sortedXs :: [Artist] sortedXs = (UUID -> Maybe Artist) -> [UUID] -> [Artist] forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe (\UUID identifier -> (GetArtistsQueryResponse xs 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) Map UUID Artist -> UUID -> Maybe Artist forall k a. Ord k => Map k a -> k -> Maybe a Principium.!? UUID identifier) (GetArtistsQueryResponse xs GetArtistsQueryResponse -> Optic' A_Lens NoIx GetArtistsQueryResponse [UUID] -> [UUID] forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx GetArtistsQueryResponse [UUID] #sortOrder) artistDetailPage' :: (MonadIO m) => Env -> ViewVars -> Artist -> m Html artistDetailPage' :: forall (m :: * -> *). MonadIO m => Env -> ViewVars -> Artist -> m Html artistDetailPage' Env env ViewVars vv Artist x = do Env -> ViewVars -> SimplePageTitle -> Html -> m Html forall (m :: * -> *). MonadIO m => Env -> ViewVars -> SimplePageTitle -> Html -> m Html simplePage Env env ViewVars vv (Text -> SimplePageTitle SimplePageTitle (Text -> SimplePageTitle) -> Text -> SimplePageTitle forall a b. (a -> b) -> a -> b $ (ApplicationDictionary -> Optic' A_Lens NoIx ApplicationDictionary DictTerm -> DictTerm forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic A_Lens NoIx ApplicationDictionary ApplicationDictionary Titles Titles #titles Optic A_Lens NoIx ApplicationDictionary ApplicationDictionary Titles Titles -> Optic A_Lens NoIx Titles Titles DictTerm DictTerm -> Optic' A_Lens NoIx ApplicationDictionary DictTerm forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a b. (JoinKinds k l m, AppendIndices is js ks) => Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b % Optic A_Lens NoIx Titles Titles DictTerm DictTerm #artistsPage) (ApplicationDictionary -> DictTerm) -> Language -> Text |##| (ViewVars vv ViewVars -> Optic' A_Lens NoIx ViewVars Language -> Language forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx ViewVars Language #language)) (Html -> m Html) -> Html -> m Html forall a b. (a -> b) -> a -> b $ do ViewVars -> Text -> Artist -> Html forall {a1} {a2} {a3} {a4} {a5} {t1 :: * -> *} {k1} {l1} {k2} {l2} {k3} {k4} {k5} {k6} {k7} {k8} {k9} {k10} {k11} {k12} {k13} {k14} {k15} {k16} {k17} {t2 :: * -> *} {t3 :: * -> *} {t4 :: * -> *} {t5 :: * -> *} {t6 :: * -> *} {s} {u} {v} {k18} {a6} {k19} {a7}. (Show a1, Show a2, Show a3, Show a4, Show a5, Functor t1, JoinKinds k1 l1 k2, JoinKinds k1 l2 k3, Is k4 A_Getter, Is k5 A_Getter, Is k6 A_Getter, Is k7 A_Getter, Is k8 A_Getter, Is k9 A_Getter, Is k10 A_Getter, Is k11 A_Getter, Is k3 A_Getter, Is k2 A_Getter, Is k12 A_Getter, Is k13 A_Getter, Is k14 A_Getter, Is k15 A_Getter, Is k16 A_Getter, Is k17 A_Getter, Foldable t2, Foldable t1, Foldable t3, Foldable t4, Foldable t5, Foldable t6, LabelOptic "description" k4 s s (t2 Text) (t2 Text), LabelOptic "identifier" k8 s s a1 a1, LabelOptic "createdBy" k9 s s a2 a2, LabelOptic "createdAt" k10 s s a3 a3, LabelOptic "lastEditedAt" k13 s s (t1 a5) (t1 a5), LabelOptic "displayName" k7 s s Text Text, LabelOptic "soundcloudUrl" k14 s s (t3 Text) (t3 Text), LabelOptic "spotifyUrl" k16 s s (t5 Text) (t5 Text), LabelOptic "wikipediaUrl" k15 s s (t4 Text) (t4 Text), LabelOptic "youtubeUrl" k17 s s (t6 Text) (t6 Text), LabelOptic "isLike" l2 u v Bool Bool, LabelOptic "artworks" k5 s s (Map k18 a6) (Map k18 a6), LabelOptic "opinions" k11 s s (Map k19 a7) (Map k19 a7), LabelOptic "viewCount" k12 s s a4 a4, LabelOptic "artwork" k6 a6 a6 Artwork Artwork, LabelOptic "opinion" k1 a7 a7 u v, LabelOptic "isDislike" l1 u v Bool Bool) => ViewVars -> Text -> s -> Html entityDetails ViewVars vv Text "artists" Artist x artistCreatePage' :: (MonadIO m) => Env -> ViewVars -> m Html artistCreatePage' :: forall (m :: * -> *). MonadIO m => Env -> ViewVars -> m Html artistCreatePage' Env env ViewVars vv = do Env -> ViewVars -> SimplePageTitle -> Html -> m Html forall (m :: * -> *). MonadIO m => Env -> ViewVars -> SimplePageTitle -> Html -> m Html simplePage Env env ViewVars vv (Text -> SimplePageTitle SimplePageTitle Text "Create artist") (Html -> m Html) -> Html -> m Html forall a b. (a -> b) -> a -> b $ do Html -> Html section (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! [Text] -> Attribute css' [Text "container", Text "mx-auto"] (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Html -> Html postForm Text "/artists/create" (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Text -> Html requiredTextInput Text "displayName" Text "artist name" Text -> Text -> Html optionalTextArea Text "description" Text "description" Text -> Text -> Html optionalTextInput Text "spotifyUrl" Text "spotify URL" Text -> Text -> Html optionalTextInput Text "youtubeUrl" Text "youtube URL" Text -> Text -> Html optionalTextInput Text "wikipediaUrl" Text "wikipedia URL" Text -> Text -> Html optionalTextInput Text "soundcloudUrl" Text "soundcloud URL" ViewVars -> Html submitButton ViewVars vv artistEditPage' :: (MonadIO m) => Env -> ViewVars -> Artist -> m Html artistEditPage' :: forall (m :: * -> *). MonadIO m => Env -> ViewVars -> Artist -> m Html artistEditPage' Env env ViewVars vv Artist artist = do Env -> ViewVars -> SimplePageTitle -> Html -> m Html forall (m :: * -> *). MonadIO m => Env -> ViewVars -> SimplePageTitle -> Html -> m Html simplePage Env env ViewVars vv (Text -> SimplePageTitle SimplePageTitle Text "Edit artist") (Html -> m Html) -> Html -> m Html forall a b. (a -> b) -> a -> b $ do Html -> Html section (Html -> Html) -> Attribute -> Html -> Html forall h. Attributable h => h -> Attribute -> h ! [Text] -> Attribute css' [Text "container", Text "mx-auto"] (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Html -> Html postForm (Text "/artists/edit/" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> (String -> Text T.pack (String -> Text) -> (UUID -> String) -> UUID -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . UUID -> String forall b a. (Show a, IsString b) => a -> b show (UUID -> Text) -> UUID -> Text forall a b. (a -> b) -> a -> b $ Artist artist Artist -> Optic' A_Lens NoIx Artist UUID -> UUID forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist UUID #identifier)) (Html -> Html) -> Html -> Html forall a b. (a -> b) -> a -> b $ do Text -> Text -> Maybe Text -> Html requiredTextInput' Text "displayName" Text "artist name" (Text -> Maybe Text forall a. a -> Maybe a Just (Text -> Maybe Text) -> Text -> Maybe Text forall a b. (a -> b) -> a -> b $ Artist artist Artist -> Optic' A_Lens NoIx Artist Text -> Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist Text #displayName) Text -> Text -> Maybe Text -> Html optionalTextArea' Text "description" Text "description" (Artist artist Artist -> Optic' A_Lens NoIx Artist (Maybe Text) -> Maybe Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Maybe Text) #description) Text -> Text -> Maybe Text -> Html optionalTextInput' Text "spotifyUrl" Text "spotify URL" (Artist artist Artist -> Optic' A_Lens NoIx Artist (Maybe Text) -> Maybe Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Maybe Text) #spotifyUrl) Text -> Text -> Maybe Text -> Html optionalTextInput' Text "youtubeUrl" Text "youtube URL" (Artist artist Artist -> Optic' A_Lens NoIx Artist (Maybe Text) -> Maybe Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Maybe Text) #youtubeUrl) Text -> Text -> Maybe Text -> Html optionalTextInput' Text "wikipediaUrl" Text "wikipedia URL" (Artist artist Artist -> Optic' A_Lens NoIx Artist (Maybe Text) -> Maybe Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Maybe Text) #wikipediaUrl) Text -> Text -> Maybe Text -> Html optionalTextInput' Text "soundcloudUrl" Text "soundcloud URL" (Artist artist Artist -> Optic' A_Lens NoIx Artist (Maybe Text) -> Maybe Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Maybe Text) #soundcloudUrl) ViewVars -> Html submitButton ViewVars vv ViewVars -> Text -> [Artwork] -> Html entityArtworkForm ViewVars vv Text "artists" ((ArtistArtwork -> Artwork) -> [ArtistArtwork] -> [Artwork] forall a b. (a -> b) -> [a] -> [b] map (ArtistArtwork -> Optic' A_Lens NoIx ArtistArtwork Artwork -> Artwork forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx ArtistArtwork Artwork #artwork) ([ArtistArtwork] -> [Artwork]) -> (Map UUID ArtistArtwork -> [ArtistArtwork]) -> Map UUID ArtistArtwork -> [Artwork] forall b c a. (b -> c) -> (a -> b) -> a -> c . Map UUID ArtistArtwork -> [ArtistArtwork] forall k a. Map k a -> [a] Map.elems (Map UUID ArtistArtwork -> [Artwork]) -> Map UUID ArtistArtwork -> [Artwork] forall a b. (a -> b) -> a -> b $ Artist artist Artist -> Optic' A_Lens NoIx Artist (Map UUID ArtistArtwork) -> Map UUID ArtistArtwork forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist (Map UUID ArtistArtwork) #artworks) Html hr ViewVars -> Text -> UUID -> Html entityNewArtworkForm ViewVars vv Text "artists" (Artist artist Artist -> Optic' A_Lens NoIx Artist UUID -> UUID forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx Artist UUID #identifier)