2020-11-25 19:51:53 +03:00
|
|
|
module ServicePage.View exposing (..)
|
2020-11-30 16:33:24 +03:00
|
|
|
|
|
|
|
import Dict
|
|
|
|
import Html exposing (Html, article, div, span, text)
|
|
|
|
import List.Extra
|
|
|
|
import Model exposing (Model)
|
|
|
|
import Palette exposing (classes)
|
|
|
|
import ServicePage.Model exposing (ServiceInfo)
|
|
|
|
import Services.Model exposing (Record, Signature)
|
|
|
|
import String.Interpolate exposing (interpolate)
|
|
|
|
|
|
|
|
|
|
|
|
view : Model -> String -> Html msg
|
|
|
|
view model id =
|
|
|
|
let
|
|
|
|
moduleInfo =
|
|
|
|
modelToServiceInfo model id
|
|
|
|
in
|
|
|
|
case moduleInfo of
|
|
|
|
Just mi ->
|
|
|
|
div [ classes "cf ph2-ns" ]
|
|
|
|
[ span [ classes "fl w-100 f1 lh-title dark-red" ] [ text ("Module: " ++ mi.name) ]
|
|
|
|
, span [ classes "fl w-100 light-red" ] [ text mi.id ]
|
|
|
|
, viewInfo mi
|
|
|
|
]
|
|
|
|
|
|
|
|
Nothing ->
|
|
|
|
div [ classes "cf ph2-ns" ]
|
|
|
|
[ span [ classes "fl w-100 f1 lh-title dark-red" ] [ text "Module not found" ]
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
modelToServiceInfo : Model -> String -> Maybe ServiceInfo
|
|
|
|
modelToServiceInfo model id =
|
|
|
|
let
|
|
|
|
datas =
|
|
|
|
Dict.toList model.discoveredPeers
|
|
|
|
|
|
|
|
services =
|
|
|
|
datas |> List.map (\( peer, data ) -> data.services |> List.map (\s -> ( peer, s ))) |> List.concat
|
|
|
|
|
|
|
|
service =
|
|
|
|
services |> List.Extra.find (\( _, s ) -> s.service_id == id)
|
|
|
|
|
|
|
|
name =
|
2020-12-01 14:51:12 +03:00
|
|
|
service |> Maybe.andThen (\( _, s ) -> model.blueprints |> Dict.get s.blueprint_id |> Maybe.map .name) |> Maybe.withDefault "unknown"
|
2020-11-30 16:33:24 +03:00
|
|
|
|
|
|
|
info =
|
|
|
|
service
|
|
|
|
|> Maybe.map
|
|
|
|
(\( p, s ) ->
|
|
|
|
{ name = name
|
|
|
|
, id = id
|
|
|
|
, author = "Fluence Labs"
|
|
|
|
, authorPeerId = p
|
|
|
|
, description = "Cool service"
|
|
|
|
, website = "https://github.com/fluencelabs/chat"
|
|
|
|
, service = s
|
|
|
|
}
|
|
|
|
)
|
|
|
|
in
|
|
|
|
info
|
|
|
|
|
|
|
|
|
|
|
|
viewInfo : ServiceInfo -> Html msg
|
2020-12-01 14:51:12 +03:00
|
|
|
viewInfo serviceInfo =
|
2020-11-30 16:33:24 +03:00
|
|
|
article [ classes "cf" ]
|
|
|
|
[ div [ classes "fl w-30 gray mv1" ] [ text "AUTHOR" ]
|
2020-12-01 14:51:12 +03:00
|
|
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black b" ] [ text serviceInfo.author ], span [ classes "fl w-100 black" ] [ text serviceInfo.authorPeerId ] ]
|
2020-11-30 16:33:24 +03:00
|
|
|
, div [ classes "fl w-30 gray mv1" ] [ text "DESCRIPTION" ]
|
2020-12-01 14:51:12 +03:00
|
|
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] [ text serviceInfo.description ] ]
|
2020-11-30 16:33:24 +03:00
|
|
|
, div [ classes "fl w-30 gray mv1" ] [ text "INTERFACE" ]
|
2020-12-01 14:51:12 +03:00
|
|
|
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] (recordsView serviceInfo.service.interface.record_types ++ signaturesView serviceInfo.service.interface.function_signatures) ]
|
2020-11-30 16:33:24 +03:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
recordsView : List Record -> List (Html msg)
|
|
|
|
recordsView record =
|
|
|
|
List.map recordView record
|
|
|
|
|
|
|
|
|
|
|
|
recordView : Record -> Html msg
|
|
|
|
recordView record =
|
|
|
|
div [ classes "i" ]
|
|
|
|
([ span [ classes "fl w-100 mt2" ] [ text (record.name ++ " {") ] ]
|
|
|
|
++ fieldsView record.fields
|
|
|
|
++ [ span [ classes "fl w-100 mb2" ] [ text "}" ] ]
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
fieldsView : List (List String) -> List (Html msg)
|
|
|
|
fieldsView fields =
|
|
|
|
fields |> List.map (\f -> span [ classes "fl w-100 ml2" ] [ text (String.join ": " f) ])
|
|
|
|
|
|
|
|
|
|
|
|
signaturesView : List Signature -> List (Html msg)
|
|
|
|
signaturesView signatures =
|
|
|
|
List.map signatureView signatures
|
|
|
|
|
|
|
|
|
|
|
|
signatureView : Signature -> Html msg
|
|
|
|
signatureView signature =
|
|
|
|
div [ classes "i fl w-100 mv2" ]
|
|
|
|
[ text (interpolate "fn {0}({1}) -> {2}" [ signature.name, argumentsToString signature.arguments, outputToString signature.output_types ]) ]
|
|
|
|
|
|
|
|
|
|
|
|
argumentsToString : List (List String) -> String
|
|
|
|
argumentsToString arguments =
|
|
|
|
String.join ", " (arguments |> List.map (String.join ": "))
|
|
|
|
|
|
|
|
|
|
|
|
outputToString : List String -> String
|
|
|
|
outputToString output =
|
|
|
|
output |> List.head |> Maybe.withDefault "void"
|