<StateChart @src={{chart}} as |State Guard Action dispatch state|> <Guard @name="hasToken" @cond={{action 'hasToken'}} /> <Action @name="login" @exec={{action 'login'}} /> <Action @name="logout" @exec={{action 'logout'}} /> {{! This DataSource just permanently listens to any changes to the users }} {{! token, whether thats a new token, a changed token or a deleted token }} <DataSource @src="settings://consul:token" @onchange={{queue (action (mut token) value="data") (action dispatch "CHANGE") (action (mut previousToken) value="data")}} /> {{! This DataSink is just used for logging in from the form, }} {{! or logging out via the exposed logout function }} <DataSink @sink="settings://consul:token" as |sink| > {{yield}} {{#let (hash login=(action sink.open) logout=(action sink.open null) token=token ) (hash AuthProfile=(component 'auth-profile' item=token) AuthForm=(component 'auth-form' dc=dc nspace=nspace onsubmit=(action sink.open value="data")) ) as |api components|}} <State @matches="authorized"> {{#yield-slot name="authorized"}} {{yield api components}} {{/yield-slot}} </State> <State @matches="unauthorized"> {{#yield-slot name="unauthorized"}} {{yield api components}} {{/yield-slot}} </State> {{/let}} </DataSink> </StateChart>