@@ -325,8 +325,7 @@ module Category = {
325
325
module Filter = {
326
326
type t = {
327
327
searchterm : string ,
328
- includeOfficial : bool ,
329
- includeCommunity : bool ,
328
+ category : Category .t ,
330
329
includeNpm : bool ,
331
330
includeUrlResource : bool ,
332
331
}
@@ -356,24 +355,6 @@ module InfoSidebar = {
356
355
<div >
357
356
<h2 className = h2 > {React .string ("Filter for" )} </h2 >
358
357
<div className = "space-y-2" >
359
- <Toggle
360
- enabled = {filter .includeOfficial }
361
- toggle = {() => {
362
- setFilter (prev => {
363
- {... prev , Filter .includeOfficial : ! filter .includeOfficial }
364
- })
365
- }}>
366
- {React .string ("Official" )}
367
- </Toggle >
368
- <Toggle
369
- enabled = {filter .includeCommunity }
370
- toggle = {() => {
371
- setFilter (prev => {
372
- {... prev , Filter .includeCommunity : ! filter .includeCommunity }
373
- })
374
- }}>
375
- {React .string ("Community" )}
376
- </Toggle >
377
358
<Toggle
378
359
enabled = {filter .includeNpm }
379
360
toggle = {() => {
@@ -429,14 +410,9 @@ let scrollToTop: unit => unit = %raw(`function() {
429
410
let default = (props : props ) => {
430
411
let (state , setState ) = React .useState (_ => All )
431
412
432
- let (selectedCategory , setSelectedCategory ) = React .useState (_ => {
433
- Category .Official
434
- })
435
-
436
413
let (filter , setFilter ) = React .useState (_ => {
437
414
Filter .searchterm : "" ,
438
- includeOfficial : true ,
439
- includeCommunity : true ,
415
+ category : Category .Official ,
440
416
includeNpm : true ,
441
417
includeUrlResource : true ,
442
418
})
@@ -482,9 +458,9 @@ let default = (props: props) => {
482
458
}
483
459
if ! isResourceIncluded {
484
460
()
485
- } else if filter .includeOfficial && Resource .isOfficial (next ) {
461
+ } else if filter .category === Category . Official && Resource .isOfficial (next ) {
486
462
Js .Array2 .push (official , next )-> ignore
487
- } else if filter .includeCommunity && ! Resource .shouldFilter (next ) {
463
+ } else if filter .category === Category . Community && ! Resource .shouldFilter (next ) {
488
464
Js .Array2 .push (community , next )-> ignore
489
465
}
490
466
(official , community )
@@ -519,12 +495,9 @@ let default = (props: props) => {
519
495
520
496
let searchOverview = switch state {
521
497
| Filtered (search ) =>
522
- let (numOfPackages , categoryName ) = switch selectedCategory {
523
- | Official => (officialResources -> Js .Array2 .length , ` "${Category.toString(selectedCategory)}"` )
524
- | Community => (
525
- communityResources -> Js .Array2 .length ,
526
- ` "${Category.toString(selectedCategory)}"` ,
527
- )
498
+ let (numOfPackages , categoryName ) = switch filter .category {
499
+ | Official => (officialResources -> Js .Array2 .length , ` "${Category.toString(filter.category)}"` )
500
+ | Community => (communityResources -> Js .Array2 .length , ` "${Category.toString(filter.category)}"` )
528
501
}
529
502
530
503
let packagePluralSingular = if numOfPackages > 1 || numOfPackages === 0 {
@@ -543,7 +516,7 @@ let default = (props: props) => {
543
516
| All => React .null
544
517
}
545
518
546
- let searchResult = switch selectedCategory {
519
+ let searchResult = switch filter . category {
547
520
| Official => officialCategory
548
521
| Community => communityCategory
549
522
}
@@ -619,6 +592,20 @@ let default = (props: props) => {
619
592
// Actual content
620
593
<div className = "bg-gray-5 px-4 lg:px-8 pb-48" >
621
594
<div className = "pt-6" > searchOverview </div >
595
+ // Box for the filter
596
+ <div >
597
+ <Dropdown
598
+ value = {filter .category }
599
+ onChange = {category => {
600
+ setFilter (prev => {
601
+ ... prev ,
602
+ category : category ,
603
+ })
604
+ }}
605
+ items = [Category .Official , Community ]
606
+ itemToString = Category .toString
607
+ />
608
+ </div >
622
609
// Box for the results
623
610
<div className = "mt-12 space-y-8" > searchResult </div >
624
611
<div className = "hidden lg:block h-full " > <InfoSidebar filter setFilter /> </div >
0 commit comments