Compare commits

...

4 Commits

Author SHA1 Message Date
Eshan Roy
6bc0c56de2 Merge PR #7 from XlebyllleK/master
feat: sort packages alphabetically
2025-01-12 10:57:28 +05:30
XlebyllleK
176bd3ef9d Update PackageList.tsx 2025-01-11 23:17:11 +02:00
XlebyllleK
3f2a66057a feat: Optimize package sorting with useMemo 2025-01-11 23:15:54 +02:00
XlebyllleK
9ff67af9f2 Sort packages alphabetically 2025-01-11 23:08:04 +02:00

View File

@@ -1,29 +1,42 @@
import { import {
JSX JSX,
useMemo
} from 'react'; } from 'react';
import { Package } from '../types'; import {
import { PackageCard } from './PackageCard'; Package
} from '../types';
import {
PackageCard
} from './PackageCard';
interface PackageListProps { interface PackageListProps {
packages: Package[]; packages: Package[];
loading: boolean; loading: boolean;
} }
export function PackageList({ packages, loading }: PackageListProps): JSX.Element { export function PackageList({
if (loading) { packages,
return ( loading
<div className="flex items-center justify-center h-64"> }: PackageListProps): JSX.Element {
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500"></div> if (loading) return (
</div> <div className="flex items-center justify-center h-64">
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500"></div>
</div>
); );
}
return ( const sortedPackages = useMemo(
<div className="grid gap-4"> () => [...packages].sort(
{packages.map((pkg) => ( (a, b) => a.name.localeCompare(b.name)
<PackageCard key={pkg.name} package={pkg} /> ), [packages]
))} );
</div>
); return (
} <div className="grid gap-4">
{sortedPackages.map((pkg) => (
<PackageCard key={pkg.name} package={pkg} />
))}
</div>
);
}