elm-twitch/src/Core.elm

62 lines
1.5 KiB
Elm

module Core exposing (FullModel(..), Model, Msg(..), Page(..), init, update)
import Browser.Navigation
import Json.Decode as Decode
import Task
import Twitch
import Url
type FullModel
= Unloaded
| Loaded Model
type alias Model =
{ playlists : List Twitch.Playlist
, page : Page
}
type Page
= Home
| Playlist Twitch.Playlist
| Video Twitch.Playlist Twitch.Video
type Msg
= Noop
| PlaylistsReceived (List Twitch.Playlist)
| HomeClicked
| PlaylistClicked Twitch.Playlist
| VideoClicked Twitch.Playlist Twitch.Video
init : Decode.Value -> Url.Url -> Browser.Navigation.Key -> ( FullModel, Cmd Msg )
init _ _ _ =
( Unloaded
, Task.perform PlaylistsReceived Twitch.fetchPlaylists
)
update : Msg -> FullModel -> ( FullModel, Cmd Msg )
update msg model =
case ( msg, model ) of
( Noop, _ ) ->
( model, Cmd.none )
( PlaylistsReceived playlists, _ ) ->
( Loaded { playlists = playlists, page = Home }, Cmd.none )
( HomeClicked, Loaded { playlists } ) ->
( Loaded { playlists = playlists, page = Home }, Cmd.none )
( PlaylistClicked playlist, Loaded { playlists } ) ->
( Loaded { playlists = playlists, page = Playlist playlist }, Cmd.none )
( VideoClicked playlist video, Loaded { playlists } ) ->
( Loaded { playlists = playlists, page = Video playlist video }, Cmd.none )
_ ->
( model, Cmd.none )