11import axios from 'axios'
2- import { useEffect , useState } from 'react'
2+ import { useEffect , useMemo , useState } from 'react'
33import { Helmet } from 'react-helmet'
44import TopMenu from './TopMenu'
55import type { KeysType , KeywordPageType } from '../types'
@@ -53,6 +53,18 @@ const KeywordListBase = ({ language, apiBasePath, routeBasePath }: KeywordListBa
5353 getKeywords ( path )
5454 } , [ path ] )
5555
56+
57+ const sortedKeywords = useMemo ( ( ) => {
58+ const collator = new Intl . Collator ( 'fi' , {
59+ usage : 'sort' ,
60+ sensitivity : 'base' ,
61+ ignorePunctuation : true ,
62+ numeric : false
63+ } )
64+
65+ return [ ...keywords ] . sort ( ( a , b ) => collator . compare ( a . keyword , b . keyword ) )
66+ } , [ keywords ] )
67+
5668 function prepareLink ( keyword_id : string ) {
5769 return `${ routeBasePath } /${ encodeURIComponent ( keyword_id ) } `
5870 }
@@ -77,8 +89,8 @@ const KeywordListBase = ({ language, apiBasePath, routeBasePath }: KeywordListBa
7789 < div style = { contentStyle } id = "contentdiv" >
7890 < div id = "contentDiv" style = { contentContainerStyle } >
7991 < h1 > { title } </ h1 >
80- { Array . isArray ( keywords ) && keywords . map ( keyword => {
81- const firstLetter = keyword . keyword . charAt ( 0 ) . toUpperCase ( )
92+ { Array . isArray ( sortedKeywords ) && sortedKeywords . map ( keyword => {
93+ const firstLetter = keyword . keyword . charAt ( 0 ) . toLocaleUpperCase ( 'fi' )
8294 const letterChanged = firstLetter !== letter
8395 letter = firstLetter
8496 return (
@@ -96,4 +108,4 @@ const KeywordListBase = ({ language, apiBasePath, routeBasePath }: KeywordListBa
96108 )
97109}
98110
99- export default KeywordListBase
111+ export default KeywordListBase
0 commit comments