Detail pages are for events. We now also load event data when accessing a detailpage directly.

This commit is contained in:
Vidir Valberg Gudmundsson 2017-07-17 16:05:38 +02:00
parent ebbbe90880
commit 23d94145b7
10 changed files with 61 additions and 51 deletions

View file

@ -29,7 +29,22 @@ main =
init : Flags -> Location -> ( Model, Cmd Msg )
init flags location =
( Model [] [] [] [] [] flags allDaysDay (Filter [] []) (parseLocation location), sendInitMessage flags.camp_slug )
let
currentRoute =
parseLocation location
emptyFilter =
Filter [] []
initModel =
(Model [] [] [] [] [] flags allDaysDay emptyFilter currentRoute)
-- To ensure we load data on right momens we call update with the
-- OnLocationChange message which is in charge of all that
( model, cmd ) =
update (OnLocationChange location) initModel
in
model ! [ cmd ]

View file

@ -4,7 +4,7 @@ module Models exposing (..)
type Route
= OverviewRoute
| DayRoute DayIso
| EventInstanceRoute EventInstanceSlug
| EventRoute EventSlug
| NotFoundRoute

View file

@ -2,27 +2,27 @@ module Routing exposing (..)
-- Local modules
import Models exposing (DayIso, EventInstanceSlug, Route(..))
import Models exposing (Route(..))
-- External modules
import Navigation exposing (Location)
import UrlParser exposing ((</>))
import UrlParser exposing (Parser, (</>), oneOf, map, top, s, string, parseHash)
matchers : UrlParser.Parser (Route -> a) a
matchers : Parser (Route -> a) a
matchers =
UrlParser.oneOf
[ UrlParser.map OverviewRoute UrlParser.top
, UrlParser.map DayRoute (UrlParser.s "day" </> UrlParser.string)
, UrlParser.map EventInstanceRoute (UrlParser.s "event" </> UrlParser.string)
oneOf
[ map OverviewRoute top
, map DayRoute (s "day" </> string)
, map EventRoute (s "event" </> string)
]
parseLocation : Location -> Route
parseLocation location =
case UrlParser.parseHash matchers location of
case parseHash matchers location of
Just route ->
route

View file

@ -2,11 +2,11 @@ module Update exposing (update)
-- Local modules
import Models exposing (Model, Route(EventInstanceRoute), emptyEventInstance, allDaysDay, Filter)
import Models exposing (Model, Route(OverviewRoute, EventRoute), emptyEventInstance, allDaysDay, Filter)
import Messages exposing (Msg(..))
import Decoders exposing (webSocketActionDecoder, initDataDecoder, eventDecoder)
import Routing exposing (parseLocation)
import WebSocketCalls exposing (sendGetEventContent)
import WebSocketCalls exposing (sendGetEventContent, sendInitMessage)
-- Core modules
@ -29,7 +29,16 @@ update msg model =
"init" ->
case Json.Decode.decodeString initDataDecoder str of
Ok m ->
let
newModel_ =
m model.flags allDaysDay (Filter [] []) model.route
in
{ model
| days = newModel_.days
, eventInstances = newModel_.eventInstances
, eventLocations = newModel_.eventLocations
, eventTypes = newModel_.eventTypes
}
Err error ->
model
@ -88,21 +97,25 @@ update msg model =
OnLocationChange location ->
let
newRoute =
parseLocation (Debug.log "location" location)
parseLocation location
onLoadCmd =
case newRoute of
EventInstanceRoute eventInstanceSlug ->
let
eventInstance =
case List.head (List.filter (\x -> x.slug == eventInstanceSlug) model.eventInstances) of
Just eventInstance ->
eventInstance
EventRoute eventSlug ->
case List.head (List.filter (\x -> x.slug == eventSlug) model.events) of
Just event ->
Cmd.none
Nothing ->
emptyEventInstance
in
sendGetEventContent model.flags.camp_slug eventInstance.eventSlug
sendGetEventContent model.flags.camp_slug (Debug.log "eventSlug" eventSlug)
OverviewRoute ->
case List.head model.days of
Just day ->
Cmd.none
Nothing ->
sendInitMessage model.flags.camp_slug
_ ->
Cmd.none

View file

@ -6,7 +6,7 @@ import Models exposing (..)
import Messages exposing (Msg(..))
import Views.DayPicker exposing (dayPicker)
import Views.DayView exposing (dayView)
import Views.EventDetail exposing (eventInstanceDetailView)
import Views.EventDetail exposing (eventDetailView)
import Views.ScheduleOverview exposing (scheduleOverviewView)
@ -27,8 +27,8 @@ view model =
DayRoute dayIso ->
dayView dayIso model
EventInstanceRoute eventInstanceSlug ->
eventInstanceDetailView eventInstanceSlug model
EventRoute eventSlug ->
eventDetailView eventSlug model
NotFoundRoute ->
div [] [ text "Not found!" ]

View file

@ -10,8 +10,6 @@ import Views.FilterView exposing (filterSidebar)
-- External modules
import Html exposing (Html, text, div, ul, li, span, i, h4)
import Html.Attributes exposing (class, classList, href)
import Html.Events exposing (onClick)
dayView : DayIso -> Model -> Html Msg

View file

@ -1,4 +1,4 @@
module Views.EventDetail exposing (eventInstanceDetailView)
module Views.EventDetail exposing (eventDetailView)
-- Local modules
@ -13,19 +13,11 @@ import Html.Attributes exposing (class, classList, href)
import Markdown
eventInstanceDetailView : EventInstanceSlug -> Model -> Html Msg
eventInstanceDetailView eventInstanceSlug model =
eventDetailView : EventSlug -> Model -> Html Msg
eventDetailView eventSlug model =
let
eventInstance =
case List.head (List.filter (\e -> e.slug == eventInstanceSlug) model.eventInstances) of
Just eventInstance ->
eventInstance
Nothing ->
emptyEventInstance
event =
case List.head (List.filter (\e -> e.slug == eventInstance.eventSlug) model.events) of
case List.head (List.filter (\e -> e.slug == eventSlug) model.events) of
Just event ->
event
@ -37,7 +29,7 @@ eventInstanceDetailView eventInstanceSlug model =
[ a [ href "#" ]
[ text "Back"
]
, h4 [] [ text eventInstance.title ]
, h4 [] [ text event.title ]
, p [] [ Markdown.toHtml [] event.abstract ]
, hr [] []
, h4 [] [ text "TODO: Show all instances here!" ]

View file

@ -67,7 +67,7 @@ dayEventInstanceView : EventInstance -> Html Msg
dayEventInstanceView eventInstance =
a
[ class "event"
, href ("#event/" ++ eventInstance.slug)
, href ("#event/" ++ eventInstance.eventSlug)
, style
[ ( "background-color", eventInstance.backgroundColor )
, ( "color", eventInstance.forgroundColor )

View file

@ -127,11 +127,6 @@ urlpatterns = [
url(
r'^program/', include([
url(
r'^(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})/$',
ScheduleView.as_view(),
name='schedule_day'
),
url(
r'^$',
ScheduleView.as_view(),

View file

@ -41,7 +41,6 @@ class ScheduleConsumer(JsonWebsocketConsumer):
"action": "init",
"event_locations": event_locations,
"event_types": event_types,
"accept": True,
"event_instances": event_instances,
"days": days,
}
@ -51,8 +50,6 @@ class ScheduleConsumer(JsonWebsocketConsumer):
if action == 'get_event_content':
camp_slug = content.get('camp_slug')
event_slug = content.get('event_slug')
print(camp_slug)
print(event_slug)
event = Event.objects.get(
slug=event_slug,
camp__slug=camp_slug