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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
module AdvSearch.Producers exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
import Set
import Dict
import Lib.Autocomplete as A
import Lib.Html exposing (..)
import Lib.Util exposing (..)
import Gen.Api as GApi
import AdvSearch.Query exposing (..)
import AdvSearch.Set as S
type alias Model =
{ sel : S.Model Int
, conf : A.Config Msg GApi.ApiProducerResult
, search : A.Model GApi.ApiProducerResult
}
type Msg
= Sel (S.Msg Int)
| Search (A.Msg GApi.ApiProducerResult)
init : Data -> (Data, Model)
init dat =
let (ndat, sel) = S.init dat
in ( { ndat | objid = ndat.objid + 1 }
, { sel = { sel | single = False }
, conf = { wrap = Search, id = "advsearch_prod" ++ String.fromInt ndat.objid, source = A.producerSource }
, search = A.init ""
}
)
update : Data -> Msg -> Model -> (Data, Model, Cmd Msg)
update dat msg model =
case msg of
Sel m -> (dat, { model | sel = S.update m model.sel }, Cmd.none)
Search m ->
let (nm, c, res) = A.update model.conf m model.search
in case res of
Nothing -> (dat, { model | search = nm }, c)
Just p ->
if Set.member p.id model.sel.sel then (dat, { model | search = nm }, c)
else ( { dat | producers = Dict.insert p.id p dat.producers }
, { model | search = A.clear nm "", sel = S.update (S.Sel p.id True) model.sel }
, c )
toQuery f m = S.toQuery f m.sel
fromQuery f dat q =
S.fromQuery f dat q |> Maybe.map (\(ndat,sel) ->
( { ndat | objid = ndat.objid+1 }
, { sel = { sel | single = False }
, conf = { wrap = Search, id = "advsearch_prod" ++ String.fromInt ndat.objid, source = A.producerSource }
, search = A.init ""
}
))
devFromQuery = fromQuery (\q ->
case q of
QInt 6 op v -> Just (op, v)
_ -> Nothing)
devView : Data -> Model -> (Html Msg, () -> List (Html Msg))
devView dat model =
( case Set.toList model.sel.sel of
[] -> b [ class "grayedout" ] [ text "Developer" ]
[s] -> span [ class "nowrap" ]
[ S.lblPrefix model.sel
, b [ class "grayedout" ] [ text <| "p" ++ String.fromInt s ++ ":" ]
, Dict.get s dat.producers |> Maybe.map (\p -> p.name) |> Maybe.withDefault "" |> text
]
l -> span [] [ S.lblPrefix model.sel, text <| "Developers (" ++ String.fromInt (List.length l) ++ ")" ]
, \() ->
[ div [ class "advheader" ]
[ h3 [] [ text "Developer" ]
, Html.map Sel (S.opts model.sel True False)
]
, ul [] <| List.map (\s ->
li []
[ inputButton "X" (Sel (S.Sel s False)) []
, b [ class "grayedout" ] [ text <| " p" ++ String.fromInt s ++ ": " ]
, Dict.get s dat.producers |> Maybe.map (\p -> p.name) |> Maybe.withDefault "" |> text
]
) (Set.toList model.sel.sel)
, A.view model.conf model.search [ placeholder "Search..." ]
]
)
|