Compare commits

...

8 Commits

Author SHA1 Message Date
David Nguyen
2d569292ce fix: refactor 2024-04-15 20:29:42 +07:00
Catalin Pit
b1474de2da fix: fix UI issue for enterprise 2024-04-15 15:22:58 +03:00
Catalin Pit
6b8ff4567d chore: merged main 2024-04-15 12:02:04 +03:00
Catalin Pit
1a81b46859 Merge branch 'main' into feat/add-myself-as-signer 2024-04-11 13:27:14 +03:00
Catalin Pit
ef1d4ed0fa fix: make sure the user can't add its details more than once 2024-04-11 13:25:54 +03:00
Catalin Pit
318a77c936 feat: add myself as signer in templates 2024-04-10 10:32:22 +03:00
Catalin Pit
2bc0407d06 Merge branch 'main' into feat/add-myself-as-signer 2024-04-10 09:56:31 +03:00
Catalin Pit
80de7d3ea9 feat: add myself as signer 2024-04-10 09:46:15 +03:00
2 changed files with 91 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ import React, { useId, useMemo, useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { InfoIcon, Plus, Trash } from 'lucide-react'; import { InfoIcon, Plus, Trash } from 'lucide-react';
import { useSession } from 'next-auth/react';
import { useFieldArray, useForm } from 'react-hook-form'; import { useFieldArray, useForm } from 'react-hook-form';
import { useLimits } from '@documenso/ee/server-only/limits/provider/client'; import { useLimits } from '@documenso/ee/server-only/limits/provider/client';
@@ -60,6 +61,8 @@ export const AddSignersFormPartial = ({
}: AddSignersFormProps) => { }: AddSignersFormProps) => {
const { toast } = useToast(); const { toast } = useToast();
const { remaining } = useLimits(); const { remaining } = useLimits();
const { data: session } = useSession();
const user = session?.user;
const initialId = useId(); const initialId = useId();
@@ -135,6 +138,18 @@ export const AddSignersFormPartial = ({
); );
}; };
const onAddSelfSigner = () => {
const newSelfSignerId = nanoid(12);
appendSigner({
formId: newSelfSignerId,
name: user?.name ?? '',
email: user?.email ?? '',
role: RecipientRole.SIGNER,
actionAuth: undefined,
});
};
const onAddSigner = () => { const onAddSigner = () => {
appendSigner({ appendSigner({
formId: nanoid(12), formId: nanoid(12),
@@ -209,8 +224,12 @@ export const AddSignersFormPartial = ({
<Input <Input
type="email" type="email"
placeholder="Email" placeholder="Email"
disabled={isSubmitting || hasBeenSentToRecipientId(signer.nativeId)}
{...field} {...field}
disabled={
isSubmitting ||
hasBeenSentToRecipientId(signer.nativeId) ||
signers[index].email === user?.email
}
onKeyDown={onKeyDown} onKeyDown={onKeyDown}
/> />
</FormControl> </FormControl>
@@ -237,8 +256,12 @@ export const AddSignersFormPartial = ({
<FormControl> <FormControl>
<Input <Input
placeholder="Name" placeholder="Name"
disabled={isSubmitting || hasBeenSentToRecipientId(signer.nativeId)}
{...field} {...field}
disabled={
isSubmitting ||
hasBeenSentToRecipientId(signer.nativeId) ||
signers[index].email === user?.email
}
onKeyDown={onKeyDown} onKeyDown={onKeyDown}
/> />
</FormControl> </FormControl>
@@ -403,15 +426,30 @@ export const AddSignersFormPartial = ({
> >
<Button <Button
type="button" type="button"
className="flex-1"
disabled={isSubmitting || signers.length >= remaining.recipients} disabled={isSubmitting || signers.length >= remaining.recipients}
onClick={() => onAddSigner()} onClick={() => onAddSigner()}
> >
<Plus className="-ml-1 mr-2 h-5 w-5" /> <Plus className="-ml-1 mr-2 h-5 w-5" />
Add Signer Add Signer
</Button> </Button>
<Button
type="button"
variant="secondary"
className="dark:bg-muted dark:hover:bg-muted/80 bg-black/5 hover:bg-black/10"
disabled={
isSubmitting ||
form.getValues('signers').some((signer) => signer.email === user?.email)
}
onClick={() => onAddSelfSigner()}
>
<Plus className="-ml-1 mr-2 h-5 w-5" />
Add myself
</Button>
</div>
{!alwaysShowAdvancedSettings && isDocumentEnterprise && ( {!alwaysShowAdvancedSettings && isDocumentEnterprise && (
<div className="flex flex-row items-center"> <div className="mt-4 flex flex-row items-center">
<Checkbox <Checkbox
id="showAdvancedRecipientSettings" id="showAdvancedRecipientSettings"
className="h-5 w-5" className="h-5 w-5"
@@ -428,7 +466,6 @@ export const AddSignersFormPartial = ({
</label> </label>
</div> </div>
)} )}
</div>
</Form> </Form>
</AnimateGenericFadeInOut> </AnimateGenericFadeInOut>
</DocumentFlowFormContainerContent> </DocumentFlowFormContainerContent>

View File

@@ -5,6 +5,7 @@ import React, { useId, useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { AnimatePresence, motion } from 'framer-motion'; import { AnimatePresence, motion } from 'framer-motion';
import { Plus, Trash } from 'lucide-react'; import { Plus, Trash } from 'lucide-react';
import { useSession } from 'next-auth/react';
import { Controller, useFieldArray, useForm } from 'react-hook-form'; import { Controller, useFieldArray, useForm } from 'react-hook-form';
import { nanoid } from '@documenso/lib/universal/id'; import { nanoid } from '@documenso/lib/universal/id';
@@ -41,6 +42,8 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
onSubmit, onSubmit,
}: AddTemplatePlaceholderRecipientsFormProps) => { }: AddTemplatePlaceholderRecipientsFormProps) => {
const initialId = useId(); const initialId = useId();
const { data: session } = useSession();
const user = session?.user;
const [placeholderRecipientCount, setPlaceholderRecipientCount] = useState(() => const [placeholderRecipientCount, setPlaceholderRecipientCount] = useState(() =>
recipients.length > 1 ? recipients.length + 1 : 2, recipients.length > 1 ? recipients.length + 1 : 2,
); );
@@ -50,6 +53,7 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
const { const {
control, control,
handleSubmit, handleSubmit,
getValues,
formState: { errors, isSubmitting }, formState: { errors, isSubmitting },
} = useForm<TAddTemplatePlacholderRecipientsFormSchema>({ } = useForm<TAddTemplatePlacholderRecipientsFormSchema>({
resolver: zodResolver(ZAddTemplatePlacholderRecipientsFormSchema), resolver: zodResolver(ZAddTemplatePlacholderRecipientsFormSchema),
@@ -85,6 +89,17 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
name: 'signers', name: 'signers',
}); });
const onAddPlaceholderSelfRecipient = () => {
const newSelfSignerId = nanoid(12);
appendSigner({
formId: newSelfSignerId,
name: user?.name ?? '',
email: user?.email ?? '',
role: RecipientRole.SIGNER,
});
};
const onAddPlaceholderRecipient = () => { const onAddPlaceholderRecipient = () => {
appendSigner({ appendSigner({
formId: nanoid(12), formId: nanoid(12),
@@ -203,11 +218,27 @@ export const AddTemplatePlaceholderRecipientsFormPartial = ({
error={'signers__root' in errors && errors['signers__root']} error={'signers__root' in errors && errors['signers__root']}
/> />
<div className="mt-4"> <div className="mt-4 flex flex-row items-center space-x-4">
<Button type="button" disabled={isSubmitting} onClick={() => onAddPlaceholderRecipient()}> <Button
type="button"
className="flex-1"
disabled={isSubmitting}
onClick={() => onAddPlaceholderRecipient()}
>
<Plus className="-ml-1 mr-2 h-5 w-5" /> <Plus className="-ml-1 mr-2 h-5 w-5" />
Add Placeholder Recipient Add Placeholder Recipient
</Button> </Button>
<Button
type="button"
className="dark:bg-muted dark:hover:bg-muted/80 bg-black/5 hover:bg-black/10"
disabled={
isSubmitting || getValues('signers').some((signer) => signer.email === user?.email)
}
onClick={() => onAddPlaceholderSelfRecipient()}
>
<Plus className="-ml-1 mr-2 h-5 w-5" />
Add Myself
</Button>
</div> </div>
</DocumentFlowFormContainerContent> </DocumentFlowFormContainerContent>