chore: minor fixes

This commit is contained in:
Ephraim Atta-Duncan
2024-09-19 14:27:05 +00:00
parent 087d8bf150
commit 89154e6230
4 changed files with 12 additions and 137 deletions

View File

@ -37,7 +37,7 @@ export const LeaderboardTable = ({
sortBy,
sortOrder,
}: LeaderboardTableProps) => {
const { _ } = useLingui();
const { _, i18n } = useLingui();
const [isPending, startTransition] = useTransition();
const updateSearchParams = useUpdateSearchParams();
@ -50,13 +50,13 @@ export const LeaderboardTable = ({
header: 'ID',
accessorKey: 'id',
cell: ({ row }) => <div>{row.original.id}</div>,
size: 10,
size: 60,
},
{
header: () => (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('name', sortOrder)}
onClick={() => handleColumnSort('name')}
>
{_(msg`Name`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
@ -70,7 +70,7 @@ export const LeaderboardTable = ({
header: () => (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('signingVolume', sortOrder)}
onClick={() => handleColumnSort('signingVolume')}
>
{_(msg`Signing Volume`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
@ -84,7 +84,7 @@ export const LeaderboardTable = ({
return (
<div
className="flex cursor-pointer items-center"
onClick={() => handleColumnSort('createdAt', sortOrder)}
onClick={() => handleColumnSort('createdAt')}
>
{_(msg`Created`)}
<CaretSortIcon className="ml-2 h-4 w-4" />
@ -92,7 +92,7 @@ export const LeaderboardTable = ({
);
},
accessorKey: 'createdAt',
cell: ({ row }) => <div>{row.original.createdAt.toLocaleDateString()}</div>,
cell: ({ row }) => i18n.date(row.original.createdAt),
},
] satisfies DataTableColumnDef<SigningVolume>[];
}, [sortOrder]);
@ -103,6 +103,8 @@ export const LeaderboardTable = ({
search: debouncedSearchString,
page: 1,
perPage,
sortBy,
sortOrder,
});
});
// eslint-disable-next-line react-hooks/exhaustive-deps
@ -121,13 +123,10 @@ export const LeaderboardTable = ({
setSearchString(e.target.value);
};
const handleColumnSort = (
column: 'name' | 'createdAt' | 'signingVolume',
sortOrder: 'asc' | 'desc',
) => {
const handleColumnSort = (column: 'name' | 'createdAt' | 'signingVolume') => {
startTransition(() => {
updateSearchParams({
sortBy: sortBy === column,
sortBy: column,
sortOrder: sortOrder === 'asc' ? 'desc' : 'asc',
});
});

View File

@ -2594,7 +2594,7 @@ msgstr ""
msgid "Search by document title"
msgstr ""
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:141
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:140
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email"
msgstr ""

View File

@ -2612,7 +2612,7 @@ msgstr "Search"
msgid "Search by document title"
msgstr "Search by document title"
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:141
#: apps/web/src/app/(dashboard)/admin/leaderboard/data-table-leaderboard.tsx:140
#: apps/web/src/app/(dashboard)/admin/users/data-table-users.tsx:144
msgid "Search by name or email"
msgstr "Search by name or email"

View File

@ -1,124 +0,0 @@
import type { Subscription, Team, User } from '@prisma/client';
import { DocumentDataType, PrismaClient } from '@prisma/client';
import fs from 'node:fs';
import path from 'node:path';
import { hashSync } from '@documenso/lib/server-only/auth/hash';
const prisma = new PrismaClient();
const examplePdf = fs
.readFileSync(path.join(__dirname, '../../assets/example.pdf'))
.toString('base64');
async function seedLeaderboardData(numUsers: number, numTeams: number) {
const users: User[] = [];
const teams: Team[] = [];
const subscriptions: Subscription[] = [];
// Create users with subscriptions
for (let i = 0; i < numUsers; i++) {
const user = await prisma.user.create({
data: {
name: `User ${i + 1}`,
email: `user${i + 1}@documenso.com`,
password: hashSync('password'),
emailVerified: new Date(),
},
});
users.push(user);
const subscription = await prisma.subscription.create({
data: {
userId: user.id,
status: 'ACTIVE',
planId: `plan_${Date.now().toString()}`,
priceId: `price_${Date.now().toString()}`,
},
});
subscriptions.push(subscription);
}
// Create teams
for (let i = 0; i < numTeams; i++) {
const ownerUser = users[Math.floor(Math.random() * users.length)];
const team = await prisma.team.create({
data: {
name: `Team ${i + 1}`,
url: `team-${Date.now().toString()}`,
ownerUserId: ownerUser.id,
},
});
teams.push(team);
// Add random users to the team
const teamMembers = users.filter((u) => u.id !== ownerUser.id).slice(0, 3);
for (const member of teamMembers) {
await prisma.teamMember.create({
data: {
teamId: team.id,
userId: member.id,
role: 'MEMBER',
},
});
}
}
// Create documents for each user
for (const user of users) {
const numDocuments = Math.floor(Math.random() * 10) + 1; // 1 to 5 documents per user
for (let i = 0; i < numDocuments; i++) {
const documentData = await prisma.documentData.create({
data: {
type: DocumentDataType.BYTES_64,
data: examplePdf,
initialData: examplePdf,
},
});
await prisma.document.create({
data: {
title: `Personal Document ${i + 1} for User ${user.id}`,
userId: user.id,
status: 'COMPLETED',
documentDataId: documentData.id,
source: 'DOCUMENT',
},
});
}
}
// Create documents for each team
for (const team of teams) {
const numDocuments = Math.floor(Math.random() * 10) + 1; // 1 to 10 documents per team
for (let i = 0; i < numDocuments; i++) {
const documentData = await prisma.documentData.create({
data: {
type: DocumentDataType.BYTES_64,
data: 'base64encodeddata', // Replace with actual data if needed
initialData: 'base64encodeddata', // Replace with actual data if needed
},
});
await prisma.document.create({
data: {
title: `Team Document ${i + 1} for Team ${team.id}`,
userId: team.ownerUserId, // Assign to team owner
teamId: team.id,
status: 'COMPLETED',
documentDataId: documentData.id,
source: 'DOCUMENT',
},
});
}
}
console.log(`Seeded ${users.length} users, ${teams.length} teams, and their documents.`);
}
// Usage
seedLeaderboardData(50, 10)
.catch((e) => console.error(e))
.finally(() => {
void prisma.$disconnect();
});