sort utilities for html table
import Html as H exposing ( Html )
import Html.Attributes as A
import Html.Events as E
type Msg
= SortBy Sort.Value
sort = "id" |> Sort.by
sort |> Sort.stateOf "id" |> link "id"
sort |> Sort.stateOf "name" |> link "name"
link : String -> Sort.State -> Html Msg
link text {current,next} =
H.a
( List.append
[ "#" |> A.href
, next |> SortBy |> E.onClick
]
( case current of
Nothing -> []
Just _ -> [ "is-active" |> A.class ]
)
)
[ text |> H.text
, " " |> H.text
, case current of
Nothing -> "" |> H.text
Just Sort.Up -> "up" |> H.text
Just Sort.Down -> "down" |> H.text
]
sort definition
sort direction
{ current : Maybe Direction
, next : Value
}
current sort direction and next sort definition
by : String -> Value
create Value that sort by "column"
stateOf : String -> Value -> State
get current sort state from value and "column"
toString : Value -> { column : String, direction : String }
encode value to string
"id" |> Sort.by |> Sort.toString
-- { column = "id", direction = "down" }
fromString : { column : Maybe String, direction : Maybe String } -> Maybe Value
decode value from string
{ column = Just "id"
, direction = Just "up"
}
|> Sort.fromString