From cddc5be5500fa707cbaeda70fff820179a6b8b4c Mon Sep 17 00:00:00 2001
From: Kirtan-pc
Date: Sat, 11 Jul 2026 12:34:14 +0530
Subject: [PATCH 1/2] Fix: Completion screen: personalized invite link for
'Invite a team member'
---
.../maintainer/invite-contributor-button.tsx | 41 ++++++++++++++++++-
src/app/actions/maintainer/index.ts | 8 +++-
src/app/actions/maintainer/invites.ts | 17 ++++++++
3 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/src/app/(app)/maintainer/invite-contributor-button.tsx b/src/app/(app)/maintainer/invite-contributor-button.tsx
index d2d14358..42ef6faa 100644
--- a/src/app/(app)/maintainer/invite-contributor-button.tsx
+++ b/src/app/(app)/maintainer/invite-contributor-button.tsx
@@ -2,7 +2,8 @@
import { useState, useTransition } from 'react';
import { useRouter } from 'next/navigation';
-import { sendInvite } from '@/app/actions/maintainer';
+import { sendInvite, getMyGithubHandle } from '@/app/actions/maintainer';
+import { Link, Check } from 'lucide-react';
export default function InviteContributorButton({
installationId,
@@ -15,6 +16,8 @@ export default function InviteContributorButton({
const [email, setEmail] = useState('');
const [isPending, startTransition] = useTransition();
const [error, setError] = useState(null);
+ const [linkCopied, setLinkCopied] = useState(false);
+ const [generatingLink, setGeneratingLink] = useState(false);
const router = useRouter();
async function handleSubmit(e: React.FormEvent) {
@@ -37,6 +40,21 @@ export default function InviteContributorButton({
});
}
+ async function handleCopyLink() {
+ setGeneratingLink(true);
+ const res = await getMyGithubHandle();
+ if (!res.ok) {
+ setError(res.error.message || 'Failed to generate invite link');
+ setGeneratingLink(false);
+ return;
+ }
+ const link = `${process.env.NEXT_PUBLIC_APP_URL || 'https://mergeship.dev'}/invite?ref=${res.data}`;
+ await navigator.clipboard.writeText(link);
+ setLinkCopied(true);
+ setGeneratingLink(false);
+ setTimeout(() => setLinkCopied(false), 2000);
+ }
+
return (
<>
}
+
+
+ or
+
+
+
+
+