From efdd2bd257d80b92cb44bbbbc82f46260546bd81 Mon Sep 17 00:00:00 2001 From: Matthias Nannt Date: Mon, 13 Feb 2023 15:22:21 +0100 Subject: [PATCH] fix filter navigation by removing duplicates --- .../src/components/forms/shared/FilterNavigation.tsx | 12 +++++++----- apps/web/src/lib/utils.ts | 5 +++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/forms/shared/FilterNavigation.tsx b/apps/web/src/components/forms/shared/FilterNavigation.tsx index 98f677609a..f832120a27 100644 --- a/apps/web/src/components/forms/shared/FilterNavigation.tsx +++ b/apps/web/src/components/forms/shared/FilterNavigation.tsx @@ -1,6 +1,6 @@ import LoadingSpinner from "@/components/LoadingSpinner"; import { useForm } from "@/lib/forms"; -import { camelToTitle } from "@/lib/utils"; +import { camelToTitle, filterUniqueById, onlyUnique } from "@/lib/utils"; import clsx from "clsx"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; @@ -90,10 +90,12 @@ export default function FilterNavigation({ } } // add pinned submissions to the top - newFilteredSubmissions = pinnedFilterSubmissions.concat(newFilteredSubmissions).sort((a, b) => { - // sort by date descending - return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(); - }); + newFilteredSubmissions = filterUniqueById( + pinnedFilterSubmissions.concat(newFilteredSubmissions).sort((a, b) => { + // sort by date descending + return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(); + }) + ); } } setFilteredSubmissions(newFilteredSubmissions); diff --git a/apps/web/src/lib/utils.ts b/apps/web/src/lib/utils.ts index 3e1601aaf0..88fcee06ba 100644 --- a/apps/web/src/lib/utils.ts +++ b/apps/web/src/lib/utils.ts @@ -94,6 +94,11 @@ export const onlyUnique = (value, index, self) => { return self.indexOf(value) === index; }; +// filter array to eliminate duplicates with the same id +export const filterUniqueById = (array) => { + return array.filter((v, i, a) => a.findIndex((t) => t.id === v.id) === i); +}; + export const parseUserAgent = (userAgent: string) => { const info = platform.parse(userAgent); return info.description;