This commit is contained in:
David Nguyen
2025-02-09 21:57:26 +11:00
parent e128e9369e
commit 5b395fc9ad
68 changed files with 400 additions and 407 deletions

View File

@ -1,4 +1,4 @@
import { useState, useTransition } from 'react';
import { useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
@ -6,6 +6,7 @@ import { Plural, Trans } from '@lingui/react/macro';
import type { Field, Recipient } from '@prisma/client';
import { FieldType } from '@prisma/client';
import { useForm } from 'react-hook-form';
import { useRevalidator } from 'react-router';
import { P, match } from 'ts-pattern';
import { unsafe_useEffectOnce } from '@documenso/lib/client-only/hooks/use-effect-once';
@ -60,12 +61,12 @@ export type DocumentSigningAutoSignProps = {
export const DocumentSigningAutoSign = ({ recipient, fields }: DocumentSigningAutoSignProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const { email, fullName } = useRequiredDocumentSigningContext();
const { derivedRecipientActionAuth } = useRequiredDocumentSigningAuthContext();
const [open, setOpen] = useState(false);
const [isPending, startTransition] = useTransition();
const form = useForm();
@ -153,12 +154,7 @@ export const DocumentSigningAutoSign = ({ recipient, fields }: DocumentSigningAu
});
}
startTransition(() => {
// Todo
// router.refresh();
setOpen(false);
});
await revalidate();
};
unsafe_useEffectOnce(() => {
@ -219,7 +215,7 @@ export const DocumentSigningAutoSign = ({ recipient, fields }: DocumentSigningAu
<Button
type="submit"
className="min-w-[6rem]"
loading={form.formState.isSubmitting || isPending}
loading={form.formState.isSubmitting}
disabled={!autoSignableFields.length}
>
<Trans>Sign</Trans>

View File

@ -1,9 +1,10 @@
import { useEffect, useMemo, useState, useTransition } from 'react';
import { useEffect, useMemo, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -40,8 +41,8 @@ export const DocumentSigningCheckboxField = ({
}: DocumentSigningCheckboxFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const [isPending, startTransition] = useTransition();
const { executeActionAuthProcedure } = useRequiredDocumentSigningAuthContext();
const parsedFieldMeta = ZCheckboxFieldMeta.parse(field.fieldMeta);
@ -84,7 +85,7 @@ export const DocumentSigningCheckboxField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const shouldAutoSignField =
(!field.inserted && checkedValues.length > 0 && isLengthConditionMet) ||
(!field.inserted && isReadOnly && isLengthConditionMet);
@ -105,8 +106,7 @@ export const DocumentSigningCheckboxField = ({
await signFieldWithToken(payload);
}
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -141,8 +141,7 @@ export const DocumentSigningCheckboxField = ({
setCheckedValues([]);
}
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);
@ -214,9 +213,7 @@ export const DocumentSigningCheckboxField = ({
});
} finally {
setCheckedValues(updatedValues);
// Todo
// startTransition(() => router.refresh());
await revalidate();
}
};

View File

@ -1,10 +1,9 @@
import { useTransition } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import {
DEFAULT_DOCUMENT_DATE_FORMAT,
@ -43,8 +42,7 @@ export const DocumentSigningDateField = ({
}: DocumentSigningDateFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const [isPending, startTransition] = useTransition();
const { revalidate } = useRevalidator();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -54,14 +52,14 @@ export const DocumentSigningDateField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const localDateString = convertToLocalSystemFormat(field.customText, dateFormat, timezone);
const isDifferentTime = field.inserted && localDateString !== field.customText;
const tooltipText = _(
msg`"${field.customText}" will appear on the document as it has a timezone of "${timezone}".`,
msg`"${field.customText}" will appear on the document as it has a timezone of "${timezone || ''}".`,
);
const onSign = async (authOptions?: TRecipientActionAuth) => {
@ -80,8 +78,7 @@ export const DocumentSigningDateField = ({
await signFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -113,8 +110,7 @@ export const DocumentSigningDateField = ({
await removeSignedFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,9 +1,10 @@
import { useEffect, useState, useTransition } from 'react';
import { useEffect, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -43,8 +44,7 @@ export const DocumentSigningDropdownField = ({
}: DocumentSigningDropdownFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const [isPending, startTransition] = useTransition();
const { revalidate } = useRevalidator();
const { executeActionAuthProcedure } = useRequiredDocumentSigningAuthContext();
@ -61,7 +61,7 @@ export const DocumentSigningDropdownField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const shouldAutoSignField =
(!field.inserted && localChoice) || (!field.inserted && isReadOnly && defaultValue);
@ -87,8 +87,7 @@ export const DocumentSigningDropdownField = ({
setLocalChoice('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -126,8 +125,7 @@ export const DocumentSigningDropdownField = ({
setLocalChoice('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,10 +1,9 @@
import { useTransition } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -35,11 +34,10 @@ export const DocumentSigningEmailField = ({
}: DocumentSigningEmailFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const { email: providedEmail } = useRequiredDocumentSigningContext();
const [isPending, startTransition] = useTransition();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -48,7 +46,7 @@ export const DocumentSigningEmailField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const onSign = async (authOptions?: TRecipientActionAuth) => {
try {
@ -69,8 +67,7 @@ export const DocumentSigningEmailField = ({
await signFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -102,8 +99,7 @@ export const DocumentSigningEmailField = ({
await removeSignedFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -107,7 +107,11 @@ export const DocumentSigningForm = ({
timestamp: new Date().toISOString(),
});
await navigate(redirectUrl ? redirectUrl : `/sign/${recipient.token}/complete`);
if (redirectUrl) {
window.location.href = redirectUrl;
} else {
await navigate(`/sign/${recipient.token}/complete`);
}
};
return (

View File

@ -1,10 +1,9 @@
import { useTransition } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -36,12 +35,11 @@ export const DocumentSigningInitialsField = ({
}: DocumentSigningInitialsFieldProps) => {
const { toast } = useToast();
const { _ } = useLingui();
const { revalidate } = useRevalidator();
const { fullName } = useRequiredDocumentSigningContext();
const initials = extractInitials(fullName);
const [isPending, startTransition] = useTransition();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -50,7 +48,7 @@ export const DocumentSigningInitialsField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const onSign = async (authOptions?: TRecipientActionAuth) => {
try {
@ -71,8 +69,7 @@ export const DocumentSigningInitialsField = ({
await signFieldWithToken(payload);
// Tod
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -104,7 +101,7 @@ export const DocumentSigningInitialsField = ({
await removeSignedFieldWithToken(payload);
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,10 +1,11 @@
import { useState, useTransition } from 'react';
import { useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import { type Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -40,14 +41,13 @@ export const DocumentSigningNameField = ({
}: DocumentSigningNameFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const { fullName: providedFullName, setFullName: setProvidedFullName } =
useRequiredDocumentSigningContext();
const { executeActionAuthProcedure } = useRequiredDocumentSigningAuthContext();
const [isPending, startTransition] = useTransition();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -56,7 +56,7 @@ export const DocumentSigningNameField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const [showFullNameModal, setShowFullNameModal] = useState(false);
const [localFullName, setLocalFullName] = useState('');
@ -107,7 +107,7 @@ export const DocumentSigningNameField = ({
await signFieldWithToken(payload);
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -139,7 +139,7 @@ export const DocumentSigningNameField = ({
await removeSignedFieldWithToken(payload);
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,10 +1,11 @@
import { useEffect, useState, useTransition } from 'react';
import { useEffect, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { Recipient } from '@prisma/client';
import { Hash, Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { validateNumberField } from '@documenso/lib/advanced-fields-validation/validate-number';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
@ -49,8 +50,8 @@ export const DocumentSigningNumberField = ({
}: DocumentSigningNumberFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const [isPending, startTransition] = useTransition();
const [showRadioModal, setShowRadioModal] = useState(false);
const parsedFieldMeta = field.fieldMeta ? ZNumberFieldMeta.parse(field.fieldMeta) : null;
@ -80,7 +81,7 @@ export const DocumentSigningNumberField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const text = e.target.value;
@ -136,8 +137,7 @@ export const DocumentSigningNumberField = ({
setLocalNumber('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -188,8 +188,7 @@ export const DocumentSigningNumberField = ({
setLocalNumber(parsedFieldMeta?.value ? String(parsedFieldMeta?.value) : '');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,9 +1,10 @@
import { useEffect, useState, useTransition } from 'react';
import { useEffect, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import type { Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -37,8 +38,7 @@ export const DocumentSigningRadioField = ({
}: DocumentSigningRadioFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const [isPending, startTransition] = useTransition();
const { revalidate } = useRevalidator();
const parsedFieldMeta = ZRadioFieldMeta.parse(field.fieldMeta);
const values = parsedFieldMeta.values?.map((item) => ({
@ -60,7 +60,7 @@ export const DocumentSigningRadioField = ({
isPending: isRemoveSignedFieldWithTokenLoading,
} = trpc.field.removeSignedFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const shouldAutoSignField =
(!field.inserted && selectedOption) ||
(!field.inserted && defaultValue) ||
@ -88,8 +88,7 @@ export const DocumentSigningRadioField = ({
setSelectedOption('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -122,8 +121,7 @@ export const DocumentSigningRadioField = ({
setSelectedOption('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,10 +1,11 @@
import { useLayoutEffect, useMemo, useRef, useState, useTransition } from 'react';
import { useLayoutEffect, useMemo, useRef, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import { type Recipient } from '@prisma/client';
import { Loader } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
@ -45,6 +46,7 @@ export const DocumentSigningSignatureField = ({
}: DocumentSigningSignatureFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const signatureRef = useRef<HTMLParagraphElement>(null);
const containerRef = useRef<HTMLDivElement>(null);
@ -59,8 +61,6 @@ export const DocumentSigningSignatureField = ({
const { executeActionAuthProcedure } = useRequiredDocumentSigningAuthContext();
const [isPending, startTransition] = useTransition();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -71,7 +71,7 @@ export const DocumentSigningSignatureField = ({
const { signature } = field;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const [showSignatureModal, setShowSignatureModal] = useState(false);
const [localSignature, setLocalSignature] = useState<string | null>(null);
@ -143,13 +143,11 @@ export const DocumentSigningSignatureField = ({
if (onSignField) {
await onSignField(payload);
return;
} else {
await signFieldWithToken(payload);
}
await signFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -177,12 +175,11 @@ export const DocumentSigningSignatureField = ({
if (onUnsignField) {
await onUnsignField(payload);
return;
} else {
await removeSignedFieldWithToken(payload);
}
await removeSignedFieldWithToken(payload);
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -1,10 +1,11 @@
import { useEffect, useState, useTransition } from 'react';
import { useEffect, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Plural, Trans } from '@lingui/react/macro';
import type { Recipient } from '@prisma/client';
import { Loader, Type } from 'lucide-react';
import { useRevalidator } from 'react-router';
import { validateTextField } from '@documenso/lib/advanced-fields-validation/validate-text';
import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc';
@ -41,6 +42,7 @@ export const DocumentSigningTextField = ({
}: DocumentSigningTextFieldProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const initialErrors: Record<string, string[]> = {
required: [],
@ -52,8 +54,6 @@ export const DocumentSigningTextField = ({
const { executeActionAuthProcedure } = useRequiredDocumentSigningAuthContext();
const [isPending, startTransition] = useTransition();
const { mutateAsync: signFieldWithToken, isPending: isSignFieldWithTokenLoading } =
trpc.field.signFieldWithToken.useMutation(DO_NOT_INVALIDATE_QUERY_ON_MUTATION);
@ -64,7 +64,7 @@ export const DocumentSigningTextField = ({
const parsedFieldMeta = field.fieldMeta ? ZTextFieldMeta.parse(field.fieldMeta) : null;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending;
const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading;
const shouldAutoSignField =
(!field.inserted && parsedFieldMeta?.text) ||
(!field.inserted && parsedFieldMeta?.text && parsedFieldMeta?.readOnly);
@ -153,8 +153,7 @@ export const DocumentSigningTextField = ({
setLocalCustomText('');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
const error = AppError.parseError(err);
@ -188,8 +187,7 @@ export const DocumentSigningTextField = ({
setLocalCustomText(parsedFieldMeta?.text ?? '');
// Todo
// startTransition(() => router.refresh());
await revalidate();
} catch (err) {
console.error(err);

View File

@ -2,7 +2,7 @@ import { useCallback, useEffect, useState } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { useNavigate, useSearchParams } from 'react-router';
import { useSearchParams } from 'react-router';
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
import { Input } from '@documenso/ui/primitives/input';
@ -10,8 +10,7 @@ import { Input } from '@documenso/ui/primitives/input';
export const DocumentSearch = ({ initialValue = '' }: { initialValue?: string }) => {
const { _ } = useLingui();
const navigate = useNavigate();
const [searchParams] = useSearchParams();
const [searchParams, setSearchParams] = useSearchParams();
const [searchTerm, setSearchTerm] = useState(initialValue);
const debouncedSearchTerm = useDebouncedValue(searchTerm, 500);
@ -20,12 +19,12 @@ export const DocumentSearch = ({ initialValue = '' }: { initialValue?: string })
(term: string) => {
const params = new URLSearchParams(searchParams?.toString() ?? '');
if (term) {
params.set('search', term);
params.set('query', term);
} else {
params.delete('search');
params.delete('query');
}
void navigate(`?${params.toString()}`);
setSearchParams(params);
},
[searchParams],
);

View File

@ -3,6 +3,7 @@ import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { TeamMemberRole, TeamTransferVerification } from '@prisma/client';
import { AnimatePresence } from 'framer-motion';
import { useRevalidator } from 'react-router';
import { canExecuteTeamAction } from '@documenso/lib/utils/teams';
import { isTokenExpired } from '@documenso/lib/utils/token-verification';
@ -28,12 +29,13 @@ export const TeamTransferStatus = ({
}: TeamTransferStatusProps) => {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const isExpired = transferVerification && isTokenExpired(transferVerification.expiresAt);
const { mutateAsync: deleteTeamTransferRequest, isPending } =
trpc.team.deleteTeamTransferRequest.useMutation({
onSuccess: () => {
onSuccess: async () => {
if (!isExpired) {
toast({
title: _(msg`Success`),
@ -42,8 +44,7 @@ export const TeamTransferStatus = ({
});
}
// todo?
// router.refresh();
await revalidate();
},
onError: () => {
toast({