[elm-discuss] Re: Elm Routing with Navigation in 0.18

2017-02-06 Thread Wouter In t Velt
Op zondag 5 februari 2017 20:51:03 UTC+1 schreef Kingsley Hendrickse:
>
> I'm struggling a bit to get what I want out of the Route and Navigation 
> libraries.
>

Some time ago, I wrote a couple of posts diving into Navigation and Routing 
in Elm:
https://medium.com/elm-shorts/choosing-the-right-elm-spa-architecture-d6e8275f6899?source=collection_home---5--1--
https://medium.com/elm-shorts/more-on-spa-navigation-in-elm-31a066c6b9ae?source=collection_home---5--3--

Hope this helps! 

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[elm-discuss] Re: Elm Routing with Navigation in 0.18

2017-02-06 Thread Kingsley Hendrickse
Ah awesome thanks - that's very helpul

On Sunday, 5 February 2017 21:57:36 UTC, Keith Lazuka wrote:
>
> In terms of sending an HTTP request when navigating to the Login page, you 
> should be able to do that by returning an Http Cmd in your `update` 
> function.
>
> Elm's Navigation library provides a special `program` function which--in 
> addition to the standard init/update/view/subscription functions used by 
> Html.program--also  takes a function from `Navigation.Location` to a 
> message that your update function can understand. In the example program 
> included in the Navigation library, this function is called `UrlChange`.
>
> So in your `update` function, you probably already have a case that 
> listens for this `UrlChange` message, computes a "route" from the 
> `Location` attached to this message, and stores the new route in your 
> model. 
>
> update msg model =
>   case msg of
> UrlChange location ->
>   ( { model | route = routeFromLocation location }
>   , Cmd.none
>   )
>
>
> All you need to do is change this case so that in addition to returning 
> the updated model, it looks at the new route and returns a Cmd based on 
> whether the new route is Login or not. 
>
> e.g.
>
> update msg model =
>   case msg of
> UrlChange location ->
>let
>newRoute = 
> routeFromLocation location
>
>newCmd =
> case newRoute of
>   Just (Route.Login) ->
>   Http.get "/api/loginStuff" stuffDecoder 
>   |> Http.send GotStuff
>   
>   _ ->
>   Cmd.none
>in
>( { model | route = newRoute }
>, newCmd 
>)
>
>
> On Sunday, February 5, 2017 at 11:51:03 AM UTC-8, Kingsley Hendrickse 
> wrote:
>>
>> Hi, 
>>
>> I'm new to elm and am using version 0.18
>>
>> I'm struggling a bit to get what I want out of the Route and Navigation 
>> libraries.
>>
>> I have 2 features Login and Registration 
>>
>> In the Main.elm I use an update which delegates to either the Login or 
>> Registration features and then updates the main model after Login or 
>> Registration has done its thing.
>>
>> However I want to be able to detect when I'm going to show the Login view 
>> and before the view is rendered fire off an http request which will be used 
>> to populate the view. I can't see how to do this. It's easy to do as a 
>> result of something like a button click - because then the trigger point is 
>> the button click. But I want the trigger point to be during navigation so 
>> that the user can arrive on a page and that initial arrival on the page 
>> triggers the http requests that will be used in that view. 
>>
>> Also if anyone could point me in the direction of a good pattern for 
>> protecting routes that would be great - e.g. if a user is not logged in 
>> they should not be allowed to go to the welcome page and get redirected to 
>> login, and if logged in they should be redirected to welcome and not 
>> allowed on login or registration etc ...
>>
>> Any help appreciated
>>
>> Thanks
>>
>> --Kingsley
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[elm-discuss] Re: Elm Routing with Navigation in 0.18

2017-02-05 Thread Keith Lazuka
In terms of sending an HTTP request when navigating to the Login page, you 
should be able to do that by returning an Http Cmd in your `update` 
function.

Elm's Navigation library provides a special `program` function which--in 
addition to the standard init/update/view/subscription functions used by 
Html.program--also  takes a function from `Navigation.Location` to a 
message that your update function can understand. In the example program 
included in the Navigation library, this function is called `UrlChange`.

So in your `update` function, you probably already have a case that listens 
for this `UrlChange` message, computes a "route" from the `Location` 
attached to this message, and stores the new route in your model. 

update msg model =
  case msg of
UrlChange location ->
  ( { model | route = routeFromLocation location }
  , Cmd.none
  )


All you need to do is change this case so that in addition to returning the 
updated model, it looks at the new route and returns a Cmd based on whether 
the new route is Login or not. 

e.g.

update msg model =
  case msg of
UrlChange location ->
   let
   newRoute = 
routeFromLocation location

   newCmd =
case newRoute of
  Just (Route.Login) ->
  Http.get "/api/loginStuff" stuffDecoder 
  |> Http.send GotStuff
  
  _ ->
  Cmd.none
   in
   ( { model | route = newRoute }
   , newCmd 
   )


On Sunday, February 5, 2017 at 11:51:03 AM UTC-8, Kingsley Hendrickse wrote:
>
> Hi, 
>
> I'm new to elm and am using version 0.18
>
> I'm struggling a bit to get what I want out of the Route and Navigation 
> libraries.
>
> I have 2 features Login and Registration 
>
> In the Main.elm I use an update which delegates to either the Login or 
> Registration features and then updates the main model after Login or 
> Registration has done its thing.
>
> However I want to be able to detect when I'm going to show the Login view 
> and before the view is rendered fire off an http request which will be used 
> to populate the view. I can't see how to do this. It's easy to do as a 
> result of something like a button click - because then the trigger point is 
> the button click. But I want the trigger point to be during navigation so 
> that the user can arrive on a page and that initial arrival on the page 
> triggers the http requests that will be used in that view. 
>
> Also if anyone could point me in the direction of a good pattern for 
> protecting routes that would be great - e.g. if a user is not logged in 
> they should not be allowed to go to the welcome page and get redirected to 
> login, and if logged in they should be redirected to welcome and not 
> allowed on login or registration etc ...
>
> Any help appreciated
>
> Thanks
>
> --Kingsley
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.