Skip to content

Commit 380bb0d

Browse files
committed
Implementing a Dropdown component with headlessUI (unfinished)
1 parent c016fdd commit 380bb0d

File tree

11 files changed

+366
-85
lines changed

11 files changed

+366
-85
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
},
1010
"dependencies": {
1111
"@glennsl/bs-json": "^3.0.0",
12+
"@headlessui/react": "^1.0.0",
1213
"@mdx-js/loader": "^1.5.5",
1314
"@next/mdx": "^8.1.0",
1415
"@octokit/graphql-schema": "^7.4.0",

src/Packages.js

Lines changed: 44 additions & 50 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Packages.res

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,7 @@ module Category = {
325325
module Filter = {
326326
type t = {
327327
searchterm: string,
328-
includeOfficial: bool,
329-
includeCommunity: bool,
328+
category: Category.t,
330329
includeNpm: bool,
331330
includeUrlResource: bool,
332331
}
@@ -356,24 +355,6 @@ module InfoSidebar = {
356355
<div>
357356
<h2 className=h2> {React.string("Filter for")} </h2>
358357
<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>
377358
<Toggle
378359
enabled={filter.includeNpm}
379360
toggle={() => {
@@ -429,14 +410,9 @@ let scrollToTop: unit => unit = %raw(`function() {
429410
let default = (props: props) => {
430411
let (state, setState) = React.useState(_ => All)
431412

432-
let (selectedCategory, setSelectedCategory) = React.useState(_ => {
433-
Category.Official
434-
})
435-
436413
let (filter, setFilter) = React.useState(_ => {
437414
Filter.searchterm: "",
438-
includeOfficial: true,
439-
includeCommunity: true,
415+
category: Category.Official,
440416
includeNpm: true,
441417
includeUrlResource: true,
442418
})
@@ -482,9 +458,9 @@ let default = (props: props) => {
482458
}
483459
if !isResourceIncluded {
484460
()
485-
} else if filter.includeOfficial && Resource.isOfficial(next) {
461+
} else if filter.category === Category.Official && Resource.isOfficial(next) {
486462
Js.Array2.push(official, next)->ignore
487-
} else if filter.includeCommunity && !Resource.shouldFilter(next) {
463+
} else if filter.category === Category.Community && !Resource.shouldFilter(next) {
488464
Js.Array2.push(community, next)->ignore
489465
}
490466
(official, community)
@@ -519,12 +495,9 @@ let default = (props: props) => {
519495

520496
let searchOverview = switch state {
521497
| 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)}"`)
528501
}
529502

530503
let packagePluralSingular = if numOfPackages > 1 || numOfPackages === 0 {
@@ -543,7 +516,7 @@ let default = (props: props) => {
543516
| All => React.null
544517
}
545518

546-
let searchResult = switch selectedCategory {
519+
let searchResult = switch filter.category {
547520
| Official => officialCategory
548521
| Community => communityCategory
549522
}
@@ -619,6 +592,20 @@ let default = (props: props) => {
619592
// Actual content
620593
<div className="bg-gray-5 px-4 lg:px-8 pb-48">
621594
<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>
622609
// Box for the results
623610
<div className="mt-12 space-y-8"> searchResult </div>
624611
<div className="hidden lg:block h-full "> <InfoSidebar filter setFilter /> </div>

src/bindings/HeadlessUI.js

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)