Autofill signup form from query string parameters.
[?]
Feb 9, 2021, 1:05 AM
I5MPORH45P3FYFJU4DINO2PW3YPIPGE2FYSSF4XUQ6WGKWWMSKZQCDependencies
- [2]
I4W76IFVRender recaptcha explicitly. - [3]
DAPLYXHYSuccessfully rendering QR codes sometimes. - [4]
QH4UB73NFormat with purty. - [5]
SAESJLLYInitial experiments in hash routing. - [6]
5R2Z7FSXInitial rendering for signup controls. - [7]
QU5FW67RAdd project selection to time tracker. - [8]
QMEYU4MWAdd display for prior intervals. - [9]
N6FG4EW6Working bootstrap modal! Only a little FFI. - [10]
O2BZOX7MAdd signup form, captcha check. - [11]
U7YAT2ZKAdd error reporting to signup form. - [12]
V54JCKJXPayment request creation. - [*]
NJNMO72SAdd zcash.com submodule and update client to modern halogen. - [*]
T2DN23M7Factor out billing create component. - [*]
EA5BFM5GSplit Login component into its own module. - [*]
RB2ETNIFAdd skeletal PureScript client project.
Change contents
- edit in client/spago.dhall at line 19
, "uri" - edit in client/src/Aftok/HTML/QRious.js at line 1
"use strict" - file addition: Navigation.purs[16.1]
module Aftok.Navigation whereimport Preludeimport Data.Either (Either)import Data.Lens (view)import Data.Maybe (Maybe)import URI.URI( HierPath, Host, Path, Port, URIOptions, UserInfo, parser, _query)import URI.Extra.QueryPairs (QueryPairs, Key, Value)import URI.Extra.QueryPairs as QueryPairsimport URI.Fragment (Fragment)import URI.HostPortPair as HostPortPairimport URI.HostPortPair (HostPortPair)import Text.Parsing.Parser (runParser, ParseError)parseURIQuery :: String -> Either ParseError (Maybe (QueryPairs Key Value))parseURIQuery uriStr =view _query <$> runParser uriStr (parser options)options ∷ Record (URIOptions UserInfo (HostPortPair Host Port) Path HierPath (QueryPairs Key Value) Fragment)options ={ parseUserInfo: pure, printUserInfo: identity, parseHosts: HostPortPair.parser pure pure, printHosts: HostPortPair.print identity identity, parsePath: pure, printPath: identity, parseHierPath: pure, printHierPath: identity, parseQuery: QueryPairs.parse pure pure, printQuery: QueryPairs.print identity identity, parseFragment: pure, printFragment: identity} - replacement in client/src/Aftok/Signup.purs at line 5
import Data.Foldable (any)import Data.Bifunctor (bimap)import Data.Either (Either(..), note, fromRight)import Data.Foldable (any, intercalate) - edit in client/src/Aftok/Signup.purs at line 9
import Data.Either (Either(..), note)import Data.Validation.Semigroup (V(..), toEither, andThen, invalid) - edit in client/src/Aftok/Signup.purs at line 10
import Data.String.Regex (regex, split)import Data.String.Regex.Flags (global) - edit in client/src/Aftok/Signup.purs at line 13
import Data.Traversable (traverse_)import Data.Validation.Semigroup (V(..), toEither, andThen, invalid) - edit in client/src/Aftok/Signup.purs at line 17
import Partial.Unsafe (unsafePartial) - edit in client/src/Aftok/Signup.purs at line 32
import URI.Extra.QueryPairs (QueryPairs(..), keyToString, valueToString) - edit in client/src/Aftok/Signup.purs at line 37
import Aftok.Navigation (parseURIQuery) - edit in client/src/Aftok/Signup.purs at line 48
| CodesParseFailure - edit in client/src/Aftok/Signup.purs at line 58
| InvCodesField - edit in client/src/Aftok/Signup.purs at line 79
, invitationCodes :: Array String - edit in client/src/Aftok/Signup.purs at line 91
| SetInvitationCodes String - edit in client/src/Aftok/Signup.purs at line 135
, invitationCodes: [] - edit in client/src/Aftok/Signup.purs at line 204
, HH.div[ P.classes (ClassName <$> [ "form-group" ]) ] $[ HH.label [ P.for "invitationCodes" ] [ HH.text "Invitation Codes" ], HH.input[ P.type_ P.InputText, P.classes (ClassName <$> [ "form-control" ]), P.id_ "invitationCodes", P.placeholder "abcdefgh, ...", P.value (intercalate ", " st.invitationCodes), E.onValueInput (Just <<< SetInvitationCodes)]] <> signupErrors InvCodesField st - edit in client/src/Aftok/Signup.purs at line 235
setZAddr addr = dozres <- lift $ caps.checkZAddr addrH.modify_ (_ { recoveryZAddr = Just addr })case zres ofAcc.ZAddrCheckValid ->H.modify_ (\st -> st { signupErrors = M.delete ZAddrField st.signupErrors, recoveryType = RecoveryZAddr })Acc.ZAddrCheckInvalid ->H.modify_ (\st -> st { signupErrors = M.insert ZAddrField ZAddrInvalid st.signupErrors }) - edit in client/src/Aftok/Signup.purs at line 247
lift $ system.log "Initializing signup page..."loc <- lift system.hrefcase parseURIQuery loc of(Right (Just (QueryPairs q))) -> dolet pairsMap = M.fromFoldable $ (bimap keyToString (map valueToString)) <$> qtraverse_ (\c -> H.modify_ (_ { invitationCodes = [c] })) (join $ M.lookup "invcode" pairsMap)traverse_ setZAddr (join $ M.lookup "zaddr" pairsMap)(Right Nothing) -> pure unit(Left err) ->lift $ system.error ("Parsing failed for location string " <> loc) - replacement in client/src/Aftok/Signup.purs at line 283
--lift $ system.log "Switching to signin..."when (addr /= "")$ dozres <- lift $ caps.checkZAddr addrH.modify_ (_ { recoveryZAddr = Just addr })case zres ofAcc.ZAddrCheckValid ->H.modify_ (\st -> st { signupErrors = M.delete ZAddrField st.signupErrors })Acc.ZAddrCheckInvalid ->H.modify_ (\st -> st { signupErrors = M.insert ZAddrField ZAddrInvalid st.signupErrors })when (addr /= "") (setZAddr addr)SetInvitationCodes codeStr -> dolet r = unsafePartial (fromRight $ regex "\\s*,\\s*" global)H.modify_ (_ { invitationCodes = split r codeStr }) - edit in client/src/Aftok/Signup.purs at line 335
CodesParseFailure -> InvCodesField - edit in client/src/Aftok/Signup.purs at line 376
, P.checked (rt == RecoveryZAddr) - replacement in client/src/Aftok/Types.purs at line 23
import Web.HTML (HTMLElement)import Web.HTML (HTMLElement, window)import Web.HTML.Window (location)import Web.HTML.Location (href) - replacement in client/src/Aftok/Types.purs at line 34
= { log :: String -> m Unit= { href :: m String, log :: String -> m Unit - replacement in client/src/Aftok/Types.purs at line 62
{ log: liftEffect <<< C.log{ href: liftEffect $ href =<< location =<< window, log: liftEffect <<< C.log - edit in client/src/Main.purs at line 190
"billing" -> VBilling