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
|
module Types exposing (..)
import Browser.Navigation exposing (Key)
import Http
import RemoteData exposing (RemoteData)
import Time
type alias Model =
{ now : Time.Posix
, key : Key
, userData : UserData
, apiURL : String
, posts : RemoteData (List Post)
, composeInputValue : 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
-- POSTS
| GetPosts
| GotPosts (Result Http.Error (List Post))
| LikePost Post
| LikedPost (Result Http.Error Post)
-- COMPOSE POST
| ComposeInputChanged String
| ComposePost
| ComposedPost (Result Http.Error Post)
type alias Author =
{ id : String
, name : String
}
type alias Post =
{ id : String
, content : String
, author : Author
, createdAt : Time.Posix
, likes : Int
, userPictureUrl : String
}
|