109 lines
3.7 KiB
Elm
Raw Normal View History

2020-12-01 15:43:06 +03:00
module ModulePage.View exposing (..)
2020-11-30 16:33:24 +03:00
2020-12-01 15:43:06 +03:00
import Dict exposing (Dict)
2020-11-30 16:33:24 +03:00
import Html exposing (Html, article, div, span, text)
import Model exposing (Model)
2020-12-01 15:43:06 +03:00
import ModulePage.Model exposing (ModuleViewInfo)
import Modules.Model exposing (Module)
2020-11-30 16:33:24 +03:00
import Palette exposing (classes)
import Services.Model exposing (Record, Signature)
import String.Interpolate exposing (interpolate)
view : Model -> String -> Html msg
view model id =
let
moduleInfo =
2020-12-01 15:43:06 +03:00
modelToServiceInfo model.modules id
2020-11-30 16:33:24 +03:00
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" ]
]
2020-12-01 15:43:06 +03:00
modelToServiceInfo : Dict String Module -> String -> Maybe ModuleViewInfo
modelToServiceInfo modules id =
2020-11-30 16:33:24 +03:00
let
2020-12-01 15:43:06 +03:00
moduleInfo =
Dict.get id modules
2020-11-30 16:33:24 +03:00
name =
2020-12-01 15:43:06 +03:00
moduleInfo |> Maybe.map .name |> Maybe.withDefault "unknown"
2020-11-30 16:33:24 +03:00
info =
2020-12-01 15:43:06 +03:00
moduleInfo
2020-11-30 16:33:24 +03:00
|> Maybe.map
2020-12-01 15:43:06 +03:00
(\m ->
2020-11-30 16:33:24 +03:00
{ name = name
, id = id
, author = "Fluence Labs"
2020-12-01 15:43:06 +03:00
, authorPeerId = "fluence_labs_peer_id"
, description = "Excelent module"
, website = "https://github.com/fluencelabs/"
, moduleInfo = m
2020-11-30 16:33:24 +03:00
}
)
in
info
2020-12-01 15:43:06 +03:00
viewInfo : ModuleViewInfo -> Html msg
viewInfo moduleInfo =
2020-11-30 16:33:24 +03:00
article [ classes "cf" ]
[ div [ classes "fl w-30 gray mv1" ] [ text "AUTHOR" ]
2020-12-01 15:43:06 +03:00
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black b" ] [ text moduleInfo.author ], span [ classes "fl w-100 black" ] [ text moduleInfo.authorPeerId ] ]
2020-11-30 16:33:24 +03:00
, div [ classes "fl w-30 gray mv1" ] [ text "DESCRIPTION" ]
2020-12-01 15:43:06 +03:00
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] [ text moduleInfo.description ] ]
2020-11-30 16:33:24 +03:00
, div [ classes "fl w-30 gray mv1" ] [ text "INTERFACE" ]
2020-12-01 15:43:06 +03:00
, div [ classes "fl w-70 mv1" ] [ span [ classes "fl w-100 black" ] (recordsView moduleInfo.moduleInfo.interface.record_types ++ signaturesView moduleInfo.moduleInfo.interface.function_signatures) ]
2020-11-30 16:33:24 +03:00
]
recordsView : List Record -> List (Html msg)
recordsView record =
2020-12-01 15:43:06 +03:00
record |> List.sortBy .name |> List.map recordView
2020-11-30 16:33:24 +03:00
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 =
2020-12-01 15:43:06 +03:00
signatures |> List.sortBy .name |> List.map signatureView
2020-11-30 16:33:24 +03:00
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"