Skip to content

Commit f3e9510

Browse files
committed
UI
1 parent 5537799 commit f3e9510

File tree

5 files changed

+85
-24
lines changed

5 files changed

+85
-24
lines changed

src/hexdocs.gleam

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,13 @@ fn user_submitted_packages_filter(model: Model) {
314314
model.find_matching_package_version(model, package, version)
315315
|> result.map(fn(_) {
316316
let search_packages_filters =
317-
[version.Package(name: package, version: version, resolved: True)]
317+
[
318+
version.Package(
319+
name: package,
320+
version: version,
321+
status: version.Found(version),
322+
),
323+
]
318324
|> list.append(model.search_packages_filters, _)
319325
|> list.unique
320326

src/hexdocs/data/model.gleam

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -238,29 +238,51 @@ pub fn update_route(model: Model, route: uri.Uri) {
238238
route.Home | route.NotFound -> #(model, effect.none())
239239
route.Search(q:, packages:) -> {
240240
let packages = {
241-
use #(package, version) <- list.map(packages)
241+
use #(package, ver) <- list.map(packages)
242242
use <- bool.guard(
243-
when: version != "latest",
244-
return: version.Package(package, version, resolved: True),
243+
when: ver != "latest",
244+
return: version.Package(
245+
name: package,
246+
version: ver,
247+
status: version.Found(ver),
248+
),
245249
)
246250
case dict.get(model.packages_versions, package) {
247251
// We didn't index it yet
248-
Error(_) -> version.Package(package, version, resolved: False)
252+
Error(_) ->
253+
version.Package(
254+
name: package,
255+
version: ver,
256+
status: version.Loading,
257+
)
249258
// We tried but we could not find it
250-
Ok(None) -> version.Package(package, version, resolved: True)
259+
Ok(None) ->
260+
version.Package(
261+
name: package,
262+
version: ver,
263+
status: version.NotFound,
264+
)
251265
// We found the packages
252266
Ok(Some(hex_package)) -> {
253267
case hex_package.releases {
254-
[] -> version.Package(package, version, resolved: True)
268+
[] ->
269+
version.Package(
270+
name: package,
271+
version: ver,
272+
status: version.NotFound,
273+
)
255274
[release, ..] ->
256-
version.Package(package, release.version, resolved: True)
275+
version.Package(
276+
name: package,
277+
version: ver,
278+
status: version.Found(release.version),
279+
)
257280
}
258281
}
259282
}
260283
}
261284

262-
let latest =
263-
list.filter(packages, fn(p) { p.version == "latest" && !p.resolved })
285+
let latest = list.filter(packages, fn(p) { p.status == version.Loading })
264286

265287
let model =
266288
Model(..model, search_input: q, search_packages_filters: packages)
@@ -417,9 +439,13 @@ fn extract_packages_filters_or_fetches(model: Model) {
417439
let is_existing_package = list.contains(model.packages, package)
418440
use <- bool.guard(when: !is_existing_package, return: acc)
419441
case version {
420-
Some(version) -> #(
442+
Some(ver) -> #(
421443
[
422-
version.Package(name: package, version: version, resolved: True),
444+
version.Package(
445+
name: package,
446+
version: ver,
447+
status: version.Found(ver),
448+
),
423449
..filters
424450
],
425451
packages_to_fetch,
@@ -436,7 +462,11 @@ fn extract_packages_filters_or_fetches(model: Model) {
436462
let ver = release.version
437463
#(
438464
[
439-
version.Package(name: package, version: ver, resolved: True),
465+
version.Package(
466+
name: package,
467+
version: ver,
468+
status: version.Found(ver),
469+
),
440470
..filters
441471
],
442472
packages_to_fetch,

src/hexdocs/data/model/version.gleam

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ import gleam/regexp
33

44
const input_regexp = "^#(\\w+)(:([0-9]+\\.[\\w+.-]+))?"
55

6+
/// Status of a package version resolution.
7+
pub type Status {
8+
Loading
9+
NotFound
10+
Found(String)
11+
}
12+
613
/// Represents a package filter with its name, version, and resolution status.
714
pub type Package {
8-
Package(name: String, version: String, resolved: Bool)
15+
Package(name: String, version: String, status: Status)
916
}
1017

1118
pub fn input_match_package(

src/hexdocs/services/hexdocs.gleam

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,12 @@ fn add_filter_by_packages_param(
174174
) -> List(#(String, String)) {
175175
use <- bool.guard(when: list.is_empty(packages), return: query)
176176
packages
177-
|> list.filter(fn(p) { p.resolved })
178-
|> list.map(fn(p) { p.name <> "-" <> p.version })
177+
|> list.filter_map(fn(p) {
178+
case p.status {
179+
version.Found(ver) -> Ok(p.name <> "-" <> ver)
180+
_ -> Error(Nil)
181+
}
182+
})
179183
|> list.map(string.append("package:=", _))
180184
|> string.join("||")
181185
|> list.key_set(query, "filter_by", _)

src/hexdocs/view/search.gleam

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,11 @@ pub fn search(model: Model) {
235235
use filter <- list.map(sorted_filters)
236236
html.div([class("flex justify-between items-center mt-4")], [
237237
html.div(
238-
[class("inline-flex flex-col justify-start items-start")],
238+
[
239+
class(
240+
"inline-flex flex-col justify-start items-start gap-1",
241+
),
242+
],
239243
[
240244
html.div(
241245
[
@@ -251,14 +255,24 @@ pub fn search(model: Model) {
251255
"self-stretch justify-start text-slate-700 dark:text-slate-400 text-sm font-normal leading-none",
252256
),
253257
],
254-
// You can add any loader you want here.
255-
case filter.version {
256-
"latest" ->
257-
case filter.resolved {
258-
True -> [html.text("Loading…")]
259-
False -> [html.text("Not found")]
258+
case filter.status {
259+
version.Loading -> [
260+
html.text("latest (loading…)"),
261+
]
262+
263+
version.NotFound -> [
264+
html.text("latest "),
265+
html.span([class("text-red-700")], [
266+
html.text("(not found)"),
267+
]),
268+
]
269+
version.Found(ver) ->
270+
case filter.version {
271+
"latest" -> [
272+
html.text("latest (" <> ver <> ")"),
273+
]
274+
_ -> [html.text(ver)]
260275
}
261-
version -> [html.text(version)]
262276
},
263277
),
264278
],

0 commit comments

Comments
 (0)