Skip to content

Commit 291086c

Browse files
authored
Further code simplifications (#973)
* Simplify decodeResolvedFlake * Simplify longerPackageDetails * Simplify Flakes.init * Improve formatting * Simplify viewResultItem * Simplify findSource * Simplify viewResultItem * Simplify renderSource * Avoid traversing lists needlessly for searches * Deduplicate code * Improve readability
1 parent 5befa3a commit 291086c

File tree

5 files changed

+335
-324
lines changed

5 files changed

+335
-324
lines changed

frontend/src/List/Extra.elm

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module List.Extra exposing (find)
2+
3+
4+
find : (a -> Bool) -> List a -> Maybe a
5+
find p list =
6+
case list of
7+
[] ->
8+
Nothing
9+
10+
h :: t ->
11+
if p h then
12+
Just h
13+
14+
else
15+
find p t

frontend/src/Page/Flakes.elm

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,37 +59,30 @@ init :
5959
init searchArgs defaultNixOSChannel nixosChannels model =
6060
let
6161
-- init with respective module or with packages by default
62+
searchType : SearchType
6263
searchType =
6364
Maybe.withDefault PackageSearch searchArgs.type_
64-
65-
mapEitherModel m =
66-
case ( searchType, m ) of
67-
( OptionSearch, OptionModel model_ ) ->
68-
Tuple.mapBoth OptionModel (Cmd.map OptionsMsg) <|
69-
Page.Options.init searchArgs defaultNixOSChannel nixosChannels <|
70-
Just model_
71-
72-
( PackageSearch, PackagesModel model_ ) ->
73-
Tuple.mapBoth PackagesModel (Cmd.map PackagesMsg) <|
74-
Page.Packages.init searchArgs defaultNixOSChannel nixosChannels <|
65+
in
66+
case searchType of
67+
OptionSearch ->
68+
Tuple.mapBoth OptionModel (Cmd.map OptionsMsg) <|
69+
Page.Options.init searchArgs defaultNixOSChannel nixosChannels <|
70+
case model of
71+
Just (OptionModel model_) ->
7572
Just model_
7673

77-
_ ->
78-
default
74+
_ ->
75+
Nothing
7976

80-
default =
81-
case searchType of
82-
PackageSearch ->
83-
Tuple.mapBoth PackagesModel (Cmd.map PackagesMsg) <|
84-
Page.Packages.init searchArgs defaultNixOSChannel nixosChannels Nothing
77+
PackageSearch ->
78+
Tuple.mapBoth PackagesModel (Cmd.map PackagesMsg) <|
79+
Page.Packages.init searchArgs defaultNixOSChannel nixosChannels <|
80+
case model of
81+
Just (PackagesModel model_) ->
82+
Just model_
8583

86-
OptionSearch ->
87-
Tuple.mapBoth OptionModel (Cmd.map OptionsMsg) <|
88-
Page.Options.init searchArgs defaultNixOSChannel nixosChannels Nothing
89-
in
90-
model
91-
|> Maybe.map mapEitherModel
92-
|> Maybe.withDefault default
84+
_ ->
85+
Nothing
9386

9487

9588

frontend/src/Page/Options.elm

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import Html.Events
4343
import Http exposing (Body)
4444
import Json.Decode
4545
import Json.Decode.Pipeline
46+
import List.Extra
4647
import Route exposing (SearchType)
4748
import Search
4849
exposing
@@ -266,15 +267,14 @@ viewResultItem nixosChannels channel _ show item =
266267
case ( item.source.flake, item.source.flakeUrl ) of
267268
-- its a flake
268269
( Just (flake :: []), Just url ) ->
269-
Just
270-
[ li [] [ mkLink flake url ]
271-
]
270+
[ li [] [ mkLink flake url ]
271+
]
272272

273273
( Just (flake :: moduleName :: []), Just url ) ->
274-
Just [ li [] [ mkLink flake url, text "#", text moduleName ] ]
274+
[ li [] [ mkLink flake url, text "#", text moduleName ] ]
275275

276276
_ ->
277-
Nothing
277+
[]
278278
in
279279
li
280280
[ class "option"
@@ -286,7 +286,7 @@ viewResultItem nixosChannels channel _ show item =
286286
[ Just <|
287287
ul [ class "search-result-button" ]
288288
(List.append
289-
(flakeOrNixpkgs |> Maybe.withDefault [])
289+
flakeOrNixpkgs
290290
[ li []
291291
[ a
292292
[ onClick toggle
@@ -318,7 +318,7 @@ findSource nixosChannels channel source =
318318
value
319319

320320
asGithubLink value =
321-
case List.head (List.filter (\x -> x.id == channel) nixosChannels) of
321+
case List.Extra.find (\x -> x.id == channel) nixosChannels of
322322
Just channelDetails ->
323323
a
324324
[ href <| githubUrlPrefix channelDetails.branch ++ (value |> String.replace ":" "#L")
@@ -328,33 +328,36 @@ findSource nixosChannels channel source =
328328

329329
Nothing ->
330330
text <| cleanPosition value
331-
332-
sourceFile =
333-
Maybe.map asGithubLink source.source
334-
335-
flakeOrNixpkgs : Maybe (List (Html a))
336-
flakeOrNixpkgs =
337-
case ( source.flake, source.flakeUrl ) of
338-
-- its a flake
339-
( Just (name :: attrs), Just flakeUrl_ ) ->
340-
let
341-
module_ =
342-
Maybe.withDefault "(default)" <| Maybe.map (\m -> "(Module: " ++ m ++ ")") <| List.head attrs
343-
in
344-
Just <|
345-
List.append
346-
(Maybe.withDefault [] <| Maybe.map (\sourceFile_ -> [ sourceFile_, span [] [ text " in " ] ]) sourceFile)
347-
[ span [] [ text "Flake: " ]
348-
, a [ href flakeUrl_ ] [ text <| name ++ module_ ]
331+
in
332+
case ( source.flake, source.flakeUrl, source.source ) of
333+
-- its a flake
334+
( Just (name :: attrs), Just flakeUrl_, _ ) ->
335+
let
336+
module_ : String
337+
module_ =
338+
List.head attrs
339+
|> Maybe.map (\m -> "(Module: " ++ m ++ ")")
340+
|> Maybe.withDefault "(default)"
341+
in
342+
List.append
343+
(source.source
344+
|> Maybe.map
345+
(\source_ ->
346+
[ asGithubLink source_
347+
, span [] [ text " in " ]
349348
]
349+
)
350+
|> Maybe.withDefault []
351+
)
352+
[ span [] [ text "Flake: " ]
353+
, a [ href flakeUrl_ ] [ text <| name ++ module_ ]
354+
]
350355

351-
( Nothing, _ ) ->
352-
Maybe.map (\l -> [ l ]) sourceFile
356+
( Nothing, _, Just source_ ) ->
357+
[ asGithubLink source_ ]
353358

354-
_ ->
355-
Nothing
356-
in
357-
Maybe.withDefault [ span [] [ text "Not Found" ] ] flakeOrNixpkgs
359+
_ ->
360+
[ span [] [ text "Not Found" ] ]
358361

359362

360363

0 commit comments

Comments
 (0)