Store the state of DomainListInterface in its parent. IT WORKS!
This commit is contained in:
parent
507330120e
commit
f6f78f49ed
@ -166,6 +166,10 @@ handleAction = case _ of
|
|||||||
DomainListInterface.MessageToSend message -> H.tell _ws_dns unit (WS.ToSend message)
|
DomainListInterface.MessageToSend message -> H.tell _ws_dns unit (WS.ToSend message)
|
||||||
DomainListInterface.Log message -> H.tell _log unit (Log.Log message)
|
DomainListInterface.Log message -> H.tell _log unit (Log.Log message)
|
||||||
DomainListInterface.DNSManagerReconnect -> handleAction AuthenticateToDNSManager
|
DomainListInterface.DNSManagerReconnect -> handleAction AuthenticateToDNSManager
|
||||||
|
DomainListInterface.StoreState s -> H.modify_ _ { store_DomainListInterface_state = Just s }
|
||||||
|
DomainListInterface.AskState -> do
|
||||||
|
state <- H.get
|
||||||
|
H.tell _dli unit (DomainListInterface.ProvideState state.store_DomainListInterface_state)
|
||||||
|
|
||||||
-- TODO: depending on the current page, we should provide the received message to different components.
|
-- TODO: depending on the current page, we should provide the received message to different components.
|
||||||
AuthenticationDaemonEvent ev -> case ev of
|
AuthenticationDaemonEvent ev -> case ev of
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
module App.DomainListInterface where
|
|
||||||
|
|
||||||
-- | `App.DomainListInterface` is a simple component with the list of own domains
|
-- | `App.DomainListInterface` is a simple component with the list of own domains
|
||||||
-- | and a form to add a new domain.
|
-- | and a form to add a new domain.
|
||||||
-- |
|
-- |
|
||||||
@ -11,6 +9,8 @@ module App.DomainListInterface where
|
|||||||
-- | - TODO: ask for confirmation
|
-- | - TODO: ask for confirmation
|
||||||
-- | - TODO: switch to the interface to show and modify the content of a Zone
|
-- | - TODO: switch to the interface to show and modify the content of a Zone
|
||||||
|
|
||||||
|
module App.DomainListInterface where
|
||||||
|
|
||||||
import Prelude (Unit, bind, discard, map, otherwise, pure, ($), (/=), (<<<), (<>))
|
import Prelude (Unit, bind, discard, map, otherwise, pure, ($), (/=), (<<<), (<>))
|
||||||
|
|
||||||
import CSSClasses as CSSClasses
|
import CSSClasses as CSSClasses
|
||||||
@ -37,20 +37,33 @@ import App.Messages.DNSManagerDaemon as DNSManager
|
|||||||
-- |
|
-- |
|
||||||
-- | Also, this component can log messages and ask its parent (`App.Container`) to
|
-- | Also, this component can log messages and ask its parent (`App.Container`) to
|
||||||
-- | reconnect the websocket to `dnsmanagerd`.
|
-- | reconnect the websocket to `dnsmanagerd`.
|
||||||
|
-- |
|
||||||
|
-- | Finally, the component can ask its state to its parent.
|
||||||
|
-- | The reason is quite simple.
|
||||||
|
-- | The component can be deleted, meaning that it loses its state.
|
||||||
|
-- | Instead of asking `dnsmanagerd` the list of available domains and the list of owned domains
|
||||||
|
-- | each time the component is instanciated, the parent stores the component's state when the
|
||||||
|
-- | component is removed. This way, the data is conserved.
|
||||||
|
|
||||||
data Output
|
data Output
|
||||||
= MessageToSend ArrayBuffer
|
= MessageToSend ArrayBuffer
|
||||||
| Log LogMessage
|
| Log LogMessage
|
||||||
| DNSManagerReconnect
|
| DNSManagerReconnect
|
||||||
|
| AskState
|
||||||
|
| StoreState State
|
||||||
|
|
||||||
-- | `App.DomainListInterface` can receive messages from `dnsmanagerd`.
|
-- | `App.DomainListInterface` can receive messages from `dnsmanagerd`.
|
||||||
-- |
|
-- |
|
||||||
-- | The component is also informed when the connection is lost or up again.
|
-- | The component is also informed when the connection is lost or up again.
|
||||||
|
-- |
|
||||||
|
-- | Finally, its entire state can be provided by its parent.
|
||||||
|
-- | See the explanation for the `Output` data type.
|
||||||
|
|
||||||
data Query a
|
data Query a
|
||||||
= MessageReceived ArrayBuffer a
|
= MessageReceived ArrayBuffer a
|
||||||
| ConnectionIsDown a
|
| ConnectionIsDown a
|
||||||
| ConnectionIsUp a
|
| ConnectionIsUp a
|
||||||
|
| ProvideState (Maybe State) a
|
||||||
|
|
||||||
type Slot = H.Slot Query Output
|
type Slot = H.Slot Query Output
|
||||||
|
|
||||||
@ -83,6 +96,9 @@ data Action
|
|||||||
| RemoveDomain String
|
| RemoveDomain String
|
||||||
| EnterDomain String
|
| EnterDomain String
|
||||||
|
|
||||||
|
| Initialize
|
||||||
|
| Finalize
|
||||||
|
|
||||||
-- | The form only has two elements:
|
-- | The form only has two elements:
|
||||||
-- | the subdomain name input and the selected TLD.
|
-- | the subdomain name input and the selected TLD.
|
||||||
|
|
||||||
@ -108,8 +124,10 @@ component =
|
|||||||
{ initialState
|
{ initialState
|
||||||
, render
|
, render
|
||||||
, eval: H.mkEval $ H.defaultEval
|
, eval: H.mkEval $ H.defaultEval
|
||||||
{ handleAction = handleAction
|
{ initialize = Just Initialize
|
||||||
|
, handleAction = handleAction
|
||||||
, handleQuery = handleQuery
|
, handleQuery = handleQuery
|
||||||
|
, finalize = Just Finalize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,6 +195,13 @@ render { accepted_domains, my_domains, newDomainForm, wsUp }
|
|||||||
|
|
||||||
handleAction :: forall m. MonadAff m => Action -> H.HalogenM State Action () Output m Unit
|
handleAction :: forall m. MonadAff m => Action -> H.HalogenM State Action () Output m Unit
|
||||||
handleAction = case _ of
|
handleAction = case _ of
|
||||||
|
Initialize -> do
|
||||||
|
H.raise $ AskState
|
||||||
|
|
||||||
|
Finalize -> do
|
||||||
|
state <- H.get
|
||||||
|
H.raise $ StoreState state
|
||||||
|
|
||||||
UpdateAcceptedDomains domains -> do
|
UpdateAcceptedDomains domains -> do
|
||||||
H.modify_ _ { accepted_domains = domains }
|
H.modify_ _ { accepted_domains = domains }
|
||||||
|
|
||||||
@ -216,6 +241,13 @@ handleAction = case _ of
|
|||||||
handleQuery :: forall a m. MonadAff m => Query a -> H.HalogenM State Action () Output m (Maybe a)
|
handleQuery :: forall a m. MonadAff m => Query a -> H.HalogenM State Action () Output m (Maybe a)
|
||||||
handleQuery = case _ of
|
handleQuery = case _ of
|
||||||
|
|
||||||
|
ProvideState maybe_state a -> do
|
||||||
|
case maybe_state of
|
||||||
|
Nothing -> pure Nothing
|
||||||
|
Just s -> do
|
||||||
|
H.put s
|
||||||
|
pure (Just a)
|
||||||
|
|
||||||
MessageReceived message a -> do
|
MessageReceived message a -> do
|
||||||
receivedMessage <- H.liftEffect $ DNSManager.deserialize message
|
receivedMessage <- H.liftEffect $ DNSManager.deserialize message
|
||||||
case receivedMessage of
|
case receivedMessage of
|
||||||
|
Loading…
Reference in New Issue
Block a user