chore: review

This commit is contained in:
Ephraim Atta-Duncan
2025-08-20 16:22:15 +00:00
parent 2de0452839
commit 152bce5a21
4 changed files with 11 additions and 8 deletions

View File

@ -3,10 +3,11 @@ import { useEffect, useMemo, useState, useTransition } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { ChevronDownIcon, ChevronUpIcon, ChevronsUpDown, Loader } from 'lucide-react';
import { Link, useSearchParams } from 'react-router';
import { Link } from 'react-router';
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params';
import type { DateRange } from '@documenso/lib/types/search-params';
import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table';
import { DataTable } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
@ -31,6 +32,7 @@ type OrganisationOverviewTableProps = {
page: number;
sortBy: 'name' | 'createdAt' | 'signingVolume';
sortOrder: 'asc' | 'desc';
dateRange: DateRange;
};
export const AdminOrganisationOverviewTable = ({
@ -40,11 +42,11 @@ export const AdminOrganisationOverviewTable = ({
page,
sortBy,
sortOrder,
dateRange,
}: OrganisationOverviewTableProps) => {
const { _, i18n } = useLingui();
const [isPending, startTransition] = useTransition();
const [searchParams] = useSearchParams();
const updateSearchParams = useUpdateSearchParams();
const [searchString, setSearchString] = useState('');
const debouncedSearchString = useDebouncedValue(searchString, 1000);
@ -75,7 +77,7 @@ export const AdminOrganisationOverviewTable = ({
<div>
<Link
className="text-primary underline"
to={`/admin/organisation-insights/${row.original.id}?dateRange=${searchParams.get('dateRange') || 'last30days'}`}
to={`/admin/organisation-insights/${row.original.id}?dateRange=${dateRange}`}
>
{row.getValue('name')}
</Link>
@ -147,7 +149,7 @@ export const AdminOrganisationOverviewTable = ({
size: 120,
},
] satisfies DataTableColumnDef<OrganisationOverview>[];
}, [sortOrder, sortBy]);
}, [sortOrder, sortBy, dateRange]);
useEffect(() => {
startTransition(() => {

View File

@ -108,7 +108,7 @@ export const OrganisationInsightsTable = ({
size: 180,
},
{
header: () => <span className="whitespace-nowrap">{_(msg`Documents Signed`)}</span>,
header: () => <span className="whitespace-nowrap">{_(msg`Documents Completed`)}</span>,
accessorKey: 'signedDocumentCount',
cell: ({ row }) => Number(row.getValue('signedDocumentCount')),
size: 180,
@ -223,7 +223,7 @@ export const OrganisationInsightsTable = ({
<SummaryCard icon={Users} title={_(msg`Members`)} value={insights.summary.totalMembers} />
<SummaryCard
icon={TrendingUp}
title={_(msg`Completed Documents`)}
title={_(msg`Documents Completed`)}
value={insights.summary.volumeThisPeriod}
/>
</div>

View File

@ -83,6 +83,7 @@ export default function Organisations({ loaderData }: Route.ComponentProps) {
perPage={perPage}
sortBy={sortBy}
sortOrder={sortOrder}
dateRange={dateRange}
/>
</div>
</div>

View File

@ -191,8 +191,8 @@ async function getUserInsights(
: sql<number>`COUNT(DISTINCT CASE WHEN td.id IS NOT NULL THEN d.id END)`
).as('documentCount'),
(createdAtFrom
? sql<number>`COUNT(DISTINCT CASE WHEN r.id IS NOT NULL AND ts.id IS NOT NULL AND r."signedAt" >= ${createdAtFrom} AND r.role = 'SIGNER'::"RecipientRole" THEN r.id END)`
: sql<number>`COUNT(DISTINCT CASE WHEN ts.id IS NOT NULL AND r.role = 'SIGNER'::"RecipientRole" THEN r.id END)`
? sql<number>`COUNT(DISTINCT CASE WHEN d.id IS NOT NULL AND td.id IS NOT NULL AND d.status = 'COMPLETED' AND d."createdAt" >= ${createdAtFrom} THEN d.id END)`
: sql<number>`COUNT(DISTINCT CASE WHEN d.id IS NOT NULL AND td.id IS NOT NULL AND d.status = 'COMPLETED' THEN d.id END)`
).as('signedDocumentCount'),
])
.groupBy(['u.id', 'u.name', 'u.email', 'u.createdAt'])