-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Main.elm
123 lines (103 loc) · 3.08 KB
/
Main.elm
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
module Main exposing (main)
import Navigation
import Parsing
import Views
import Types
exposing
( Route(..)
, Msg
( NavigateToSilenceList
, NavigateToSilenceView
, NavigateToSilenceFormEdit
, NavigateToSilenceFormNew
, NavigateToAlerts
, NavigateToNotFound
, NavigateToStatus
, RedirectAlerts
)
, Model
)
import Utils.Filter exposing (nullFilter)
import Views.SilenceForm.Types exposing (initSilenceForm)
import Views.Status.Types exposing (StatusModel, initStatusModel)
import Views.AlertList.Types exposing (initAlertList)
import Views.SilenceList.Types exposing (initSilenceList)
import Views.SilenceView.Types exposing (initSilenceView)
import Updates exposing (update)
import Utils.Api as Api
import Utils.Types exposing (ApiData(Loading))
import Json.Decode as Json
main : Program Json.Value Model Msg
main =
Navigation.programWithFlags urlUpdate
{ init = init
, update = update
, view = Views.view
, subscriptions = always Sub.none
}
init : Json.Value -> Navigation.Location -> ( Model, Cmd Msg )
init flags location =
let
route =
Parsing.urlParser location
filter =
case route of
AlertsRoute filter ->
filter
SilenceListRoute filter ->
filter
_ ->
nullFilter
prod =
flags
|> Json.decodeValue (Json.field "production" Json.bool)
|> Result.withDefault False
apiUrl =
if prod then
Api.makeApiUrl location.pathname
else
Api.makeApiUrl "http://localhost:9093/"
libUrl =
if prod then
location.pathname
else
"http://localhost:9093/"
in
update (urlUpdate location)
(Model
initSilenceList
initSilenceView
initSilenceForm
initAlertList
route
filter
initStatusModel
location.pathname
apiUrl
libUrl
Loading
Loading
)
urlUpdate : Navigation.Location -> Msg
urlUpdate location =
let
route =
Parsing.urlParser location
in
case route of
SilenceListRoute maybeFilter ->
NavigateToSilenceList maybeFilter
SilenceViewRoute silenceId ->
NavigateToSilenceView silenceId
SilenceFormEditRoute silenceId ->
NavigateToSilenceFormEdit silenceId
SilenceFormNewRoute keep ->
NavigateToSilenceFormNew keep
AlertsRoute filter ->
NavigateToAlerts filter
StatusRoute ->
NavigateToStatus
TopLevelRoute ->
RedirectAlerts
NotFoundRoute ->
NavigateToNotFound