Skip to content

Commit

Permalink
fix(basket): MaskAsTreated is now called only 1 time for each contrib…
Browse files Browse the repository at this point in the history
…, and count fix
  • Loading branch information
Mihoub2 committed Jul 19, 2024
1 parent 642835c commit 231700d
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 41 deletions.
76 changes: 48 additions & 28 deletions src/pages/api-operation-page/link-publications/export-to-xlsx.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,44 @@ import { postHeaders } from "../../../config/api";

const ExcelExportButton = ({ refetch }) => {
const { dataList, setDataList } = useDataList();

const [isMinimized, setIsMinimized] = useState(false);

const markAsTreated = async (contributionId) => {
const markAsTreated = async (contributionIds) => {
const basePath = window.location.pathname.includes("contributionpage")
? "contribute"
: window.location.pathname.includes("apioperations")
? "contribute_productions"
: "contact";

const isDevelopment = import.meta.env.VITE_HEADER_TAG === "Development";
const url = isDevelopment
? `https://scanr-api.dataesr.ovh/${basePath}/${contributionId}`
: `${window.location.origin}/api/${basePath}/${contributionId}`;
const urlBase = isDevelopment
? `https://scanr-api.dataesr.ovh/${basePath}`
: `${window.location.origin}/api/${basePath}`;

const body = { status: "treated" };

try {
const response = await fetch(url, {
method: "PATCH",
headers: postHeaders,
body: JSON.stringify(body),
const uniqueContributionIds = [...new Set(contributionIds)];
const uniqueContributionPromises = uniqueContributionIds.map((id) =>
fetch(`${urlBase}/${id}`, {
method: "PATCH",
headers: postHeaders,
body: JSON.stringify(body),
})
);

const responses = await Promise.all(uniqueContributionPromises);

responses.forEach(async (response) => {
if (!response.ok) {
console.error("Erreur de réponse", response);
} else {
const responseData = await response.json();
console.log("Données de réponse", responseData);
}
});
if (!response.ok) {
console.error("Erreur de réponse", response);
} else {
const responseData = await response.json();
refetch();
console.log("Données de réponse", responseData);
}

refetch();
} catch (error) {
console.error("Erreur lors de la soumission du formulaire", error);
}
Expand All @@ -55,14 +63,17 @@ const ExcelExportButton = ({ refetch }) => {
first_name: item.first_name || "",
last_name: item.last_name || "",
}));

if (dataToExport.length === 0) {
toast.error("Aucune publication à exporter !");
return;
}

for (const item of dataToExport) {
await markAsTreated(item.contribution_id);
}
const uniqueContributionIds = [
...new Set(dataToExport.map((item) => item.contribution_id)),
];

await markAsTreated(uniqueContributionIds);

const worksheet = XLSX.utils.json_to_sheet(dataToExport);
const workbook = XLSX.utils.book_new();
Expand Down Expand Up @@ -90,13 +101,15 @@ const ExcelExportButton = ({ refetch }) => {
first_name: item.first_name || "",
last_name: item.last_name || "",
}));

if (dataToCopy.length === 0) {
toast.error("Aucune publication à copier !");
return;
}
for (const item of dataToCopy) {
await markAsTreated(item.contribution_id);
}

const uniqueContributionIds = [
...new Set(dataToCopy.map((item) => item.contribution_id)),
];

const formattedData = dataToCopy
.map(
Expand All @@ -112,6 +125,8 @@ const ExcelExportButton = ({ refetch }) => {
toast.error("Erreur lors de la copie des données !");
}

await markAsTreated(uniqueContributionIds);

setDataList((prevState) =>
prevState.map((item) => ({ ...item, export: false }))
);
Expand Down Expand Up @@ -155,6 +170,15 @@ const ExcelExportButton = ({ refetch }) => {
});
};

const uniqueExportCount = dataList
.filter((item) => item.export === true)
.reduce((unique, item) => {
if (!unique.some((uniqueItem) => uniqueItem.publi_id === item.publi_id)) {
unique.push(item);
}
return unique;
}, []).length;

return (
<div className="basket">
<div className="basket-content">
Expand All @@ -165,12 +189,8 @@ const ExcelExportButton = ({ refetch }) => {
</div>
<div className="basket-controls">
<Badge size="sm" color="blue-ecume" className="badge-count">
{`${
dataList.filter((item) => item.export === true).length
} publication${
dataList.filter((item) => item.export === true).length > 1
? "s"
: ""
{`${uniqueExportCount} publication${
uniqueExportCount > 1 ? "s" : ""
}`}
</Badge>
<Button
Expand Down
26 changes: 13 additions & 13 deletions src/pages/api-operation-page/link-publications/message-preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const MessagePreview = ({
const [idRefClicked, setIdRefClicked] = useState(false);
const [scanRClicked, setScanRClicked] = useState(false);

const { setDataList } = useDataList();
const { dataList, setDataList } = useDataList();

const { fullNameFromIdref: fetchedData } = NameFromIdref(data.id);

Expand Down Expand Up @@ -64,19 +64,19 @@ const MessagePreview = ({
});

if (addedToCart) {
const count = updatedList.filter(
(item) => item.person_id === data.id && item.export === true
).length;
const count = dataList.filter((item) => item.export === true).length;

toast(
`${count} publications de "${data.name}" ont été ajoutées au panier`,
{
style: {
backgroundColor: "#4caf50",
color: "#fff",
},
}
);
const message =
count === 1
? `La publication de "${data.name}" a été ajoutée au panier`
: `Les publications de "${data.name}" ont été ajoutées au panier`;

toast(message, {
style: {
backgroundColor: "#4caf50",
color: "#fff",
},
});
} else {
toast.warn(
`Les publications de "${data.name}" sont déjà dans le panier ! Ou bien, le nom est différent de celui de la contribution. Veuillez vérifier, puis les entrer à la main`,
Expand Down

0 comments on commit 231700d

Please sign in to comment.