blob: e3d8f828f10c5becf57a56396ac99feb6a7981b9 (
plain)
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
|
con colMeta' = fn (row :: Type) (t :: Type) =>
{Header : string,
Project : row -> transaction t,
Update : row -> t -> transaction row,
Display : t -> xbody,
Edit : t -> xbody,
Validate : t -> signal bool}
con colMeta = fn (row :: Type) (global_t :: (Type * Type)) =>
{Initialize : transaction global_t.1,
Handlers : global_t.1 -> colMeta' row global_t.2}
con aggregateMeta = fn (row :: Type) (acc :: Type) =>
{Initial : acc,
Step : row -> acc -> acc,
Display : acc -> xbody}
functor Make(M : sig
type row
type key
val keyOf : row -> key
val list : transaction (list row)
val new : transaction row
val save : key -> row -> transaction unit
val delete : key -> transaction unit
con cols :: {(Type * Type)}
val cols : $(map (colMeta row) cols)
val folder : folder cols
con aggregates :: {Type}
val aggregates : $(map (aggregateMeta row) aggregates)
val aggFolder : folder aggregates
end) : sig
type grid
val grid : transaction grid
val sync : grid -> transaction unit
val render : grid -> xbody
val showSelection : grid -> source bool
val selection : grid -> signal (list M.row)
style tabl
style tr
style th
style td
style agg
end
|