packages feed

servant-reason-0.1.0.0: test/reason-sources/getBooksSource.re

open BookType;
let getBooks = (query_published
               ,query_sort
               ,query_year
               ,query_category
               ,query_filters) => {
    let
        params =
            List.filter(((x) => (String.length(x) > 0))
                       ,[ if(query_published) {"published="} else {""}
                       , query_sort
                         |> ((x) => Belt.Option.mapWithDefault(x, "", ((x) => x)))
                         |> Js_global.encodeURIComponent
                         |> ((x__) => if(String.length(x__) > 0) { "query_sort=" ++ x__ } else {""})
                       , query_year
                         |> ((x) => Belt.Option.mapWithDefault(x, "", string_of_int))
                         |> Js_global.encodeURIComponent
                         |> ((x__) => if(String.length(x__) > 0) { "query_year=" ++ x__ } else {""})
                       , query_category
                         |> ((x) => x)
                         |> Js_global.encodeURIComponent
                         |> ((x__) => if(String.length(x__) > 0) { "query_category=" ++ x__ } else {""})
                       , String.concat("&"
                                      ,List.map((x) => "filters[]=" ++ Js_global.encodeURIComponent(((x) => Belt.Option.mapWithDefault(x, "", string_of_bool))(x)), query_filters))
                       ]);
        Js.Promise.(
            Fetch.fetchWithInit(String.concat("/"
                                             ,[ ""
                                             , "books"
                                             ])
                               ++ if(List.length(params)==0) {""} else {"?" ++ String.concat("&"
                                                                                            ,params)}
                               ,Fetch.RequestInit.make(~method_=Get
                                                      ,()))
        |> then_(Fetch.Response.json)
        |> then_(response => (response |> Json.Decode.list(decodeBook) |> ((x) => Belt_Result.Ok(x)) |> resolve)))
}