diff --git a/apps/web/src/components/document/document-expiry-settings.tsx b/apps/web/src/components/document/document-expiry-settings.tsx new file mode 100644 index 000000000..95e20837a --- /dev/null +++ b/apps/web/src/components/document/document-expiry-settings.tsx @@ -0,0 +1,63 @@ +'use client'; + +import { useState } from 'react'; + +import { msg } from '@lingui/macro'; +import { useLingui } from '@lingui/react'; + +import { Input } from '@documenso/ui/primitives/input'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@documenso/ui/primitives/select'; + +type DocumentExpirySettingsProps = { + onChange: (value: number | undefined, unit: 'day' | 'week' | 'month' | undefined) => void; +}; + +export const DocumentExpirySettings = ({ onChange }: DocumentExpirySettingsProps) => { + const [expiryValue, setExpiryValue] = useState(undefined); + const [expiryUnit, setExpiryUnit] = useState<'day' | 'week' | 'month'>(); + const { _ } = useLingui(); + + const handleExpiryValueChange = (value: string) => { + const parsedValue = parseInt(value, 10); + if (isNaN(parsedValue)) { + setExpiryValue(undefined); + } else { + setExpiryValue(parsedValue); + } + onChange(parsedValue, expiryUnit); + }; + + const handleExpiryUnitChange = (value: 'day' | 'week' | 'month') => { + setExpiryUnit(value); + onChange(expiryValue, value); + }; + + return ( +
+ handleExpiryValueChange(e.target.value)} + min={1} + /> + +
+ ); +}; diff --git a/packages/prisma/migrations/20241116092807_expiry_links/migration.sql b/packages/prisma/migrations/20241116092807_expiry_links/migration.sql new file mode 100644 index 000000000..820861d2d --- /dev/null +++ b/packages/prisma/migrations/20241116092807_expiry_links/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "SigningStatus" ADD VALUE 'EXPIRED'; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 1fee5eae9..d64b10734 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -394,6 +394,7 @@ enum SigningStatus { NOT_SIGNED SIGNED REJECTED + EXPIRED } enum RecipientRole {