@@ -11,6 +11,7 @@ import SEO from "../components/seo"
1111const 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