module Decisions.GetTableData exposing (fetchDataFromServer) import Dict import Http import Json.Decode as Decode import Json.Decode.Pipeline exposing (required, optional, decode) import Decisions.Messages as Messages import Decisions.Model as Model fetchDataFromServer : String -> Cmd Messages.Msg fetchDataFromServer path = let request = Http.get path apiGetDecoder in Http.send Messages.UpdateDataFromServer request apiGetDecoder : Decode.Decoder Model.DataFromServer apiGetDecoder = decode Model.DataFromServer |> required "headers" (Decode.list headerDecoder) |> required "rows" (Decode.list rowDecoder) |> required "stageId" Decode.int |> optional "hasBulkDecisions" Decode.bool True |> optional "bulkDecisionsOptions" (Decode.list nestedOptionDecoder) [] headerDecoder : Decode.Decoder Model.HeaderData headerDecoder = decode Model.HeaderData |> required "id" Decode.string |> required "value" Decode.string |> required "type" Decode.string |> required "visible" Decode.bool |> optional "options" (Decode.list Decode.string) [] |> optional "displayedTextOptions" (Decode.list Decode.string) [] |> optional "nestedOptions" (Decode.list nestedOptionDecoder) [] |> optional "hasNumericalValues" Decode.bool False |> optional "description" (Decode.maybe Decode.string) Nothing nestedOptionDecoder : Decode.Decoder Model.NestedOption nestedOptionDecoder = decode Model.NestedOption |> required "parent" Decode.string |> optional "isSelectable" Decode.bool True |> optional "childrenHeader" (Decode.maybe Decode.string) Nothing |> optional "children" (Decode.list Decode.string) [] rowDecoder : Decode.Decoder Model.ApiRowData rowDecoder = decode Model.ApiRowData |> required "id" Decode.string |> required "decision" Decode.string |> optional "presentationType" (Decode.maybe Decode.string) Nothing |> required "cells" (Decode.dict cellDecoder) |> optional "boolCells" (Decode.dict Decode.bool) Dict.empty |> optional "nestedCells" (Decode.dict decodeNestedCell) Dict.empty decodeNestedCell : Decode.Decoder Model.NestedCell decodeNestedCell = decode Model.NestedCell |> required "parent" Decode.string |> optional "child" (Decode.maybe Decode.string) Nothing cellDecoder : Decode.Decoder Model.Cell cellDecoder = decode Model.Cell |> required "value" Decode.string |> optional "link" (Decode.maybe Decode.string) Nothing