Fork channel

Create a new channel as a copy of main.

Rename channel

Rename main to:

Delete channel

Delete main? This cannot be undone.

Forms.purs
module Aftok.HTML.Forms where

import Prelude
import Data.Maybe (Maybe(..), fromMaybe)
import Halogen.HTML.Core (AttrName(..), ClassName(..))
import Halogen.HTML as HH
import Halogen.HTML.CSS as CSS
import Halogen.HTML.Events as E
import Halogen.HTML.Properties as P
import CSS.Display (display, flex)
import CSS.Flexbox (flexFlow, row, nowrap)
import Aftok.Api.Types (CommsType(..))

type CommsState r = 
  { channel :: CommsType
  , email :: Maybe String
  , zaddr :: Maybe String
  | r }

type SetCommsType action = CommsType -> action
type SetEmail action = String -> action
type SetZaddr action = String -> action

commsSwitch :: forall i a. SetCommsType a -> CommsType -> HH.HTML i a
commsSwitch setCommsType rt =
  HH.div
    [ P.classes (ClassName <$> [ "form-group", "mb-3" ]) ]
    [ HH.label
        [ P.for "commsSwitch" ]
        [ HH.text "Choose a communications method" ]
    , HH.div
        [ P.classes (ClassName <$> [ "form-group", "mb-3" ])
        , CSS.style do
            display flex
            flexFlow row nowrap
        ]
        [ HH.span
            [ P.classes (ClassName <$> [ if rt == EmailComms then "text-success" else "text-muted" ]) ]
            $ [ HH.text "Email" ]
        , HH.div
            [ P.classes (ClassName <$> [ "custom-control", "custom-switch", "custom-switch-light", "mx-3" ]) ]
            [ HH.input
                [ P.type_ P.InputCheckbox
                , P.classes (ClassName <$> [ "custom-control-input" ])
                , P.id_ "commsSwitch"
                , P.checked (rt == ZcashComms)
                , E.onChecked (\b -> Just <<< setCommsType $ if b then ZcashComms else EmailComms)
                ]
            , HH.label [ P.classes (ClassName <$> [ "custom-control-label" ]), P.for "commsSwitch" ] []
            ]
        , HH.span
            [ P.classes (ClassName <$> [ if rt == ZcashComms then "text-success" else "text-muted" ]) ]
            [ HH.text "Z-Address" ]
        ]
    ]

type CommsErrors i a = CommsType -> Array (HH.HTML i a)

commsField :: 
  forall i a r. 
  SetEmail a -> 
  SetZaddr a -> 
  CommsState r -> 
  CommsErrors i a -> 
  HH.HTML i a
commsField setEmail setZAddr st errs = case st.channel of
  EmailComms ->
    HH.div_ $ 
      [ HH.label [ P.for "email" ] [ HH.text "Email Address" ]
      , HH.input
          [ P.type_ P.InputEmail
          , P.classes (ClassName <$> [ "form-control" ])
          , P.id_ "email"
          , P.placeholder "name@address.com"
          , P.value (fromMaybe "" st.email)
          , E.onValueInput (Just <<< setEmail)
          ]
      ]
      <> errs EmailComms 
  ZcashComms ->
    HH.div_ $
      [ HH.label
          [ P.for "zaddr" ]
          [ HH.text "Zcash Shielded Address"
          , HH.a
              [ P.attr (AttrName "data-toggle") "modal"
              , P.href "#modalAboutZAddr"
              ]
              [ HH.img [ P.src "/assets/img/icons/duotone-icons/Code/Info-circle.svg" ]
              ]
          ]
      , HH.input
          [ P.type_ P.InputText
          , P.classes (ClassName <$> [ "form-control" ])
          , P.id_ "email"
          , P.placeholder "Enter a Zcash shielded address"
          , P.value (fromMaybe "" st.zaddr)
          , E.onValueInput (Just <<< setZAddr)
          ]
      ]
      <> errs ZcashComms