properly show switch data
This commit is contained in:
parent
e3052492b4
commit
825763a4d8
|
@ -43,7 +43,7 @@ viewHeader currentRoute =
|
|||
, width (fill |> maximum 750)
|
||||
]
|
||||
[ viewLink currentRoute ( "Mi", routes.top )
|
||||
, viewLink currentRoute ( "Switch Data", routes.switches )
|
||||
, viewLink currentRoute ( "Switch Data", routes.switch )
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import Html exposing (..)
|
|||
import Html.Attributes exposing (..)
|
||||
import Iso8601
|
||||
import Json.Decode exposing (Decoder, field, int, map5, nullable, string)
|
||||
import Time exposing (Posix)
|
||||
import Time exposing (..)
|
||||
import Url.Builder as UB
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,252 @@
|
|||
module Pages.Switch exposing (Model, Msg, page)
|
||||
|
||||
import Element exposing (..)
|
||||
import Element.Font as Font
|
||||
import Element.Input as Input
|
||||
import Generated.Params as Params
|
||||
import Global
|
||||
import Http
|
||||
import Iso8601
|
||||
import Json.Decode
|
||||
import Mi
|
||||
import Mi.SwitchData
|
||||
import Spa.Page
|
||||
import Utils.Spa exposing (Page, PageContext)
|
||||
|
||||
|
||||
page : Page Params.Switch Model Msg model msg appMsg
|
||||
page =
|
||||
Spa.Page.component
|
||||
{ title = always "Switch Data"
|
||||
, init = init
|
||||
, update = update
|
||||
, subscriptions = always subscriptions
|
||||
, view = always view
|
||||
}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{ currentFront : Maybe Mi.SwitchData.Switch
|
||||
, frontData : Maybe (List Mi.SwitchData.Switch)
|
||||
, error : Maybe String
|
||||
, amount : Int
|
||||
, page : Int
|
||||
}
|
||||
|
||||
|
||||
init : PageContext -> Params.Switch -> ( Model, Cmd Msg, Cmd Global.Msg )
|
||||
init { global } _ =
|
||||
let
|
||||
model =
|
||||
{ currentFront = Nothing
|
||||
, frontData = Nothing
|
||||
, error = Nothing
|
||||
, amount = 40
|
||||
, page = 0
|
||||
}
|
||||
in
|
||||
( model
|
||||
, Cmd.batch
|
||||
[ Mi.request
|
||||
"GET"
|
||||
(Maybe.withDefault
|
||||
""
|
||||
global.token
|
||||
)
|
||||
Mi.SwitchData.frontURL
|
||||
Http.emptyBody
|
||||
(Mi.expectJson ValidateCurrentFront Mi.SwitchData.decoder)
|
||||
, Mi.request
|
||||
"GET"
|
||||
(Maybe.withDefault
|
||||
""
|
||||
global.token
|
||||
)
|
||||
(Mi.SwitchData.listURL model.amount model.page)
|
||||
Http.emptyBody
|
||||
(Mi.expectJson ValidateFrontData (Json.Decode.list Mi.SwitchData.decoder))
|
||||
]
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= ValidateCurrentFront (Result Http.Error Mi.SwitchData.Switch)
|
||||
| ValidateFrontData (Result Http.Error (List Mi.SwitchData.Switch))
|
||||
| NextPage
|
||||
| PrevPage
|
||||
|
||||
|
||||
update : PageContext -> Msg -> Model -> ( Model, Cmd Msg, Cmd Global.Msg )
|
||||
update { global } msg model =
|
||||
case msg of
|
||||
PrevPage ->
|
||||
( { model | page = model.page - 1, frontData = Nothing }
|
||||
, Mi.request
|
||||
"GET"
|
||||
(Maybe.withDefault
|
||||
""
|
||||
global.token
|
||||
)
|
||||
(Mi.SwitchData.listURL model.amount (model.page - 1))
|
||||
Http.emptyBody
|
||||
(Mi.expectJson ValidateFrontData (Json.Decode.list Mi.SwitchData.decoder))
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
NextPage ->
|
||||
( { model | page = model.page + 1, frontData = Nothing }
|
||||
, Mi.request
|
||||
"GET"
|
||||
(Maybe.withDefault
|
||||
""
|
||||
global.token
|
||||
)
|
||||
(Mi.SwitchData.listURL model.amount (model.page + 1))
|
||||
Http.emptyBody
|
||||
(Mi.expectJson ValidateFrontData (Json.Decode.list Mi.SwitchData.decoder))
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
ValidateCurrentFront result ->
|
||||
case result of
|
||||
Ok data ->
|
||||
( { model | currentFront = Just data }
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
Err _ ->
|
||||
( { model | error = Just "can't fetch current front" }
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
ValidateFrontData result ->
|
||||
case result of
|
||||
Ok data ->
|
||||
( { model | frontData = Just data }
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
Err _ ->
|
||||
( { model | error = Just "can't fetch historical front data" }
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Model -> Element Msg
|
||||
view model =
|
||||
let
|
||||
currentFront =
|
||||
case model.currentFront of
|
||||
Just data ->
|
||||
let
|
||||
startTime =
|
||||
Iso8601.fromTime data.started_at
|
||||
in
|
||||
column
|
||||
[]
|
||||
[ el [ Font.size 30 ] (text data.who)
|
||||
, text ("started at " ++ startTime)
|
||||
]
|
||||
|
||||
Nothing ->
|
||||
text "Loading..."
|
||||
|
||||
prevButton =
|
||||
if model.page /= 0 then
|
||||
Input.button [] { onPress = Just PrevPage, label = text "Prev" }
|
||||
|
||||
else
|
||||
none
|
||||
|
||||
nextButton =
|
||||
Input.button [] { onPress = Just NextPage, label = text "Next" }
|
||||
|
||||
tableButtons =
|
||||
row [] [ prevButton, nextButton ]
|
||||
|
||||
switchDataTable =
|
||||
case model.frontData of
|
||||
Nothing ->
|
||||
case model.currentFront of
|
||||
Nothing ->
|
||||
none
|
||||
|
||||
Just _ ->
|
||||
text "Loading..."
|
||||
|
||||
Just data ->
|
||||
column []
|
||||
[ table []
|
||||
{ data = data
|
||||
, columns =
|
||||
[ { header = text "ID"
|
||||
, width = fill
|
||||
, view =
|
||||
\switch ->
|
||||
link
|
||||
[ Font.underline
|
||||
, Font.color (rgb255 204 75 75)
|
||||
, mouseOver [ alpha 0.5 ]
|
||||
]
|
||||
{ label = text (String.slice 0 10 switch.id)
|
||||
, url = "/switch/" ++ switch.id
|
||||
}
|
||||
}
|
||||
, { header = text "Who"
|
||||
, width = fill
|
||||
, view =
|
||||
\switch -> text switch.who
|
||||
}
|
||||
, { header = text "Start"
|
||||
, width = fill
|
||||
, view =
|
||||
\switch -> el [ padding 4 ] (text (Iso8601.fromTime switch.started_at))
|
||||
}
|
||||
, { header = text "End"
|
||||
, width = fill
|
||||
, view =
|
||||
\switch ->
|
||||
case switch.ended_at of
|
||||
Nothing ->
|
||||
none
|
||||
|
||||
Just time ->
|
||||
el [ padding 4 ] (text (Iso8601.fromTime time))
|
||||
}
|
||||
]
|
||||
}
|
||||
, tableButtons
|
||||
]
|
||||
in
|
||||
column
|
||||
[]
|
||||
[ currentFront
|
||||
, el [ padding 15 ] none
|
||||
, switchDataTable
|
||||
]
|
|
@ -1,70 +0,0 @@
|
|||
module Pages.Switches exposing (Model, Msg, page)
|
||||
|
||||
import Element exposing (..)
|
||||
import Generated.Params as Params
|
||||
import Global
|
||||
import Mi
|
||||
import Mi.SwitchData
|
||||
import Spa.Page
|
||||
import Utils.Spa exposing (Page)
|
||||
|
||||
|
||||
page : Page Params.Switches Model Msg model msg appMsg
|
||||
page =
|
||||
Spa.Page.component
|
||||
{ title = always "Switches"
|
||||
, init = always init
|
||||
, update = always update
|
||||
, subscriptions = always subscriptions
|
||||
, view = always view
|
||||
}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{}
|
||||
|
||||
|
||||
init : Params.Switches -> ( Model, Cmd Msg, Cmd Global.Msg )
|
||||
init _ =
|
||||
( {}
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= Msg
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Cmd Msg, Cmd Global.Msg )
|
||||
update msg model =
|
||||
( model
|
||||
, Cmd.none
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Model -> Element Msg
|
||||
view model =
|
||||
text "Switches"
|
Loading…
Reference in New Issue