summaryrefslogtreecommitdiffstats
path: root/src/Types.elm
blob: aeb7d67944723e5284f755d59efedb79cb27b0d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
module Types exposing (..)

import Browser exposing (UrlRequest)
import Browser.Navigation exposing (Key)
import Http
import RemoteData exposing (RemoteData)
import Time
import Url exposing (Url)


type alias Model =
    { now : Time.Posix
    , key : Key
    , url : Url
    , userData : UserData
    , apiURL : String
    , posts : RemoteData (List Post)
    , composeTextInputValue : String
    , composeImageInputValue : String
    }


type alias Flags =
    { userData : UserData
    , apiURL : String
    }


type alias UserData =
    { name : String
    , email : String
    , pictureUrl : String
    }


type Msg
    = NoOp
    | RequestLogout
      -- TIME
    | SetNowPosix Time.Posix
      -- NAVIGATION
    | UrlChanged Url
    | LinkClicked UrlRequest
      -- POSTS
    | GetPosts
    | GotPosts (Result Http.Error (List Post))
    | LikePost Post
    | LikedPost (Result Http.Error Post)
      -- COMPOSE POST
    | ComposeTextInputChanged String
    | ComposeImageInputChanged String
    | ComposePost
    | ComposedPost (Result Http.Error Post)


type Route
    = Index
    | Profile UrlSegmentUserId


type alias Author =
    { id : String
    , name : String
    }


type alias UrlSegmentUserId =
    String


type alias Post =
    { id : String
    , content : String
    , author : Author
    , createdAt : Time.Posix
    , likes : Int
    , userPictureUrl : String
    , imageUrl : Maybe String
    }