diff --git a/app/javascript/components/ComboCommunesSearch.jsx b/app/javascript/components/ComboCommunesSearch.jsx index 1f4496734..81d9e1d9d 100644 --- a/app/javascript/components/ComboCommunesSearch.jsx +++ b/app/javascript/components/ComboCommunesSearch.jsx @@ -1,9 +1,28 @@ import React from 'react'; import { QueryClientProvider } from 'react-query'; +import { matchSorter } from 'match-sorter'; import ComboSearch from './ComboSearch'; import { queryClient } from './shared/queryClient'; +function expandResultsWithMultiplePostalCodes(term, results) { + const expandedResults = results.flatMap((result) => + result.codesPostaux.map((codePostal) => ({ + ...result, + codesPostaux: [codePostal] + })) + ); + const limit = term.length > 5 ? 10 : 5; + if (expandedResults.length > limit) { + return matchSorter(expandedResults, term, { + keys: [(item) => `${item.nom} (${item.codesPostaux[0]})`, 'code'], + sorter: (rankedItems) => rankedItems + }).slice(0, limit + 1); + } + + return expandedResults; +} + function ComboCommunesSearch(params) { return ( @@ -16,6 +35,7 @@ function ComboCommunesSearch(params) { code, `${nom} (${codesPostaux[0]})` ]} + transformResults={expandResultsWithMultiplePostalCodes} /> ); diff --git a/app/javascript/components/ComboDepartementsSearch.jsx b/app/javascript/components/ComboDepartementsSearch.jsx index dd8e7208b..6afd68b1c 100644 --- a/app/javascript/components/ComboDepartementsSearch.jsx +++ b/app/javascript/components/ComboDepartementsSearch.jsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import React from 'react'; import { QueryClientProvider } from 'react-query'; import { matchSorter } from 'match-sorter'; @@ -7,14 +7,16 @@ import { queryClient } from './shared/queryClient'; const extraTerms = [{ code: '99', nom: 'Etranger' }]; -function ComboDepartementsSearch(params) { - const transformResults = useCallback((term, results) => [ +function expandResultsWithForeignDepartement(term, results) { + return [ ...results, ...matchSorter(extraTerms, term, { keys: ['nom', 'code'] }) - ]); + ]; +} +function ComboDepartementsSearch(params) { return ( [code, `${code} - ${nom}`]} - transformResults={transformResults} + transformResults={expandResultsWithForeignDepartement} /> ); diff --git a/app/javascript/components/ComboSearch.jsx b/app/javascript/components/ComboSearch.jsx index 843fe8f19..80c926f8d 100644 --- a/app/javascript/components/ComboSearch.jsx +++ b/app/javascript/components/ComboSearch.jsx @@ -125,12 +125,12 @@ function ComboSearch({ {results.length > 0 ? ( - {results.map((result) => { + {results.map((result, index) => { const [key, str] = transformResult(result); resultsMap.current[str] = [key, result]; return (