diff --git a/apps/web/pages/documents/[id]/recipients.tsx b/apps/web/pages/documents/[id]/recipients.tsx index 8dc9e7f64..9e59cb731 100644 --- a/apps/web/pages/documents/[id]/recipients.tsx +++ b/apps/web/pages/documents/[id]/recipients.tsx @@ -4,7 +4,7 @@ import { NEXT_PUBLIC_WEBAPP_URL, classNames } from "@documenso/lib"; import { createOrUpdateRecipient, deleteRecipient, sendSigningRequests } from "@documenso/lib/api"; import { getDocument } from "@documenso/lib/query"; import { getUserFromToken } from "@documenso/lib/server"; -import { Breadcrumb, Button, Dialog, IconButton } from "@documenso/ui"; +import { Breadcrumb, Button, Dialog, IconButton, Tooltip } from "@documenso/ui"; import Layout from "../../../components/layout"; import { NextPageWithLayout } from "../../_app"; import { @@ -264,38 +264,46 @@ const RecipientsPage: NextPageWithLayout = (props: any) => { {props.document.status !== DocumentStatus.COMPLETED && (
- { - if (confirm("Resend this signing request?")) { - setLoading(true); - sendSigningRequests(props.document, [item.id]).finally(() => { - setLoading(false); - }); + + - Resend - - { - const removedItem = { ...fields }[index]; - remove(index); - deleteRecipient(item)?.catch((err) => { - append(removedItem); - }); - }} - className="group-hover:text-neon-dark group-hover:disabled:text-gray-400" - /> + onClick={(event: any) => { + event.preventDefault(); + event.stopPropagation(); + if (confirm("Resend this signing request?")) { + setLoading(true); + sendSigningRequests(props.document, [item.id]).finally(() => { + setLoading(false); + }); + } + }} + className="mx-1 group-hover:text-neon-dark group-hover:disabled:text-gray-400" + /> + + + { + event.preventDefault(); + event.stopPropagation(); + if (confirm("Delete this signing request?")) { + const removedItem = { ...fields }[index]; + remove(index); + deleteRecipient(item)?.catch((err) => { + append(removedItem); + }); + } + }} + className="mx-1 group-hover:text-neon-dark group-hover:disabled:text-gray-400" + /> +
)} diff --git a/packages/ui/components/tooltip/Tooltip.tsx b/packages/ui/components/tooltip/Tooltip.tsx new file mode 100644 index 000000000..56bb59095 --- /dev/null +++ b/packages/ui/components/tooltip/Tooltip.tsx @@ -0,0 +1,34 @@ +import React, { useState } from "react"; +import { classNames } from "@documenso/lib"; + +export function Tooltip(props: any) { + let timeout: NodeJS.Timeout; + const [active, setActive] = useState(false); + + const showTip = () => { + timeout = setTimeout(() => { + setActive(true); + }, props.delay || 40); + }; + + const hideTip = () => { + clearInterval(timeout); + setActive(false); + }; + + return ( +
+ {props.children} +
+ + {props.label} + +
+
+ ); +}; diff --git a/packages/ui/components/tooltip/index.ts b/packages/ui/components/tooltip/index.ts new file mode 100644 index 000000000..3d7eea698 --- /dev/null +++ b/packages/ui/components/tooltip/index.ts @@ -0,0 +1 @@ +export { Tooltip } from "./Tooltip"; \ No newline at end of file diff --git a/packages/ui/index.ts b/packages/ui/index.ts index 1cb0c6752..a320043be 100644 --- a/packages/ui/index.ts +++ b/packages/ui/index.ts @@ -2,3 +2,4 @@ export { Button, IconButton } from "./components/button/index"; export { SelectBox } from "./components/selectBox/index"; export { Breadcrumb } from "./components/breadcrumb/index"; export { Dialog } from "./components/dialog/index"; +export { Tooltip } from "./components/tooltip/index";