-
Notifications
You must be signed in to change notification settings - Fork 0
/
Inline.purs
70 lines (65 loc) · 1.61 KB
/
Inline.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
module InteractiveData.App.FastForward.Inline
( view
) where
import InteractiveData.Core.Prelude
import Chameleon as C
import Data.Array (intersperse)
import Data.Array as Array
import Data.FunctorWithIndex (mapWithIndex)
import InteractiveData.App.UI.Assets as UI.Assets
view
:: forall html msg
. IDHtml html
=> Array (DataPath /\ DataTree html msg)
-> html msg
view items =
let
el =
{ root: styleNode C.div
[ "display: flex"
, "flex-direction: row"
, "justify-content: space-between"
, "align-items: start"
]
, spacer: styleNode C.div
[ "width: 15px" ]
, item: C.div
, lastItem: styleNode C.div
[ "flex-grow: 1" ]
, iconArrow: styleNode C.div
[ "height: 24px"
, "width: 14px"
, "scale: 0.3"
, "fill: #8b8b8b"
]
}
itemsCount :: Int
itemsCount =
Array.length items
in
el.root []
( mapWithIndex
( \ix item ->
if ix == itemsCount - 1 then
el.lastItem []
[ viewItem item ]
else
el.item []
[ viewItem item ]
)
items
# intersperse
( el.spacer []
[ el.iconArrow []
[ UI.Assets.viewChevronRight
]
]
)
)
viewItem
:: forall html msg
. IDHtml html
=> DataPath /\ DataTree html msg
-> html msg
viewItem (path /\ DataTree { view: view' }) =
withCtx \ctx -> putCtx ctx { path = path } $ view'