module PostVisibleColumns exposing (post) import Http import Json.Decode as Decode import Json.Encode as Encode import InputTable.Model exposing (Column) type alias VisibleColumns = List Int post : String -> List (Column a) -> (Result Http.Error String -> msg) -> String -> Cmd msg post url columns msg id = let visibleColumns = columns |> List.map toggleColumnsIfHasId |> List.indexedMap (\i c -> { visible = c.visible, i = i }) |> List.filter .visible |> List.map .i toggleColumnsIfHasId column = if column.id == id then { column | visible = not column.visible } else column in postVisibleColumns url visibleColumns msg postVisibleColumns : String -> VisibleColumns -> (Result Http.Error String -> msg) -> Cmd msg postVisibleColumns url visibleColumns msg = let request = Http.post url (Http.jsonBody (encodeVisibleColumns visibleColumns)) postReplyDecoder in Http.send msg request encodeVisibleColumns : VisibleColumns -> Encode.Value encodeVisibleColumns visibleColumns = Encode.list (List.map Encode.int visibleColumns) postReplyDecoder : Decode.Decoder String postReplyDecoder = Decode.string