mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 16:23:06 +10:00
fix: days filter working (#623)
This commit is contained in:
@ -8,7 +8,10 @@ import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-documen
|
|||||||
import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs';
|
import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs';
|
||||||
|
|
||||||
import { PeriodSelector } from '~/components/(dashboard)/period-selector/period-selector';
|
import { PeriodSelector } from '~/components/(dashboard)/period-selector/period-selector';
|
||||||
import { PeriodSelectorValue } from '~/components/(dashboard)/period-selector/types';
|
import {
|
||||||
|
PeriodSelectorValue,
|
||||||
|
isPeriodSelectorValue,
|
||||||
|
} from '~/components/(dashboard)/period-selector/types';
|
||||||
import { DocumentStatus } from '~/components/formatter/document-status';
|
import { DocumentStatus } from '~/components/formatter/document-status';
|
||||||
|
|
||||||
import { DocumentsDataTable } from './data-table';
|
import { DocumentsDataTable } from './data-table';
|
||||||
@ -32,7 +35,7 @@ export default async function DocumentsPage({ searchParams = {} }: DocumentsPage
|
|||||||
});
|
});
|
||||||
|
|
||||||
const status = isExtendedDocumentStatus(searchParams.status) ? searchParams.status : 'ALL';
|
const status = isExtendedDocumentStatus(searchParams.status) ? searchParams.status : 'ALL';
|
||||||
// const period = isPeriodSelectorValue(searchParams.period) ? searchParams.period : '';
|
const period = isPeriodSelectorValue(searchParams.period) ? searchParams.period : '';
|
||||||
const page = Number(searchParams.page) || 1;
|
const page = Number(searchParams.page) || 1;
|
||||||
const perPage = Number(searchParams.perPage) || 20;
|
const perPage = Number(searchParams.perPage) || 20;
|
||||||
|
|
||||||
@ -45,6 +48,7 @@ export default async function DocumentsPage({ searchParams = {} }: DocumentsPage
|
|||||||
},
|
},
|
||||||
page,
|
page,
|
||||||
perPage,
|
perPage,
|
||||||
|
period,
|
||||||
});
|
});
|
||||||
|
|
||||||
const getTabHref = (value: typeof status) => {
|
const getTabHref = (value: typeof status) => {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { match } from 'ts-pattern';
|
import { DateTime } from 'luxon';
|
||||||
|
import { P, match } from 'ts-pattern';
|
||||||
|
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { Document, Prisma, SigningStatus } from '@documenso/prisma/client';
|
import { Document, Prisma, SigningStatus } from '@documenso/prisma/client';
|
||||||
@ -16,6 +17,7 @@ export interface FindDocumentsOptions {
|
|||||||
column: keyof Omit<Document, 'document'>;
|
column: keyof Omit<Document, 'document'>;
|
||||||
direction: 'asc' | 'desc';
|
direction: 'asc' | 'desc';
|
||||||
};
|
};
|
||||||
|
period?: '' | '7d' | '14d' | '30d';
|
||||||
}
|
}
|
||||||
|
|
||||||
export const findDocuments = async ({
|
export const findDocuments = async ({
|
||||||
@ -25,6 +27,7 @@ export const findDocuments = async ({
|
|||||||
page = 1,
|
page = 1,
|
||||||
perPage = 10,
|
perPage = 10,
|
||||||
orderBy,
|
orderBy,
|
||||||
|
period,
|
||||||
}: FindDocumentsOptions) => {
|
}: FindDocumentsOptions) => {
|
||||||
const user = await prisma.user.findFirstOrThrow({
|
const user = await prisma.user.findFirstOrThrow({
|
||||||
where: {
|
where: {
|
||||||
@ -35,14 +38,16 @@ export const findDocuments = async ({
|
|||||||
const orderByColumn = orderBy?.column ?? 'createdAt';
|
const orderByColumn = orderBy?.column ?? 'createdAt';
|
||||||
const orderByDirection = orderBy?.direction ?? 'desc';
|
const orderByDirection = orderBy?.direction ?? 'desc';
|
||||||
|
|
||||||
const termFilters = !term
|
const termFilters = match(term)
|
||||||
? undefined
|
.with(P.string.minLength(1), () => {
|
||||||
: ({
|
return {
|
||||||
title: {
|
title: {
|
||||||
contains: term,
|
contains: term,
|
||||||
mode: 'insensitive',
|
mode: 'insensitive',
|
||||||
},
|
},
|
||||||
} as const);
|
} as const;
|
||||||
|
})
|
||||||
|
.otherwise(() => undefined);
|
||||||
|
|
||||||
const filters = match<ExtendedDocumentStatus, Prisma.DocumentWhereInput>(status)
|
const filters = match<ExtendedDocumentStatus, Prisma.DocumentWhereInput>(status)
|
||||||
.with(ExtendedDocumentStatus.ALL, () => ({
|
.with(ExtendedDocumentStatus.ALL, () => ({
|
||||||
@ -113,12 +118,24 @@ export const findDocuments = async ({
|
|||||||
}))
|
}))
|
||||||
.exhaustive();
|
.exhaustive();
|
||||||
|
|
||||||
|
const whereClause = {
|
||||||
|
...termFilters,
|
||||||
|
...filters,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (period) {
|
||||||
|
const daysAgo = parseInt(period.replace(/d$/, ''), 10);
|
||||||
|
|
||||||
|
const startOfPeriod = DateTime.now().minus({ days: daysAgo }).startOf('day');
|
||||||
|
|
||||||
|
whereClause.createdAt = {
|
||||||
|
gte: startOfPeriod.toJSDate(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const [data, count] = await Promise.all([
|
const [data, count] = await Promise.all([
|
||||||
prisma.document.findMany({
|
prisma.document.findMany({
|
||||||
where: {
|
where: whereClause,
|
||||||
...termFilters,
|
|
||||||
...filters,
|
|
||||||
},
|
|
||||||
skip: Math.max(page - 1, 0) * perPage,
|
skip: Math.max(page - 1, 0) * perPage,
|
||||||
take: perPage,
|
take: perPage,
|
||||||
orderBy: {
|
orderBy: {
|
||||||
|
|||||||
Reference in New Issue
Block a user