Skip to content

Commit 5b4975d

Browse files
committed
Merge remote-tracking branch 'origin/300-sortable-searchable-schemes'
2 parents ad318d2 + 58a77c6 commit 5b4975d

File tree

1 file changed

+52
-19
lines changed

1 file changed

+52
-19
lines changed

src/pages/index.js

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SEO from "../components/seo"
1111
const IndexPage = ({ location }) => {
1212
const [conceptSchemes, setConceptSchemes] = useState([])
1313
const [language, setLanguage] = useState("")
14+
const [searchTerm, setSearchTerm] = useState("")
1415
const { data, updateState } = useSkoHubContext()
1516
const { config } = getConfigAndConceptSchemes()
1617
const customDomain = config.customDomain
@@ -75,27 +76,59 @@ const IndexPage = ({ location }) => {
7576
return (
7677
<Layout language={language}>
7778
<SEO title="Concept Schemes" keywords={["conceptSchemes"]} />
79+
7880
<div className="centerPage block">
81+
{conceptSchemes.length > 4 && (
82+
<div style={{ marginBottom: "20px" }}>
83+
<input
84+
type="text"
85+
placeholder="Search concept schemes..."
86+
value={searchTerm}
87+
onChange={(e) => setSearchTerm(e.target.value)}
88+
style={{
89+
width: "100%",
90+
padding: "10px",
91+
fontSize: "16px",
92+
border: "1px solid #ccc",
93+
borderRadius: "4px",
94+
}}
95+
/>
96+
</div>
97+
)}
7998
<ul>
80-
{conceptSchemes.map((conceptScheme) => (
81-
<li key={conceptScheme.id}>
82-
<Link
83-
onClick={() =>
84-
updateState({
85-
...data,
86-
conceptSchemeLanguages: [...conceptScheme.languages],
87-
currentScheme: conceptScheme,
88-
selectedLanguage: conceptScheme.languages.includes(language)
89-
? language
90-
: conceptScheme.languages[0],
91-
})
92-
}
93-
to={getFilePath(conceptScheme.id, `html`, customDomain)}
94-
>
95-
{getTitle(conceptScheme)}
96-
</Link>
97-
</li>
98-
))}
99+
{conceptSchemes
100+
.filter((conceptScheme) => {
101+
const title = getTitle(conceptScheme)
102+
return title.toLowerCase().includes(searchTerm.toLowerCase())
103+
})
104+
.sort((a, b) => {
105+
const titleA =
106+
i18n(language)(a.prefLabel || a.title || a.dc_title) || a.id
107+
const titleB =
108+
i18n(language)(b.prefLabel || b.title || b.dc_title) || b.id
109+
return titleA.localeCompare(titleB)
110+
})
111+
.map((conceptScheme) => (
112+
<li key={conceptScheme.id}>
113+
<Link
114+
onClick={() =>
115+
updateState({
116+
...data,
117+
conceptSchemeLanguages: [...conceptScheme.languages],
118+
currentScheme: conceptScheme,
119+
selectedLanguage: conceptScheme.languages.includes(
120+
language
121+
)
122+
? language
123+
: conceptScheme.languages[0],
124+
})
125+
}
126+
to={getFilePath(conceptScheme.id, `html`, customDomain)}
127+
>
128+
{getTitle(conceptScheme)}
129+
</Link>
130+
</li>
131+
))}
99132
</ul>
100133
</div>
101134
</Layout>

0 commit comments

Comments
 (0)