diff --git a/src/App/DomainListInterface.purs b/src/App/DomainListInterface.purs index c9909f1..745e873 100644 --- a/src/App/DomainListInterface.purs +++ b/src/App/DomainListInterface.purs @@ -11,7 +11,7 @@ module App.DomainListInterface where -import Prelude (Unit, bind, discard, map, otherwise, pure, ($), (/=), (<<<), (<>)) +import Prelude (Unit, bind, discard, map, otherwise, pure, ($), (/=), (<<<), (<>), show) import Data.Array as A import Data.ArrayBuffer.Types (ArrayBuffer) @@ -29,6 +29,9 @@ import Web.Event.Event (Event) import Bulma as Bulma import CSSClasses as C +import Parsing (runParser) +import DomainParser as DomainParser + import App.LogMessage import App.Messages.DNSManagerDaemon as DNSManager @@ -108,6 +111,7 @@ data Action type NewDomainFormState = { new_domain :: String + , error_string :: Maybe String , selected_domain :: String } @@ -144,6 +148,7 @@ default_domain = "netlib.re" initialState :: Input -> State initialState _ = { newDomainForm: { new_domain: "" + , error_string: Nothing , selected_domain: default_domain } , accepted_domains: [ default_domain ] @@ -198,7 +203,7 @@ render { accepted_domains, my_domains, newDomainForm, wsUp, active_modal } newdomain_form = [ Bulma.h3 "Add a domain!" - , render_adduser_form + , render_add_domain_form ] list_of_own_domains @@ -221,13 +226,16 @@ render { accepted_domains, my_domains, newDomainForm, wsUp, active_modal } [ HH.text domain ] ] - render_adduser_form = HH.form + render_add_domain_form = HH.form [ HE.onSubmit NewDomainAttempt ] [ Bulma.new_domain_field (HandleNewDomainInput <<< INP_newdomain) newDomainForm.new_domain [ HHE.onSelectedIndexChange domain_choice ] accepted_domains + , case newDomainForm.error_string of + Nothing -> HH.div_ [] + Just str -> Bulma.strong str ] domain_choice :: Int -> Action @@ -254,7 +262,11 @@ handleAction = case _ of HandleNewDomainInput adduserinp -> do case adduserinp of - INP_newdomain v -> H.modify_ _ { newDomainForm { new_domain = v } } + INP_newdomain v -> do + H.modify_ _ { newDomainForm { new_domain = v } } + case runParser v DomainParser.domain of + Left error_string -> H.modify_ _ { newDomainForm { error_string = Just $ show error_string } } + Right _ -> H.modify_ _ { newDomainForm { error_string = Nothing } } UpdateSelectedDomain domain -> H.modify_ _ { newDomainForm { selected_domain = domain } } EnterDomain domain -> do