datarekisteri/frontend/src/Datarekisteri/Frontend/Handlers/Members.hs

76 lines
2.0 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Datarekisteri.Frontend.Handlers.Members where
import Relude hiding (id)
import Data.Morpheus.Client (raw, declareLocalTypesInline)
import Yesod
import Yesod.Auth
import Datarekisteri.Frontend.Types
import Datarekisteri.Frontend.ApiRequests
import Datarekisteri.Frontend.Widgets
import Datarekisteri.Core.Types
declareLocalTypesInline "schema.gql" [raw|
query MembersPage {
users {
id
name
nickname
homeplace
}
}
|]
instance ToTableRow DataIdClient MembersPageUsers where
tableHeader _ = toWidget <$> ["Nimi" :: Text, "Kutsumanimi", "Kotipaikka"]
toCells MembersPageUsers {..} = toWidget <$> [name, nickname, homeplace]
getMembersR :: Handler Html
getMembersR = do
MembersPage {..} <- apiRequest True ()
defaultLayout $ do
setTitle "Jäsenet"
let memberNickname member = let MembersPageUsers {..} = member in nickname
memberName member = let MembersPageUsers {..} = member in name
memberHomeplace member = let MembersPageUsers {..} = member in homeplace
memberId member = let MembersPageUsers {..} = member in id
[whamlet|
<h1>
Jäsenet
$if null users
<p>
Ei jäseniä.
$else
<table>
<thead>
<tr>
<th scope="col">
Nimi
<th scope="col">
Kutsumanimi
<th scope="col">
Kotipaikka
<tbody>
$forall member <- users
<tr>
<td>
#{memberName member}
<td>
#{memberNickname member}
<td>
#{memberHomeplace member}
|]