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 (