= () => {
onSearch={(value) => handleSearch(value || "")}
isLarge
buttonLabel="Rechercher"
- placeholder="Rechercher par nom"
+ placeholder="Rechercher par nom ou ID"
/>
+
+ {query
+ .filter((item) => item.trim() !== "")
+ .map((item, index) => (
+ handleRemoveQueryItem(item)}
+ >
+ {item}
+
+ ))}
+
= () => {
))}
{dataList.some((item) => item.export === true) && (
- )}{" "}
+ )}
= ({
- {data?.name}
+
+ {data?.name} ({data?._id})
+
{!data?.mailSent && (
Aucune réponse apportée à ce message pour l'instant
diff --git a/src/pages/contribution-page/index.tsx b/src/pages/contribution-page/index.tsx
index 4a610ad..711c284 100644
--- a/src/pages/contribution-page/index.tsx
+++ b/src/pages/contribution-page/index.tsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from "react";
+import { useState, useEffect } from "react";
import { useLocation } from "react-router-dom";
import {
Col,
@@ -7,6 +7,7 @@ import {
Text,
Title,
SearchBar,
+ DismissibleTag,
} from "@dataesr/dsfr-plus";
import ContributionData from "../../api/contribution-api/getData";
import { buildURL } from "../../api/utils/buildURL";
@@ -20,7 +21,7 @@ import ContributorSummary from "./contributor-summary";
const ContributionPage: React.FC = () => {
const [sort, setSort] = useState("DESC");
const [status, setStatus] = useState("choose");
- const [query, setQuery] = useState("");
+ const [query, setQuery] = useState([]);
const [page, setPage] = useState(1);
const [searchInMessage, setSearchInMessage] = useState(false);
const [highlightedQuery, setHighlightedQuery] = useState("");
@@ -32,7 +33,8 @@ const ContributionPage: React.FC = () => {
const params = new URLSearchParams(location.search);
setPage(parseInt(params.get("page") || "1"));
setSearchInMessage(params.get("searchInMessage") === "true");
- setQuery(params.get("query") || "");
+ const queryParam = params.get("query") || "";
+ setQuery(queryParam ? queryParam.split(",") : []);
setSort(params.get("sort") || "DESC");
setStatus(params.get("status") || "choose");
}, [location.search]);
@@ -40,7 +42,7 @@ const ContributionPage: React.FC = () => {
useEffect(() => {
const newSearchParams = new URLSearchParams();
newSearchParams.set("page", page.toString());
- newSearchParams.set("query", query);
+ newSearchParams.set("query", query.join(","));
newSearchParams.set("searchInMessage", searchInMessage.toString());
newSearchParams.set("sort", sort);
newSearchParams.set("status", status);
@@ -49,7 +51,14 @@ const ContributionPage: React.FC = () => {
window.history.pushState({}, "", newURL);
}, [page, query, searchInMessage, sort, status]);
- const url = buildURL(location, sort, status, query, page, searchInMessage);
+ const url = buildURL(
+ location,
+ sort,
+ status,
+ query.join(" "),
+ page,
+ searchInMessage
+ );
const { data, isLoading, isError, refetch } = ContributionData(url);
const meta = (data as { meta: any })?.meta;
@@ -64,8 +73,15 @@ const ContributionPage: React.FC = () => {
}, [contributions]);
const handleSearch = (value: string) => {
- setQuery(value.trim());
- setHighlightedQuery(value.trim());
+ const trimmedValue = value.trim();
+ if (trimmedValue !== "" && !query.includes(trimmedValue)) {
+ setQuery([...query, trimmedValue]);
+ setHighlightedQuery(trimmedValue);
+ }
+ };
+
+ const handleRemoveQueryItem = (item: string) => {
+ setQuery(query.filter((q) => q !== item));
};
const onSelectContribution = (id: string) => {
@@ -73,16 +89,23 @@ const ContributionPage: React.FC = () => {
};
const filteredContributions = contributions?.filter((contribution) => {
- const nameMatches = contribution.name
- .toLowerCase()
- .includes(query.toLowerCase());
+ if (query.length === 0) {
+ return true;
+ }
+ const queryLower = query.map((q) => q.toLowerCase());
+ const nameMatches = queryLower.some((q) =>
+ contribution.name.toLowerCase().includes(q)
+ );
+ const idMatches = queryLower.some((q) =>
+ contribution._id.toLowerCase().includes(q)
+ );
if (searchInMessage) {
- const messageMatches = contribution.message
- .toLowerCase()
- .includes(query.toLowerCase());
- return nameMatches || messageMatches;
+ const messageMatches = queryLower.some((q) =>
+ contribution.message.toLowerCase().includes(q)
+ );
+ return nameMatches || idMatches || messageMatches;
}
- return nameMatches;
+ return nameMatches || idMatches;
});
if (isLoading)
@@ -113,8 +136,22 @@ const ContributionPage: React.FC = () => {
onSearch={(value) => handleSearch(value || "")}
isLarge
buttonLabel="Rechercher"
- placeholder="Rechercher par nom"
+ placeholder="Rechercher par nom ou ID"
/>
+
+ {query
+ .filter((item) => item.trim() !== "")
+ .map((item, index) => (
+ handleRemoveQueryItem(item)}
+ >
+ {item}
+
+ ))}
+