Skip to content

Commit f073045

Browse files
committed
Better Structure
1 parent 1172b50 commit f073045

8 files changed

+344
-271
lines changed

data_example.json

+45-8
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,55 @@
11
{
22
"planning": {
3-
"events":[
3+
"events": [
44
{
5-
"title": "Titre 1",
6-
"startDate": "2017-01-02T12:00:00Z",
7-
"endDate": "2017-01-02T14:00:00Z",
5+
"title": "Titre1",
6+
"startDate": "2017-01-02T12:00:00",
7+
"endDate": "2017-01-02T14:00:00",
88
"groups": [
9-
"G1", "G2"
9+
"G1",
10+
"G2"
1011
],
1112
"classrooms": [
12-
"CR1", "CR2"
13+
"CR1",
14+
"CR2"
1315
],
14-
"teachers":[
15-
"M. Duhdeu", "Mme. Feef"
16+
"teachers": [
17+
"M.Duhdeu",
18+
"Mme.Feef"
19+
]
20+
},
21+
{
22+
"title": "Titre2",
23+
"startDate": "2017-01-02T14:00:00",
24+
"endDate": "2017-01-02T16:00:00",
25+
"groups": [
26+
"G1",
27+
"G2"
28+
],
29+
"classrooms": [
30+
"CR1",
31+
"CR2"
32+
],
33+
"teachers": [
34+
"M.Duhdeu",
35+
"Mme.Feef"
36+
]
37+
},
38+
{
39+
"title": "Titre3",
40+
"startDate": "2017-01-02T16:00:00",
41+
"endDate": "2017-01-02T18:00:00",
42+
"groups": [
43+
"G1",
44+
"G2"
45+
],
46+
"classrooms": [
47+
"CR1",
48+
"CR2"
49+
],
50+
"teachers": [
51+
"M.Duhdeu",
52+
"Mme.Feef"
1653
]
1754
}
1855
]

src/FakeQuery.elm

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
module FakeQuery exposing (..)
2+
3+
import Json.Decode as Json
4+
import Types exposing (Query, Event, Planning, decodeQuery)
5+
6+
7+
createFakeQuery: Query
8+
createFakeQuery =
9+
let
10+
res = Json.decodeString decodeQuery """
11+
{
12+
"planning": {
13+
"events": [
14+
{
15+
"title": "Titre1",
16+
"startDate": "2017-01-02T12:00:00",
17+
"endDate": "2017-01-02T14:00:00",
18+
"groups": [
19+
"G1",
20+
"G2"
21+
],
22+
"classrooms": [
23+
"CR1",
24+
"CR2"
25+
],
26+
"teachers": [
27+
"M.Duhdeu",
28+
"Mme.Feef"
29+
]
30+
},
31+
{
32+
"title": "Titre2",
33+
"startDate": "2017-01-02T14:00:00",
34+
"endDate": "2017-01-02T16:00:00",
35+
"groups": [
36+
"G1",
37+
"G2"
38+
],
39+
"classrooms": [
40+
"CR1",
41+
"CR2"
42+
],
43+
"teachers": [
44+
"M.Duhdeu",
45+
"Mme.Feef"
46+
]
47+
},
48+
{
49+
"title": "Titre3",
50+
"startDate": "2017-01-02T16:00:00",
51+
"endDate": "2017-01-02T18:00:00",
52+
"groups": [
53+
"G1",
54+
"G2"
55+
],
56+
"classrooms": [
57+
"CR1",
58+
"CR2"
59+
],
60+
"teachers": [
61+
"M.Duhdeu",
62+
"Mme.Feef"
63+
]
64+
}
65+
]
66+
}
67+
}"""
68+
in
69+
case res of
70+
Ok query ->
71+
query
72+
Err error ->
73+
Query (Planning [ Event (toString error) "" "" [] [] [] ])

src/Main.elm

+5-193
Original file line numberDiff line numberDiff line change
@@ -1,210 +1,22 @@
11
module Main exposing (..)
22

3-
import Http exposing (Error)
4-
import Html exposing (..)
5-
import Html.Attributes exposing (value)
6-
import Html.Events exposing (on, targetValue)
3+
import Html
74
import Date
8-
import Date.Extra as Dateextra
95
import Task
10-
import Json.Decode as Json
11-
import Types exposing (Query, Event, Planning, decodeQuery)
12-
import Requests exposing (sendRequest, Msg(..), Group)
136

7+
import View exposing (view)
8+
import Model exposing (Model, initialModel)
9+
import Update exposing ( update, Msg(..) )
1410

15-
--import Json.Decode as Decode
16-
---- MODEL ----
1711

18-
19-
type alias PlanningResponse =
20-
Result Error Query
21-
22-
23-
type alias Model =
24-
{ data : Maybe PlanningResponse --Maybe (Result String Query)
25-
, date : Maybe Date.Date
26-
, selectedGroup : Group
27-
, loading : Bool
28-
}
29-
30-
31-
allGroups: List Group
32-
allGroups =
33-
[ { name = "Cyber1 TD1", slug = "11" }
34-
, { name = "Cyber1 TD2", slug = "12" }
35-
, { name = "Cyber2 TD1", slug = "21" }
36-
, { name = "Cyber2 TD2", slug = "22" }
37-
, { name = "Cyber3 TD1", slug = "31" }
38-
, { name = "Cyber3 TD2", slug = "32" }
39-
]
40-
41-
toDatetime : Date.Date -> String
42-
toDatetime =
43-
Dateextra.toFormattedString "y-MM-dd"
12+
---- PROGRAM ----
4413

4514

4615
init : ( Model, Cmd Msg )
4716
init =
4817
( initialModel, Date.now |> Task.perform SetDate )
4918

5019

51-
initialModel : Model
52-
initialModel =
53-
{ data = Nothing
54-
, date = Nothing
55-
, selectedGroup = { name = "Cyber1 TD2", slug = "12" }
56-
, loading = False
57-
}
58-
59-
60-
-- sendRequest "2017-09-29" ["12"]
61-
---- UPDATE ----
62-
63-
64-
update : Msg -> Model -> ( Model, Cmd Msg )
65-
update msg model =
66-
case msg of
67-
SetDate date ->
68-
--( { model | date = Just date, data = Just (Decode.decodeString decodeQuery """{"planning":{"events":[{"title":"Titre1","startDate":"2017-01-02T12:00:00Z","endDate":"2017-01-02T14:00:00Z","groups":["G1","G2"],"classrooms":["CR1","CR2"],"teachers":["M.Duhdeu","Mme.Feef"]}]}}""")}, Cmd.none )
69-
( { model | date = Just date }, createPLanningRequest date model.selectedGroup.slug)
70-
71-
GraphQlMsg response ->
72-
( { model | data = Just response, loading = False }, Cmd.none )
73-
74-
SetGroup slug ->
75-
let
76-
group =
77-
Maybe.withDefault { slug = "12", name = "Cyber1 TD2" } <| find (\x -> x.slug == slug) allGroups
78-
79-
cmd =
80-
if model.loading then
81-
Cmd.none
82-
else
83-
case model.date of
84-
Just date ->
85-
createPLanningRequest date slug
86-
87-
Nothing ->
88-
Cmd.none
89-
90-
in
91-
( { model | selectedGroup = group, loading = True }, cmd )
92-
93-
94-
createPLanningRequest: Date.Date -> String -> Cmd Msg
95-
createPLanningRequest date slug =
96-
-- sendRequest (toDatetime (Dateextra.add Dateextra.Month -7 date)) (toDatetime (Dateextra.add Dateextra.Month 7 date)) [ slug ]
97-
sendRequest (toDatetime date) (toDatetime (Dateextra.add Dateextra.Week 1 date)) [ slug ]
98-
99-
100-
find : (a -> Bool) -> List a -> Maybe a
101-
find predicate list =
102-
case list of
103-
[] ->
104-
Nothing
105-
106-
first::rest ->
107-
if predicate first then
108-
Just first
109-
else
110-
find predicate rest
111-
112-
113-
---- VIEW ----
114-
115-
116-
view : Model -> Html Msg
117-
view model =
118-
let
119-
datetime =
120-
case model.date of
121-
Just date ->
122-
toDatetime date
123-
124-
Nothing ->
125-
"Nothing"
126-
127-
planning =
128-
case model.data of
129-
Just (Ok query) ->
130-
if List.isEmpty query.planning.events then
131-
text "Vide :("
132-
else
133-
viewPlanning query
134-
135-
Just (Err error) ->
136-
text <| toString error
137-
138-
Nothing ->
139-
text "Loading"
140-
in
141-
div []
142-
[ viewHeader model.selectedGroup allGroups
143-
, div []
144-
[ datetime |> toString |> text ]
145-
, div []
146-
[ model.loading |> toString |> text ]
147-
, div []
148-
[ planning ]
149-
]
150-
151-
152-
viewPlanning : Query -> Html Msg
153-
viewPlanning query =
154-
div [] <| List.map viewEvent query.planning.events
155-
156-
157-
viewEvent: Event -> Html Msg
158-
viewEvent event =
159-
div []
160-
[ h2 [] [ text event.title ]
161-
, p [] [ text ( "De " ++ ( viewDateFormat event.startDate firstDateParser ) ++ " à " ++ ( viewDateFormat event.endDate secondDateParser ) ) ]
162-
, p [] [ text <| String.join ", " event.classrooms ]
163-
, p [] [ text <| String.join ", " event.groups ]
164-
, p [] [ text <| String.join ", " event.teachers ]
165-
]
166-
167-
168-
viewDateFormat: String -> ( Date.Date -> String ) -> String
169-
viewDateFormat dateString parser =
170-
let
171-
parsedDate = Dateextra.fromIsoString (dateString ++ "Z")
172-
in
173-
case parsedDate of
174-
Just date ->
175-
parser date
176-
177-
Nothing ->
178-
"Invalid : " ++ dateString
179-
180-
181-
firstDateParser : Date.Date -> String
182-
firstDateParser =
183-
Dateextra.toFormattedString "eeee dd/MM HH:mm"
184-
185-
186-
secondDateParser : Date.Date -> String
187-
secondDateParser =
188-
Dateextra.toFormattedString "HH:mm"
189-
190-
191-
viewHeader: Group -> List Group -> Html Msg
192-
viewHeader selected groups=
193-
div []
194-
[ h2 [] [ text <| "Salut " ++ selected.name ++ " voila tes cours :" ]
195-
, select [ on "change" <| Json.map SetGroup targetValue ]
196-
(List.map optionGroup groups)
197-
]
198-
199-
200-
optionGroup: Group -> Html Msg
201-
optionGroup group =
202-
option [ value group.slug ]
203-
[ text group.name ]
204-
205-
---- PROGRAM ----
206-
207-
20820
main : Program Never Model Msg
20921
main =
21022
Html.program

0 commit comments

Comments
 (0)