{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} module Datarekisteri.Frontend.Handlers.Profile where import Relude hiding (id) import Data.Morpheus.Client (raw, declareLocalTypesInline) import Yesod hiding (emailField) import Yesod.Auth import Datarekisteri.Core.Types import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Frontend.Types import Datarekisteri.Frontend.FormFields declareLocalTypesInline "schema.gql" [raw| query ProfilePage($id: UserID) { user(id: $id) { id name nickname email pendingEmail homeplace birthdate phoneNumber isMember application } permissions } |] declareLocalTypesInline "schema.gql" [raw| mutation UpdateProfile($user: UserID, $name: String, $homeplace: String, $nickname: String, $email: Email, $phoneNumber: PhoneNumber, $application: String) { update(user: $user, name: $name, homeplace: $homeplace, nickname: $nickname, email: $email, phoneNumber: $phoneNumber, application: $application) { id } } |] declareLocalTypesInline "schema.gql" [raw| mutation UpdatePassword($user: UserID, $password: String!) { update(user: $user, password: $password) { id } } |] passwordForm :: Form Text passwordForm = renderDivs $ areq verifiedPasswordField "Uusi salasana" Nothing profileForm :: ProfilePageUser -> Form UpdateProfileArgs profileForm ProfilePageUser {..} extraHtml = do (nameRes, nameView) <- mopt textField "Nimi" (Just $ Just name) (homeRes, homeView) <- mopt textField "Kotipaikka" (Just $ Just homeplace) (nicknameRes, nicknameView) <- mopt textField "Kutsumanimi" (Just $ Just nickname) (emailRes, emailView) <- mopt emailField "Sähköposti" (Just email) (phoneNumberRes, phoneNumberView) <- mopt telephoneField "Puhelinnumero" (Just $ Just phoneNumber) (applicationRes, applicationView) <- mopt textareaField' "Jäsenhakemus" (Just $ Just application) let profileUpdateRes = UpdateProfileArgs (Just id) <$> nameRes <*> homeRes <*> nicknameRes <*> emailRes <*> phoneNumberRes <*> applicationRes inputField FieldView {..} = [whamlet|