Solved a date sorting bug

This commit is contained in:
Tiago Ribeiro
2024-01-20 01:09:03 +00:00
parent 68069d118f
commit b757cbbed7
3 changed files with 25 additions and 18 deletions

View File

@@ -7,13 +7,22 @@ import UserList from "@/pages/(admin)/Lists/UserList";
import {dateSorter} from "@/utils"; import {dateSorter} from "@/utils";
import moment from "moment"; import moment from "moment";
import {useEffect, useState} from "react"; import {useEffect, useState} from "react";
import {BsArrowLeft, BsBriefcaseFill, BsGlobeCentralSouthAsia, BsPerson, BsPersonFill, BsPencilSquare, BsBank, BsCurrencyDollar} from "react-icons/bs"; import {
BsArrowLeft,
BsBriefcaseFill,
BsGlobeCentralSouthAsia,
BsPerson,
BsPersonFill,
BsPencilSquare,
BsBank,
BsCurrencyDollar,
} from "react-icons/bs";
import UserCard from "@/components/UserCard"; import UserCard from "@/components/UserCard";
import useGroups from "@/hooks/useGroups"; import useGroups from "@/hooks/useGroups";
import IconCard from "./IconCard"; import IconCard from "./IconCard";
import useFilterStore from "@/stores/listFilterStore"; import useFilterStore from "@/stores/listFilterStore";
import {useRouter} from "next/router"; import {useRouter} from "next/router";
import usePaymentStatusUsers from '@/hooks/usePaymentStatusUsers'; import usePaymentStatusUsers from "@/hooks/usePaymentStatusUsers";
interface Props { interface Props {
user: User; user: User;
@@ -161,7 +170,9 @@ export default function AdminDashboard({user}: Props) {
<BsArrowLeft className="text-xl" /> <BsArrowLeft className="text-xl" />
<span>Back</span> <span>Back</span>
</div> </div>
<h2 className="text-2xl font-semibold">{paid ? 'Payment Done' : 'Pending Payment'} ({list.length})</h2> <h2 className="text-2xl font-semibold">
{paid ? "Payment Done" : "Pending Payment"} ({list.length})
</h2>
</div> </div>
<UserList user={user} filters={[filter]} /> <UserList user={user} filters={[filter]} />
</> </>
@@ -290,13 +301,7 @@ export default function AdminDashboard({user}: Props) {
} }
color="rose" color="rose"
/> />
<IconCard <IconCard onClick={() => setPage("paymentdone")} Icon={BsCurrencyDollar} label="Payment Done" value={done.length} color="purple" />
onClick={() => setPage("paymentdone")}
Icon={BsCurrencyDollar}
label="Payment Done"
value={done.length}
color="purple"
/>
<IconCard <IconCard
onClick={() => setPage("paymentpending")} onClick={() => setPage("paymentpending")}
Icon={BsCurrencyDollar} Icon={BsCurrencyDollar}
@@ -323,7 +328,9 @@ export default function AdminDashboard({user}: Props) {
<div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide"> <div className="flex flex-col items-start h-96 overflow-scroll scrollbar-hide">
{users {users
.filter((x) => x.type === "corporate") .filter((x) => x.type === "corporate")
.sort((a, b) => dateSorter(a, b, "desc", "registrationDate")) .sort((a, b) => {
return dateSorter(a, b, "desc", "registrationDate");
})
.map((x) => ( .map((x) => (
<UserDisplay key={x.id} {...x} /> <UserDisplay key={x.id} {...x} />
))} ))}

View File

@@ -69,7 +69,7 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
type: email.endsWith("@ecrop.dev") ? "developer" : codeData ? codeData.type : "student", type: email.endsWith("@ecrop.dev") ? "developer" : codeData ? codeData.type : "student",
subscriptionExpirationDate: codeData ? codeData.expiryDate : moment().subtract(1, "days").toISOString(), subscriptionExpirationDate: codeData ? codeData.expiryDate : moment().subtract(1, "days").toISOString(),
...(passport_id ? {demographicInformation: {passport_id}} : {}), ...(passport_id ? {demographicInformation: {passport_id}} : {}),
registrationDate: new Date(), registrationDate: new Date().toISOString(),
status: code ? "active" : "paymentDue", status: code ? "active" : "paymentDue",
}; };

View File

@@ -1,11 +1,11 @@
import moment from "moment"; import moment from "moment";
export function dateSorter(a: any, b: any, direction: "asc" | "desc", key: string) { export function dateSorter(a: any, b: any, direction: "asc" | "desc", key: string) {
if (!a[key] && b[key]) return direction === "asc" ? -1 : 1;
if (a[key] && !b[key]) return direction === "asc" ? 1 : -1;
if (!a[key] && !b[key]) return 0; if (!a[key] && !b[key]) return 0;
if (moment(a[key]).isAfter(b[key])) return direction === "asc" ? -1 : 1; if (a[key] && !b[key]) return direction === "asc" ? -1 : 1;
if (moment(b[key]).isAfter(a[key])) return direction === "asc" ? 1 : -1; if (!a[key] && b[key]) return direction === "asc" ? 1 : -1;
if (moment(a[key]).isAfter(b[key])) return direction === "asc" ? 1 : -1;
if (moment(b[key]).isAfter(a[key])) return direction === "asc" ? -1 : 1;
return 0; return 0;
} }