Skip to content

Commit 105d809

Browse files
ymkiuxclaude
andcommitted
fix(web): sort projects by createdAt to ensure consistent order
Closes #204 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent da5c017 commit 105d809

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

web/src/pages/projects/index.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from 'react';
1+
import { useMemo, useState } from 'react';
22
import { useNavigate } from 'react-router-dom';
33
import { useTranslation } from 'react-i18next';
44
import {
@@ -41,6 +41,24 @@ export function ProjectsPage() {
4141
navigate(`/projects/${id}`);
4242
};
4343

44+
const sortedProjects = useMemo(() => {
45+
if (!projects) {
46+
return undefined;
47+
}
48+
return projects.slice().sort((a, b) => {
49+
const timeA = Number.isFinite(new Date(a.createdAt).getTime())
50+
? new Date(a.createdAt).getTime()
51+
: 0;
52+
const timeB = Number.isFinite(new Date(b.createdAt).getTime())
53+
? new Date(b.createdAt).getTime()
54+
: 0;
55+
if (timeA !== timeB) {
56+
return timeA - timeB;
57+
}
58+
return a.id - b.id;
59+
});
60+
}, [projects]);
61+
4462
return (
4563
<div className="flex flex-col h-full bg-background">
4664
<PageHeader
@@ -89,9 +107,9 @@ export function ProjectsPage() {
89107
<div className="flex items-center justify-center p-12">
90108
<Loader2 className="h-8 w-8 animate-spin text-accent" />
91109
</div>
92-
) : projects && projects.length > 0 ? (
110+
) : sortedProjects && sortedProjects.length > 0 ? (
93111
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
94-
{projects.map((project) => (
112+
{sortedProjects.map((project) => (
95113
<Card
96114
key={project.id}
97115
className="group border-border bg-surface-primary cursor-pointer hover:border-accent/50 hover:shadow-card-hover transition-all duration-200 flex flex-col"

0 commit comments

Comments
 (0)