@@ -229,14 +229,44 @@ pub fn update_route(model: Model, route: uri.Uri) {
229229 case string . is_empty ( q ) {
230230 True -> # ( set_search_results ( model , # ( - 1 , [ ] ) ) , effect . none ( ) )
231231 False -> {
232+ let latest = list . filter ( packages , fn ( p ) { p . 1 == "latest" } )
232233 Model ( .. model , search_input : q , search_packages_filters : packages )
233- |> pair . new ( effects . typesense_search ( q , packages ) )
234+ |> pair . new ( {
235+ case latest {
236+ [ ] -> effects . typesense_search ( q , packages )
237+ latest -> {
238+ latest
239+ |> list . map ( pair . first )
240+ |> effects . initial_latest_packages
241+ }
242+ }
243+ } )
234244 }
235245 }
236246 }
237247 }
238248}
239249
250+ pub fn replace_search_packages ( model : Model ) {
251+ let model =
252+ Model ( .. model , search_packages_filters : {
253+ use # ( package , version ) <- list . map ( model . search_packages_filters )
254+ use <- bool . guard ( when : version != "latest" , return : # ( package , version ) )
255+ case dict . get ( model . packages_versions , package ) {
256+ Error ( _ ) -> # ( package , version )
257+ Ok ( versions ) -> {
258+ case versions . releases {
259+ [ ] -> # ( package , version )
260+ [ release , .. ] -> # ( package , release . version )
261+ }
262+ }
263+ }
264+ } )
265+ route . Search ( q : model . search_input , packages : model . search_packages_filters )
266+ |> route . replace
267+ |> pair . new ( model , _)
268+ }
269+
240270pub fn select_autocomplete_option ( model : Model , package : String ) {
241271 case model . autocomplete , model . route {
242272 None , _ -> model
0 commit comments